projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-3.8/upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git]
/
drivers
/
hid
/
i2c-hid
/
i2c-hid.c
diff --git
a/drivers/hid/i2c-hid/i2c-hid.c
b/drivers/hid/i2c-hid/i2c-hid.c
index 9ef222442ca0e989438ec3695ab473fc427339f3..e766b5614ef59fcae45aaeff49a98df9de3e9693 100644
(file)
--- 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];
{
struct i2c_client *client = hid->driver_data;
int report_id = buf[0];
+ int ret;
if (report_type == HID_INPUT_REPORT)
return -EINVAL;
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);
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)
}
static int i2c_hid_parse(struct hid_device *hid)
@@
-731,7
+742,7
@@
static struct hid_ll_driver i2c_hid_ll_driver = {
.hidinput_input_event = i2c_hid_hidinput_input_event,
};
.hidinput_input_event = i2c_hid_hidinput_input_event,
};
-static int
__devinit
i2c_hid_init_irq(struct i2c_client *client)
+static int i2c_hid_init_irq(struct i2c_client *client)
{
struct i2c_hid *ihid = i2c_get_clientdata(client);
int ret;
{
struct i2c_hid *ihid = i2c_get_clientdata(client);
int ret;
@@
-753,7
+764,7
@@
static int __devinit i2c_hid_init_irq(struct i2c_client *client)
return 0;
}
return 0;
}
-static int
__devinit
i2c_hid_fetch_hid_descriptor(struct i2c_hid *ihid)
+static int i2c_hid_fetch_hid_descriptor(struct i2c_hid *ihid)
{
struct i2c_client *client = ihid->client;
struct i2c_hid_desc *hdesc = &ihid->hdesc;
{
struct i2c_client *client = ihid->client;
struct i2c_hid_desc *hdesc = &ihid->hdesc;
@@
-810,8
+821,8
@@
static int __devinit i2c_hid_fetch_hid_descriptor(struct i2c_hid *ihid)
return 0;
}
return 0;
}
-static int
__devinit
i2c_hid_probe(struct i2c_client *client,
- const struct i2c_device_id *dev_id)
+static int i2c_hid_probe(struct i2c_client *client,
+
const struct i2c_device_id *dev_id)
{
int ret;
struct i2c_hid *ihid;
{
int ret;
struct i2c_hid *ihid;
@@
-902,7
+913,7
@@
err:
return ret;
}
return ret;
}
-static int
__devexit
i2c_hid_remove(struct i2c_client *client)
+static int i2c_hid_remove(struct i2c_client *client)
{
struct i2c_hid *ihid = i2c_get_clientdata(client);
struct hid_device *hid;
{
struct i2c_hid *ihid = i2c_get_clientdata(client);
struct hid_device *hid;
@@
-967,7
+978,7
@@
static struct i2c_driver i2c_hid_driver = {
},
.probe = i2c_hid_probe,
},
.probe = i2c_hid_probe,
- .remove =
__devexit_p(i2c_hid_remove)
,
+ .remove =
i2c_hid_remove
,
.id_table = i2c_hid_id_table,
};
.id_table = i2c_hid_id_table,
};