Linux device driver I2C设备id表驱动程序_数据成员的使用

Linux device driver I2C设备id表驱动程序_数据成员的使用,linux-device-driver,i2c,max732x.c,Linux Device Driver,I2c,Max732x.c,我试图理解I2C客户机驱动程序。根据我的理解,在注册I2C驱动程序之前,我们必须定义I2C\u设备id表和设备树兼容表 我有以下疑问。请帮我理解一下 1) i2c\u设备id结构的定义包含两个成员(name,driver\u data)。第一个成员(名称)用于定义将在驱动程序绑定期间使用的设备名称,第二个成员(驱动程序数据)的用途是什么 2) 驱动程序绑定将基于i2c\u设备\u id表或设备树兼容字符串进行 提前谢谢 1) i2c\u设备id结构的定义包含两个成员(name,driver\u

我试图理解I2C客户机驱动程序。根据我的理解,在注册I2C驱动程序之前,我们必须定义
I2C\u设备id
表和设备树兼容表

我有以下疑问。请帮我理解一下

1)
i2c\u设备id
结构的定义包含两个成员(
name
driver\u data
)。第一个成员(
名称
)用于定义将在驱动程序绑定期间使用的设备名称,第二个成员(
驱动程序数据
)的用途是什么

2) 驱动程序绑定将基于
i2c\u设备\u id
表或设备树兼容字符串进行

提前谢谢

1)
i2c\u设备id
结构的定义包含两个成员(
name
driver\u data
)。第一个成员(
名称
)用于定义将在驱动程序绑定期间使用的设备名称,第二个成员(
驱动程序数据
)的用途是什么

首先定义
i2c\u device\u id
结构的表(数组),就像在驱动程序中一样:

static const struct i2c_device_id max732x_id[]{
{“max7319”,0},
{“max7320”,1},
{“max7321”,2},
{ },
};
模块设备表(i2c,max732x\U id);
在驱动程序探测函数中,此数组的一个元素(用于特定设备)作为第二个参数:

static int max732x_探针(结构i2c_客户端*client,
常量结构i2c(设备id*id)
现在,您可以出于自己的目的使用
id->driver\u data
(该数据对于表中的每个设备都是唯一的)。例如,对于“max7320”芯片
驱动器,数据将
1

例如,如果您具有特定于每个设备的功能,则可以创建如下功能阵列:

静态uint64\u t max732x\u功能[]{
[0]=功能0,
[1] =特征1 |特征2,
[2] =特征2
};
您可以从该阵列获取特定设备的功能,如下所示:

max732x\u功能[id->driver\u数据]
当然,出于同样的原因,您可以使用驱动程序名。但这将需要更多的代码和更多的CPU时间。所以基本上,如果您的驱动程序不需要
driver\u数据
,您只需为所有设备(在设备表中)设置
0

2) 驱动程序绑定将基于
i2c\u设备\u id
表或设备树兼容字符串进行

要了解这一点,您可以查看一下i2c设备匹配()函数(例如)。如您所见,第一个I2C内核尝试通过
兼容
字符串(样式,即设备树)匹配设备。如果失败,它将尝试按id表匹配设备。

仅添加到第2点,当I2C内核按兼容字符串匹配时,它还会将
compatible=“manufacturer,model”
的模型部分与struct I2C_device_id数组匹配,并将其传递给I2C device probe。整洁的