gpt4 book ai didi

linux - 如果我们已经在使用 struct of_device_id,那么 struct i2c_device_id 有什么用?

转载 作者:太空狗 更新时间:2023-10-29 11:49:57 31 4
gpt4 key购买 nike

我试图了解 Linux 内核 4.4 上的编解码器驱动程序代码。编解码器使用 i2c 总线连接到声卡,编解码器驱动程序代码编写为 I2C 客户端。客户端的 struct i2c_driver 包含 i2c_device_id 信息和 of_device_id 信息。

现在,根据我的理解,当struct of_device_idcompatible 字符串与设备节点信息的compatible 字符串相匹配时,将调用客户端的探测函数。那struct i2c_device_id有什么用呢?

注意:编解码器驱动程序正在使用设备树。

最佳答案

假设您有以下 i2c 驱动程序结构:

static const struct i2c_device_id lm75_ids[] = {
{ "adt75", adt75, },
{ }
};
MODULE_DEVICE_TABLE(i2c, lm75_ids);

static const struct of_device_id lm75_of_match[] = {
{ .compatible = "adi,adt75" },
{ },
};
MODULE_DEVICE_TABLE(of, lm75_of_match);

static struct i2c_driver lm75_driver = {
.driver = {
.name = "lm75",
.of_match_table = of_match_ptr(lm75_of_match),
},
.probe = lm75_probe,
.id_table = lm75_ids,
};
module_i2c_driver(lm75_driver);

当 I2C 设备通过用户空间实例化时:

echo adt75 0x50 > /sys/bus/i2c/devices/i2c-3/new_device

i2c-core 将名称“adt75”与结构 i2c_device_id 数组中的名称相匹配,并将该元素传递给 lm75_probe。

当一个 I2C 设备通过 OF 设备树实例化时,它的兼容属性被匹配(格式:“制造商,型号”)并且“型号”组件与结构 i2c_device_id 数组匹配——它也将该元素传递给 lm75_probe。非常整洁!

struct of_device_id 也有一个 .data 属性,您可以通过不同的机制访问它。

关于linux - 如果我们已经在使用 struct of_device_id,那么 struct i2c_device_id 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42018032/

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