前言
1.Linux的I2C体系结构分为3个组成部分
1.1 I2C核心层
提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法上层的即Algorithm)与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等,主要用于提供统一的I2C操作函数
1.2 I2C适配器层
对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部,主要用于IIC设备的硬件操作
1.3 I2C设备驱动层
I2C设备驱动(也称为客户驱动)是对设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据
2.I2C设备驱动层采用bus-dev-drv模型设计
I2C总线上的device可以包含两种数据:i2c_client和i2c_adapter,还提供了match,probe方法,driver端必须提id_table,device端必须提供name,在总线的match函数中会匹配id_table->name和client->name,如果一致则调用总线的probe函数,对于总线的probe函数功能如下所述,下图为简化后的代码,client表示匹配成功的dev,driver表示匹配成功的drv,该函数作用在于设置client->driver