Revert "platform/x86: asus-wmi: Support WMI event queue"
authorArmin Wolf <W_Armin@gmx.de>
Mon, 19 Feb 2024 11:59:19 +0000 (12:59 +0100)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 27 Feb 2024 12:44:38 +0000 (14:44 +0200)
This reverts commit 1a373d15e283937b51eaf5debf4fc31474c31436.

The WMI core now takes care of draining the event queue if asus-wmi
is not loaded, so the hacky event queue handling code is not needed
anymore.

Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Link: https://lore.kernel.org/r/20240219115919.16526-6-W_Armin@gmx.de
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-wmi.c

index 21dee425ea6fc6d5beb8616a8a521b720d109ea7..2865af89e95c233b4b35df0ad260bc409ac3c9a2 100644 (file)
@@ -101,13 +101,6 @@ module_param(fnlock_default, bool, 0444);
 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI  0x9c31
 
 #define ASUS_ACPI_UID_ASUSWMI          "ASUSWMI"
-#define ASUS_ACPI_UID_ATK              "ATK"
-
-#define WMI_EVENT_QUEUE_SIZE           0x10
-#define WMI_EVENT_QUEUE_END            0x1
-#define WMI_EVENT_MASK                 0xFFFF
-/* The WMI hotkey event value is always the same. */
-#define WMI_EVENT_VALUE_ATK            0xFF
 
 #define WMI_EVENT_MASK                 0xFFFF
 
@@ -219,7 +212,6 @@ struct asus_wmi {
        int dsts_id;
        int spec;
        int sfun;
-       bool wmi_event_queue;
 
        struct input_dev *inputdev;
        struct backlight_device *backlight_device;
@@ -4019,50 +4011,14 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
 static void asus_wmi_notify(u32 value, void *context)
 {
        struct asus_wmi *asus = context;
-       int code;
-       int i;
-
-       for (i = 0; i < WMI_EVENT_QUEUE_SIZE + 1; i++) {
-               code = asus_wmi_get_event_code(value);
-               if (code < 0) {
-                       pr_warn("Failed to get notify code: %d\n", code);
-                       return;
-               }
-
-               if (code == WMI_EVENT_QUEUE_END || code == WMI_EVENT_MASK)
-                       return;
-
-               asus_wmi_handle_event_code(code, asus);
-
-               /*
-                * Double check that queue is present:
-                * ATK (with queue) uses 0xff, ASUSWMI (without) 0xd2.
-                */
-               if (!asus->wmi_event_queue || value != WMI_EVENT_VALUE_ATK)
-                       return;
-       }
+       int code = asus_wmi_get_event_code(value);
 
-       pr_warn("Failed to process event queue, last code: 0x%x\n", code);
-}
-
-static int asus_wmi_notify_queue_flush(struct asus_wmi *asus)
-{
-       int code;
-       int i;
-
-       for (i = 0; i < WMI_EVENT_QUEUE_SIZE + 1; i++) {
-               code = asus_wmi_get_event_code(WMI_EVENT_VALUE_ATK);
-               if (code < 0) {
-                       pr_warn("Failed to get event during flush: %d\n", code);
-                       return code;
-               }
-
-               if (code == WMI_EVENT_QUEUE_END || code == WMI_EVENT_MASK)
-                       return 0;
+       if (code < 0) {
+               pr_warn("Failed to get notify code: %d\n", code);
+               return;
        }
 
-       pr_warn("Failed to flush event queue\n");
-       return -EIO;
+       asus_wmi_handle_event_code(code, asus);
 }
 
 /* Sysfs **********************************************************************/
@@ -4302,23 +4258,6 @@ static int asus_wmi_platform_init(struct asus_wmi *asus)
                asus->dsts_id = ASUS_WMI_METHODID_DSTS;
        }
 
-       /*
-        * Some devices can have multiple event codes stored in a queue before
-        * the module load if it was unloaded intermittently after calling
-        * the INIT method (enables event handling). The WMI notify handler is
-        * expected to retrieve all event codes until a retrieved code equals
-        * queue end marker (One or Ones). Old codes are flushed from the queue
-        * upon module load. Not enabling this when it should be has minimal
-        * visible impact so fall back if anything goes wrong.
-        */
-       wmi_uid = wmi_get_acpi_device_uid(asus->driver->event_guid);
-       if (wmi_uid && !strcmp(wmi_uid, ASUS_ACPI_UID_ATK)) {
-               dev_info(dev, "Detected ATK, enable event queue\n");
-
-               if (!asus_wmi_notify_queue_flush(asus))
-                       asus->wmi_event_queue = true;
-       }
-
        /* CWAP allow to define the behavior of the Fn+F2 key,
         * this method doesn't seems to be present on Eee PCs */
        if (asus->driver->quirks->wapf >= 0)