HID: i2c-hid: Remove RESEND_REPORT_DESCR quirk and its handling
authorHans de Goede <hdegoede@redhat.com>
Wed, 19 Sep 2018 18:52:45 +0000 (20:52 +0200)
committerJiri Kosina <jkosina@suse.cz>
Mon, 24 Sep 2018 09:15:01 +0000 (11:15 +0200)
Commit 52cf93e63ee6 ("HID: i2c-hid: Don't reset device upon system resume")
removes the need for the RESEND_REPORT_DESCR quirk for Raydium devices, but
kept it for the SIS device id 10FB touchscreens, as the author of that
commit could not determine if the quirk is still necessary there.

I've tested suspend/resume on a Toshiba Click Mini L9W-B which is the
device for which this quirk was added in the first place and with the
"Don't reset device upon system resume" fix the quirk is no longer
necessary, so this commit removes it.

Note even better I also had some other devices with SIS touchscreens which
suspend/resume issues, where the RESEND_REPORT_DESCR quirk did not help.

I've also tested these devices with the "Don't reset device upon system
resume" fix and I'm happy to report that that fix also fixes touchscreen
resume on the following devices:

Asus T100HA
Asus T200TA
Peaq C1010

Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-ids.h
drivers/hid/i2c-hid/i2c-hid.c

index 5146ee029db4bd6c35bb3a15cdd25b6caf54c64e..bc49909aba8e664b6675fcac13921128c661dce9 100644 (file)
 #define USB_DEVICE_ID_SIS817_TOUCH     0x0817
 #define USB_DEVICE_ID_SIS_TS           0x1013
 #define USB_DEVICE_ID_SIS1030_TOUCH    0x1030
-#define USB_DEVICE_ID_SIS10FB_TOUCH    0x10fb
 
 #define USB_VENDOR_ID_SKYCABLE                 0x1223
 #define        USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER       0x3F07
index a8610f5bf6f519752df35cfe0502ca9fc8b25381..4e3592e7a3f7217f86fe0fba59d3ea73551dcab2 100644 (file)
@@ -47,8 +47,7 @@
 /* quirks to control the device */
 #define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV       BIT(0)
 #define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET       BIT(1)
-#define I2C_HID_QUIRK_RESEND_REPORT_DESCR      BIT(2)
-#define I2C_HID_QUIRK_NO_RUNTIME_PM            BIT(3)
+#define I2C_HID_QUIRK_NO_RUNTIME_PM            BIT(2)
 
 /* flags */
 #define I2C_HID_STARTED                0
@@ -172,8 +171,6 @@ static const struct i2c_hid_quirks {
        { I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288,
                I2C_HID_QUIRK_NO_IRQ_AFTER_RESET |
                I2C_HID_QUIRK_NO_RUNTIME_PM },
-       { USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS10FB_TOUCH,
-               I2C_HID_QUIRK_RESEND_REPORT_DESCR },
        { 0, 0 }
 };
 
@@ -1241,22 +1238,13 @@ static int i2c_hid_resume(struct device *dev)
 
        /* Instead of resetting device, simply powers the device on. This
         * solves "incomplete reports" on Raydium devices 2386:3118 and
-        * 2386:4B33
+        * 2386:4B33 and fixes various SIS touchscreens no longer sending
+        * data after a suspend/resume.
         */
        ret = i2c_hid_set_power(client, I2C_HID_PWR_ON);
        if (ret)
                return ret;
 
-       /* Some devices need to re-send report descr cmd
-        * after resume, after this it will be back normal.
-        * otherwise it issues too many incomplete reports.
-        */
-       if (ihid->quirks & I2C_HID_QUIRK_RESEND_REPORT_DESCR) {
-               ret = i2c_hid_command(client, &hid_report_descr_cmd, NULL, 0);
-               if (ret)
-                       return ret;
-       }
-
        if (hid->driver && hid->driver->reset_resume) {
                ret = hid->driver->reset_resume(hid);
                return ret;