Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-3.9/upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid

Pull HID fix from Jiri Kosina:
"Bugfix for a long-standing bug in logitech-dj driver causing all sorts
of random initialization problems, finally debugged by Benjamin
Tissoires with help of Bob Bowles."

* 'for-3.9/upstream-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid:
HID: logitech-dj: do not directly call hid_output_raw_report() during probe

+14 -8
+14 -8
drivers/hid/hid-logitech-dj.c
··· 459 459 struct dj_report *dj_report) 460 460 { 461 461 struct hid_device *hdev = djrcv_dev->hdev; 462 - int sent_bytes; 462 + struct hid_report *report; 463 + struct hid_report_enum *output_report_enum; 464 + u8 *data = (u8 *)(&dj_report->device_index); 465 + int i; 463 466 464 - if (!hdev->hid_output_raw_report) { 465 - dev_err(&hdev->dev, "%s:" 466 - "hid_output_raw_report is null\n", __func__); 467 + output_report_enum = &hdev->report_enum[HID_OUTPUT_REPORT]; 468 + report = output_report_enum->report_id_hash[REPORT_ID_DJ_SHORT]; 469 + 470 + if (!report) { 471 + dev_err(&hdev->dev, "%s: unable to find dj report\n", __func__); 467 472 return -ENODEV; 468 473 } 469 474 470 - sent_bytes = hdev->hid_output_raw_report(hdev, (u8 *) dj_report, 471 - sizeof(struct dj_report), 472 - HID_OUTPUT_REPORT); 475 + for (i = 0; i < report->field[0]->report_count; i++) 476 + report->field[0]->value[i] = data[i]; 473 477 474 - return (sent_bytes < 0) ? sent_bytes : 0; 478 + usbhid_submit_report(hdev, report, USB_DIR_OUT); 479 + 480 + return 0; 475 481 } 476 482 477 483 static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)