]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
UBUNTU: SAUCE: (no-up) ACPI: Disable Windows 8 compatibility for some Lenovo ThinkPads
authorSeth Forshee <seth.forshee@canonical.com>
Fri, 20 Sep 2013 18:03:41 +0000 (13:03 -0500)
committerPaolo Pisati <paolo.pisati@canonical.com>
Tue, 2 Nov 2021 07:24:38 +0000 (08:24 +0100)
The AML implementation for brightness control on several ThinkPads
contains a workaround to meet a Windows 8 requirement of 101 brightness
levels [1]. The implementation is flawed, as only 16 of the brighness
values reported by _BCL affect a change in brightness. _BCM silently
discards the rest of the values. Disabling Windows 8 compatibility on
these machines reverts them to the old behavior, making _BCL only report
the 16 brightness levels which actually work. Add a quirk to do this
along with a dmi callback to disable Win8 compatibility.

[1] http://msdn.microsoft.com/en-us/library/windows/hardware/jj128256.aspx

BugLink: http://bugs.launchpad.net/bugs/1183856
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
drivers/acpi/osi.c

index 9f685380913849aa9b142a749aaec993737d23f7..6fce7fb54f6dbff3bb385e03e32378877b402c98 100644 (file)
@@ -467,6 +467,77 @@ static const struct dmi_system_id acpi_osi_dmi_table[] __initconst = {
                },
        },
 
+       /*
+        * The following Lenovo models have a broken workaround in the
+        * acpi_video backlight implementation to meet the Windows 8
+        * requirement of 101 backlight levels. Reverting to pre-Win8
+        * behavior fixes the problem.
+        */
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad L430",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L430"),
+               },
+       },
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad T430",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T430"),
+               },
+       },
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad T430s",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T430s"),
+               },
+       },
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad T530",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T530"),
+               },
+       },
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad W530",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W530"),
+               },
+       },
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad X1 Carbon",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X1 Carbon"),
+               },
+       },
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad X230",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X230"),
+               },
+       },
+       {
+       .callback = dmi_disable_osi_win8,
+       .ident = "Lenovo ThinkPad Edge E330",
+       .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Edge E330"),
+               },
+       },
+
        /*
         * BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
         * Linux ignores it, except for the machines enumerated below.