| From 81074e90f5c150ca70ab8dfcc77860cbe76f364d Mon Sep 17 00:00:00 2001 |
| From: Zhang Rui <rui.zhang@intel.com> |
| Date: Mon, 21 Dec 2009 16:13:15 +0800 |
| Subject: ACPI: disable _OSI(Windows 2009) on Asus K50IJ |
| |
| From: Zhang Rui <rui.zhang@intel.com> |
| |
| commit 81074e90f5c150ca70ab8dfcc77860cbe76f364d upstream. |
| |
| Fix a win7 compability issue on Asus K50IJ. |
| |
| Here is the _BCM method of this laptop: |
| Method (_BCM, 1, NotSerialized) |
| { |
| If (LGreaterEqual (OSFG, OSVT)) |
| { |
| If (LNotEqual (OSFG, OSW7)) |
| { |
| Store (One, BCMD) |
| Store (GCBL (Arg0), Local0) |
| Subtract (0x0F, Local0, LBTN) |
| ^^^SBRG.EC0.STBR () |
| ... |
| } |
| Else |
| { |
| DBGR (0x0B, Zero, Zero, Arg0) |
| Store (Arg0, LBTN) |
| ^^^SBRG.EC0.STBR () |
| ... |
| } |
| } |
| } |
| LBTN is used to store the index of the brightness level in the _BCL. |
| GCBL is a method that convert the percentage value to the index value. |
| If _OSI(Windows 2009) is not disabled, LBTN is stored a percentage |
| value which is surely beyond the end of _BCL package. |
| |
| http://bugzilla.kernel.org/show_bug.cgi?id=14753 |
| |
| Signed-off-by: Zhang Rui <rui.zhang@intel.com> |
| Signed-off-by: Len Brown <len.brown@intel.com> |
| Cc: maximilian attems <max@stro.at> |
| Cc: Paolo Ornati <ornati@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/acpi/blacklist.c | 14 ++++++++++++++ |
| 1 file changed, 14 insertions(+) |
| |
| --- a/drivers/acpi/blacklist.c |
| +++ b/drivers/acpi/blacklist.c |
| @@ -185,6 +185,12 @@ static int __init dmi_disable_osi_vista( |
| acpi_osi_setup("!Windows 2006"); |
| return 0; |
| } |
| +static int __init dmi_disable_osi_win7(const struct dmi_system_id *d) |
| +{ |
| + printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident); |
| + acpi_osi_setup("!Windows 2009"); |
| + return 0; |
| +} |
| |
| static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { |
| { |
| @@ -211,6 +217,14 @@ static struct dmi_system_id acpi_osi_dmi |
| DMI_MATCH(DMI_PRODUCT_NAME, "Sony VGN-SR290J"), |
| }, |
| }, |
| + { |
| + .callback = dmi_disable_osi_win7, |
| + .ident = "ASUS K50IJ", |
| + .matches = { |
| + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), |
| + DMI_MATCH(DMI_PRODUCT_NAME, "K50IJ"), |
| + }, |
| + }, |
| |
| /* |
| * BIOS invocation of _OSI(Linux) is almost always a BIOS bug. |