Linux I2C 驱动

Linux I2C 驱动

I2C 设备驱动

I2C 设备驱动重点关注两个数据结构:i2c_client 和 i2c_driver。i2c_client 就是描述设备信息的,i2c_driver 描述驱动内容,类似于 platform_driver。
1、i2c_client 结构体

struct i2c_client {
   
 unsigned short flags; /* 标志 */
 unsigned short addr; /* 芯片地址,7 位,存在低 7 位*/
......
 char name[I2C_NAME_SIZE]; /* 名字 */
 struct i2c_adapter *adapter; /* 对应的 I2C 适配器 */
 struct device dev; /* 设备结构体 */
 int irq; /* 中断 */
 struct list_head detected;
......
 };

一个设备对应一个 i2c_client,每检测到一个 I2C 设备就会给这个 I2C 设备分配一个i2c_client。
2、i2c_driver 结构体
i2c_driver 类似 platform_driver,是我们编写 I2C 设备驱动重点要处理内容。

.....
int (*probe)(struct i2c_client *, const struct i2c_device_id *);
.....
struct device_driver driver;
const struct i2c_device_id *id_table;

1.当 I2C 设备和驱动匹配成功,probe 函数会执行,和 platform 驱动一样。
2.device_driver 驱动结构体,如果使用设备树的话,需要设置 device_driver 的
of_match_table 成员变量,也就是驱动的兼容(compatible)属性。
3.id_table 是传统的、未使用设备树的设备匹配 ID 表。

对于我们 I2C 设备驱动编写人来说,重点工作就是构建 i2c_driver,构建完成以后需要向Linux 内核注册这个 i2c_driver。i2c_driver 注册函数为 int i2c_register_driver,此函数原型如下:

int i2c_register_driver(struct module *owner, struct i2c_driver *driver)

函数参数和返回值含义如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值