linux i2c v4l2驱动核心的知识 platform,转:Linux I2C 驱动分析

3. I2C device driver

I2C只有总线驱动是不够的,必须有设备才能工作。这就是I2C device driver的必要性。I2C的device是有两个模块来描述的,struct i2c_driver和struct i2c_client。

在介绍chips目录下的device driver前有必要介绍一下i2c-dev.c文件。

i2c-dev.c中提供了一个通用的I2C设备的驱动程序,实现了字符类

型设备的访问接口,对设备的具体访问是通过I2C adapter来实现的。构造一个对I2C core层接口的数据结构,通过接口函数向 I2C

Core注册一个I2C设备驱动。同时构造一个对用户层接口的数据结构,并通过接口函数向内核注册为一个主设备号为89的字符类型设备。

static struct i2c_driver i2cdev_driver = {

.driver = {

.name = "dev_driver",

},

.id  = I2C_DRIVERID_I2CDEV,

.attach_adapter = i2cdev_attach_adapter,

.detach_adapter = i2cdev_detach_adapter,

.detach_client = i2cdev_detach_client,

};

struct i2c_dev {

struct list_head list;

struct i2c_adapter *adap;

struct device *dev;

};

文件提供了用户层对I2C设备的访问,包括open,read,write,ioctl,release等常规文件操作,我们可以通过open函数打开

I2C的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过 read和write函数完成对I2C设备的读写操作。

static const struct file_operations i2cdev_fops = {

.owner  = THIS_MODULE,

.llseek  = no_llseek,

.read  = i2cdev_read,

.write  = i2cdev_write,

.ioctl  = i2cdev_ioctl,

.open  = i2cdev_open,

.release = i2cdev_release,

};

注:通过I2C

driver提供的通用方法可以访问任何一个I2C的设备,但是其中实现的read,write及ioctl等功能完全是基于一般设备的实现,所有的操作

数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C设备,我们可以为一个具体的I2C设备开发特定的I2C设备驱动程序,在驱动中

完成对特定的数据格式的解释以及实现一些专用的功能。

在chips目录下包含着各种device 的driver,完成各种从设备的注册。作为一般的I2C设备,使用i2c-dev.c里的操作足够完成操作了。

当然如果不能完成,则需要独立完成该驱动,这就是chips目录下的代码。

因为i2c-dev.c已经实现了I2C设备的文件操作接口,所以只要实现struct

i2c_driver就可以了。对于某些特殊的操作,可以使用command接口进行控制。 当然,对于i2接口的fm芯片,则将struct

i2c_driver放在i2c的chips目录下,而将另外fm操作相关的代码放在了/media/radio目录下了。在这个目录下需要完成读写接口

的完成,这个大部分使用V4L2架构。

继续分析中……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值