aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpi_lpss.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2018-09-23 15:58:08 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-09-30 22:38:24 +0200
commit1e30124ac60abc41d74793900f8b4034f29bcb3d (patch)
tree26c40a9ea65001f3a1e136445e68f7c969eae46a /drivers/acpi/acpi_lpss.c
parentACPI / LPSS: Make hid_uid_match helper accept a NULL uid argument (diff)
downloadlinux-dev-1e30124ac60abc41d74793900f8b4034f29bcb3d.tar.xz
linux-dev-1e30124ac60abc41d74793900f8b4034f29bcb3d.zip
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>
Diffstat (limited to 'drivers/acpi/acpi_lpss.c')
-rw-r--r--drivers/acpi/acpi_lpss.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 73ae43627d60..859b5b3dcdbf 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -16,6 +16,7 @@
#include <linux/err.h>
#include <linux/io.h>
#include <linux/mutex.h>
+#include <linux/pci.h>
#include <linux/platform_device.h>
#include <linux/platform_data/clk-lpss.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)
{
+ struct device *dev;
+
struct hid_uid data = {
.hid = hid,
.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)