根據自己的理解翻譯了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設備的信息。
- static struct i2c_board_info __initdata h4_i2c_board_info[] = {
- {
- I2C_BOARD_INFO("isp1301_omap", 0x2d),
- .irq = OMAP_GPIO_IRQ(125),
- },
- { /* EEPROM on mainboard */
- I2C_BOARD_INFO("24c01", 0x52),
- .platform_data = &m24c01,
- },
- { /* EEPROM on cpu card */
- I2C_BOARD_INFO("24c01", 0x57),
- .platform_data = &m24c01,
- },
- };
-
- static void __init omap_h4_init(void)
- {
- (...)
- i2c_register_board_info(1, h4_i2c_board_info,
- ARRAY_SIZE(h4_i2c_board_info));
- (...)
- }
這樣注冊之後,i2c_adapter注冊的時候就會掃描所有的已注冊的2c_board_info,並為連接自己的i2c設備建立一個i2c_client。這樣在2c_board_info中的同名i2c_driver注冊的時候,i2c_client就會和i2c_driver綁定了,i2c_driver的probe函數被調用。