Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'acpi-ec'

* acpi-ec:
ACPI / EC: Fix a boot EC regresion by restoring boot EC support for the DSDT EC

+24 -9
+1 -1
drivers/acpi/bus.c
··· 1051 1051 * Maybe EC region is required at bus_scan/acpi_get_devices. So it 1052 1052 * is necessary to enable it as early as possible. 1053 1053 */ 1054 - acpi_boot_ec_enable(); 1054 + acpi_ec_dsdt_probe(); 1055 1055 1056 1056 printk(KERN_INFO PREFIX "Interpreter enabled\n"); 1057 1057
+22 -7
drivers/acpi/ec.c
··· 1446 1446 return AE_OK; 1447 1447 } 1448 1448 1449 - int __init acpi_boot_ec_enable(void) 1449 + static const struct acpi_device_id ec_device_ids[] = { 1450 + {"PNP0C09", 0}, 1451 + {"", 0}, 1452 + }; 1453 + 1454 + int __init acpi_ec_dsdt_probe(void) 1450 1455 { 1451 - if (!boot_ec) 1456 + acpi_status status; 1457 + 1458 + if (boot_ec) 1452 1459 return 0; 1460 + 1461 + /* 1462 + * Finding EC from DSDT if there is no ECDT EC available. When this 1463 + * function is invoked, ACPI tables have been fully loaded, we can 1464 + * walk namespace now. 1465 + */ 1466 + boot_ec = make_acpi_ec(); 1467 + if (!boot_ec) 1468 + return -ENOMEM; 1469 + status = acpi_get_devices(ec_device_ids[0].id, 1470 + ec_parse_device, boot_ec, NULL); 1471 + if (ACPI_FAILURE(status) || !boot_ec->handle) 1472 + return -ENODEV; 1453 1473 if (!ec_install_handlers(boot_ec)) { 1454 1474 first_ec = boot_ec; 1455 1475 return 0; 1456 1476 } 1457 1477 return -EFAULT; 1458 1478 } 1459 - 1460 - static const struct acpi_device_id ec_device_ids[] = { 1461 - {"PNP0C09", 0}, 1462 - {"", 0}, 1463 - }; 1464 1479 1465 1480 #if 0 1466 1481 /*
+1 -1
drivers/acpi/internal.h
··· 181 181 182 182 int acpi_ec_init(void); 183 183 int acpi_ec_ecdt_probe(void); 184 - int acpi_boot_ec_enable(void); 184 + int acpi_ec_dsdt_probe(void); 185 185 void acpi_ec_block_transactions(void); 186 186 void acpi_ec_unblock_transactions(void); 187 187 void acpi_ec_unblock_transactions_early(void);