Re: [PATCH v3 1/2] acpi: Add "acpi_osi=" for ASUS X200MA to enable, brightness keys

From: Dmitry Tunin
Date: Thu Dec 18 2014 - 08:28:32 EST


Josh,

I agree, that a better approach is to implement opregion in a right way.
But it will take some time. In the meantime this kind of quirks solve the problem.
And it is quite safe.

18.12.2014 16:25, Josh Boyer ÐÐÑÐÑ:
On Thu, Dec 18, 2014 at 7:16 AM, Dmitry Tunin <hanipouspilot@xxxxxxxxx> wrote:
Add "acpi_osi=" quirk for ASUS X200MA
More information can be found in UX302LA bugreport
https://bugzilla.kernel.org/show_bug.cgi?id=70241

X200MA is affected by th e same bug and the solution has been tested

I reported it to launchpad too
https://bugs.launchpad.net/ubuntu/bug/1400068

Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Dmitry Tunin <hanipouspilot@xxxxxxxxx>


The UX301LA models have the same setup, with 16 devices instead of 8.
I discussed this with Matthew Garrett a bit and a more ideal approach
is to actually enumerate all 16 devices between the firmware and i915
driver. The problem we have is that the intel opregion spec that
hasn't been updated since 2008 doesn't cover the additional 8 devices.
Anyway, that is being tracked here:

https://bugs.freedesktop.org/show_bug.cgi?id=81762

---
drivers/acpi/blacklist.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)

diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
index 7556e7c..f78ed08 100644
--- a/drivers/acpi/blacklist.c
+++ b/drivers/acpi/blacklist.c
@@ -162,6 +162,17 @@ static int __init dmi_disable_osi_win8(const struct
dmi_system_id *d)
acpi_osi_setup("!Windows 2012");
return 0;
}
+/*
+ * Some ASUS models firmware declares 16 devices instead of 8
+ * 'acpi_osi=' kernel parameter fixes it
+ * Without this parameters brightness keys Fn+F5 and F6 do not work
+ */
+static int __init dmi_disable_osi_all(const struct dmi_system_id *d)
+{
+ printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident);
+ acpi_osi_setup("");
+ return 0;
+}

What does this do to the rest of the function keys? Does everything
else still work as expected, including suspend and resume?

static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
{
@@ -371,6 +382,15 @@ static struct dmi_system_id acpi_osi_dmi_table[]
__initdata = {
DMI_MATCH(DMI_PRODUCT_NAME, "1015PX"),
},
},
+ /* Without this brightness keys do not work */
+ {
+ .callback = dmi_disable_osi_all,
+ .ident = "ASUSTeK COMPUTER INC. X200MA",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "X200MA"),
+ },
+ },
{}
};

--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/