diff options
| -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 9ef222442ca..5774ebf4298 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,  {  	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)  |