diff options
author | Zhang Rui <rui.zhang@intel.com> | 2009-12-21 03:13:15 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-12-22 02:39:24 -0500 |
commit | 81074e90f5c150ca70ab8dfcc77860cbe76f364d (patch) | |
tree | 607fd815382a44b6876ebaa9840f644764175f39 /drivers/acpi/blacklist.c | |
parent | 22763c5cf3690a681551162c15d34d935308c8d7 (diff) |
ACPI: disable _OSI(Windows 2009) on Asus K50IJ
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>
Diffstat (limited to 'drivers/acpi/blacklist.c')
-rw-r--r-- | drivers/acpi/blacklist.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c index 23e5a0519af5..2815df66f6f7 100644 --- a/drivers/acpi/blacklist.c +++ b/drivers/acpi/blacklist.c | |||
@@ -185,6 +185,12 @@ static int __init dmi_disable_osi_vista(const struct dmi_system_id *d) | |||
185 | acpi_osi_setup("!Windows 2006"); | 185 | acpi_osi_setup("!Windows 2006"); |
186 | return 0; | 186 | return 0; |
187 | } | 187 | } |
188 | static int __init dmi_disable_osi_win7(const struct dmi_system_id *d) | ||
189 | { | ||
190 | printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident); | ||
191 | acpi_osi_setup("!Windows 2009"); | ||
192 | return 0; | ||
193 | } | ||
188 | 194 | ||
189 | static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | 195 | static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { |
190 | { | 196 | { |
@@ -211,6 +217,14 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | |||
211 | DMI_MATCH(DMI_PRODUCT_NAME, "Sony VGN-SR290J"), | 217 | DMI_MATCH(DMI_PRODUCT_NAME, "Sony VGN-SR290J"), |
212 | }, | 218 | }, |
213 | }, | 219 | }, |
220 | { | ||
221 | .callback = dmi_disable_osi_win7, | ||
222 | .ident = "ASUS K50IJ", | ||
223 | .matches = { | ||
224 | DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), | ||
225 | DMI_MATCH(DMI_PRODUCT_NAME, "K50IJ"), | ||
226 | }, | ||
227 | }, | ||
214 | 228 | ||
215 | /* | 229 | /* |
216 | * BIOS invocation of _OSI(Linux) is almost always a BIOS bug. | 230 | * BIOS invocation of _OSI(Linux) is almost always a BIOS bug. |