Linux驱动-i2c_add_driver

一 作用

将I2c设备的驱动(struct i2c_driver)添加到I2C(i2c-core)总线上。

二 代码示例

驱动 .c 文件设备树 dts 文件
在这里插入图片描述 在这里插入图片描述在这里插入图片描述

二 重要结构体/函数

struct i2c_driver

i2c_driver 类似 platform_driver,是编写 I2C 设备驱动重点要处理的内容。
该结构体定义了一些 i2c 驱动的相关信息,如probe,remove,与dtsi 匹配的信息。
i2c_driver 结 构体定义在include/linux/i2c.h 文件中

在这里插入图片描述第 170 行,当 I2C 设备和驱动匹配成功以后 probe 函数就会执行,和 platform 驱动一样。
第 188 行,device_driver驱动结构体,如果使用设备树的话,需要设置 device_driver 的 of_match_table 成员变量,也就是驱动的兼容(compatible)属性。
第 189 行,id_table 是传统的、未使用设备树的设备匹配 ID 表。

i2c_add_driver

作用:注册 i2c_driver

#define i2c_add_driver(driver) \ 
i2c_register_driver(THIS_MODULE, driver)

三 I2C 设备和驱动匹配过程

I2C 设备和驱动的匹配过程是由I2C 核心来完成的,
drivers/i2c/i2c-core.c 就是 I2C 的核心 部分,I2C 核心提供了一些与具体硬件无关的 API 函数

1  i2c_adapter 注册/注销函数 
int i2c_add_adapter(struct i2c_adapter  *adapter) 
int i2c_add_numbered_adapter(struct  i2c_adapter *adap) 
void i2c_del_adapter(struct i2c_adapter *  adap) 

2   i2c_driver 注册/注销函数 
int i2c_register_driver(struct module  *owner, struct i2c_driver *driver) 
int i2c_add_driver (struct i2c_driver  *driver) 
void i2c_del_driver(struct i2c_driver  *driver)

设备和驱动的匹配过程也是由 I2C 总线完成的,
I2C 总线的数据结构为 i2c_bus_type,定义在 drivers/i2c/i2c-core.c 文件,i2c_bus_type 内容如下:

struct bus_type i2c_bus_type = { 
    .name = "i2c", 
    .match = i2c_device_match,
    .probe = i2c_device_probe, 
    .remove = i2c_device_remove, 
    .shutdown = i2c_device_shutdown, 
};

.match 就是 I2C 总线的设备和驱动匹配函数,在这里就是 i2c_device_match 这个函数,此函数内容如下
在这里插入图片描述
第 466 行,of_driver_match_device 函数用于完成设备树设备和驱动匹配。比较 I2C 设备节点的compatible 属性和 of_device_id 中的compatible 属性是否相等,如果相当的话就表示 I2C 设备和驱动匹配。

第 470 行,acpi_driver_match_device函数用于 ACPI 形式的匹配。

第 476 行,i2c_match_id 函数用于传统的、无设备树的 I2C 设备和驱动匹配过程。比较 I2C 设备名字和 i2c_device_id 的 name 字段是否相等,相等的话就说明 I2C 设备和驱动匹配。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值