aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/ec.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 3fcb9132881e..2c790b5badb3 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -120,6 +120,7 @@ static struct acpi_ec {
120 120
121static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */ 121static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */
122static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */ 122static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */
123static int EC_FLAGS_SKIP_DSDT_SCAN; /* Not all BIOS survive early DSDT scan */
123 124
124/* -------------------------------------------------------------------------- 125/* --------------------------------------------------------------------------
125 Transaction Management 126 Transaction Management
@@ -900,6 +901,13 @@ static const struct acpi_device_id ec_device_ids[] = {
900 {"", 0}, 901 {"", 0},
901}; 902};
902 903
904/* Some BIOS do not survive early DSDT scan, skip it */
905static int ec_skip_dsdt_scan(const struct dmi_system_id *id)
906{
907 EC_FLAGS_SKIP_DSDT_SCAN = 1;
908 return 0;
909}
910
903/* ASUStek often supplies us with broken ECDT, validate it */ 911/* ASUStek often supplies us with broken ECDT, validate it */
904static int ec_validate_ecdt(const struct dmi_system_id *id) 912static int ec_validate_ecdt(const struct dmi_system_id *id)
905{ 913{
@@ -917,6 +925,10 @@ static int ec_flag_msi(const struct dmi_system_id *id)
917 925
918static struct dmi_system_id __initdata ec_dmi_table[] = { 926static struct dmi_system_id __initdata ec_dmi_table[] = {
919 { 927 {
928 ec_skip_dsdt_scan, "Compal JFL92", {
929 DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),
930 DMI_MATCH(DMI_BOARD_NAME, "JFL92") }, NULL},
931 {
920 ec_flag_msi, "MSI hardware", { 932 ec_flag_msi, "MSI hardware", {
921 DMI_MATCH(DMI_BIOS_VENDOR, "Micro-Star"), 933 DMI_MATCH(DMI_BIOS_VENDOR, "Micro-Star"),
922 DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star") }, NULL}, 934 DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star") }, NULL},
@@ -959,6 +971,9 @@ int __init acpi_ec_ecdt_probe(void)
959 /* fall through */ 971 /* fall through */
960 } 972 }
961 973
974 if (EC_FLAGS_SKIP_DSDT_SCAN)
975 return -ENODEV;
976
962 /* This workaround is needed only on some broken machines, 977 /* This workaround is needed only on some broken machines,
963 * which require early EC, but fail to provide ECDT */ 978 * which require early EC, but fail to provide ECDT */
964 printk(KERN_DEBUG PREFIX "Look up EC in DSDT\n"); 979 printk(KERN_DEBUG PREFIX "Look up EC in DSDT\n");