gpt4 book ai didi

linux - I2C 驱动程序应如何在 ACPI 中与 HID PRP0001 匹配

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

我正在尝试实例化 this sensor在 ACPI 中使用设备特定数据,即使用 Name (_DSD, ...)并使用兼容的字符串,例如,使用以下 ASL 摘录:

Device (TOF1) {
Name (_HID, "PRP0001")
Name (_DDN, "STMicroelectronics VL53L0X laser rangefinder")
Name (_CRS, ResourceTemplate () {
I2cSerialBus (
0x29,
ControllerInitiated,
I2C_SPEED,
AddressingMode7Bit,
"\\_SB.PCI0.I2C1.MUX2.CH01",
0x00,
ResourceConsumer,,)
})
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () {"compatible", "st,vl53l0x"},
}
})
}
我的印象是,如果我在上面的 ASL 中指定我的设备,我将不需要修改驱动程序(例如,通过添加 ACPI 匹配表)并且可以使用现有的 OF 匹配表匹配设备司机。然而,这似乎只是部分正确。由于 i2c-core-base.c 中内核中的此检查,传感器无法探测:
if (!driver->id_table &&
!i2c_acpi_match_device(dev->driver->acpi_match_table, client) &&
!i2c_of_match_device(dev->driver->of_match_table, client))
return -ENODEV;
我对此语句的解释是设备驱动程序必须具有 (i) 一个 ID 表或 (ii) 一个匹配的 ACPI ID 表或 (iii) 一个匹配的 OF ID 表。 VL53L0X 没有 ID 表和 ACPI 匹配表,所以我依赖使用 OF 表进行匹配。
现在,有两件事让我感到困惑。首先,我可以 printk(KERN_ERR "%s", dev->driver->driver.name)并且看到我确实已经在查看正确的驱动程序,那么为什么我们还要检查驱动程序是否再次匹配?
其次,如果 i2c_of_match_device(dev->driver->of_match_table, client)无法匹配,首先匹配的是什么导致能够 printk(KERN_ERR "%s", dev->driver->driver.name)并看到正确的驱动程序名称?

最佳答案

不是对上述问题的真正答案,但解决此问题的一个技巧/解决方法是将 ID 表添加到驱动程序。

static const struct i2c_device_id vl53l0x_id[] = {
{ "vl53l0x", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, vl53l0x_id);

static struct i2c_driver vl53l0x_driver = {
.driver = {
.name = "vl53l0x-i2c",
.of_match_table = st_vl53l0x_dt_match,
},
.probe_new = vl53l0x_probe,
.id_table = vl53l0x_id,
};
module_i2c_driver(vl53l0x_driver);
这会导致跳过问题中的检查。这不是一个很好的解决方案,因为 I2C ID 表没有传递给 probe_new ,但是,它确实适用于该驱动程序,因为无需进行进一步的配置。
然而,根据围绕 probe_new 引入的评论和补丁,似乎不推荐像这样匹配的 i2c 设备。 .

关于linux - I2C 驱动程序应如何在 ACPI 中与 HID PRP0001 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63519678/

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