diff options
-rw-r--r-- | drivers/acpi/ec.c | 15 |
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 | ||
121 | static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */ | 121 | static int EC_FLAGS_MSI; /* Out-of-spec MSI controller */ |
122 | static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */ | 122 | static int EC_FLAGS_VALIDATE_ECDT; /* ASUStec ECDTs need to be validated */ |
123 | static 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 */ | ||
905 | static 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 */ |
904 | static int ec_validate_ecdt(const struct dmi_system_id *id) | 912 | static 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 | ||
918 | static struct dmi_system_id __initdata ec_dmi_table[] = { | 926 | static 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"); |