ACPI / osi: Collect _OSI handling into one single file
[linux-2.6-block.git] / drivers / acpi / blacklist.c
index ba1601d26c489f9a730b121a6e8b0b97350e294a..bdc67bad61a75b8c823973ea822b7c9feafed28c 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  Check to see if the given machine has a known bad ACPI BIOS
  *  or if the BIOS is too old.
- *  Check given machine against acpi_osi_dmi_table[].
+ *  Check given machine against acpi_rev_dmi_table[].
  *
  *  Copyright (C) 2004 Len Brown <len.brown@intel.com>
  *  Copyright (C) 2002 Andy Grover <andrew.grover@intel.com>
@@ -47,7 +47,7 @@ struct acpi_blacklist_item {
        u32 is_critical_error;
 };
 
-static struct dmi_system_id acpi_osi_dmi_table[] __initdata;
+static struct dmi_system_id acpi_rev_dmi_table[] __initdata;
 
 /*
  * POLICY: If *anything* doesn't work, put it on the blacklist.
@@ -128,41 +128,12 @@ int __init acpi_blacklisted(void)
                }
        }
 
-       dmi_check_system(acpi_osi_dmi_table);
+       (void)early_acpi_osi_init();
+       dmi_check_system(acpi_rev_dmi_table);
 
        return blacklisted;
 }
 #ifdef CONFIG_DMI
-static int __init dmi_enable_osi_darwin(const struct dmi_system_id *d)
-{
-       acpi_osi_dmi_darwin(true, d);
-       return 0;
-}
-static int __init dmi_enable_osi_linux(const struct dmi_system_id *d)
-{
-       acpi_osi_dmi_linux(true, d);
-       return 0;
-}
-static int __init dmi_disable_osi_vista(const struct dmi_system_id *d)
-{
-       pr_notice(PREFIX "DMI detected: %s\n", d->ident);
-       acpi_osi_setup("!Windows 2006");
-       acpi_osi_setup("!Windows 2006 SP1");
-       acpi_osi_setup("!Windows 2006 SP2");
-       return 0;
-}
-static int __init dmi_disable_osi_win7(const struct dmi_system_id *d)
-{
-       pr_notice(PREFIX "DMI detected: %s\n", d->ident);
-       acpi_osi_setup("!Windows 2009");
-       return 0;
-}
-static int __init dmi_disable_osi_win8(const struct dmi_system_id *d)
-{
-       pr_notice(PREFIX "DMI detected: %s\n", d->ident);
-       acpi_osi_setup("!Windows 2012");
-       return 0;
-}
 #ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
 static int __init dmi_enable_rev_override(const struct dmi_system_id *d)
 {
@@ -173,187 +144,7 @@ static int __init dmi_enable_rev_override(const struct dmi_system_id *d)
 }
 #endif
 
-static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "Fujitsu Siemens",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "ESPRIMO Mobile V5505"),
-               },
-       },
-       {
-       /*
-        * There have a NVIF method in MSI GX723 DSDT need call by Nvidia
-        * driver (e.g. nouveau) when user press brightness hotkey.
-        * Currently, nouveau driver didn't do the job and it causes there
-        * have a infinite while loop in DSDT when user press hotkey.
-        * We add MSI GX723's dmi information to this table for workaround
-        * this issue.
-        * Will remove MSI GX723 from the table after nouveau grows support.
-        */
-       .callback = dmi_disable_osi_vista,
-       .ident = "MSI GX723",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "GX723"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "Sony VGN-NS10J_S",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NS10J_S"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "Sony VGN-SR290J",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR290J"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "VGN-NS50B_L",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NS50B_L"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "VGN-SR19XN",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR19XN"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "Toshiba Satellite L355",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-                    DMI_MATCH(DMI_PRODUCT_VERSION, "Satellite L355"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_win7,
-       .ident = "ASUS K50IJ",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "K50IJ"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "Toshiba P305D",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P305D"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_vista,
-       .ident = "Toshiba NB100",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "NB100"),
-               },
-       },
-
-       /*
-        * The wireless hotkey does not work on those machines when
-        * returning true for _OSI("Windows 2012")
-        */
-       {
-       .callback = dmi_disable_osi_win8,
-       .ident = "Dell Inspiron 7737",
-       .matches = {
-                   DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-                   DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 7737"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_win8,
-       .ident = "Dell Inspiron 7537",
-       .matches = {
-                   DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-                   DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 7537"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_win8,
-       .ident = "Dell Inspiron 5437",
-       .matches = {
-                   DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-                   DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 5437"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_win8,
-       .ident = "Dell Inspiron 3437",
-       .matches = {
-                   DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-                   DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 3437"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_win8,
-       .ident = "Dell Vostro 3446",
-       .matches = {
-                   DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-                   DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 3446"),
-               },
-       },
-       {
-       .callback = dmi_disable_osi_win8,
-       .ident = "Dell Vostro 3546",
-       .matches = {
-                   DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-                   DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 3546"),
-               },
-       },
-
-       /*
-        * BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
-        * Linux ignores it, except for the machines enumerated below.
-        */
-
-       /*
-        * Without this this EEEpc exports a non working WMI interface, with
-        * this it exports a working "good old" eeepc_laptop interface, fixing
-        * both brightness control, and rfkill not working.
-        */
-       {
-       .callback = dmi_enable_osi_linux,
-       .ident = "Asus EEE PC 1015PX",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer INC."),
-                    DMI_MATCH(DMI_PRODUCT_NAME, "1015PX"),
-               },
-       },
-
-       /*
-        * Enable _OSI("Darwin") for all apple platforms.
-        */
-       {
-       .callback = dmi_enable_osi_darwin,
-       .ident = "Apple hardware",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
-               },
-       },
-       {
-       .callback = dmi_enable_osi_darwin,
-       .ident = "Apple hardware",
-       .matches = {
-                    DMI_MATCH(DMI_SYS_VENDOR, "Apple Computer, Inc."),
-               },
-       },
-
+static struct dmi_system_id acpi_rev_dmi_table[] __initdata = {
 #ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
        /*
         * DELL XPS 13 (2015) switches sound between HDA and I2S