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);  

}
具体代码请看自己的内核代码,我自己也不太懂

posted @ 2013-04-05 18:49  linux_rookie  阅读(212)  评论(0编辑  收藏  举报