FAILED: patch "[PATCH] platform/x86: ideapad-laptop: Disable touchpad_switch for" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d69cd7eea93eb59a93061beeb43e4f5e19afc4ea Mon Sep 17 00:00:00 2001
From: Jiaxun Yang <[email protected]>
Date: Thu, 7 Jan 2021 22:44:38 +0800
Subject: [PATCH] platform/x86: ideapad-laptop: Disable touchpad_switch for
ELAN0634
Newer ideapads (e.g.: Yoga 14s, 720S 14) come with ELAN0634 touchpad do not use EC to switch touchpad.
Reading VPCCMD_R_TOUCHPAD will return zero thus touchpad may be blocked unexpectedly.
Writing VPCCMD_W_TOUCHPAD may cause a spurious key press.
Add has_touchpad_switch to workaround these machines.
--
v2: Specify touchpad to ELAN0634
v3: Stupid missing ! in v2
v4: Correct acpi_dev_present usage (Hans)
drivers/platform/x86/ideapad-laptop.c +14 -1
@@ -92,6 +92,7 @@ struct ideapad_private {struct dentry *debug;unsigned long cfg;bool has_hw_rfkill_switch; +bool has_touchpad_switch;const char *fnesc_guid; };
@@ -535,7 +536,9 @@ static umode_t ideapad_is_visible(struct kobject *kobj, }else if (attr == &dev_attr_fn_lock.attr) { supported =acpi_has_method (priv->adev->handle,"HALS" ) &&acpi_has_method (priv->adev->handle,"SALS" ); - }else + }else if (attr == &dev_attr_touchpad.attr) + supported = priv->has_touchpad_switch; +else supported = true;return supported ? attr->mode :0 ;
@@ -867,6 +870,9 @@ static void ideapad_sync_touchpad_state(struct ideapad_private *priv) {unsigned long value; +if (!priv->has_touchpad_switch) +return ; +/* Without reading from EC touchpad LED doesn't switch state */ if (!read_ec_data (priv->adev->handle,VPCCMD_R_TOUCHPAD , &value)) {/* Some IdeaPads don't really turn off touchpad - they only
@@ -989,6 +995,9 @@ static int ideapad_acpi_add(struct platform_device *pdev) priv->platform_device = pdev; priv->has_hw_rfkill_switch =dmi_check_system (hw_rfkill_list); +/* Most ideapads with ELAN0634 touchpad don't use EC touchpad switch */ + priv->has_touchpad_switch = !acpi_dev_present ("ELAN0634" ,NULL ,-1 ); + ret =ideapad_sysfs_init (priv);if (ret)return ret;
@@ -1006,6 +1015,10 @@ static int ideapad_acpi_add(struct platform_device *pdev)if (!priv->has_hw_rfkill_switch)write_ec_cmd (priv->adev->handle,VPCCMD_W_RF ,1 ); +/* The same for Touchpad */ +if (!priv->has_touchpad_switch) +write_ec_cmd (priv->adev->handle,VPCCMD_W_TOUCHPAD ,1 ); +for (i =0 ; i <IDEAPAD_RFKILL_DEV_NUM ; i++)if (test_bit (ideapad_rfk_data[i].cfgbit, &priv->cfg))ideapad_register_rfkill (priv, i);