• R/O
  • HTTP
  • SSH
  • HTTPS

linux-2.4.36: コミット

2.4.36-stable kernel tree


コミットメタ情報

リビジョンd624f2fab436f9eb84d7e1136b5667cd703041f8 (tree)
日時2007-02-25 15:16:42
作者Pete Zaitcev <zaitcev@redh...>
コミッターWilly Tarreau

ログメッセージ

[PATCH] usb 2.4: Support high-speed HID

Fix high-speed HID. According to Stuart:

The problem is that the usbhid driver (in hid-core.c) is _not_ modifying
the interrupt URB interval for high speed devices before calling
FILL_INT_URB, which causes the interval to be too low, and the ehci
driver won't schedule the URB.
Specifically this was seen with a new USB 2.0 Avocent KVM dongle.

Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>

変更サマリ

差分

--- a/drivers/usb/hid-core.c
+++ b/drivers/usb/hid-core.c
@@ -1329,7 +1329,7 @@ static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum)
13291329 for (n = 0; n < interface->bNumEndpoints; n++) {
13301330
13311331 struct usb_endpoint_descriptor *endpoint = &interface->endpoint[n];
1332- int pipe, maxp;
1332+ int pipe, maxp, interval;
13331333
13341334 if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */
13351335 continue;
@@ -1339,8 +1339,11 @@ static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum)
13391339
13401340 pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
13411341 maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
1342+ interval = endpoint->bInterval;
1343+ if (dev->speed == USB_SPEED_HIGH)
1344+ interval = 1 << (interval - 1);
13421345
1343- FILL_INT_URB(&hid->urb, dev, pipe, hid->buffer, maxp > 32 ? 32 : maxp, hid_irq, hid, endpoint->bInterval);
1346+ FILL_INT_URB(&hid->urb, dev, pipe, hid->buffer, maxp > 32 ? 32 : maxp, hid_irq, hid, interval);
13441347
13451348 break;
13461349 }
旧リポジトリブラウザで表示