Skip to content

Commit

Permalink
HID: i2c-hid: fix i2c_hid_output_raw_report
Browse files Browse the repository at this point in the history
i2c_hid_output_raw_report is used by hidraw to forward set_report requests.
The current implementation of i2c_hid_set_report needs to take the
report_id as an argument. The report_id is stored in the first byte
of the buffer in argument of i2c_hid_output_raw_report.

Not removing the report_id from the given buffer adds this byte 2 times
in the command, leading to a non working command.

Reported-by: Andrew Duggan <aduggan@synaptics.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
bentiss authored and Jiri Kosina committed Jan 31, 2013
1 parent 320cde1 commit c284979
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion drivers/hid/i2c-hid/i2c-hid.c
Expand Up @@ -540,13 +540,24 @@ static int i2c_hid_output_raw_report(struct hid_device *hid, __u8 *buf,
{
struct i2c_client *client = hid->driver_data;
int report_id = buf[0];
int ret;

if (report_type == HID_INPUT_REPORT)
return -EINVAL;

return i2c_hid_set_report(client,
if (report_id) {
buf++;
count--;
}

ret = i2c_hid_set_report(client,
report_type == HID_FEATURE_REPORT ? 0x03 : 0x02,
report_id, buf, count);

if (report_id && ret >= 0)
ret++; /* add report_id to the number of transfered bytes */

return ret;
}

static int i2c_hid_parse(struct hid_device *hid)
Expand Down

0 comments on commit c284979

Please sign in to comment.