aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/ec.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-06-09 23:48:54 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-06-09 23:48:54 +0200
commitbd6ac2abc9937eb7613aa194195fd98fe9312b38 (patch)
treef7386c717352410ba2fdfc45d1cb1b29aba8f9f2 /drivers/acpi/ec.c
parentLinux 4.7-rc2 (diff)
parentACPI / EC: Fix a boot EC regresion by restoring boot EC support for the DSDT EC (diff)
downloadlinux-dev-bd6ac2abc9937eb7613aa194195fd98fe9312b38.tar.xz
linux-dev-bd6ac2abc9937eb7613aa194195fd98fe9312b38.zip
Merge branch 'acpi-ec'
* acpi-ec: ACPI / EC: Fix a boot EC regresion by restoring boot EC support for the DSDT EC
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r--drivers/acpi/ec.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 0e70181f150c..73c76d646064 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1446,10 +1446,30 @@ ec_parse_io_ports(struct acpi_resource *resource, void *context)
return AE_OK;
}
-int __init acpi_boot_ec_enable(void)
+static const struct acpi_device_id ec_device_ids[] = {
+ {"PNP0C09", 0},
+ {"", 0},
+};
+
+int __init acpi_ec_dsdt_probe(void)
{
- if (!boot_ec)
+ acpi_status status;
+
+ if (boot_ec)
return 0;
+
+ /*
+ * Finding EC from DSDT if there is no ECDT EC available. When this
+ * function is invoked, ACPI tables have been fully loaded, we can
+ * walk namespace now.
+ */
+ boot_ec = make_acpi_ec();
+ if (!boot_ec)
+ return -ENOMEM;
+ status = acpi_get_devices(ec_device_ids[0].id,
+ ec_parse_device, boot_ec, NULL);
+ if (ACPI_FAILURE(status) || !boot_ec->handle)
+ return -ENODEV;
if (!ec_install_handlers(boot_ec)) {
first_ec = boot_ec;
return 0;
@@ -1457,11 +1477,6 @@ int __init acpi_boot_ec_enable(void)
return -EFAULT;
}
-static const struct acpi_device_id ec_device_ids[] = {
- {"PNP0C09", 0},
- {"", 0},
-};
-
#if 0
/*
* Some EC firmware variations refuses to respond QR_EC when SCI_EVT is not