]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 11 Mar 2013 21:03:58 +0000 (14:03 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 11 Mar 2013 21:03:58 +0000 (14:03 -0700)
added patches:
hid-logitech-dj-do-not-directly-call-hid_output_raw_report-during-probe.patch

queue-3.4/hid-logitech-dj-do-not-directly-call-hid_output_raw_report-during-probe.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/hid-logitech-dj-do-not-directly-call-hid_output_raw_report-during-probe.patch b/queue-3.4/hid-logitech-dj-do-not-directly-call-hid_output_raw_report-during-probe.patch
new file mode 100644 (file)
index 0000000..0dd6f69
--- /dev/null
@@ -0,0 +1,71 @@
+From dcd9006b1b053c7b1cebe81333261d4fd492ffeb Mon Sep 17 00:00:00 2001
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Date: Tue, 5 Mar 2013 17:09:00 +0100
+Subject: HID: logitech-dj: do not directly call hid_output_raw_report() during probe
+
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+
+commit dcd9006b1b053c7b1cebe81333261d4fd492ffeb upstream.
+
+hid_output_raw_report() makes a direct call to usb_control_msg(). However,
+some USB3 boards have shown that the usb device is not ready during the
+.probe(). This blocks the entire usb device, and the paired mice, keyboards
+are not functional. The dmesg output is the following:
+
+[   11.912287] logitech-djreceiver 0003:046D:C52B.0003: hiddev0,hidraw0: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:14.0-2/input2
+[   11.912537] logitech-djreceiver 0003:046D:C52B.0003: logi_dj_probe:logi_dj_recv_query_paired_devices error:-32
+[   11.912636] logitech-djreceiver: probe of 0003:046D:C52B.0003 failed with error -32
+
+Relying on the scheduled call to usbhid_submit_report() fixes the problem.
+
+related bugs:
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1072082
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1039143
+https://bugzilla.redhat.com/show_bug.cgi?id=840391
+https://bugzilla.kernel.org/show_bug.cgi?id=49781
+
+Reported-and-tested-by: Bob Bowles <bobjohnbowles@gmail.com>
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-logitech-dj.c |   22 ++++++++++++++--------
+ 1 file changed, 14 insertions(+), 8 deletions(-)
+
+--- a/drivers/hid/hid-logitech-dj.c
++++ b/drivers/hid/hid-logitech-dj.c
+@@ -451,19 +451,25 @@ static int logi_dj_recv_send_report(stru
+                                   struct dj_report *dj_report)
+ {
+       struct hid_device *hdev = djrcv_dev->hdev;
+-      int sent_bytes;
++      struct hid_report *report;
++      struct hid_report_enum *output_report_enum;
++      u8 *data = (u8 *)(&dj_report->device_index);
++      int i;
+-      if (!hdev->hid_output_raw_report) {
+-              dev_err(&hdev->dev, "%s:"
+-                      "hid_output_raw_report is null\n", __func__);
++      output_report_enum = &hdev->report_enum[HID_OUTPUT_REPORT];
++      report = output_report_enum->report_id_hash[REPORT_ID_DJ_SHORT];
++
++      if (!report) {
++              dev_err(&hdev->dev, "%s: unable to find dj report\n", __func__);
+               return -ENODEV;
+       }
+-      sent_bytes = hdev->hid_output_raw_report(hdev, (u8 *) dj_report,
+-                                               sizeof(struct dj_report),
+-                                               HID_OUTPUT_REPORT);
++      for (i = 0; i < report->field[0]->report_count; i++)
++              report->field[0]->value[i] = data[i];
++
++      usbhid_submit_report(hdev, report, USB_DIR_OUT);
+-      return (sent_bytes < 0) ? sent_bytes : 0;
++      return 0;
+ }
+ static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
index 43a5f4ab065c78c3ae919035aeb0a52d1f64637d..f74c36f3bf9e54f6a440ecbe72326fab26ca9137 100644 (file)
@@ -24,3 +24,4 @@ arm-7663-1-perf-fix-armv7-evtype_mask-to-include-nsh-bit.patch
 alsa-ice1712-initialize-card-private_data-properly.patch
 alsa-vmaster-fix-slave-change-notification.patch
 e1000e-fix-pci-device-enable-counter-balance.patch
+hid-logitech-dj-do-not-directly-call-hid_output_raw_report-during-probe.patch