====本文系本站原创,欢迎转载! 转载请注明出处:http://blog.csdn.net/yyplc====
本文基于内核版本linux-2.6.30.4分析.
Linux中i2c子系统框图如下:
•客户驱动
即I2C设备驱动,每个客户驱动可以为一个或多个I2C设备服务,并向用户空间提供相应的访问接口函数。
客户驱动需要向总线注册并通过i2c-core提供的接口与I2C设备通信。与客户程序相关的数据结构主要有struct i2c_driver和struct i2c_client
添加客户驱动:static inline int i2c_add_driver(struct i2c_driver *driver)
删除客户驱动:extern void i2c_del_driver(struct i2c_driver *);
•I2C-core核心
I2c-core核心是I2C总线的核心,承上启下,其实现与平台无关。I2C总线的初始化、注册和适配器添加和注销等相关工作均在I2C核心代码中完成,
除此之外,还向上层客户驱动提供相应的API接口函数,使得客户驱动独立于适配器驱动而工作。
• 适配器驱动
负责对I2C控制器的驱动实现,一个总线对应一个适配器。I2C总线上对I2C slave设备的具体
操作是在适配器驱动中完成的。适配器驱动作为platform_driver而注册,在probe()到驱动设
备后,向总线声明并被添加:i2c_add_numbered_adapter(&i2c->adap);