Почему мой драйвер linux i2c-gpio не может проверять устройство в режиме acpi - PullRequest
0 голосов
/ 07 ноября 2019

i2c-gpio.c в ядре linux, измененном мной для поиска устройства через режим ACPI, не может обнаружить устройство, определенное в DSDT.

Код i2c-gpio.c просто использует OF (устройстводерево), чтобы найти устройство, работающее в xeon d1527, я изменил свою таблицу i2c-gpio.c и DSDT, i2c_gpio_driver определен как struct platform_driver, а имя в struct acpi_device_id - "HHH000". Для этого драйвера имен нельзязондировать устройство acpi. Когда HHH000 подставляется как PNP0C0C, оно может зондировать. Устройство PNP0C0C изначально определено в таблице DSDT, а PNP0C0C показано в /sys/devices/platform/PNP0C0C:00/. Так что я подумал, как можно показать мое определенное устройствов / sys / devices / platform, может ли он проверять.

Мой драйвер i2c-gpio.c изменен следующим образом:

#ifdef CONFIG_ACPI
static const struct acpi_device_id i2cgpio_acpi_match[] = {
    {"HHH0000",0},
    {"", 0},
};
MODULE_DEVICE_TABLE(acpi, i2cgpio_acpi_match);
#endif

#if defined(CONFIG_OF)
static const struct of_device_id i2c_gpio_dt_ids[] = {
    { .compatible = "i2c-gpio", },
    { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, i2c_gpio_dt_ids);
#endif
static struct platform_driver i2c_gpio_driver = {
    .driver     = {
        .name   = "my-i2c-gpio",
        .of_match_table = of_match_ptr(i2c_gpio_dt_ids),
        .acpi_match_table = ACPI_PTR(i2cgpio_acpi_match),
    },
    .probe      = i2c_gpio_probe,
    .remove     = i2c_gpio_remove,
};



the dsdt I modified as follow:
Scope(\_SB.PCI0.LPC0)
{
        Device (PCA9) /*pca9548*/
        {
           Name (_HID,"HHH0000")
        }
}
...