I2C驱动划分为I2C总线驱动(i2c_adapter)和I2C设备驱动(i2c_driver),一种变异的总线驱动设备模型。
1、I2C总线驱动知道I2C协议、知道如何发出I2C信号,但是不知道数据的含义(/drivers/i2c/buses/*)。
2、I2C设备驱动知道数据的含义,但是不知道怎么发出信号(/drivers/i2c/chips/*)。
I2C总线驱动程序
1、分配i2c_adapter
2、设置,algo=xxx(.master_xfer,发出i2c信号的函数)
3、注册,i2c_add_adapter,将i2c_adapter放入bus的adapter链表
I2C设备驱动程序
1、将i2c_diver放入bus的driver链表
2、从bus的adapter链表取出每一个adapter,调用driver->attach_adapter,即i2c_probe(adapter,address,func)
a、用adapter的master_xfer发地址信号address,看设备是否响应ACK
b、若响应,调用func
c、在func函数中构造i2c_client
.address //设备地址
.adapter //i2c_adapter
.driver //i2c_diver
3、使用构造的i2c_client来读写数据
i2c_transfer(at24cxx_client->adapter, msg, 1);