diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-23 17:58:51 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-23 17:58:51 -0400 |
| commit | fb478da5ba69ecf40729ae8ab37ca406b1e5be48 (patch) | |
| tree | 00cf062329b9079dd9c68ba237a89855ae642434 | |
| parent | 8553f321e0fd29821135ac4797b5f37bf80ae2e9 (diff) | |
| parent | 5257d97a219e17abf8188f136e1189da3b3af33c (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (23 commits)
USB: revert recovery from transient errors
usb: unusual devs patch for Nokia 5310 Music Xpress
usb: ftdi_sio: add support for Domintell devices
USB: drivers/usb/musb/: disable it on SuperH
USB Serial: Sierra: Add MC8785 VID/PID
USB: serial: add ZTE CDMA Tech id to option driver
USB: ftdi_sio: Add 0x5050/0x0900 USB IDs (Papouch Quido USB 4/4)
usb serial: ti_usb_3410_5052 obviously broken by firmware changes
USB: fsl_usb2_udc: fix VDBG() format string
USB: unusual_devs addition for RockChip MP3 player
USB: SERIAL CP2101 add device IDs
usb-serial: Add Siemens EF81 to PL-2303 hack triggers
USB: fix EHCI periodic transfers
usb: musb: fix include path
USB: Fixing Nokia 3310c in storage mode
usb gadget: fix omap_udc DMA regression
USB: update of Documentation/usb/anchors.txt
USB: fix hcd interrupt disabling
USB: Correct Sierra Wireless USB EVDO Modem Device ID
USB: Fix the Nokia 6300 storage-mode.
...
| -rw-r--r-- | Documentation/usb/anchors.txt | 12 | ||||
| -rw-r--r-- | drivers/usb/core/hcd.c | 3 | ||||
| -rw-r--r-- | drivers/usb/core/hub.c | 39 | ||||
| -rw-r--r-- | drivers/usb/gadget/fsl_usb2_udc.c | 2 | ||||
| -rw-r--r-- | drivers/usb/gadget/omap_udc.c | 4 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-hcd.c | 26 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-sched.c | 32 | ||||
| -rw-r--r-- | drivers/usb/musb/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_core.c | 4 | ||||
| -rw-r--r-- | drivers/usb/musb/omap2430.c | 4 | ||||
| -rw-r--r-- | drivers/usb/musb/omap2430.h | 4 | ||||
| -rw-r--r-- | drivers/usb/serial/cp2101.c | 3 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 3 | ||||
| -rw-r--r-- | drivers/usb/serial/ftdi_sio.h | 5 | ||||
| -rw-r--r-- | drivers/usb/serial/option.c | 2 | ||||
| -rw-r--r-- | drivers/usb/serial/sierra.c | 12 | ||||
| -rw-r--r-- | drivers/usb/serial/ti_usb_3410_5052.c | 2 | ||||
| -rw-r--r-- | drivers/usb/serial/usb-serial.c | 4 | ||||
| -rw-r--r-- | drivers/usb/storage/Kconfig | 12 | ||||
| -rw-r--r-- | drivers/usb/storage/Makefile | 3 | ||||
| -rw-r--r-- | drivers/usb/storage/unusual_devs.h | 30 | ||||
| -rw-r--r-- | drivers/usb/storage/usb.c | 2 |
22 files changed, 124 insertions, 85 deletions
diff --git a/Documentation/usb/anchors.txt b/Documentation/usb/anchors.txt index 7304bcf5a306..5e6b64c20d25 100644 --- a/Documentation/usb/anchors.txt +++ b/Documentation/usb/anchors.txt | |||
| @@ -42,9 +42,21 @@ This function kills all URBs associated with an anchor. The URBs | |||
| 42 | are called in the reverse temporal order they were submitted. | 42 | are called in the reverse temporal order they were submitted. |
| 43 | This way no data can be reordered. | 43 | This way no data can be reordered. |
| 44 | 44 | ||
| 45 | usb_unlink_anchored_urbs() | ||
| 46 | -------------------------- | ||
| 47 | |||
| 48 | This function unlinks all URBs associated with an anchor. The URBs | ||
| 49 | are processed in the reverse temporal order they were submitted. | ||
| 50 | This is similar to usb_kill_anchored_urbs(), but it will not sleep. | ||
| 51 | Therefore no guarantee is made that the URBs have been unlinked when | ||
| 52 | the call returns. They may be unlinked later but will be unlinked in | ||
| 53 | finite time. | ||
| 54 | |||
| 45 | usb_wait_anchor_empty_timeout() | 55 | usb_wait_anchor_empty_timeout() |
| 46 | ------------------------------- | 56 | ------------------------------- |
| 47 | 57 | ||
| 48 | This function waits for all URBs associated with an anchor to finish | 58 | This function waits for all URBs associated with an anchor to finish |
| 49 | or a timeout, whichever comes first. Its return value will tell you | 59 | or a timeout, whichever comes first. Its return value will tell you |
| 50 | whether the timeout was reached. | 60 | whether the timeout was reached. |
| 61 | |||
| 62 | |||
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 8abd4e59bf4a..8ab389dca2b9 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c | |||
| @@ -1876,7 +1876,8 @@ int usb_add_hcd(struct usb_hcd *hcd, | |||
| 1876 | * with IRQF_SHARED. As usb_hcd_irq() will always disable | 1876 | * with IRQF_SHARED. As usb_hcd_irq() will always disable |
| 1877 | * interrupts we can remove it here. | 1877 | * interrupts we can remove it here. |
| 1878 | */ | 1878 | */ |
| 1879 | irqflags &= ~IRQF_DISABLED; | 1879 | if (irqflags & IRQF_SHARED) |
| 1880 | irqflags &= ~IRQF_DISABLED; | ||
| 1880 | 1881 | ||
| 1881 | snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", | 1882 | snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", |
| 1882 | hcd->driver->description, hcd->self.busnum); | 1883 | hcd->driver->description, hcd->self.busnum); |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 6a5cb018383d..d99963873e37 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -2683,35 +2683,17 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
| 2683 | USB_PORT_STAT_C_ENABLE); | 2683 | USB_PORT_STAT_C_ENABLE); |
| 2684 | #endif | 2684 | #endif |
| 2685 | 2685 | ||
| 2686 | /* Try to use the debounce delay for protection against | ||
| 2687 | * port-enable changes caused, for example, by EMI. | ||
| 2688 | */ | ||
| 2689 | if (portchange & (USB_PORT_STAT_C_CONNECTION | | ||
| 2690 | USB_PORT_STAT_C_ENABLE)) { | ||
| 2691 | status = hub_port_debounce(hub, port1); | ||
| 2692 | if (status < 0) { | ||
| 2693 | if (printk_ratelimit()) | ||
| 2694 | dev_err (hub_dev, "connect-debounce failed, " | ||
| 2695 | "port %d disabled\n", port1); | ||
| 2696 | portstatus &= ~USB_PORT_STAT_CONNECTION; | ||
| 2697 | } else { | ||
| 2698 | portstatus = status; | ||
| 2699 | } | ||
| 2700 | } | ||
| 2701 | |||
| 2702 | /* Try to resuscitate an existing device */ | 2686 | /* Try to resuscitate an existing device */ |
| 2703 | udev = hdev->children[port1-1]; | 2687 | udev = hdev->children[port1-1]; |
| 2704 | if ((portstatus & USB_PORT_STAT_CONNECTION) && udev && | 2688 | if ((portstatus & USB_PORT_STAT_CONNECTION) && udev && |
| 2705 | udev->state != USB_STATE_NOTATTACHED) { | 2689 | udev->state != USB_STATE_NOTATTACHED) { |
| 2706 | |||
| 2707 | usb_lock_device(udev); | 2690 | usb_lock_device(udev); |
| 2708 | if (portstatus & USB_PORT_STAT_ENABLE) { | 2691 | if (portstatus & USB_PORT_STAT_ENABLE) { |
| 2709 | status = 0; /* Nothing to do */ | 2692 | status = 0; /* Nothing to do */ |
| 2710 | } else if (!udev->persist_enabled) { | ||
| 2711 | status = -ENODEV; /* Mustn't resuscitate */ | ||
| 2712 | 2693 | ||
| 2713 | #ifdef CONFIG_USB_SUSPEND | 2694 | #ifdef CONFIG_USB_SUSPEND |
| 2714 | } else if (udev->state == USB_STATE_SUSPENDED) { | 2695 | } else if (udev->state == USB_STATE_SUSPENDED && |
| 2696 | udev->persist_enabled) { | ||
| 2715 | /* For a suspended device, treat this as a | 2697 | /* For a suspended device, treat this as a |
| 2716 | * remote wakeup event. | 2698 | * remote wakeup event. |
| 2717 | */ | 2699 | */ |
| @@ -2726,7 +2708,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
| 2726 | #endif | 2708 | #endif |
| 2727 | 2709 | ||
| 2728 | } else { | 2710 | } else { |
| 2729 | status = usb_reset_device(udev); | 2711 | status = -ENODEV; /* Don't resuscitate */ |
| 2730 | } | 2712 | } |
| 2731 | usb_unlock_device(udev); | 2713 | usb_unlock_device(udev); |
| 2732 | 2714 | ||
| @@ -2741,6 +2723,19 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
| 2741 | usb_disconnect(&hdev->children[port1-1]); | 2723 | usb_disconnect(&hdev->children[port1-1]); |
| 2742 | clear_bit(port1, hub->change_bits); | 2724 | clear_bit(port1, hub->change_bits); |
| 2743 | 2725 | ||
| 2726 | if (portchange & (USB_PORT_STAT_C_CONNECTION | | ||
| 2727 | USB_PORT_STAT_C_ENABLE)) { | ||
| 2728 | status = hub_port_debounce(hub, port1); | ||
| 2729 | if (status < 0) { | ||
| 2730 | if (printk_ratelimit()) | ||
| 2731 | dev_err(hub_dev, "connect-debounce failed, " | ||
| 2732 | "port %d disabled\n", port1); | ||
| 2733 | portstatus &= ~USB_PORT_STAT_CONNECTION; | ||
| 2734 | } else { | ||
| 2735 | portstatus = status; | ||
| 2736 | } | ||
| 2737 | } | ||
| 2738 | |||
| 2744 | /* Return now if debouncing failed or nothing is connected */ | 2739 | /* Return now if debouncing failed or nothing is connected */ |
| 2745 | if (!(portstatus & USB_PORT_STAT_CONNECTION)) { | 2740 | if (!(portstatus & USB_PORT_STAT_CONNECTION)) { |
| 2746 | 2741 | ||
| @@ -2748,7 +2743,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
| 2748 | if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2 | 2743 | if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2 |
| 2749 | && !(portstatus & (1 << USB_PORT_FEAT_POWER))) | 2744 | && !(portstatus & (1 << USB_PORT_FEAT_POWER))) |
| 2750 | set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); | 2745 | set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); |
| 2751 | 2746 | ||
| 2752 | if (portstatus & USB_PORT_STAT_ENABLE) | 2747 | if (portstatus & USB_PORT_STAT_ENABLE) |
| 2753 | goto done; | 2748 | goto done; |
| 2754 | return; | 2749 | return; |
diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c index 1cfccf102a2d..45ad556169f1 100644 --- a/drivers/usb/gadget/fsl_usb2_udc.c +++ b/drivers/usb/gadget/fsl_usb2_udc.c | |||
| @@ -223,7 +223,7 @@ static int dr_controller_setup(struct fsl_udc *udc) | |||
| 223 | fsl_writel(tmp, &dr_regs->endpointlistaddr); | 223 | fsl_writel(tmp, &dr_regs->endpointlistaddr); |
| 224 | 224 | ||
| 225 | VDBG("vir[qh_base] is %p phy[qh_base] is 0x%8x reg is 0x%8x", | 225 | VDBG("vir[qh_base] is %p phy[qh_base] is 0x%8x reg is 0x%8x", |
| 226 | (int)udc->ep_qh, (int)tmp, | 226 | udc->ep_qh, (int)tmp, |
| 227 | fsl_readl(&dr_regs->endpointlistaddr)); | 227 | fsl_readl(&dr_regs->endpointlistaddr)); |
| 228 | 228 | ||
| 229 | /* Config PHY interface */ | 229 | /* Config PHY interface */ |
diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c index 574c53831a05..bb54cca4c543 100644 --- a/drivers/usb/gadget/omap_udc.c +++ b/drivers/usb/gadget/omap_udc.c | |||
| @@ -787,7 +787,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel) | |||
| 787 | omap_set_dma_dest_params(ep->lch, | 787 | omap_set_dma_dest_params(ep->lch, |
| 788 | OMAP_DMA_PORT_TIPB, | 788 | OMAP_DMA_PORT_TIPB, |
| 789 | OMAP_DMA_AMODE_CONSTANT, | 789 | OMAP_DMA_AMODE_CONSTANT, |
| 790 | (unsigned long) io_v2p(UDC_DATA_DMA), | 790 | UDC_DATA_DMA, |
| 791 | 0, 0); | 791 | 0, 0); |
| 792 | } | 792 | } |
| 793 | } else { | 793 | } else { |
| @@ -804,7 +804,7 @@ static void dma_channel_claim(struct omap_ep *ep, unsigned channel) | |||
| 804 | omap_set_dma_src_params(ep->lch, | 804 | omap_set_dma_src_params(ep->lch, |
| 805 | OMAP_DMA_PORT_TIPB, | 805 | OMAP_DMA_PORT_TIPB, |
| 806 | OMAP_DMA_AMODE_CONSTANT, | 806 | OMAP_DMA_AMODE_CONSTANT, |
| 807 | (unsigned long) io_v2p(UDC_DATA_DMA), | 807 | UDC_DATA_DMA, |
| 808 | 0, 0); | 808 | 0, 0); |
| 809 | /* EMIFF or SDRC */ | 809 | /* EMIFF or SDRC */ |
| 810 | omap_set_dma_dest_burst_mode(ep->lch, | 810 | omap_set_dma_dest_burst_mode(ep->lch, |
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index d9d53f289caf..8409e0705d63 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c | |||
| @@ -145,16 +145,6 @@ static int handshake (struct ehci_hcd *ehci, void __iomem *ptr, | |||
| 145 | return -ETIMEDOUT; | 145 | return -ETIMEDOUT; |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr, | ||
| 149 | u32 mask, u32 done, int usec) | ||
| 150 | { | ||
| 151 | int error = handshake(ehci, ptr, mask, done, usec); | ||
| 152 | if (error) | ||
| 153 | ehci_to_hcd(ehci)->state = HC_STATE_HALT; | ||
| 154 | |||
| 155 | return error; | ||
| 156 | } | ||
| 157 | |||
| 158 | /* force HC to halt state from unknown (EHCI spec section 2.3) */ | 148 | /* force HC to halt state from unknown (EHCI spec section 2.3) */ |
| 159 | static int ehci_halt (struct ehci_hcd *ehci) | 149 | static int ehci_halt (struct ehci_hcd *ehci) |
| 160 | { | 150 | { |
| @@ -173,6 +163,22 @@ static int ehci_halt (struct ehci_hcd *ehci) | |||
| 173 | STS_HALT, STS_HALT, 16 * 125); | 163 | STS_HALT, STS_HALT, 16 * 125); |
| 174 | } | 164 | } |
| 175 | 165 | ||
| 166 | static int handshake_on_error_set_halt(struct ehci_hcd *ehci, void __iomem *ptr, | ||
| 167 | u32 mask, u32 done, int usec) | ||
| 168 | { | ||
| 169 | int error; | ||
| 170 | |||
| 171 | error = handshake(ehci, ptr, mask, done, usec); | ||
| 172 | if (error) { | ||
| 173 | ehci_halt(ehci); | ||
| 174 | ehci_to_hcd(ehci)->state = HC_STATE_HALT; | ||
| 175 | ehci_err(ehci, "force halt; handhake %p %08x %08x -> %d\n", | ||
| 176 | ptr, mask, done, error); | ||
| 177 | } | ||
| 178 | |||
| 179 | return error; | ||
| 180 | } | ||
| 181 | |||
| 176 | /* put TDI/ARC silicon into EHCI mode */ | 182 | /* put TDI/ARC silicon into EHCI mode */ |
| 177 | static void tdi_reset (struct ehci_hcd *ehci) | 183 | static void tdi_reset (struct ehci_hcd *ehci) |
| 178 | { | 184 | { |
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index b7853c8bac0f..4a0c5a78b2ed 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
| @@ -437,6 +437,9 @@ static int enable_periodic (struct ehci_hcd *ehci) | |||
| 437 | u32 cmd; | 437 | u32 cmd; |
| 438 | int status; | 438 | int status; |
| 439 | 439 | ||
| 440 | if (ehci->periodic_sched++) | ||
| 441 | return 0; | ||
| 442 | |||
| 440 | /* did clearing PSE did take effect yet? | 443 | /* did clearing PSE did take effect yet? |
| 441 | * takes effect only at frame boundaries... | 444 | * takes effect only at frame boundaries... |
| 442 | */ | 445 | */ |
| @@ -461,6 +464,9 @@ static int disable_periodic (struct ehci_hcd *ehci) | |||
| 461 | u32 cmd; | 464 | u32 cmd; |
| 462 | int status; | 465 | int status; |
| 463 | 466 | ||
| 467 | if (--ehci->periodic_sched) | ||
| 468 | return 0; | ||
| 469 | |||
| 464 | /* did setting PSE not take effect yet? | 470 | /* did setting PSE not take effect yet? |
| 465 | * takes effect only at frame boundaries... | 471 | * takes effect only at frame boundaries... |
| 466 | */ | 472 | */ |
| @@ -544,13 +550,10 @@ static int qh_link_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
| 544 | : (qh->usecs * 8); | 550 | : (qh->usecs * 8); |
| 545 | 551 | ||
| 546 | /* maybe enable periodic schedule processing */ | 552 | /* maybe enable periodic schedule processing */ |
| 547 | if (!ehci->periodic_sched++) | 553 | return enable_periodic(ehci); |
| 548 | return enable_periodic (ehci); | ||
| 549 | |||
| 550 | return 0; | ||
| 551 | } | 554 | } |
| 552 | 555 | ||
| 553 | static void qh_unlink_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) | 556 | static int qh_unlink_periodic(struct ehci_hcd *ehci, struct ehci_qh *qh) |
| 554 | { | 557 | { |
| 555 | unsigned i; | 558 | unsigned i; |
| 556 | unsigned period; | 559 | unsigned period; |
| @@ -586,9 +589,7 @@ static void qh_unlink_periodic (struct ehci_hcd *ehci, struct ehci_qh *qh) | |||
| 586 | qh_put (qh); | 589 | qh_put (qh); |
| 587 | 590 | ||
| 588 | /* maybe turn off periodic schedule */ | 591 | /* maybe turn off periodic schedule */ |
| 589 | ehci->periodic_sched--; | 592 | return disable_periodic(ehci); |
| 590 | if (!ehci->periodic_sched) | ||
| 591 | (void) disable_periodic (ehci); | ||
| 592 | } | 593 | } |
| 593 | 594 | ||
| 594 | static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh) | 595 | static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh) |
| @@ -1562,9 +1563,7 @@ itd_link_urb ( | |||
| 1562 | urb->hcpriv = NULL; | 1563 | urb->hcpriv = NULL; |
| 1563 | 1564 | ||
| 1564 | timer_action (ehci, TIMER_IO_WATCHDOG); | 1565 | timer_action (ehci, TIMER_IO_WATCHDOG); |
| 1565 | if (unlikely (!ehci->periodic_sched++)) | 1566 | return enable_periodic(ehci); |
| 1566 | return enable_periodic (ehci); | ||
| 1567 | return 0; | ||
| 1568 | } | 1567 | } |
| 1569 | 1568 | ||
| 1570 | #define ISO_ERRS (EHCI_ISOC_BUF_ERR | EHCI_ISOC_BABBLE | EHCI_ISOC_XACTERR) | 1569 | #define ISO_ERRS (EHCI_ISOC_BUF_ERR | EHCI_ISOC_BABBLE | EHCI_ISOC_XACTERR) |
| @@ -1642,7 +1641,7 @@ itd_complete ( | |||
| 1642 | ehci_urb_done(ehci, urb, 0); | 1641 | ehci_urb_done(ehci, urb, 0); |
| 1643 | retval = true; | 1642 | retval = true; |
| 1644 | urb = NULL; | 1643 | urb = NULL; |
| 1645 | ehci->periodic_sched--; | 1644 | (void) disable_periodic(ehci); |
| 1646 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; | 1645 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; |
| 1647 | 1646 | ||
| 1648 | if (unlikely (list_empty (&stream->td_list))) { | 1647 | if (unlikely (list_empty (&stream->td_list))) { |
| @@ -1951,9 +1950,7 @@ sitd_link_urb ( | |||
| 1951 | urb->hcpriv = NULL; | 1950 | urb->hcpriv = NULL; |
| 1952 | 1951 | ||
| 1953 | timer_action (ehci, TIMER_IO_WATCHDOG); | 1952 | timer_action (ehci, TIMER_IO_WATCHDOG); |
| 1954 | if (!ehci->periodic_sched++) | 1953 | return enable_periodic(ehci); |
| 1955 | return enable_periodic (ehci); | ||
| 1956 | return 0; | ||
| 1957 | } | 1954 | } |
| 1958 | 1955 | ||
| 1959 | /*-------------------------------------------------------------------------*/ | 1956 | /*-------------------------------------------------------------------------*/ |
| @@ -2019,7 +2016,7 @@ sitd_complete ( | |||
| 2019 | ehci_urb_done(ehci, urb, 0); | 2016 | ehci_urb_done(ehci, urb, 0); |
| 2020 | retval = true; | 2017 | retval = true; |
| 2021 | urb = NULL; | 2018 | urb = NULL; |
| 2022 | ehci->periodic_sched--; | 2019 | (void) disable_periodic(ehci); |
| 2023 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; | 2020 | ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--; |
| 2024 | 2021 | ||
| 2025 | if (list_empty (&stream->td_list)) { | 2022 | if (list_empty (&stream->td_list)) { |
| @@ -2243,8 +2240,7 @@ restart: | |||
| 2243 | if (unlikely (modified)) { | 2240 | if (unlikely (modified)) { |
| 2244 | if (likely(ehci->periodic_sched > 0)) | 2241 | if (likely(ehci->periodic_sched > 0)) |
| 2245 | goto restart; | 2242 | goto restart; |
| 2246 | /* maybe we can short-circuit this scan! */ | 2243 | /* short-circuit this scan */ |
| 2247 | disable_periodic(ehci); | ||
| 2248 | now_uframe = clock; | 2244 | now_uframe = clock; |
| 2249 | break; | 2245 | break; |
| 2250 | } | 2246 | } |
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig index a0017486ad4e..58b2b8fc9439 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig | |||
| @@ -9,6 +9,7 @@ comment "Enable Host or Gadget support to see Inventra options" | |||
| 9 | # (M)HDRC = (Multipoint) Highspeed Dual-Role Controller | 9 | # (M)HDRC = (Multipoint) Highspeed Dual-Role Controller |
| 10 | config USB_MUSB_HDRC | 10 | config USB_MUSB_HDRC |
| 11 | depends on (USB || USB_GADGET) && HAVE_CLK | 11 | depends on (USB || USB_GADGET) && HAVE_CLK |
| 12 | depends on !SUPERH | ||
| 12 | select TWL4030_USB if MACH_OMAP_3430SDP | 13 | select TWL4030_USB if MACH_OMAP_3430SDP |
| 13 | tristate 'Inventra Highspeed Dual Role Controller (TI, ...)' | 14 | tristate 'Inventra Highspeed Dual Role Controller (TI, ...)' |
| 14 | help | 15 | help |
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index c5b8f0296fcf..128e949db47c 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
| @@ -100,8 +100,8 @@ | |||
| 100 | #include <linux/io.h> | 100 | #include <linux/io.h> |
| 101 | 101 | ||
| 102 | #ifdef CONFIG_ARM | 102 | #ifdef CONFIG_ARM |
| 103 | #include <asm/arch/hardware.h> | 103 | #include <mach/hardware.h> |
| 104 | #include <asm/arch/memory.h> | 104 | #include <mach/memory.h> |
| 105 | #include <asm/mach-types.h> | 105 | #include <asm/mach-types.h> |
| 106 | #endif | 106 | #endif |
| 107 | 107 | ||
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index 298b22e6ad0d..9d2dcb121c5e 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c | |||
| @@ -35,8 +35,8 @@ | |||
| 35 | #include <linux/io.h> | 35 | #include <linux/io.h> |
| 36 | 36 | ||
| 37 | #include <asm/mach-types.h> | 37 | #include <asm/mach-types.h> |
| 38 | #include <asm/arch/hardware.h> | 38 | #include <mach/hardware.h> |
| 39 | #include <asm/arch/mux.h> | 39 | #include <mach/mux.h> |
| 40 | 40 | ||
| 41 | #include "musb_core.h" | 41 | #include "musb_core.h" |
| 42 | #include "omap2430.h" | 42 | #include "omap2430.h" |
diff --git a/drivers/usb/musb/omap2430.h b/drivers/usb/musb/omap2430.h index 786a62071f72..dc7670718cd2 100644 --- a/drivers/usb/musb/omap2430.h +++ b/drivers/usb/musb/omap2430.h | |||
| @@ -11,8 +11,8 @@ | |||
| 11 | #define __MUSB_OMAP243X_H__ | 11 | #define __MUSB_OMAP243X_H__ |
| 12 | 12 | ||
| 13 | #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) | 13 | #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) |
| 14 | #include <asm/arch/hardware.h> | 14 | #include <mach/hardware.h> |
| 15 | #include <asm/arch/usb.h> | 15 | #include <mach/usb.h> |
| 16 | 16 | ||
| 17 | /* | 17 | /* |
| 18 | * OMAP2430-specific definitions | 18 | * OMAP2430-specific definitions |
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c index 442cba69cce5..1279553381e3 100644 --- a/drivers/usb/serial/cp2101.c +++ b/drivers/usb/serial/cp2101.c | |||
| @@ -72,6 +72,7 @@ static struct usb_device_id id_table [] = { | |||
| 72 | { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */ | 72 | { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */ |
| 73 | { USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */ | 73 | { USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */ |
| 74 | { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ | 74 | { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ |
| 75 | { USB_DEVICE(0x10C4, 0x8115) }, /* Arygon NFC/Mifare Reader */ | ||
| 75 | { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ | 76 | { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ |
| 76 | { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ | 77 | { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ |
| 77 | { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ | 78 | { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ |
| @@ -83,6 +84,7 @@ static struct usb_device_id id_table [] = { | |||
| 83 | { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ | 84 | { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ |
| 84 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ | 85 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ |
| 85 | { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ | 86 | { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ |
| 87 | { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ | ||
| 86 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | 88 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ |
| 87 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ | 89 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ |
| 88 | { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */ | 90 | { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */ |
| @@ -93,6 +95,7 @@ static struct usb_device_id id_table [] = { | |||
| 93 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ | 95 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ |
| 94 | { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ | 96 | { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ |
| 95 | { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ | 97 | { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ |
| 98 | { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ | ||
| 96 | { } /* Terminating Entry */ | 99 | { } /* Terminating Entry */ |
| 97 | }; | 100 | }; |
| 98 | 101 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 984f6eff4c47..3dc93b542b30 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -654,6 +654,9 @@ static struct usb_device_id id_table_combined [] = { | |||
| 654 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 654 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
| 655 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, | 655 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, |
| 656 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, | 656 | { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) }, |
| 657 | { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) }, | ||
| 658 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) }, | ||
| 659 | { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) }, | ||
| 657 | { }, /* Optional parameter entry */ | 660 | { }, /* Optional parameter entry */ |
| 658 | { } /* Terminating entry */ | 661 | { } /* Terminating entry */ |
| 659 | }; | 662 | }; |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 382265bba969..8a5b6df3a976 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
| @@ -750,6 +750,7 @@ | |||
| 750 | 750 | ||
| 751 | #define PAPOUCH_VID 0x5050 /* Vendor ID */ | 751 | #define PAPOUCH_VID 0x5050 /* Vendor ID */ |
| 752 | #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ | 752 | #define PAPOUCH_TMU_PID 0x0400 /* TMU USB Thermometer */ |
| 753 | #define PAPOUCH_QUIDO4x4_PID 0x0900 /* Quido 4/4 Module */ | ||
| 753 | 754 | ||
| 754 | /* | 755 | /* |
| 755 | * ACG Identification Technologies GmbH products (http://www.acg.de/). | 756 | * ACG Identification Technologies GmbH products (http://www.acg.de/). |
| @@ -838,6 +839,10 @@ | |||
| 838 | /* Rig Expert Ukraine devices */ | 839 | /* Rig Expert Ukraine devices */ |
| 839 | #define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ | 840 | #define FTDI_REU_TINY_PID 0xED22 /* RigExpert Tiny */ |
| 840 | 841 | ||
| 842 | /* Domintell products http://www.domintell.com */ | ||
| 843 | #define FTDI_DOMINTELL_DGQG_PID 0xEF50 /* Master */ | ||
| 844 | #define FTDI_DOMINTELL_DUSB_PID 0xEF51 /* DUSB01 module */ | ||
| 845 | |||
| 841 | /* Commands */ | 846 | /* Commands */ |
| 842 | #define FTDI_SIO_RESET 0 /* Reset the port */ | 847 | #define FTDI_SIO_RESET 0 /* Reset the port */ |
| 843 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ | 848 | #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 9f9cd36455f4..73f8277f88f2 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
| @@ -218,6 +218,7 @@ static int option_send_setup(struct tty_struct *tty, struct usb_serial_port *po | |||
| 218 | /* ZTE PRODUCTS */ | 218 | /* ZTE PRODUCTS */ |
| 219 | #define ZTE_VENDOR_ID 0x19d2 | 219 | #define ZTE_VENDOR_ID 0x19d2 |
| 220 | #define ZTE_PRODUCT_MF628 0x0015 | 220 | #define ZTE_PRODUCT_MF628 0x0015 |
| 221 | #define ZTE_PRODUCT_CDMA_TECH 0xfffe | ||
| 221 | 222 | ||
| 222 | static struct usb_device_id option_ids[] = { | 223 | static struct usb_device_id option_ids[] = { |
| 223 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, | 224 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, |
| @@ -347,6 +348,7 @@ static struct usb_device_id option_ids[] = { | |||
| 347 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ | 348 | { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ |
| 348 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, | 349 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, |
| 349 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, | 350 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) }, |
| 351 | { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) }, | ||
| 350 | { } /* Terminating entry */ | 352 | { } /* Terminating entry */ |
| 351 | }; | 353 | }; |
| 352 | MODULE_DEVICE_TABLE(usb, option_ids); | 354 | MODULE_DEVICE_TABLE(usb, option_ids); |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index 706033753adb..ea1a103c99be 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
| @@ -14,7 +14,7 @@ | |||
| 14 | Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> | 14 | Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | #define DRIVER_VERSION "v.1.2.13a" | 17 | #define DRIVER_VERSION "v.1.3.2" |
| 18 | #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" | 18 | #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" |
| 19 | #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" | 19 | #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" |
| 20 | 20 | ||
| @@ -30,9 +30,6 @@ | |||
| 30 | 30 | ||
| 31 | #define SWIMS_USB_REQUEST_SetPower 0x00 | 31 | #define SWIMS_USB_REQUEST_SetPower 0x00 |
| 32 | #define SWIMS_USB_REQUEST_SetNmea 0x07 | 32 | #define SWIMS_USB_REQUEST_SetNmea 0x07 |
| 33 | #define SWIMS_USB_REQUEST_SetMode 0x0B | ||
| 34 | #define SWIMS_USB_REQUEST_GetSwocInfo 0x0A | ||
| 35 | #define SWIMS_SET_MODE_Modem 0x0001 | ||
| 36 | 33 | ||
| 37 | /* per port private data */ | 34 | /* per port private data */ |
| 38 | #define N_IN_URB 4 | 35 | #define N_IN_URB 4 |
| @@ -163,7 +160,7 @@ static struct usb_device_id id_table [] = { | |||
| 163 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ | 160 | { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */ |
| 164 | { USB_DEVICE(0x1199, 0x0018) }, /* Sierra Wireless MC5720 */ | 161 | { USB_DEVICE(0x1199, 0x0018) }, /* Sierra Wireless MC5720 */ |
| 165 | { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */ | 162 | { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */ |
| 166 | { USB_DEVICE(0x0f30, 0x1b1d) }, /* Sierra Wireless MC5720 */ | 163 | { USB_DEVICE(0x03f0, 0x1b1d) }, /* HP ev2200 a.k.a MC5720 */ |
| 167 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ | 164 | { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */ |
| 168 | { USB_DEVICE(0x1199, 0x0024) }, /* Sierra Wireless MC5727 */ | 165 | { USB_DEVICE(0x1199, 0x0024) }, /* Sierra Wireless MC5727 */ |
| 169 | { USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */ | 166 | { USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */ |
| @@ -175,6 +172,8 @@ static struct usb_device_id id_table [] = { | |||
| 175 | /* Sierra Wireless Device */ | 172 | /* Sierra Wireless Device */ |
| 176 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0025, 0xFF, 0xFF, 0xFF) }, | 173 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0025, 0xFF, 0xFF, 0xFF) }, |
| 177 | { USB_DEVICE(0x1199, 0x0026) }, /* Sierra Wireless Device */ | 174 | { USB_DEVICE(0x1199, 0x0026) }, /* Sierra Wireless Device */ |
| 175 | { USB_DEVICE(0x1199, 0x0027) }, /* Sierra Wireless Device */ | ||
| 176 | { USB_DEVICE(0x1199, 0x0028) }, /* Sierra Wireless Device */ | ||
| 178 | 177 | ||
| 179 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ | 178 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ |
| 180 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */ | 179 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */ |
| @@ -187,6 +186,7 @@ static struct usb_device_id id_table [] = { | |||
| 187 | { USB_DEVICE(0x1199, 0x6821) }, /* Sierra Wireless AirCard 875U */ | 186 | { USB_DEVICE(0x1199, 0x6821) }, /* Sierra Wireless AirCard 875U */ |
| 188 | { USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780 */ | 187 | { USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780 */ |
| 189 | { USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781 */ | 188 | { USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781 */ |
| 189 | { USB_DEVICE(0x1199, 0x683A) }, /* Sierra Wireless MC8785 */ | ||
| 190 | { USB_DEVICE(0x1199, 0x683B) }, /* Sierra Wireless MC8785 Composite */ | 190 | { USB_DEVICE(0x1199, 0x683B) }, /* Sierra Wireless MC8785 Composite */ |
| 191 | { USB_DEVICE(0x1199, 0x683C) }, /* Sierra Wireless MC8790 */ | 191 | { USB_DEVICE(0x1199, 0x683C) }, /* Sierra Wireless MC8790 */ |
| 192 | { USB_DEVICE(0x1199, 0x683D) }, /* Sierra Wireless MC8790 */ | 192 | { USB_DEVICE(0x1199, 0x683D) }, /* Sierra Wireless MC8790 */ |
| @@ -204,6 +204,8 @@ static struct usb_device_id id_table [] = { | |||
| 204 | /* Sierra Wireless Device */ | 204 | /* Sierra Wireless Device */ |
| 205 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6890, 0xFF, 0xFF, 0xFF)}, | 205 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6890, 0xFF, 0xFF, 0xFF)}, |
| 206 | /* Sierra Wireless Device */ | 206 | /* Sierra Wireless Device */ |
| 207 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6891, 0xFF, 0xFF, 0xFF)}, | ||
| 208 | /* Sierra Wireless Device */ | ||
| 207 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)}, | 209 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)}, |
| 208 | 210 | ||
| 209 | { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */ | 211 | { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */ |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index e39c779e4160..9a3e495c769c 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
| @@ -1744,7 +1744,7 @@ static int ti_download_firmware(struct ti_device *tdev, int type) | |||
| 1744 | if (buffer) { | 1744 | if (buffer) { |
| 1745 | memcpy(buffer, fw_p->data, fw_p->size); | 1745 | memcpy(buffer, fw_p->data, fw_p->size); |
| 1746 | memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size); | 1746 | memset(buffer + fw_p->size, 0xff, buffer_size - fw_p->size); |
| 1747 | ti_do_download(dev, pipe, buffer, fw_p->size); | 1747 | status = ti_do_download(dev, pipe, buffer, fw_p->size); |
| 1748 | kfree(buffer); | 1748 | kfree(buffer); |
| 1749 | } | 1749 | } |
| 1750 | release_firmware(fw_p); | 1750 | release_firmware(fw_p); |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index b157c48e8b78..4f7f9e3ae0a4 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
| @@ -733,7 +733,9 @@ int usb_serial_probe(struct usb_interface *interface, | |||
| 733 | ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) && | 733 | ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) && |
| 734 | (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) || | 734 | (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) || |
| 735 | ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) && | 735 | ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) && |
| 736 | (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) { | 736 | (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) || |
| 737 | ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) && | ||
| 738 | (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) { | ||
| 737 | if (interface != dev->actconfig->interface[0]) { | 739 | if (interface != dev->actconfig->interface[0]) { |
| 738 | /* check out the endpoints of the other interface*/ | 740 | /* check out the endpoints of the other interface*/ |
| 739 | iface_desc = dev->actconfig->interface[0]->cur_altsetting; | 741 | iface_desc = dev->actconfig->interface[0]->cur_altsetting; |
diff --git a/drivers/usb/storage/Kconfig b/drivers/usb/storage/Kconfig index c76034672c18..3d9249632ae1 100644 --- a/drivers/usb/storage/Kconfig +++ b/drivers/usb/storage/Kconfig | |||
| @@ -146,18 +146,6 @@ config USB_STORAGE_KARMA | |||
| 146 | on the resulting scsi device node returns the Karma to normal | 146 | on the resulting scsi device node returns the Karma to normal |
| 147 | operation. | 147 | operation. |
| 148 | 148 | ||
| 149 | config USB_STORAGE_SIERRA | ||
| 150 | bool "Sierra Wireless TRU-Install Feature Support" | ||
| 151 | depends on USB_STORAGE | ||
| 152 | help | ||
| 153 | Say Y here to include additional code to support Sierra Wireless | ||
| 154 | products with the TRU-Install feature (e.g., AC597E, AC881U). | ||
| 155 | |||
| 156 | This code switches the Sierra Wireless device from being in | ||
| 157 | Mass Storage mode to Modem mode. It also has the ability to | ||
| 158 | support host software upgrades should full Linux support be added | ||
| 159 | to TRU-Install. | ||
| 160 | |||
| 161 | config USB_STORAGE_CYPRESS_ATACB | 149 | config USB_STORAGE_CYPRESS_ATACB |
| 162 | bool "SAT emulation on Cypress USB/ATA Bridge with ATACB" | 150 | bool "SAT emulation on Cypress USB/ATA Bridge with ATACB" |
| 163 | depends on USB_STORAGE | 151 | depends on USB_STORAGE |
diff --git a/drivers/usb/storage/Makefile b/drivers/usb/storage/Makefile index bc3415b475c9..7f8beb5366ae 100644 --- a/drivers/usb/storage/Makefile +++ b/drivers/usb/storage/Makefile | |||
| @@ -21,11 +21,10 @@ usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o | |||
| 21 | usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o | 21 | usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA) += alauda.o |
| 22 | usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o | 22 | usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH) += onetouch.o |
| 23 | usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA) += karma.o | 23 | usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA) += karma.o |
| 24 | usb-storage-obj-$(CONFIG_USB_STORAGE_SIERRA) += sierra_ms.o | ||
| 25 | usb-storage-obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += cypress_atacb.o | 24 | usb-storage-obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += cypress_atacb.o |
| 26 | 25 | ||
| 27 | usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \ | 26 | usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \ |
| 28 | initializers.o $(usb-storage-obj-y) | 27 | initializers.o sierra_ms.o $(usb-storage-obj-y) |
| 29 | 28 | ||
| 30 | ifneq ($(CONFIG_USB_LIBUSUAL),) | 29 | ifneq ($(CONFIG_USB_LIBUSUAL),) |
| 31 | obj-$(CONFIG_USB) += libusual.o | 30 | obj-$(CONFIG_USB) += libusual.o |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index ba412e68d474..cd155475cb6e 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -160,6 +160,13 @@ UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0592, | |||
| 160 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 160 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 161 | US_FL_MAX_SECTORS_64 ), | 161 | US_FL_MAX_SECTORS_64 ), |
| 162 | 162 | ||
| 163 | /* Reported by Filip Joelsson <filip@blueturtle.nu> */ | ||
| 164 | UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600, | ||
| 165 | "Nokia", | ||
| 166 | "Nokia 3110c", | ||
| 167 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 168 | US_FL_FIX_CAPACITY ), | ||
| 169 | |||
| 163 | /* Reported by Mario Rettig <mariorettig@web.de> */ | 170 | /* Reported by Mario Rettig <mariorettig@web.de> */ |
| 164 | UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100, | 171 | UNUSUAL_DEV( 0x0421, 0x042e, 0x0100, 0x0100, |
| 165 | "Nokia", | 172 | "Nokia", |
| @@ -232,6 +239,20 @@ UNUSUAL_DEV( 0x0421, 0x04b9, 0x0551, 0x0551, | |||
| 232 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 239 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 233 | US_FL_FIX_CAPACITY ), | 240 | US_FL_FIX_CAPACITY ), |
| 234 | 241 | ||
| 242 | /* Reported by Richard Nauber <RichardNauber@web.de> */ | ||
| 243 | UNUSUAL_DEV( 0x0421, 0x04fa, 0x0601, 0x0601, | ||
| 244 | "Nokia", | ||
| 245 | "6300", | ||
| 246 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 247 | US_FL_FIX_CAPACITY ), | ||
| 248 | |||
| 249 | /* Patch for Nokia 5310 capacity */ | ||
| 250 | UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591, | ||
| 251 | "Nokia", | ||
| 252 | "5310", | ||
| 253 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 254 | US_FL_FIX_CAPACITY ), | ||
| 255 | |||
| 235 | /* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */ | 256 | /* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */ |
| 236 | UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210, | 257 | UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210, |
| 237 | "SMSC", | 258 | "SMSC", |
| @@ -987,6 +1008,13 @@ UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001, | |||
| 987 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1008 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 988 | US_FL_FIX_CAPACITY ), | 1009 | US_FL_FIX_CAPACITY ), |
| 989 | 1010 | ||
| 1011 | /* Reported by Adrian Pilchowiec <adi1981@epf.pl> */ | ||
| 1012 | UNUSUAL_DEV( 0x071b, 0x3203, 0x0000, 0x0000, | ||
| 1013 | "RockChip", | ||
| 1014 | "MP3", | ||
| 1015 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 1016 | US_FL_NO_WP_DETECT | US_FL_MAX_SECTORS_64), | ||
| 1017 | |||
| 990 | /* Reported by Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com> | 1018 | /* Reported by Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com> |
| 991 | * This USB MP3/AVI player device fails and disconnects if more than 128 | 1019 | * This USB MP3/AVI player device fails and disconnects if more than 128 |
| 992 | * sectors (64kB) are read/written in a single command, and may be present | 1020 | * sectors (64kB) are read/written in a single command, and may be present |
| @@ -1576,7 +1604,6 @@ UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100, | |||
| 1576 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1604 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1577 | 0), | 1605 | 0), |
| 1578 | 1606 | ||
| 1579 | #ifdef CONFIG_USB_STORAGE_SIERRA | ||
| 1580 | /* Reported by Kevin Lloyd <linux@sierrawireless.com> | 1607 | /* Reported by Kevin Lloyd <linux@sierrawireless.com> |
| 1581 | * Entry is needed for the initializer function override, | 1608 | * Entry is needed for the initializer function override, |
| 1582 | * which instructs the device to load as a modem | 1609 | * which instructs the device to load as a modem |
| @@ -1587,7 +1614,6 @@ UNUSUAL_DEV( 0x1199, 0x0fff, 0x0000, 0x9999, | |||
| 1587 | "USB MMC Storage", | 1614 | "USB MMC Storage", |
| 1588 | US_SC_DEVICE, US_PR_DEVICE, sierra_ms_init, | 1615 | US_SC_DEVICE, US_PR_DEVICE, sierra_ms_init, |
| 1589 | 0), | 1616 | 0), |
| 1590 | #endif | ||
| 1591 | 1617 | ||
| 1592 | /* Reported by Jaco Kroon <jaco@kroon.co.za> | 1618 | /* Reported by Jaco Kroon <jaco@kroon.co.za> |
| 1593 | * The usb-storage module found on the Digitech GNX4 (and supposedly other | 1619 | * The usb-storage module found on the Digitech GNX4 (and supposedly other |
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index 73679aa506de..27016fd2cad1 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c | |||
| @@ -102,9 +102,7 @@ | |||
| 102 | #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB | 102 | #ifdef CONFIG_USB_STORAGE_CYPRESS_ATACB |
| 103 | #include "cypress_atacb.h" | 103 | #include "cypress_atacb.h" |
| 104 | #endif | 104 | #endif |
| 105 | #ifdef CONFIG_USB_STORAGE_SIERRA | ||
| 106 | #include "sierra_ms.h" | 105 | #include "sierra_ms.h" |
| 107 | #endif | ||
| 108 | 106 | ||
| 109 | /* Some informational data */ | 107 | /* Some informational data */ |
| 110 | MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>"); | 108 | MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>"); |
