platform/x86: ideapad-laptop: Do not send KEY_TOUCHPAD* events on probe / resume
authorHans de Goede <hdegoede@redhat.com>
Thu, 17 Nov 2022 11:02:40 +0000 (12:02 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Jan 2023 10:11:42 +0000 (11:11 +0100)
[ Upstream commit f4dd8c44bb831ff885680bc77111fa39c193a93f ]

The sending of KEY_TOUCHPAD* events is causing spurious touchpad OSD
showing on resume.

Disable the sending of events on probe / resume to fix this.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Tested-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Tested-by: Maxim Mikityanskiy <maxtram95@gmail.com>
Link: https://lore.kernel.org/r/20221117110244.67811-3-hdegoede@redhat.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/platform/x86/ideapad-laptop.c

index dcb3a82..eb0b1ec 100644 (file)
@@ -1487,7 +1487,7 @@ static void ideapad_kbd_bl_exit(struct ideapad_private *priv)
 /*
  * module init/exit
  */
-static void ideapad_sync_touchpad_state(struct ideapad_private *priv)
+static void ideapad_sync_touchpad_state(struct ideapad_private *priv, bool send_events)
 {
        unsigned long value;
        unsigned char param;
@@ -1508,8 +1508,11 @@ static void ideapad_sync_touchpad_state(struct ideapad_private *priv)
         * KEY_TOUCHPAD_ON to not to get out of sync with LED
         */
        i8042_command(&param, value ? I8042_CMD_AUX_ENABLE : I8042_CMD_AUX_DISABLE);
-       ideapad_input_report(priv, value ? 67 : 66);
-       sysfs_notify(&priv->platform_device->dev.kobj, NULL, "touchpad");
+
+       if (send_events) {
+               ideapad_input_report(priv, value ? 67 : 66);
+               sysfs_notify(&priv->platform_device->dev.kobj, NULL, "touchpad");
+       }
 }
 
 static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
@@ -1550,7 +1553,7 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
                        ideapad_sync_rfk_state(priv);
                        break;
                case 5:
-                       ideapad_sync_touchpad_state(priv);
+                       ideapad_sync_touchpad_state(priv, true);
                        break;
                case 4:
                        ideapad_backlight_notify_brightness(priv);
@@ -1840,7 +1843,7 @@ static int ideapad_acpi_add(struct platform_device *pdev)
                        ideapad_register_rfkill(priv, i);
 
        ideapad_sync_rfk_state(priv);
-       ideapad_sync_touchpad_state(priv);
+       ideapad_sync_touchpad_state(priv, false);
 
        err = ideapad_dytc_profile_init(priv);
        if (err) {
@@ -1925,7 +1928,7 @@ static int ideapad_acpi_resume(struct device *dev)
        struct ideapad_private *priv = dev_get_drvdata(dev);
 
        ideapad_sync_rfk_state(priv);
-       ideapad_sync_touchpad_state(priv);
+       ideapad_sync_touchpad_state(priv, false);
 
        if (priv->dytc)
                dytc_profile_refresh(priv);