linux I2C
linux 对 i2c 做了很多工作,使得 硬件信息和驱动分离,i2c控制器和i2c设备分离.
硬件信息
1.i2c控制器 硬件信息
2.i2c设备 硬件信息
驱动
1.i2c控制器 驱动 drivers/i2c/buses中
2.i2c设备 驱动 driver/xxx 中
I2C 框架
1. I2C 外设
1. dts
2. 驱动
1. 代码位置
可以在driver下的任何位置
2. I2C core
1. 对上对下提供接口
1. 对上 i2c_add_driver , i2c_transfer i2c_master_send i2c_master_recv
3. 对下 i2c_register_adapter
2. 代码位置
drivers/i2c
i2c-boardinfo.c
i2c-core.c
i2c-dev.c
i2c-mux.c
3. I2C 控制器
1. GPIO模拟I2C
2. I2C 控制器
1. dts
2. 驱动
1. of_i2c_register_devices
3. 代码位置
drivers/i2c/busses/i2c-xxx.c
linux i2c 是基于 总线设备驱动模型的.
i2c adapter(i2c控制器)是 platfrom设备
i2c adapter 的驱动 是 platform 驱动
i2c device(i2c设备)是 i2c设备
i2c device 的驱动 是 i2c驱动
一般系统中会有一个i2c adapter ,还有很多 i2c device
这些东西会匹配
i2c adapter (i2c控制器) 和i2c adapter的驱动 会开始匹配,组成i2c adapter 的ops(带硬件信息)(A)
i2c device 和 i2c device 驱动匹配,组成 i2c device 的ops(带硬件信息)(B)
然后 A 和 B 匹配,形成 利用 i2c adapter 来操作 i2c device 的ops (带硬件信息)
BBD
- 下图为 linux那些事儿之我是USB 第2篇25章