diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/hid/i2c-hid/i2c-hid.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c index 9ef222442ca0..5774ebf4298c 100644 --- a/drivers/hid/i2c-hid/i2c-hid.c +++ b/drivers/hid/i2c-hid/i2c-hid.c | |||
| @@ -540,13 +540,24 @@ static int i2c_hid_output_raw_report(struct hid_device *hid, __u8 *buf, | |||
| 540 | { | 540 | { |
| 541 | struct i2c_client *client = hid->driver_data; | 541 | struct i2c_client *client = hid->driver_data; |
| 542 | int report_id = buf[0]; | 542 | int report_id = buf[0]; |
| 543 | int ret; | ||
| 543 | 544 | ||
| 544 | if (report_type == HID_INPUT_REPORT) | 545 | if (report_type == HID_INPUT_REPORT) |
| 545 | return -EINVAL; | 546 | return -EINVAL; |
| 546 | 547 | ||
| 547 | return i2c_hid_set_report(client, | 548 | if (report_id) { |
| 549 | buf++; | ||
| 550 | count--; | ||
| 551 | } | ||
| 552 | |||
| 553 | ret = i2c_hid_set_report(client, | ||
| 548 | report_type == HID_FEATURE_REPORT ? 0x03 : 0x02, | 554 | report_type == HID_FEATURE_REPORT ? 0x03 : 0x02, |
| 549 | report_id, buf, count); | 555 | report_id, buf, count); |
| 556 | |||
| 557 | if (report_id && ret >= 0) | ||
| 558 | ret++; /* add report_id to the number of transfered bytes */ | ||
| 559 | |||
| 560 | return ret; | ||
| 550 | } | 561 | } |
| 551 | 562 | ||
| 552 | static int i2c_hid_parse(struct hid_device *hid) | 563 | static int i2c_hid_parse(struct hid_device *hid) |
