IIC驅動

linux iic驅動體系分三部分。

struct i2c_adapter 用來描述I2C控制器的,只和主機有關係。換一顆SoC則需要修改該結構體。

struct i2c_client   I2C從機設備信息

struct i2c_driver  I2C(從機)設備驅動

  • I2C總線上有2條分支:i2c_client鏈和i2c_driver鏈;
  • 當任何一個driver或者client去註冊時,I2C總線都會調用match函數去對client.name和driver.id_table.name進行循環匹配。
  • 如果driver.id_table中所有的id都匹配不上則說明client並沒有找到一個對應的driver;
  • 如果匹配上了則標明client和driver是適用的,那麼I2C總線會調用自身的probe函數,自身的probe函數又會調用driver中提供的probe函數,driver中的probe函數會對設備進行硬件初始化和後續工作。

(1)i2c_add_adapter/i2c_add_numbered_adapter:註冊adapter的,比如i2c-s3c2410.c中就使用此函數來註冊一個adapter。

(2)i2c_add_driver:註冊driver的

(3)i2c_new_device:註冊client的

(4)i2c_register_board_info()函數用於往__i2c_board_list 這條鏈表添加一條i2c設備信息,在i2c adapter註冊的時候,會掃描                 __i2c_board_list鏈表,  然後調用i2c_new_device()函數來註冊i2c設備,

    注意,要先於i2c adapter註冊之前就添加好i2c設備信息,否則會出現調用了i2c_register_board_info()函數,

    而設備不能註冊的情況。

(5)I2C總線的i2c_client的提供是內核通過i2c_add_adapter/i2c_add_numbered_adapter接口調用時自動生成的,生成的原料是              mach-x210.c中的i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章