|
@@ -508,66 +508,6 @@ static int i2c_hid_get_report_length(struct hid_report *report)
|
|
|
report->device->report_enum[report->type].numbered + 2;
|
|
|
}
|
|
|
|
|
|
-static void i2c_hid_init_report(struct hid_report *report, u8 *buffer,
|
|
|
- size_t bufsize)
|
|
|
-{
|
|
|
- struct hid_device *hid = report->device;
|
|
|
- struct i2c_client *client = hid->driver_data;
|
|
|
- struct i2c_hid *ihid = i2c_get_clientdata(client);
|
|
|
- unsigned int size, ret_size;
|
|
|
-
|
|
|
- size = i2c_hid_get_report_length(report);
|
|
|
- if (i2c_hid_get_report(client,
|
|
|
- report->type == HID_FEATURE_REPORT ? 0x03 : 0x01,
|
|
|
- report->id, buffer, size))
|
|
|
- return;
|
|
|
-
|
|
|
- i2c_hid_dbg(ihid, "report (len=%d): %*ph\n", size, size, buffer);
|
|
|
-
|
|
|
- ret_size = buffer[0] | (buffer[1] << 8);
|
|
|
-
|
|
|
- if (ret_size != size) {
|
|
|
- dev_err(&client->dev, "error in %s size:%d / ret_size:%d\n",
|
|
|
- __func__, size, ret_size);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- /* hid->driver_lock is held as we are in probe function,
|
|
|
- * we just need to setup the input fields, so using
|
|
|
- * hid_report_raw_event is safe. */
|
|
|
- hid_report_raw_event(hid, report->type, buffer + 2, size - 2, 1);
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * Initialize all reports
|
|
|
- */
|
|
|
-static void i2c_hid_init_reports(struct hid_device *hid)
|
|
|
-{
|
|
|
- struct hid_report *report;
|
|
|
- struct i2c_client *client = hid->driver_data;
|
|
|
- struct i2c_hid *ihid = i2c_get_clientdata(client);
|
|
|
- u8 *inbuf = kzalloc(ihid->bufsize, GFP_KERNEL);
|
|
|
-
|
|
|
- if (!inbuf) {
|
|
|
- dev_err(&client->dev, "can not retrieve initial reports\n");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- /*
|
|
|
- * The device must be powered on while we fetch initial reports
|
|
|
- * from it.
|
|
|
- */
|
|
|
- pm_runtime_get_sync(&client->dev);
|
|
|
-
|
|
|
- list_for_each_entry(report,
|
|
|
- &hid->report_enum[HID_FEATURE_REPORT].report_list, list)
|
|
|
- i2c_hid_init_report(report, inbuf, ihid->bufsize);
|
|
|
-
|
|
|
- pm_runtime_put(&client->dev);
|
|
|
-
|
|
|
- kfree(inbuf);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Traverse the supplied list of reports and find the longest
|
|
|
*/
|
|
@@ -789,9 +729,6 @@ static int i2c_hid_start(struct hid_device *hid)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- if (!(hid->quirks & HID_QUIRK_NO_INIT_REPORTS))
|
|
|
- i2c_hid_init_reports(hid);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|