Linux I2C体系结构分析 – h

6.1在板文件(如:mach-mini2440.c)定义一个i2c_board_info, 里面有:名字, 设备地址 然后i2c_register_board_info(busnum, …) (把它们放入__i2c_board_list链表) list_add_tail(&devinfo->list, &__i2c_board_list);

链表何时使用: i2c_register_adapter > i2c_scan_static_board_info > i2c_new_device

使用限制:必须在 i2c_register_adapter 之前 i2c_register_board_info 所以:不适合我们动态加载insmod例如:需要通过i2c_register_board_info()函数注册i2c_board_info,向内核提供i2c设备的相关信息。在arch/arm/mach-s3c2440/mach-mini2440.c static struct i2c_board_info i2c_devices[] __initdata = { { I2C_BOARD_INFO("at24cxx", 0x50), }, { I2C_BOARD_INFO("at24c02", 0x52), }, { I2C_BOARD_INFO("at24c08", 0x58), },};static void __init mini2440_machine_init(void){ i2c_register_board_info(0,i2c_devices,ARRAY_SIZE(i2c_devices)); ……..} 这样启动内核后在sys/bus/i2c/devices/目录下就有0-0050、0-0052、0-0058,其目录下的name就保存着要匹配的名字。如:cat sys/bus/i2c/devices/0-0052/name 可以看到at24c02,这个名字要与设备驱动中i2c_device_id结构体填充name要一样。若匹配成功就会调用设备驱动中i2c_driver结构体里的proble()函数。例子:下面7.2newstyle方式未经一番寒彻骨,焉得梅花扑鼻香

Linux I2C体系结构分析 – h

相关文章:

你感兴趣的文章:

标签云: