|
|
@@ -725,13 +725,16 @@ static int hidpp_root_get_feature(struct hidpp_device *hidpp, u16 feature,
|
|
|
|
|
|
static int hidpp_root_get_protocol_version(struct hidpp_device *hidpp)
|
|
|
{
|
|
|
+ const u8 ping_byte = 0x5a;
|
|
|
+ u8 ping_data[3] = { 0, 0, ping_byte };
|
|
|
struct hidpp_report response;
|
|
|
int ret;
|
|
|
|
|
|
- ret = hidpp_send_fap_command_sync(hidpp,
|
|
|
+ ret = hidpp_send_rap_command_sync(hidpp,
|
|
|
+ REPORT_ID_HIDPP_SHORT,
|
|
|
HIDPP_PAGE_ROOT_IDX,
|
|
|
CMD_ROOT_GET_PROTOCOL_VERSION,
|
|
|
- NULL, 0, &response);
|
|
|
+ ping_data, sizeof(ping_data), &response);
|
|
|
|
|
|
if (ret == HIDPP_ERROR_INVALID_SUBID) {
|
|
|
hidpp->protocol_major = 1;
|
|
|
@@ -751,8 +754,14 @@ static int hidpp_root_get_protocol_version(struct hidpp_device *hidpp)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- hidpp->protocol_major = response.fap.params[0];
|
|
|
- hidpp->protocol_minor = response.fap.params[1];
|
|
|
+ if (response.rap.params[2] != ping_byte) {
|
|
|
+ hid_err(hidpp->hid_dev, "%s: ping mismatch 0x%02x != 0x%02x\n",
|
|
|
+ __func__, response.rap.params[2], ping_byte);
|
|
|
+ return -EPROTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ hidpp->protocol_major = response.rap.params[0];
|
|
|
+ hidpp->protocol_minor = response.rap.params[1];
|
|
|
|
|
|
return ret;
|
|
|
}
|