Revert "Input: elantech – enable SMBus on new (2018+) systems" [Linux 4.19.71]

This Linux kernel change "Revert “Input: elantech – enable SMBus on new (2018+) systems”" is included in the Linux 4.19.71 release. This change is authored by Benjamin Tissoires <benjamin.tissoires [at] redhat.com> on Fri Sep 6 10:53:45 2019 +0200. The commit for this change in Linux stable tree is 72168ae (patch).

Revert "Input: elantech - enable SMBus on new (2018+) systems"

This reverts commit 3d180fe5cd7625b67e0879ffa1f6ae1f09385485 which is
commit 883a2a80f79ca5c0c105605fafabd1f3df99b34c upstream.

This patch depends on an other series:
https://patchwork.kernel.org/project/linux-input/list/?series=122327&state=%2A&archive=both

It was a mistake to backport it in the v5.2 branch, as there
is a high chance we encounter a touchpad that needs the series
above.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=204733
Link: https://bugzilla.kernel.org/show_bug.cgi?id=204771
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

There are 54 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/input/mouse/elantech.c | 54 +++++++++++++++++++++++-------------------
 1 file changed, 29 insertions(+), 25 deletions(-)

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index eb9b9de..530142b 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1810,30 +1810,6 @@ static int elantech_create_smbus(struct psmouse *psmouse,
                  leave_breadcrumbs);
 }

-static bool elantech_use_host_notify(struct psmouse *psmouse,
-                    struct elantech_device_info *info)
-{
-   if (ETP_NEW_IC_SMBUS_HOST_NOTIFY(info->fw_version))
-       return true;
-
-   switch (info->bus) {
-   case ETP_BUS_PS2_ONLY:
-       /* expected case */
-       break;
-   case ETP_BUS_SMB_HST_NTFY_ONLY:
-   case ETP_BUS_PS2_SMB_HST_NTFY:
-       /* SMbus implementation is stable since 2018 */
-       if (dmi_get_bios_year() >= 2018)
-           return true;
-   default:
-       psmouse_dbg(psmouse,
-               "Ignoring SMBus bus provider %d\n", info->bus);
-       break;
-   }
-
-   return false;
-}
-
 /**
  * elantech_setup_smbus - called once the PS/2 devices are enumerated
  * and decides to instantiate a SMBus InterTouch device.
@@ -1853,7 +1829,7 @@ static int elantech_setup_smbus(struct psmouse *psmouse,
         * i2c_blacklist_pnp_ids.
         * Old ICs are up to the user to decide.
         */
-       if (!elantech_use_host_notify(psmouse, info) ||
+       if (!ETP_NEW_IC_SMBUS_HOST_NOTIFY(info->fw_version) ||
            psmouse_matches_pnp_id(psmouse, i2c_blacklist_pnp_ids))
            return -ENXIO;
    }
@@ -1873,6 +1849,34 @@ static int elantech_setup_smbus(struct psmouse *psmouse,
    return 0;
 }

+static bool elantech_use_host_notify(struct psmouse *psmouse,
+                    struct elantech_device_info *info)
+{
+   if (ETP_NEW_IC_SMBUS_HOST_NOTIFY(info->fw_version))
+       return true;
+
+   switch (info->bus) {
+   case ETP_BUS_PS2_ONLY:
+       /* expected case */
+       break;
+   case ETP_BUS_SMB_ALERT_ONLY:
+       /* fall-through  */
+   case ETP_BUS_PS2_SMB_ALERT:
+       psmouse_dbg(psmouse, "Ignoring SMBus provider through alert protocol.\n");
+       break;
+   case ETP_BUS_SMB_HST_NTFY_ONLY:
+       /* fall-through  */
+   case ETP_BUS_PS2_SMB_HST_NTFY:
+       return true;
+   default:
+       psmouse_dbg(psmouse,
+               "Ignoring SMBus bus provider %d.\n",
+               info->bus);
+   }
+
+   return false;
+}
+
 int elantech_init_smbus(struct psmouse *psmouse)
 {
    struct elantech_device_info info;

Leave a Reply

Your email address will not be published. Required fields are marked *