for-linus-2023060501
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIVAwUAZH5T6aZi849r7WBJAQIf8Q//YU0rp1nx9eWDEo5qMpHkoErtpLNmy89q LgMyKVgwIJYmMwcCWIpSW86OykI+xbMmgKzNTdaO2MeShXhgoT0OzmHHPR/88k2R rTQIX1+E9Qy32kEmMeQE5xTqmtlCVFTT3x2EQoPAWf3MTCPwbRcS/tc3T0qRy7lR sYVl9zB2gl+7Ud2gdIAfFA2GL3hYAXnQ11xE+6slEIyk7Dd1m8jg7rV3bMbnwLyB 9QRookboZ+ddPvISsaJEOjr19P0jAj+ESEWBU8KDzUdo5lQ4L9FjCP0GbKBUFUGC 5I9B3ID9xF0SHZiZ3huuDvZ/AHd2D1/JaMkb31b6Lk/e3xr8CEjdA6AWyLCjDxCU 0EdPfbyoS4a1nbrZ3H+4eoIsyaMtWx3MaIjStN9PoVcNp44WRRA4Gbdj5n2DJrdT jAS8GzM8wH89V3kqrDetKuk1TKyeiv+KE1RqOfkYikFbNaZHF3OBlVOGM8oD1LVm ctCEVfhN/W2Yk84NO8yWEvgkKvraxpI2BTBGRHh+FK4+aNXogXcZjWc0u0fXZOl5 6m45+6oA4ucWkBG1MVrov2fYk8wdJkrZUL6g17dxw23sUGFylnTqc7dlQMwm9kan VNrtkkf8O8BrA70aGQyhYl3ftbt2zSsjqcppzW5KwEIifWq3fn0FtjynCZT3tiVk aTcb82+nvTo= =AmtQ -----END PGP SIGNATURE----- Merge tag 'for-linus-2023060501' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid Pull HID fix from Jiri Kosina: - Final, confirmed fix for regression causing some devices connected via Logitech HID++ Unifying receiver take too long to initialize (Benjamin Tissoires) * tag 'for-linus-2023060501' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid: HID: hidpp: terminate retry loop on success
This commit is contained in:
commit
fa56e0e44f
|
@ -286,7 +286,7 @@ static int hidpp_send_message_sync(struct hidpp_device *hidpp,
|
|||
struct hidpp_report *message,
|
||||
struct hidpp_report *response)
|
||||
{
|
||||
int ret;
|
||||
int ret = -1;
|
||||
int max_retries = 3;
|
||||
|
||||
mutex_lock(&hidpp->send_mutex);
|
||||
|
@ -300,13 +300,13 @@ static int hidpp_send_message_sync(struct hidpp_device *hidpp,
|
|||
*/
|
||||
*response = *message;
|
||||
|
||||
for (; max_retries != 0; max_retries--) {
|
||||
for (; max_retries != 0 && ret; max_retries--) {
|
||||
ret = __hidpp_send_report(hidpp->hid_dev, message);
|
||||
|
||||
if (ret) {
|
||||
dbg_hid("__hidpp_send_report returned err: %d\n", ret);
|
||||
memset(response, 0, sizeof(struct hidpp_report));
|
||||
goto exit;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!wait_event_timeout(hidpp->wait, hidpp->answer_available,
|
||||
|
@ -314,14 +314,14 @@ static int hidpp_send_message_sync(struct hidpp_device *hidpp,
|
|||
dbg_hid("%s:timeout waiting for response\n", __func__);
|
||||
memset(response, 0, sizeof(struct hidpp_report));
|
||||
ret = -ETIMEDOUT;
|
||||
goto exit;
|
||||
break;
|
||||
}
|
||||
|
||||
if (response->report_id == REPORT_ID_HIDPP_SHORT &&
|
||||
response->rap.sub_id == HIDPP_ERROR) {
|
||||
ret = response->rap.params[1];
|
||||
dbg_hid("%s:got hidpp error %02X\n", __func__, ret);
|
||||
goto exit;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((response->report_id == REPORT_ID_HIDPP_LONG ||
|
||||
|
@ -330,13 +330,12 @@ static int hidpp_send_message_sync(struct hidpp_device *hidpp,
|
|||
ret = response->fap.params[1];
|
||||
if (ret != HIDPP20_ERROR_BUSY) {
|
||||
dbg_hid("%s:got hidpp 2.0 error %02X\n", __func__, ret);
|
||||
goto exit;
|
||||
break;
|
||||
}
|
||||
dbg_hid("%s:got busy hidpp 2.0 error %02X, retrying\n", __func__, ret);
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
mutex_unlock(&hidpp->send_mutex);
|
||||
return ret;
|
||||
|
||||
|
|
Loading…
Reference in New Issue