关于i2c 子系统的详解,不做过多描述了,我上传的资源里有份文档,比较详尽的做了分析。
我想记录的是,只是怕自己日后遗忘,能帮助我快速重拾记忆的片段。
一、kernel 在2.6.31后 i2c_attach_client() 函数已经不复存在,这意味着以前的 legacy drivers ( Adapter方式 )不能简单复用
二、Probe方式 (new style)
a) 无论用哪种方式写的驱动,关键是i2c_client 的掌握,因为最终发动传输都需要它。那么,在可以保存私有数据的角落里保存好它。
b) i2c_bus_type 总线的匹配规则是:i2c_client 和 id_table 的名称。
c) i2c_client 的实例化及Adapter注册于总线的时刻在 [devices.c] platform_device_register 注册到 platform总线的那刻,当然 [i2c-davinci.c] platform_driver_register 注册的driver是最终实践者。Adapter方式,是在注册driver 后才动态创建的client。
d) 平台代码中要对使用的i2c设备做注册 [ i2c_board_info ] 、[ i2c_register_board_info() ],注册后的设备才能被i2c_bus_type 探测到。
三、i2c-dev.c
a) 这是最简单的写i2c驱动的方法,获取Adapter,组装client ,寄存在private_data 中
b) 仍然使用Adapter方式,因为这种方式不需要在平台代码中注册