linux i2c 标准接口(二)

驱动程序操作法:i2c设备的驱动也可以通过普通的设备驱动实现,像往常的驱动一样实现,然后在应用层就可以像读取普通文件一样操作,无需再考虑读写时序。其实普通的设备驱动也可以用两种方法实现,

1)构建字符设备驱动,在open,read,write等函数中直接操作i2c总线的相关寄存器来读写i2c设备,但是这种方法因平台不同,设备不同都要重新写驱动

2)在设备驱动中调用i2c-core.c提供的i2c_transfer函数来实现和i2c设备的通信,这样只要对不同的设备写不同的驱动就行了。

第一种构建字符设备驱动的方式,类似单片机上没有i2c子系统,直接操作i2c io口;其实这种方式类似gpio模拟i2c,笔者之前做过gpio模拟i2c驱动。这里我们主要讲解第二种方式。

 

1.笔者当前采用的是君正的3.08内核,需要修改/kernel-3.08/arch/mips/xburst/soc-4775/board//trunk/core/core-misc.c文件

// add qn8007 fm信息
static struct i2c_board_info duotin_i2c_dev[] = {
    {
        I2C_BOARD_INFO("dt-qn8007", 0x2b),
    },
};

//static int __init core_board_init(void)  函数中添加 add       0:i2c bus0; 将duotin_i2c_dev添加到i2cbus0

i2c_register_board_info(0, duotin_i2c_dev, ARRAY_SIZE(duotin_i2c_dev));

 

2.在/kernel-3.08/drivers/i2c/chips/目录下添加qn8007.c设备驱动文件,并对应的修改Kconfig和Makefile文件

posted @ 2015-11-18 14:15  夕相待  阅读(1471)  评论(0编辑  收藏  举报