gpt4 book ai didi

linux-device-driver - I2C 设备 id 表的 driver_data 成员的使用

转载 作者:行者123 更新时间:2023-12-04 22:46:11 25 4
gpt4 key购买 nike

我正在尝试了解 I2C 客户端驱动程序。根据我在注册 I2C 驱动程序之前的理解,我们必须定义 i2c_device_id表和设备树兼容表。

我有以下疑问。可以请帮助我理解。

1) i2c_device_id的定义结构包含两个成员( namedriver_data )。第一个成员( name )用于定义将在驱动程序绑定(bind)期间使用的设备名称,第二个成员( driver_data )的用途是什么。

2) 驱动绑定(bind)将基于 i2c_device_id表或设备树兼容字符串。

提前致谢。

最佳答案

1) The definition of i2c_device_id structure contains two members (name, driver_data). The 1st member (name) is used to define the device name which will be used during driver binding, what is the use of the 2nd member (driver_data).



首先定义 i2c_device_id的表(数组)结构,就像它在 中所做的那样司机:

static const struct i2c_device_id max732x_id[] = {
{ "max7319", 0 },
{ "max7320", 1 },
{ "max7321", 2 },
{ },
};
MODULE_DEVICE_TABLE(i2c, max732x_id);

在您的驱动程序探测函数中,您有这个数组的一个元素(对于您的特定设备)作为第二个参数:

static int max732x_probe(struct i2c_client *client,
const struct i2c_device_id *id)

现在您可以使用 id->driver_data (对于表中的每个设备都是唯一的)用于您自己的目的。例如。 “max7320”芯片 driver_data将是 1 .

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

static uint64_t max732x_features[] = {
[0] = FEATURE0,
[1] = FEATURE1 | FEATURE2,
[2] = FEATURE2
};

您可以从这个数组中获取您的特定设备的功能,如下所示:

max732x_features[id->driver_data]

当然,出于同样的原因,您可以使用驱动程序名称。但这需要更多的代码和更多的 CPU 时间。所以基本上如果你不需要 driver_data给你的司机——你只需要做 0对于所有设备(在设备表中)。

2) Driver binding will happen based on i2c_device_id table or device tree compatible string.



要弄清楚这一点,您可以查看 i2c_device_match() 函数(例如 here )。如您所见,第一个 I2C 内核尝试通过 compatible 匹配设备字符串(OF 风格,即设备树)。如果失败,它会尝试通过 id 表匹配设备。

关于linux-device-driver - I2C 设备 id 表的 driver_data 成员的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24606448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com