]> git.itanic.dy.fi Git - linux-stable/commitdiff
platform/x86: asus-wmi: Do not report brightness up/down keys when also reported...
authorHans de Goede <hdegoede@redhat.com>
Sat, 21 Oct 2023 09:48:41 +0000 (11:48 +0200)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Wed, 25 Oct 2023 09:29:13 +0000 (12:29 +0300)
For a long time now the acpi_video driver reports evdev brightness up/down
key events for the brightness hotkeys on most (non ancient) laptops.

asus-wmi also reports evdev brightness up/down key events for these
keys leading to each press being reported twice and e.g. GNOME increasing
the brightness by 2 steps instead of 1 step.

Use the acpi_video_handles_brightness_key_presses() helper to detect if
acpi_video is reporting brightness key-presses and if it is then don't
report the same events also from the asus-wmi driver.

Note there is a chance that this may lead to regressions where
the brightness hotkeys stop working because they are not actually
reported by the acpi_video driver. Unfortunately the only way to
find out if this is a problem is to try.

To at least avoid regressions on old hw using the eeepc-wmi driver,
implement this as a key filter in asus-nb-wmi so that the eeepc-wmi
driver is not affected.

Reported-by: James John <me@donjajo.com>
Closes: https://lore.kernel.org/platform-driver-x86/a2c441fe-457e-44cf-a146-0ecd86b037cf@donjajo.com/
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20231021094841.7419-1-hdegoede@redhat.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/asus-nb-wmi.c

index d85d895fee89431a42d94bfdde087f8e64183547..67e4111716cadfdcdf401bee956343fee6ec2270 100644 (file)
@@ -16,6 +16,8 @@
 #include <linux/dmi.h>
 #include <linux/i8042.h>
 
+#include <acpi/video.h>
+
 #include "asus-wmi.h"
 
 #define        ASUS_NB_WMI_FILE        "asus-nb-wmi"
@@ -603,6 +605,19 @@ static const struct key_entry asus_nb_wmi_keymap[] = {
        { KE_END, 0},
 };
 
+static void asus_nb_wmi_key_filter(struct asus_wmi_driver *asus_wmi, int *code,
+                                  unsigned int *value, bool *autorelease)
+{
+       switch (*code) {
+       case ASUS_WMI_BRN_DOWN:
+       case ASUS_WMI_BRN_UP:
+               if (acpi_video_handles_brightness_key_presses())
+                       *code = ASUS_WMI_KEY_IGNORE;
+
+               break;
+       }
+}
+
 static struct asus_wmi_driver asus_nb_wmi_driver = {
        .name = ASUS_NB_WMI_FILE,
        .owner = THIS_MODULE,
@@ -611,6 +626,7 @@ static struct asus_wmi_driver asus_nb_wmi_driver = {
        .input_name = "Asus WMI hotkeys",
        .input_phys = ASUS_NB_WMI_FILE "/input0",
        .detect_quirks = asus_nb_wmi_quirks,
+       .key_filter = asus_nb_wmi_key_filter,
 };