On Tue, 11 Aug 2020, Hans de Goede wrote: > Before this commit i2c_hid_parse() consists of the following steps: > > 1. Send power on cmd > 2. usleep_range(1000, 5000) > 3. Send reset cmd > 4. Wait for reset to complete (device interrupt, or msleep(100)) > 5. Send power on cmd > 6. Try to read HID descriptor > > Notice how there is an usleep_range(1000, 5000) after the first power-on > command, but not after the second power-on command. > > Testing has shown that at least on the BMAX Y13 laptop's i2c-hid touchpad, > not having a delay after the second power-on command causes the HID > descriptor to read as all zeros. > > In case we hit this on other devices too, the descriptor being all zeros > can be recognized by the following message being logged many, many times: > > hid-generic 0018:0911:5288.0002: unknown main item tag 0x0 > > At the same time as the BMAX Y13's touchpad issue was debugged, > Kai-Heng was working on debugging some issues with Goodix i2c-hid > touchpads. It turns out that these need a delay after a PWR_ON command > too, otherwise they stop working after a suspend/resume cycle. > According to Goodix a delay of minimal 60ms is needed. > > Having multiple cases where we need a delay after sending the power-on > command, seems to indicate that we should always sleep after the power-on > command. > > This commit fixes the mentioned issues by moving the existing 1ms sleep to > the i2c_hid_set_power() function and changing it to a 60ms sleep. Applied, thanks. -- Jiri Kosina SUSE Labs