i2c设备驱动
在写好设备驱动后,怎样才能和设备联系起来呢(主要是获取设备的地址信息)?
老方法就不说了,网上一堆,(老方法是实现i2c_driver的attach_adapter和detach_client,新方法是实现probe等函数)
实现的方法有好几种,具体参见内核文档\Documentation\i2c\instantiating-devices,都是英文,看的不是太懂,也就不翻译了,
我是用的第2种方法,这种方法可以直接在自己写的驱动代码里实现,第一种方法还要重新编译内核才行
static struct i2c_board_info at24cxx_info[] =
{
{
I2C_BOARD_INFO("at24_i2c", 0x50),//名字和地址
},
};
static struct i2c_device_id at24cxx_id[] = {
{"at24_i2c",0},
};
static struct i2c_driver at24cxx_driver =
{
.driver = {
.name = "at24cxx",
},
.probe = at24cxx_probe,
.remove = at24cxx_remove,
.id_table = at24cxx_id,//若没有id_table,上面的name必须和at24cxx_info里的名字一样,有了id_table,上面name的名字可以随便取,但id_table里面的名字要和at24cxx_info一样
};
然后就可以在init函数里调用i2c_add_driver(&at24cxx_driver);了
int at24cxx_init(void)
{
...
struct i2c_adapter *adpter = i2c_get_adapter(0);
at24cxx_client = i2c_new_device(adpter, &at24cxx_info[0]);
i2c_put_adapter(adpter);
return i2c_add_driver(&at24cxx_driver);
}
具体代码请看自己的内核代码,我自己也不太懂