]> git.itanic.dy.fi Git - linux-stable/commitdiff
HID: i2c-hid: Turn missing reset ack into a warning
authorHans de Goede <hdegoede@redhat.com>
Sat, 2 Dec 2023 22:46:12 +0000 (23:46 +0100)
committerJiri Kosina <jkosina@suse.com>
Wed, 6 Dec 2023 10:48:40 +0000 (11:48 +0100)
On all i2c-hid devices seen sofar the reset-ack either works, or the hw is
somehow buggy and does not (always) ack the reset properly, yet it still
works fine.

Lower the very long reset timeout to 1 second which should be plenty
and change the reset not getting acked from an error into a warning.

This results in a bit cleaner code and avoids the need to add more
I2C_HID_QUIRK_NO_IRQ_AFTER_RESET quirks in the future.

Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/i2c-hid/i2c-hid-core.c

index 400c15a180b5731a60b4a90a04a1bec7adbcb2fc..88a203e920dec2732d72e91deed9f1607708b8b0 100644 (file)
@@ -479,9 +479,9 @@ static int i2c_hid_finish_hwreset(struct i2c_hid *ihid)
                clear_bit(I2C_HID_RESET_PENDING, &ihid->flags);
        } else if (!wait_event_timeout(ihid->wait,
                                       !test_bit(I2C_HID_RESET_PENDING, &ihid->flags),
-                                      msecs_to_jiffies(5000))) {
-               ret = -ENODATA;
-               goto err_clear_reset;
+                                      msecs_to_jiffies(1000))) {
+               dev_warn(&ihid->client->dev, "device did not ack reset within 1000 ms\n");
+               clear_bit(I2C_HID_RESET_PENDING, &ihid->flags);
        }
        i2c_hid_dbg(ihid, "%s: finished.\n", __func__);
 
@@ -490,11 +490,6 @@ static int i2c_hid_finish_hwreset(struct i2c_hid *ihid)
                ret = i2c_hid_set_power(ihid, I2C_HID_PWR_ON);
 
        return ret;
-
-err_clear_reset:
-       clear_bit(I2C_HID_RESET_PENDING, &ihid->flags);
-       i2c_hid_set_power(ihid, I2C_HID_PWR_SLEEP);
-       return ret;
 }
 
 static void i2c_hid_get_input(struct i2c_hid *ihid)