编写I2C驱动程序,我们可以参考 \linux-3.4.2\Documentation\i2c 中的一些文档
(1)大致框架
app: open read write
-----------------------------------------------------------------------
设备驱动层:知道数据的含义
xxx_read() xxx_write()
------------------------------------------------------------------------
核心层:给设备驱动层和总线驱动层提供接口函数
-------------------------------------------------------------------------
总线驱动层:知道怎么发数据,但是不知道数据的含义
-------------------------------------------------------------------------
硬件层:适配器 i2c类设备等
(2)如何编写I2C设备驱动
一般来说,厂家已经提供了总线驱动程序,我们要做的就是编写设备驱动模型,需要编写两个文件 xxx_dev.c xxx-drv.c。当两个文件xxx_dev.c中提供的设备名字在xxx_drv中的 id_table 中时,就调用xxx_dev中的probe()函数,在probe() 函数中我们可以注册字符设备驱动或者是其它驱动。
(3)dev_xxx.c 文件的编写
static struct i2c_board_info at24cxx_info = {
I2C_BOARD_INFO("at24cxx", 0x50),
};
static struct i2c_client *at24cxx_client;
static int at24cxx_init(void)
{
static struct i2c_adapter *i2c_adap;
i2c_adap = i2c_get_adapter(0);
at24cxx_client = i2c_new_device(i2c_adap , &at24cxx_info);
i2c_put_adapter(i2c_adap);
return 0;
}
(4)xxx-drv.c文件
分配/设置 i2c_driver 结构体,注册函数为:i2c_add_driver(); 在i2c_driver 结构体中的成员函数probe()中做我们想做的事。