Here is v3 of my i2c-hid series reworking how the i2c-hid-core waits for reset to complete. Further testing on the laptop for which I2C_HID_QUIRK_NO_IRQ_AFTER_RESET was first introduced, shows that reading the report descriptor before waiting for the reset helps with the missing reset IRQ, but it only helps some of the time. About 50% of the time the reset still does not get acked properly. Still I believe that it would be good to move forward with this series: 1. Reading descriptors before waiting for reset does make the reset ack IRQ happen some of the time, so it does seem to improve things somewhat and maybe it does fully fix the issue on some other models 2. This series should reduce the probe time of the i2c-hid driver Changes in v3: - Use "else if" to only wait for reset timeout when the I2C_HID_QUIRK_NO_IRQ_AFTER_RESET quirk is not set - Use goto abort_reset instead of return on i2c_hid_start_hwreset() failure, so that the mutex gets properly unlocked Changes in v2: - Drop the patch dropping the I2C_HID_QUIRK_NO_IRQ_AFTER_RESET quirks - Add a patch changing a missing reset ack from an error into a warning - Move the mutex_[un]lock(&ihid->reset_lock) calls out of i2c_hid_start_hwreset() / i2c_hid_finish_hwreset() and into their callers, as suggested by Douglas Anderson Regards, Hans Hans de Goede (7): HID: i2c-hid: Fold i2c_hid_execute_reset() into i2c_hid_hwreset() HID: i2c-hid: Split i2c_hid_hwreset() in start() and finish() functions HID: i2c-hid: Switch i2c_hid_parse() to goto style error handling HID: i2c-hid: Move i2c_hid_finish_hwreset() to after reading the report-descriptor HID: i2c-hid: Turn missing reset ack into a warning HID: i2c-hid: Remove I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV quirk HID: i2c-hid: Renumber I2C_HID_QUIRK_ defines drivers/hid/i2c-hid/i2c-hid-core.c | 137 +++++++++++++++-------------- 1 file changed, 70 insertions(+), 67 deletions(-) -- 2.41.0