aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/ec.c
diff options
context:
space:
mode:
authorAlexey Starikovskiy <astarikovskiy@suse.de>2007-11-15 13:52:47 -0500
committerLen Brown <len.brown@intel.com>2007-11-19 12:20:48 -0500
commit5870a8cd23181703cc76f88f630372f8602c7648 (patch)
tree4fd47ddabf7dc0d237e8cb7069646cd5df2dee6b /drivers/acpi/ec.c
parent2ffbb8377c7a0713baf6644e285adc27a5654582 (diff)
ACPI: EC: Don't init EC early if it has no _INI
Option to init EC early inserted to handle #8598 ASUS problem, introduced several others. EC driver in this particular case has fake _INI method, not present on other machines, which don't need or break from this workaround, so lets use its presence as a flag for early init. http://bugzilla.kernel.org/show_bug.cgi?id=9262 http://bugzilla.kernel.org/show_bug.cgi?id=8598 https://bugzilla.novell.com/show_bug.cgi?id=334806 Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r--drivers/acpi/ec.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 06b78e5e33a..56afe13af59 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -881,12 +881,20 @@ int __init acpi_ec_ecdt_probe(void)
881 boot_ec->gpe = ecdt_ptr->gpe; 881 boot_ec->gpe = ecdt_ptr->gpe;
882 boot_ec->handle = ACPI_ROOT_OBJECT; 882 boot_ec->handle = ACPI_ROOT_OBJECT;
883 } else { 883 } else {
884 /* This workaround is needed only on some broken machines,
885 * which require early EC, but fail to provide ECDT */
886 acpi_handle x;
884 printk(KERN_DEBUG PREFIX "Look up EC in DSDT\n"); 887 printk(KERN_DEBUG PREFIX "Look up EC in DSDT\n");
885 status = acpi_get_devices(ec_device_ids[0].id, ec_parse_device, 888 status = acpi_get_devices(ec_device_ids[0].id, ec_parse_device,
886 boot_ec, NULL); 889 boot_ec, NULL);
887 /* Check that acpi_get_devices actually find something */ 890 /* Check that acpi_get_devices actually find something */
888 if (ACPI_FAILURE(status) || !boot_ec->handle) 891 if (ACPI_FAILURE(status) || !boot_ec->handle)
889 goto error; 892 goto error;
893 /* We really need to limit this workaround, the only ASUS,
894 * which needs it, has fake EC._INI method, so use it as flag.
895 */
896 if (ACPI_FAILURE(acpi_get_handle(boot_ec->handle, "_INI", &x)))
897 goto error;
890 } 898 }
891 899
892 ret = ec_install_handlers(boot_ec); 900 ret = ec_install_handlers(boot_ec);