Browse Source

ACPI / LPSS: Make acpi_lpss_find_device() also find PCI devices

On some Cherry Trail systems the GPU ACPI fwnode has power-resources which
point to the PMIC, which is connected over one of the LPSS I2C controllers.

To get the suspend/resume ordering correct for this we need to be able to
add device-links between the GPU and the I2c controller. The GPU is a PCI
device, so this requires acpi_lpss_find_device() to also work on PCI devs.

Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Hans de Goede 6 years ago
parent
commit
1e30124ac6
1 changed files with 8 additions and 1 deletions
  1. 8 1
      drivers/acpi/acpi_lpss.c

+ 8 - 1
drivers/acpi/acpi_lpss.c

@@ -16,6 +16,7 @@
 #include <linux/err.h>
 #include <linux/err.h>
 #include <linux/io.h>
 #include <linux/io.h>
 #include <linux/mutex.h>
 #include <linux/mutex.h>
+#include <linux/pci.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
 #include <linux/platform_data/clk-lpss.h>
 #include <linux/platform_data/clk-lpss.h>
 #include <linux/platform_data/x86/pmc_atom.h>
 #include <linux/platform_data/x86/pmc_atom.h>
@@ -518,12 +519,18 @@ static int match_hid_uid(struct device *dev, void *data)
 
 
 static struct device *acpi_lpss_find_device(const char *hid, const char *uid)
 static struct device *acpi_lpss_find_device(const char *hid, const char *uid)
 {
 {
+	struct device *dev;
+
 	struct hid_uid data = {
 	struct hid_uid data = {
 		.hid = hid,
 		.hid = hid,
 		.uid = uid,
 		.uid = uid,
 	};
 	};
 
 
-	return bus_find_device(&platform_bus_type, NULL, &data, match_hid_uid);
+	dev = bus_find_device(&platform_bus_type, NULL, &data, match_hid_uid);
+	if (dev)
+		return dev;
+
+	return bus_find_device(&pci_bus_type, NULL, &data, match_hid_uid);
 }
 }
 
 
 static bool acpi_lpss_dep(struct acpi_device *adev, acpi_handle handle)
 static bool acpi_lpss_dep(struct acpi_device *adev, acpi_handle handle)