i2c--2.6.34文档:如何枚举产生i2c_client


根据自己的理解翻译了http://lxr.linux.no/linux+v2.6.34/Documentation/i2c/instantiating-devices中关于枚举建立i2c_client的文档。有异议或疑问请参照原文,毕竟内核的文档才是真正的精华。s

方法1:使用总线号声明设备。

在内核的初始化中定义设备的信息。前提是内核编译的时候已经确定有哪些i2c设备和它们的地址,还要知道连接的总线的编号。

比如在/arch/arm/mach-xxxx/board_xxxx.c中可以有这么一段代码来注册i2c设备的信息。

 
  1. static struct i2c_board_info __initdata h4_i2c_board_info[] = {  
  2.          {  
  3.                 I2C_BOARD_INFO("isp1301_omap", 0x2d),  
  4.                 .irq            = OMAP_GPIO_IRQ(125),  
  5.          },  
  6.          {       /* EEPROM on mainboard */  
  7.                  I2C_BOARD_INFO("24c01", 0x52),  
  8.                  .platform_data  = &m24c01,  
  9.          },  
  10.          {       /* EEPROM on cpu card */  
  11.                  I2C_BOARD_INFO("24c01", 0x57),  
  12.                  .platform_data  = &m24c01,  
  13.          },  
  14. };  
  15.    
  16. static void __init omap_h4_init(void)  
  17. {  
  18.          (...)  
  19.          i2c_register_board_info(1, h4_i2c_board_info,  
  20.                          ARRAY_SIZE(h4_i2c_board_info));  
  21.          (...)  
  22. }  

这样注册之后,i2c_adapter注册的时候就会扫描所有的已注册的2c_board_info,并为连接自己的i2c设备建立一个i2c_client。这样在2c_board_info中的同名i2c_driver注册的时候,i2c_client就会和i2c_driver绑定了,i2c_driver的probe函数被调用。

  • 1
  • 2
  • 3
  • 下一页

相关内容