In case of PRP0001 the compatible string may have additional data affiliated with the device. When we call device_get_match_data() on such device, we will get nothing since currently acpi_device_get_match_data() doesn't respect PRP0001. To fix above, try acpi_of_match_device() if there is no ACPI table in the driver. Anyway, note that the device is supposed to get its own proper ACPI ID. Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> --- drivers/acpi/bus.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 147f6c7ea59c..c2730118e95b 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -799,10 +799,25 @@ const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids, } EXPORT_SYMBOL_GPL(acpi_match_device); +static const void *acpi_device_get_match_data_of(const struct device *dev) +{ + struct acpi_device *adev = ACPI_COMPANION(dev); + const struct of_device_id *match = NULL; + + acpi_of_match_device(adev, dev->driver->of_match_table, &match); + if (!match) + return NULL; + + return match->data; +} + const void *acpi_device_get_match_data(const struct device *dev) { const struct acpi_device_id *match; + if (!dev->driver->acpi_match_table) + return acpi_device_get_match_data_of(dev); + match = acpi_match_device(dev->driver->acpi_match_table, dev); if (!match) return NULL; -- 2.20.1