Linux I2C 驱动的几个概念

本文介绍Linux I2C驱动相关的几个重要的数据结构,以及他们适用的 场合。

struct i2c_adapter

无法避免,我们必然碰到struct i2c_adapter这个数据结构。好在我们只是要编写I2C设备驱动,我们只需简单的认为,i2c_adapter是标识一个I2C总线的数据结构的,直白一点就是CPU这边的I2C控制器,I2C主设备。我们跟I2C设备的所有通信,都必须通过这个控制器进行。

struct i2c_client

用来表示一个I2C从设备,我们的驱动代码所对应的设备。用来表示从设备的数据结构还有 struct i2c_board_info。为了弄清楚两者的关系,我们先看一下struct i2c_client所包含的成员。

struct i2c_client {
unsigned short flags; /* div., see below */
unsigned short addr; /* chip address - NOTE: 7bit */
                /* addresses are stored in the */
                 /* _LOWER_ 7 bits */
unsigned long timing; /* parameters of timing */
char name[I2C_NAME_SIZE];
struct i2c_adapter *adapter; /* the adapter we sit on */
struct i2c_driver *driver; /* and our access routines */
struct device dev; /* the device structure */
int irq; /* irq issued by device */
struct list_head detected;
};


struct i2c_board_info

按照Linux代码的注释,这个数据结构是用于创建设备(i2c_client)的模板,  它提供了系统创建i2c_client的关键信息。其很多字段跟struct i2c_client存在对应关系。 

struct i2c_board_info {
char type[I2C_NAME_SIZE];    /* 初始化i2c_client.name*/
unsigned short flags;                           /* 初始化i2c_client.flags*/

unsigned short addr;                            /* i2c_client.addr */
void *platform_data;                         /* i2c_client.dev.platform_data */
struct dev_archdata *archdata;          /* i2c_client.dev.archdata */
int irq;                                               /*i2c_client.irq */
};

i2c_client 和 i2c_board_info 两者都是描述一个I2C设备,但是它们使用的地方是不一样的。 

i2c_client  应用于设备驱动的各个操作函数的参数中,用于指代当前操作的设备,而且它还包含了i2c_adapter, 指明了设备是挂载在哪个I2C总线上的。i2c_client是系统动态创建的。 

i2c_board_info, 用于在代码中静态声明I2C设备, 这些声明往往放在board相关的文件中。 board的初始化函数会调用i2c_register_board_info(), 将声明的静态I2C设备注册到系统的中。这些信息是生成对应的i2c_client的重要依据。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值