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

2024-04-23

我正在尝试实例化这个传感器 https://elixir.bootlin.com/linux/v5.2/source/drivers/iio/proximity/vl53l0x-i2c.c在 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 匹配表),并且可以使用司机。然而,这似乎只是部分正确。由于内核中的此检查,传感器无法探测i2c-core-base.c https://elixir.bootlin.com/linux/v5.2/source/drivers/i2c/i2c-core-base.c#L345:

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但是,它确实适用于此驱动程序,因为无需进行进一步的配置。

然而,根据围绕引入的评论和补丁,类似这样的匹配 i2c 设备似乎已被弃用probe_new.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

I2C 驱动程序应如何在 ACPI 中与 HID PRP0001 匹配 的相关文章

随机推荐