summaryrefslogtreecommitdiffstats
path: root/drivers/usb/usb-uhci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/usb-uhci.c')
-rw-r--r--drivers/usb/usb-uhci.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/drivers/usb/usb-uhci.c b/drivers/usb/usb-uhci.c
index 5dbde2959..f77296d7f 100644
--- a/drivers/usb/usb-uhci.c
+++ b/drivers/usb/usb-uhci.c
@@ -1002,8 +1002,11 @@ _static int uhci_unlink_urb_sync (uhci_t *s, urb_t *urb)
urb_priv = urb->hcpriv;
switch (usb_pipetype (urb->pipe)) {
- case PIPE_ISOCHRONOUS:
+
case PIPE_INTERRUPT:
+ usb_dotoggle (urb->dev, usb_pipeendpoint (urb->pipe), usb_pipeout (urb->pipe));
+
+ case PIPE_ISOCHRONOUS:
uhci_clean_iso_step1(s, urb_priv);
uhci_wait_ms(1);
uhci_clean_iso_step2(s, urb_priv);
@@ -1131,8 +1134,10 @@ _static int uhci_unlink_urb_async (uhci_t *s,urb_t *urb)
urb_priv = (urb_priv_t*)urb->hcpriv;
switch (usb_pipetype (urb->pipe)) {
- case PIPE_ISOCHRONOUS:
case PIPE_INTERRUPT:
+ usb_dotoggle (urb->dev, usb_pipeendpoint (urb->pipe), usb_pipeout (urb->pipe));
+
+ case PIPE_ISOCHRONOUS:
uhci_clean_iso_step1 (s, urb_priv);
break;
@@ -1617,8 +1622,8 @@ _static __u8 root_hub_dev_des[] =
0x00, /* __u16 bcdDevice; */
0x00,
0x00, /* __u8 iManufacturer; */
- 0x00, /* __u8 iProduct; */
- 0x00, /* __u8 iSerialNumber; */
+ 0x02, /* __u8 iProduct; */
+ 0x01, /* __u8 iSerialNumber; */
0x01 /* __u8 bNumConfigurations; */
};
@@ -1915,8 +1920,14 @@ _static int rh_submit_urb (urb_t *urb)
len = min (leni, min (sizeof (root_hub_config_des), wLength));
memcpy (data, root_hub_config_des, len);
OK (len);
- case (0x03): /*string descriptors */
- stat = -EPIPE;
+ case (0x03): /* string descriptors */
+ len = usb_root_hub_string (wValue & 0xff,
+ uhci->io_addr, "UHCI",
+ data, wLength);
+ if (len > 0) {
+ OK (min (leni, len));
+ } else
+ stat = -EPIPE;
}
break;
@@ -2597,6 +2608,15 @@ _static int __init alloc_uhci (struct pci_dev *dev, int irq, unsigned int io_add
uhci_t *s;
struct usb_bus *bus;
struct pm_dev *pmdev;
+ char buf[8], *bufp = buf;
+
+#ifndef __sparc__
+ sprintf(buf, "%d", irq);
+#else
+ bufp = __irq_itoa(irq);
+#endif
+ printk(KERN_INFO __FILE__ ": USB UHCI at I/O 0x%x, IRQ %s\n",
+ io_addr, bufp);
s = kmalloc (sizeof (uhci_t), GFP_KERNEL);
if (!s)