NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/46696: uhub disables port where USB keyboard attached
Dear Nick,
When applied with netbsd-6 tree, in 11 trials, the USB keyboard didn't
recognize correctly out of 20 trials. The diff was as follows:
Index: usb_subr.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usb_subr.c,v
retrieving revision 1.180
diff -u -p -u -r1.180 usb_subr.c
--- usb_subr.c 9 Jun 2011 19:08:33 -0000 1.180
+++ usb_subr.c 2 Apr 2013 06:37:13 -0000
@@ -1219,14 +1219,6 @@ usbd_new_device(device_t parent, usbd_bu
dev->address = addr; /* new device address now */
bus->devices[addr] = dev;
- err = usbd_reload_device_desc(dev);
- if (err) {
- DPRINTFN(-1, ("usbd_new_device: addr=%d, getting full desc "
- "failed\n", addr));
- usbd_remove_device(dev, up);
- return (err);
- }
-
/* Re-establish the default pipe with the new address. */
usbd_kill_pipe(dev->default_pipe);
err = usbd_setup_pipe(dev, 0, &dev->def_ep, USBD_DEFAULT_INTERVAL,
@@ -1237,6 +1229,14 @@ usbd_new_device(device_t parent, usbd_bu
return err;
}
+ err = usbd_reload_device_desc(dev);
+ if (err) {
+ DPRINTFN(-1, ("usbd_new_device: addr=%d, getting full desc "
+ "failed\n", addr));
+ usbd_remove_device(dev, up);
+ return (err);
+ }
+
/* Assume 100mA bus powered for now. Changed when configured. */
dev->power = USB_MIN_POWER;
dev->self_powered = 0;
Index: ehci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/ehci.c,v
retrieving revision 1.183
diff -u -p -u -r1.183 ehci.c
--- ehci.c 23 Dec 2011 00:51:43 -0000 1.183
+++ ehci.c 2 Apr 2013 06:37:28 -0000
@@ -3271,7 +3271,9 @@ ehci_device_request(usbd_xfer_handle xfe
usb_device_request_t *req = &xfer->request;
usbd_device_handle dev = epipe->pipe.device;
ehci_softc_t *sc = dev->bus->hci_private;
+#if 0
int addr = dev->address;
+#endif
ehci_soft_qtd_t *setup, *stat, *next;
ehci_soft_qh_t *sqh;
int isread;
@@ -3302,6 +3304,7 @@ ehci_device_request(usbd_xfer_handle xfe
sqh = epipe->sqh;
epipe->u.ctl.length = len;
+#if 0
/* Update device address and length since they may have changed
during the setup of the control pipe in usbd_new_device(). */
/* XXX This only needs to be done once, but it's too early in open. */
@@ -3312,6 +3315,7 @@ ehci_device_request(usbd_xfer_handle xfe
EHCI_QH_SET_ADDR(addr) |
EHCI_QH_SET_MPL(UGETW(epipe->pipe.endpoint->edesc->wMaxPacketSize))
);
+#endif
/* Set up data transaction */
if (len != 0) {
Home |
Main Index |
Thread Index |
Old Index