History

Merge branch 'usb-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6

* 'usb-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (30 commits) USB: ftdi_sio: add Calao reference board support USB option driver K3765/K4505 avoid CDC_DATA interface USB: option: add YUGA device id to driver usb: s5p-ehci: fix a NULL pointer deference USB: EHCI: Do not rely on PORT_SUSPEND to stop USB resuming in ehci_bus_resume(). USB option driver add PID of Huawei Vodafone K4605 USB option driver add PID of Huawei Vodafone K3806 xhci: Handle zero-length isochronous packets. USB: Avoid NULL pointer deref in usb_hcd_alloc_bandwidth. usb: musb: gadget: fix error path usb: gadget: f_phonet: unlock in error case usb: musb: blackfin: include prefetch head file usb: musb: tusb6010: fix compilation usb: gadget: renesas_usbhs: fix DMA build by including dma-mapping.h usb: musb: cppi: fix build errors due to DBG and missing musb variable usb: musb: ux500: replace missing DBG with dev_dbg usb: musb: ux500: set dma config for both src and dst usb: musb: fix oops on musb_gadget_pullup usb: host: ehci-omap: fix .remove and failure handling path of .probe(v1) usb: gadget: hid: don't STALL when processing a HID Descriptor request ...

Linus Torvalds committed 15 years ago

Commit 7a54f5e2 parents efe45ab c96fbdd17 files · +283 −76Browse files

Unified · Split

17 files
  1. drivers/usb/core/hcd.c +2 −0
  2. drivers/usb/gadget/f_phonet.c +1 −0
  3. drivers/usb/host/ehci-hub.c +3 −4
  4. drivers/usb/host/ehci-s5p.c +1 −0
  5. drivers/usb/host/xhci-hub.c +13 −4
  6. drivers/usb/host/xhci-ring.c +63 −27
  7. drivers/usb/host/xhci.c +24 −4
  8. drivers/usb/musb/blackfin.c +1 −0
  9. drivers/usb/musb/cppi_dma.c +17 −9
  10. drivers/usb/musb/musb_core.h +8 −4
  11. drivers/usb/musb/musb_gadget.c +3 −1
  12. drivers/usb/musb/musb_regs.h +4 −2
  13. drivers/usb/musb/tusb6010.c +1 −0
  14. drivers/usb/musb/tusb6010_omap.c +1 −0
  15. drivers/usb/musb/ux500_dma.c +21 −17
  16. drivers/usb/serial/ftdi_sio.c +19 −1
  17. drivers/usb/serial/option.c +101 −3
drivers/usb/core/hcd.c+2−0
@@ -1775,6 +1775,8 @@ int usb_hcd_alloc_bandwidth(struct usb_device *udev, · 1774 unmodified lines
1775 struct usb_interface *iface = usb_ifnum_to_if(udev,1775 struct usb_interface *iface = usb_ifnum_to_if(udev,
1776 cur_alt->desc.bInterfaceNumber);1776 cur_alt->desc.bInterfaceNumber);
1777 1777
1778 if (!iface)
1779 return -EINVAL;
1778 if (iface->resetting_device) {1780 if (iface->resetting_device) {
1779 /*1781 /*
1780 * The USB core just reset the device, so the xHCI host1782 * The USB core just reset the device, so the xHCI host
drivers/usb/gadget/f_phonet.c+1−0
@@ -434,6 +434,7 @@ static int pn_set_alt(struct usb_function *f, unsigned intf, unsigned alt) · 433 unmodified lines
434 config_ep_by_speed(gadget, f, fp->out_ep)) {434 config_ep_by_speed(gadget, f, fp->out_ep)) {
435 fp->in_ep->desc = NULL;435 fp->in_ep->desc = NULL;
436 fp->out_ep->desc = NULL;436 fp->out_ep->desc = NULL;
437 spin_unlock(&port->lock);
437 return -EINVAL;438 return -EINVAL;
438 }439 }
439 usb_ep_enable(fp->out_ep);440 usb_ep_enable(fp->out_ep);
drivers/usb/host/ehci-hub.c+3−4
@@ -343,7 +343,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd) · 342 unmodified lines
343 u32 temp;343 u32 temp;
344 u32 power_okay;344 u32 power_okay;
345 int i;345 int i;
346 u8 resume_needed = 0;346 unsigned long resume_needed = 0;
347 347
348 if (time_before (jiffies, ehci->next_statechange))348 if (time_before (jiffies, ehci->next_statechange))
349 msleep(5);349 msleep(5);
@@ -416,7 +416,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd) · 66 unmodified lines
416 if (test_bit(i, &ehci->bus_suspended) &&416 if (test_bit(i, &ehci->bus_suspended) &&
417 (temp & PORT_SUSPEND)) {417 (temp & PORT_SUSPEND)) {
418 temp |= PORT_RESUME;418 temp |= PORT_RESUME;
419 resume_needed = 1;419 set_bit(i, &resume_needed);
420 }420 }
421 ehci_writel(ehci, temp, &ehci->regs->port_status [i]);421 ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
422 }422 }
@@ -431,8 +431,7 @@ static int ehci_bus_resume (struct usb_hcd *hcd) · 8 unmodified lines
431 i = HCS_N_PORTS (ehci->hcs_params);431 i = HCS_N_PORTS (ehci->hcs_params);
432 while (i--) {432 while (i--) {
433 temp = ehci_readl(ehci, &ehci->regs->port_status [i]);433 temp = ehci_readl(ehci, &ehci->regs->port_status [i]);
434 if (test_bit(i, &ehci->bus_suspended) &&434 if (test_bit(i, &resume_needed)) {
435 (temp & PORT_SUSPEND)) {
436 temp &= ~(PORT_RWC_BITS | PORT_RESUME);435 temp &= ~(PORT_RWC_BITS | PORT_RESUME);
437 ehci_writel(ehci, temp, &ehci->regs->port_status [i]);436 ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
438 ehci_vdbg (ehci, "resumed port %d\n", i + 1);437 ehci_vdbg (ehci, "resumed port %d\n", i + 1);
drivers/usb/host/ehci-s5p.c+1−0
@@ -86,6 +86,7 @@ static int __devinit s5p_ehci_probe(struct platform_device *pdev) · 85 unmodified lines
86 goto fail_hcd;86 goto fail_hcd;
87 }87 }
88 88
89 s5p_ehci->hcd = hcd;
89 s5p_ehci->clk = clk_get(&pdev->dev, "usbhost");90 s5p_ehci->clk = clk_get(&pdev->dev, "usbhost");
90 91
91 if (IS_ERR(s5p_ehci->clk)) {92 if (IS_ERR(s5p_ehci->clk)) {
drivers/usb/host/xhci-hub.c+13−4
@@ -463,11 +463,12 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, · 462 unmodified lines
463 && (temp & PORT_POWER))463 && (temp & PORT_POWER))
464 status |= USB_PORT_STAT_SUSPEND;464 status |= USB_PORT_STAT_SUSPEND;
465 }465 }
466 if ((temp & PORT_PLS_MASK) == XDEV_RESUME) {466 if ((temp & PORT_PLS_MASK) == XDEV_RESUME &&
467 !DEV_SUPERSPEED(temp)) {
467 if ((temp & PORT_RESET) || !(temp & PORT_PE))468 if ((temp & PORT_RESET) || !(temp & PORT_PE))
468 goto error;469 goto error;
469 if (!DEV_SUPERSPEED(temp) && time_after_eq(jiffies,470 if (time_after_eq(jiffies,
470 bus_state->resume_done[wIndex])) {471 bus_state->resume_done[wIndex])) {
471 xhci_dbg(xhci, "Resume USB2 port %d\n",472 xhci_dbg(xhci, "Resume USB2 port %d\n",
472 wIndex + 1);473 wIndex + 1);
473 bus_state->resume_done[wIndex] = 0;474 bus_state->resume_done[wIndex] = 0;
@@ -487,6 +488,14 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, · 13 unmodified lines
487 xhci_ring_device(xhci, slot_id);488 xhci_ring_device(xhci, slot_id);
488 bus_state->port_c_suspend |= 1 << wIndex;489 bus_state->port_c_suspend |= 1 << wIndex;
489 bus_state->suspended_ports &= ~(1 << wIndex);490 bus_state->suspended_ports &= ~(1 << wIndex);
491 } else {
492 /*
493 * The resume has been signaling for less than
494 * 20ms. Report the port status as SUSPEND,
495 * let the usbcore check port status again
496 * and clear resume signaling later.
497 */
498 status |= USB_PORT_STAT_SUSPEND;
490 }499 }
491 }500 }
492 if ((temp & PORT_PLS_MASK) == XDEV_U0501 if ((temp & PORT_PLS_MASK) == XDEV_U0
@@ -664,7 +673,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, · 171 unmodified lines
664 xhci_dbg(xhci, "PORTSC %04x\n", temp);673 xhci_dbg(xhci, "PORTSC %04x\n", temp);
665 if (temp & PORT_RESET)674 if (temp & PORT_RESET)
666 goto error;675 goto error;
667 if (temp & XDEV_U3) {676 if ((temp & PORT_PLS_MASK) == XDEV_U3) {
668 if ((temp & PORT_PE) == 0)677 if ((temp & PORT_PE) == 0)
669 goto error;678 goto error;
670 679
drivers/usb/host/xhci-ring.c+63−27
@@ -514,8 +514,12 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci, · 513 unmodified lines
514 (unsigned long long) addr);514 (unsigned long long) addr);
515}515}
516 516
517/* flip_cycle means flip the cycle bit of all but the first and last TRB.
518 * (The last TRB actually points to the ring enqueue pointer, which is not part
519 * of this TD.) This is used to remove partially enqueued isoc TDs from a ring.
520 */
517static void td_to_noop(struct xhci_hcd *xhci, struct xhci_ring *ep_ring,521static void td_to_noop(struct xhci_hcd *xhci, struct xhci_ring *ep_ring,
518 struct xhci_td *cur_td)522 struct xhci_td *cur_td, bool flip_cycle)
519{523{
520 struct xhci_segment *cur_seg;524 struct xhci_segment *cur_seg;
521 union xhci_trb *cur_trb;525 union xhci_trb *cur_trb;
@@ -528,6 +532,12 @@ static void td_to_noop(struct xhci_hcd *xhci, struct xhci_ring *ep_ring, · 6 unmodified lines
528 * leave the pointers intact.532 * leave the pointers intact.
529 */533 */
530 cur_trb->generic.field[3] &= cpu_to_le32(~TRB_CHAIN);534 cur_trb->generic.field[3] &= cpu_to_le32(~TRB_CHAIN);
535 /* Flip the cycle bit (link TRBs can't be the first
536 * or last TRB).
537 */
538 if (flip_cycle)
539 cur_trb->generic.field[3] ^=
540 cpu_to_le32(TRB_CYCLE);
531 xhci_dbg(xhci, "Cancel (unchain) link TRB\n");541 xhci_dbg(xhci, "Cancel (unchain) link TRB\n");
532 xhci_dbg(xhci, "Address = %p (0x%llx dma); "542 xhci_dbg(xhci, "Address = %p (0x%llx dma); "
533 "in seg %p (0x%llx dma)\n",543 "in seg %p (0x%llx dma)\n",
@@ -541,6 +551,11 @@ static void td_to_noop(struct xhci_hcd *xhci, struct xhci_ring *ep_ring, · 7 unmodified lines
541 cur_trb->generic.field[2] = 0;551 cur_trb->generic.field[2] = 0;
542 /* Preserve only the cycle bit of this TRB */552 /* Preserve only the cycle bit of this TRB */
543 cur_trb->generic.field[3] &= cpu_to_le32(TRB_CYCLE);553 cur_trb->generic.field[3] &= cpu_to_le32(TRB_CYCLE);
554 /* Flip the cycle bit except on the first or last TRB */
555 if (flip_cycle && cur_trb != cur_td->first_trb &&
556 cur_trb != cur_td->last_trb)
557 cur_trb->generic.field[3] ^=
558 cpu_to_le32(TRB_CYCLE);
544 cur_trb->generic.field[3] |= cpu_to_le32(559 cur_trb->generic.field[3] |= cpu_to_le32(
545 TRB_TYPE(TRB_TR_NOOP));560 TRB_TYPE(TRB_TR_NOOP));
546 xhci_dbg(xhci, "Cancel TRB %p (0x%llx dma) "561 xhci_dbg(xhci, "Cancel TRB %p (0x%llx dma) "
@@ -719,14 +734,14 @@ static void handle_stopped_endpoint(struct xhci_hcd *xhci, · 172 unmodified lines
719 cur_td->urb->stream_id,734 cur_td->urb->stream_id,
720 cur_td, &deq_state);735 cur_td, &deq_state);
721 else736 else
722 td_to_noop(xhci, ep_ring, cur_td);737 td_to_noop(xhci, ep_ring, cur_td, false);
723remove_finished_td:738remove_finished_td:
724 /*739 /*
725 * The event handler won't see a completion for this TD anymore,740 * The event handler won't see a completion for this TD anymore,
726 * so remove it from the endpoint ring's TD list. Keep it in741 * so remove it from the endpoint ring's TD list. Keep it in
727 * the cancelled TD list for URB completion later.742 * the cancelled TD list for URB completion later.
728 */743 */
729 list_del(&cur_td->td_list);744 list_del_init(&cur_td->td_list);
730 }745 }
731 last_unlinked_td = cur_td;746 last_unlinked_td = cur_td;
732 xhci_stop_watchdog_timer_in_irq(xhci, ep);747 xhci_stop_watchdog_timer_in_irq(xhci, ep);
@@ -754,7 +769,7 @@ remove_finished_td: · 21 unmodified lines
754 do {769 do {
755 cur_td = list_entry(ep->cancelled_td_list.next,770 cur_td = list_entry(ep->cancelled_td_list.next,
756 struct xhci_td, cancelled_td_list);771 struct xhci_td, cancelled_td_list);
757 list_del(&cur_td->cancelled_td_list);772 list_del_init(&cur_td->cancelled_td_list);
758 773
759 /* Clean up the cancelled URB */774 /* Clean up the cancelled URB */
760 /* Doesn't matter what we pass for status, since the core will775 /* Doesn't matter what we pass for status, since the core will
@@ -862,9 +877,9 @@ void xhci_stop_endpoint_command_watchdog(unsigned long arg) · 101 unmodified lines
862 cur_td = list_first_entry(&ring->td_list,877 cur_td = list_first_entry(&ring->td_list,
863 struct xhci_td,878 struct xhci_td,
864 td_list);879 td_list);
865 list_del(&cur_td->td_list);880 list_del_init(&cur_td->td_list);
866 if (!list_empty(&cur_td->cancelled_td_list))881 if (!list_empty(&cur_td->cancelled_td_list))
867 list_del(&cur_td->cancelled_td_list);882 list_del_init(&cur_td->cancelled_td_list);
868 xhci_giveback_urb_in_irq(xhci, cur_td,883 xhci_giveback_urb_in_irq(xhci, cur_td,
869 -ESHUTDOWN, "killed");884 -ESHUTDOWN, "killed");
870 }885 }
@@ -873,7 +888,7 @@ void xhci_stop_endpoint_command_watchdog(unsigned long arg) · 2 unmodified lines
873 &temp_ep->cancelled_td_list,888 &temp_ep->cancelled_td_list,
874 struct xhci_td,889 struct xhci_td,
875 cancelled_td_list);890 cancelled_td_list);
876 list_del(&cur_td->cancelled_td_list);891 list_del_init(&cur_td->cancelled_td_list);
877 xhci_giveback_urb_in_irq(xhci, cur_td,892 xhci_giveback_urb_in_irq(xhci, cur_td,
878 -ESHUTDOWN, "killed");893 -ESHUTDOWN, "killed");
879 }894 }
@@ -1565,10 +1580,10 @@ td_cleanup: · 685 unmodified lines
1565 else1580 else
1566 *status = 0;1581 *status = 0;
1567 }1582 }
1568 list_del(&td->td_list);1583 list_del_init(&td->td_list);
1569 /* Was this TD slated to be cancelled but completed anyway? */1584 /* Was this TD slated to be cancelled but completed anyway? */
1570 if (!list_empty(&td->cancelled_td_list))1585 if (!list_empty(&td->cancelled_td_list))
1571 list_del(&td->cancelled_td_list);1586 list_del_init(&td->cancelled_td_list);
1572 1587
1573 urb_priv->td_cnt++;1588 urb_priv->td_cnt++;
1574 /* Giveback the urb when all the tds are completed */1589 /* Giveback the urb when all the tds are completed */
@@ -2500,11 +2515,8 @@ static int prepare_transfer(struct xhci_hcd *xhci, · 925 unmodified lines
2500 2515
2501 if (td_index == 0) {2516 if (td_index == 0) {
2502 ret = usb_hcd_link_urb_to_ep(bus_to_hcd(urb->dev->bus), urb);2517 ret = usb_hcd_link_urb_to_ep(bus_to_hcd(urb->dev->bus), urb);
2503 if (unlikely(ret)) {2518 if (unlikely(ret))
2504 xhci_urb_free_priv(xhci, urb_priv);
2505 urb->hcpriv = NULL;
2506 return ret;2519 return ret;
2507 }
2508 }2520 }
2509 2521
2510 td->urb = urb;2522 td->urb = urb;
@@ -2672,6 +2684,10 @@ static u32 xhci_v1_0_td_remainder(int running_total, int trb_buff_len, · 161 unmodified lines
2672{2684{
2673 int packets_transferred;2685 int packets_transferred;
2674 2686
2687 /* One TRB with a zero-length data packet. */
2688 if (running_total == 0 && trb_buff_len == 0)
2689 return 0;
2690
2675 /* All the TRB queueing functions don't count the current TRB in2691 /* All the TRB queueing functions don't count the current TRB in
2676 * running_total.2692 * running_total.
2677 */2693 */
@@ -3113,20 +3129,15 @@ static int count_isoc_trbs_needed(struct xhci_hcd *xhci, · 435 unmodified lines
3113 struct urb *urb, int i)3129 struct urb *urb, int i)
3114{3130{
3115 int num_trbs = 0;3131 int num_trbs = 0;
3116 u64 addr, td_len, running_total;3132 u64 addr, td_len;
3117 3133
3118 addr = (u64) (urb->transfer_dma + urb->iso_frame_desc[i].offset);3134 addr = (u64) (urb->transfer_dma + urb->iso_frame_desc[i].offset);
3119 td_len = urb->iso_frame_desc[i].length;3135 td_len = urb->iso_frame_desc[i].length;
3120 3136
3121 running_total = TRB_MAX_BUFF_SIZE - (addr & (TRB_MAX_BUFF_SIZE - 1));3137 num_trbs = DIV_ROUND_UP(td_len + (addr & (TRB_MAX_BUFF_SIZE - 1)),
3122 running_total &= TRB_MAX_BUFF_SIZE - 1;3138 TRB_MAX_BUFF_SIZE);
3123 if (running_total != 0)3139 if (num_trbs == 0)
3124 num_trbs++;
3125
3126 while (running_total < td_len) {
3127 num_trbs++;3140 num_trbs++;
3128 running_total += TRB_MAX_BUFF_SIZE;
3129 }
3130 3141
3131 return num_trbs;3142 return num_trbs;
3132}3143}
@@ -3226,6 +3237,7 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags, · 93 unmodified lines
3226 start_trb = &ep_ring->enqueue->generic;3237 start_trb = &ep_ring->enqueue->generic;
3227 start_cycle = ep_ring->cycle_state;3238 start_cycle = ep_ring->cycle_state;
3228 3239
3240 urb_priv = urb->hcpriv;
3229 /* Queue the first TRB, even if it's zero-length */3241 /* Queue the first TRB, even if it's zero-length */
3230 for (i = 0; i < num_tds; i++) {3242 for (i = 0; i < num_tds; i++) {
3231 unsigned int total_packet_count;3243 unsigned int total_packet_count;
@@ -3237,9 +3249,11 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags, · 5 unmodified lines
3237 addr = start_addr + urb->iso_frame_desc[i].offset;3249 addr = start_addr + urb->iso_frame_desc[i].offset;
3238 td_len = urb->iso_frame_desc[i].length;3250 td_len = urb->iso_frame_desc[i].length;
3239 td_remain_len = td_len;3251 td_remain_len = td_len;
3240 /* FIXME: Ignoring zero-length packets, can those happen? */
3241 total_packet_count = roundup(td_len,3252 total_packet_count = roundup(td_len,
3242 le16_to_cpu(urb->ep->desc.wMaxPacketSize));3253 le16_to_cpu(urb->ep->desc.wMaxPacketSize));
3254 /* A zero-length transfer still involves at least one packet. */
3255 if (total_packet_count == 0)
3256 total_packet_count++;
3243 burst_count = xhci_get_burst_count(xhci, urb->dev, urb,3257 burst_count = xhci_get_burst_count(xhci, urb->dev, urb,
3244 total_packet_count);3258 total_packet_count);
3245 residue = xhci_get_last_burst_packet_count(xhci,3259 residue = xhci_get_last_burst_packet_count(xhci,
@@ -3249,12 +3263,13 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags, · 3 unmodified lines
3249 3263
3250 ret = prepare_transfer(xhci, xhci->devs[slot_id], ep_index,3264 ret = prepare_transfer(xhci, xhci->devs[slot_id], ep_index,
3251 urb->stream_id, trbs_per_td, urb, i, mem_flags);3265 urb->stream_id, trbs_per_td, urb, i, mem_flags);
3252 if (ret < 0)3266 if (ret < 0) {
3253 return ret;3267 if (i == 0)
3268 return ret;
3269 goto cleanup;
3270 }
3254 3271
3255 urb_priv = urb->hcpriv;
3256 td = urb_priv->td[i];3272 td = urb_priv->td[i];
3257
3258 for (j = 0; j < trbs_per_td; j++) {3273 for (j = 0; j < trbs_per_td; j++) {
3259 u32 remainder = 0;3274 u32 remainder = 0;
3260 field = TRB_TBC(burst_count) | TRB_TLBPC(residue);3275 field = TRB_TBC(burst_count) | TRB_TLBPC(residue);
@@ -3344,6 +3359,27 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags, · 83 unmodified lines
3344 giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,3359 giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,
3345 start_cycle, start_trb);3360 start_cycle, start_trb);
3346 return 0;3361 return 0;
3362cleanup:
3363 /* Clean up a partially enqueued isoc transfer. */
3364
3365 for (i--; i >= 0; i--)
3366 list_del_init(&urb_priv->td[i]->td_list);
3367
3368 /* Use the first TD as a temporary variable to turn the TDs we've queued
3369 * into No-ops with a software-owned cycle bit. That way the hardware
3370 * won't accidentally start executing bogus TDs when we partially
3371 * overwrite them. td->first_trb and td->start_seg are already set.
3372 */
3373 urb_priv->td[0]->last_trb = ep_ring->enqueue;
3374 /* Every TRB except the first & last will have its cycle bit flipped. */
3375 td_to_noop(xhci, ep_ring, urb_priv->td[0], true);
3376
3377 /* Reset the ring enqueue back to the first TRB and its cycle bit. */
3378 ep_ring->enqueue = urb_priv->td[0]->first_trb;
3379 ep_ring->enq_seg = urb_priv->td[0]->start_seg;
3380 ep_ring->cycle_state = start_cycle;
3381 usb_hcd_unlink_urb_from_ep(bus_to_hcd(urb->dev->bus), urb);
3382 return ret;
3347}3383}
3348 3384
3349/*3385/*
drivers/usb/host/xhci.c+24−4
@@ -1085,8 +1085,11 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags) · 1084 unmodified lines
1085 if (urb->dev->speed == USB_SPEED_FULL) {1085 if (urb->dev->speed == USB_SPEED_FULL) {
1086 ret = xhci_check_maxpacket(xhci, slot_id,1086 ret = xhci_check_maxpacket(xhci, slot_id,
1087 ep_index, urb);1087 ep_index, urb);
1088 if (ret < 0)1088 if (ret < 0) {
1089 xhci_urb_free_priv(xhci, urb_priv);
1090 urb->hcpriv = NULL;
1089 return ret;1091 return ret;
1092 }
1090 }1093 }
1091 1094
1092 /* We have a spinlock and interrupts disabled, so we must pass1095 /* We have a spinlock and interrupts disabled, so we must pass
@@ -1097,6 +1100,8 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags) · 4 unmodified lines
1097 goto dying;1100 goto dying;
1098 ret = xhci_queue_ctrl_tx(xhci, GFP_ATOMIC, urb,1101 ret = xhci_queue_ctrl_tx(xhci, GFP_ATOMIC, urb,
1099 slot_id, ep_index);1102 slot_id, ep_index);
1103 if (ret)
1104 goto free_priv;
1100 spin_unlock_irqrestore(&xhci->lock, flags);1105 spin_unlock_irqrestore(&xhci->lock, flags);
1101 } else if (usb_endpoint_xfer_bulk(&urb->ep->desc)) {1106 } else if (usb_endpoint_xfer_bulk(&urb->ep->desc)) {
1102 spin_lock_irqsave(&xhci->lock, flags);1107 spin_lock_irqsave(&xhci->lock, flags);
@@ -1117,6 +1122,8 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags) · 14 unmodified lines
1117 ret = xhci_queue_bulk_tx(xhci, GFP_ATOMIC, urb,1122 ret = xhci_queue_bulk_tx(xhci, GFP_ATOMIC, urb,
1118 slot_id, ep_index);1123 slot_id, ep_index);
1119 }1124 }
1125 if (ret)
1126 goto free_priv;
1120 spin_unlock_irqrestore(&xhci->lock, flags);1127 spin_unlock_irqrestore(&xhci->lock, flags);
1121 } else if (usb_endpoint_xfer_int(&urb->ep->desc)) {1128 } else if (usb_endpoint_xfer_int(&urb->ep->desc)) {
1122 spin_lock_irqsave(&xhci->lock, flags);1129 spin_lock_irqsave(&xhci->lock, flags);
@@ -1124,6 +1131,8 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags) · 1 unmodified line
1124 goto dying;1131 goto dying;
1125 ret = xhci_queue_intr_tx(xhci, GFP_ATOMIC, urb,1132 ret = xhci_queue_intr_tx(xhci, GFP_ATOMIC, urb,
1126 slot_id, ep_index);1133 slot_id, ep_index);
1134 if (ret)
1135 goto free_priv;
1127 spin_unlock_irqrestore(&xhci->lock, flags);1136 spin_unlock_irqrestore(&xhci->lock, flags);
1128 } else {1137 } else {
1129 spin_lock_irqsave(&xhci->lock, flags);1138 spin_lock_irqsave(&xhci->lock, flags);
@@ -1131,18 +1140,22 @@ int xhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, gfp_t mem_flags) · 1 unmodified line
1131 goto dying;1140 goto dying;
1132 ret = xhci_queue_isoc_tx_prepare(xhci, GFP_ATOMIC, urb,1141 ret = xhci_queue_isoc_tx_prepare(xhci, GFP_ATOMIC, urb,
1133 slot_id, ep_index);1142 slot_id, ep_index);
1143 if (ret)
1144 goto free_priv;
1134 spin_unlock_irqrestore(&xhci->lock, flags);1145 spin_unlock_irqrestore(&xhci->lock, flags);
1135 }1146 }
1136exit:1147exit:
1137 return ret;1148 return ret;
1138dying:1149dying:
1139 xhci_urb_free_priv(xhci, urb_priv);
1140 urb->hcpriv = NULL;
1141 xhci_dbg(xhci, "Ep 0x%x: URB %p submitted for "1150 xhci_dbg(xhci, "Ep 0x%x: URB %p submitted for "
1142 "non-responsive xHCI host.\n",1151 "non-responsive xHCI host.\n",
1143 urb->ep->desc.bEndpointAddress, urb);1152 urb->ep->desc.bEndpointAddress, urb);
1153 ret = -ESHUTDOWN;
1154free_priv:
1155 xhci_urb_free_priv(xhci, urb_priv);
1156 urb->hcpriv = NULL;
1144 spin_unlock_irqrestore(&xhci->lock, flags);1157 spin_unlock_irqrestore(&xhci->lock, flags);
1145 return -ESHUTDOWN;1158 return ret;
1146}1159}
1147 1160
1148/* Get the right ring for the given URB.1161/* Get the right ring for the given URB.
@@ -1239,6 +1252,13 @@ int xhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) · 90 unmodified lines
1239 if (temp == 0xffffffff || (xhci->xhc_state & XHCI_STATE_HALTED)) {1252 if (temp == 0xffffffff || (xhci->xhc_state & XHCI_STATE_HALTED)) {
1240 xhci_dbg(xhci, "HW died, freeing TD.\n");1253 xhci_dbg(xhci, "HW died, freeing TD.\n");
1241 urb_priv = urb->hcpriv;1254 urb_priv = urb->hcpriv;
1255 for (i = urb_priv->td_cnt; i < urb_priv->length; i++) {
1256 td = urb_priv->td[i];
1257 if (!list_empty(&td->td_list))
1258 list_del_init(&td->td_list);
1259 if (!list_empty(&td->cancelled_td_list))
1260 list_del_init(&td->cancelled_td_list);
1261 }
1242 1262
1243 usb_hcd_unlink_urb_from_ep(hcd, urb);1263 usb_hcd_unlink_urb_from_ep(hcd, urb);
1244 spin_unlock_irqrestore(&xhci->lock, flags);1264 spin_unlock_irqrestore(&xhci->lock, flags);
drivers/usb/musb/blackfin.c+1−0
@@ -17,6 +17,7 @@ · 16 unmodified lines
17#include <linux/io.h>17#include <linux/io.h>
18#include <linux/platform_device.h>18#include <linux/platform_device.h>
19#include <linux/dma-mapping.h>19#include <linux/dma-mapping.h>
20#include <linux/prefetch.h>
20 21
21#include <asm/cacheflush.h>22#include <asm/cacheflush.h>
22 23
drivers/usb/musb/cppi_dma.c+17−9
@@ -226,8 +226,10 @@ static int cppi_controller_stop(struct dma_controller *c) · 225 unmodified lines
226 struct cppi *controller;226 struct cppi *controller;
227 void __iomem *tibase;227 void __iomem *tibase;
228 int i;228 int i;
229 struct musb *musb;
229 230
230 controller = container_of(c, struct cppi, controller);231 controller = container_of(c, struct cppi, controller);
232 musb = controller->musb;
231 233
232 tibase = controller->tibase;234 tibase = controller->tibase;
233 /* DISABLE INDIVIDUAL CHANNEL Interrupts */235 /* DISABLE INDIVIDUAL CHANNEL Interrupts */
@@ -289,9 +291,11 @@ cppi_channel_allocate(struct dma_controller *c, · 55 unmodified lines
289 u8 index;291 u8 index;
290 struct cppi_channel *cppi_ch;292 struct cppi_channel *cppi_ch;
291 void __iomem *tibase;293 void __iomem *tibase;
294 struct musb *musb;
292 295
293 controller = container_of(c, struct cppi, controller);296 controller = container_of(c, struct cppi, controller);
294 tibase = controller->tibase;297 tibase = controller->tibase;
298 musb = controller->musb;
295 299
296 /* ep0 doesn't use DMA; remember cppi indices are 0..N-1 */300 /* ep0 doesn't use DMA; remember cppi indices are 0..N-1 */
297 index = ep->epnum - 1;301 index = ep->epnum - 1;
@@ -339,7 +343,8 @@ static void cppi_channel_release(struct dma_channel *channel) · 41 unmodified lines
339 c = container_of(channel, struct cppi_channel, channel);343 c = container_of(channel, struct cppi_channel, channel);
340 tibase = c->controller->tibase;344 tibase = c->controller->tibase;
341 if (!c->hw_ep)345 if (!c->hw_ep)
342 dev_dbg(musb->controller, "releasing idle DMA channel %p\n", c);346 dev_dbg(c->controller->musb->controller,
347 "releasing idle DMA channel %p\n", c);
343 else if (!c->transmit)348 else if (!c->transmit)
344 core_rxirq_enable(tibase, c->index + 1);349 core_rxirq_enable(tibase, c->index + 1);
345 350
@@ -357,10 +362,11 @@ cppi_dump_rx(int level, struct cppi_channel *c, const char *tag) · 11 unmodified lines
357 362
358 musb_ep_select(base, c->index + 1);363 musb_ep_select(base, c->index + 1);
359 364
360 DBG(level, "RX DMA%d%s: %d left, csr %04x, "365 dev_dbg(c->controller->musb->controller,
361 "%08x H%08x S%08x C%08x, "366 "RX DMA%d%s: %d left, csr %04x, "
362 "B%08x L%08x %08x .. %08x"367 "%08x H%08x S%08x C%08x, "
363 "\n",368 "B%08x L%08x %08x .. %08x"
369 "\n",
364 c->index, tag,370 c->index, tag,
365 musb_readl(c->controller->tibase,371 musb_readl(c->controller->tibase,
366 DAVINCI_RXCPPI_BUFCNT0_REG + 4 * c->index),372 DAVINCI_RXCPPI_BUFCNT0_REG + 4 * c->index),
@@ -387,10 +393,11 @@ cppi_dump_tx(int level, struct cppi_channel *c, const char *tag) · 20 unmodified lines
387 393
388 musb_ep_select(base, c->index + 1);394 musb_ep_select(base, c->index + 1);
389 395
390 DBG(level, "TX DMA%d%s: csr %04x, "396 dev_dbg(c->controller->musb->controller,
391 "H%08x S%08x C%08x %08x, "397 "TX DMA%d%s: csr %04x, "
392 "F%08x L%08x .. %08x"398 "H%08x S%08x C%08x %08x, "
393 "\n",399 "F%08x L%08x .. %08x"
400 "\n",
394 c->index, tag,401 c->index, tag,
395 musb_readw(c->hw_ep->regs, MUSB_TXCSR),402 musb_readw(c->hw_ep->regs, MUSB_TXCSR),
396 403
@@ -1022,6 +1029,7 @@ static bool cppi_rx_scan(struct cppi *cppi, unsigned ch) · 625 unmodified lines
1022 int i;1029 int i;
1023 dma_addr_t safe2ack;1030 dma_addr_t safe2ack;
1024 void __iomem *regs = rx->hw_ep->regs;1031 void __iomem *regs = rx->hw_ep->regs;
1032 struct musb *musb = cppi->musb;
1025 1033
1026 cppi_dump_rx(6, rx, "/K");1034 cppi_dump_rx(6, rx, "/K");
1027 1035
drivers/usb/musb/musb_core.h+8−4
@@ -172,7 +172,8 @@ enum musb_g_ep0_state { · 171 unmodified lines
172#endif172#endif
173 173
174/* TUSB mapping: "flat" plus ep0 special cases */174/* TUSB mapping: "flat" plus ep0 special cases */
175#if defined(CONFIG_USB_MUSB_TUSB6010)175#if defined(CONFIG_USB_MUSB_TUSB6010) || \
176 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
176#define musb_ep_select(_mbase, _epnum) \177#define musb_ep_select(_mbase, _epnum) \
177 musb_writeb((_mbase), MUSB_INDEX, (_epnum))178 musb_writeb((_mbase), MUSB_INDEX, (_epnum))
178#define MUSB_EP_OFFSET MUSB_TUSB_OFFSET179#define MUSB_EP_OFFSET MUSB_TUSB_OFFSET
@@ -241,7 +242,8 @@ struct musb_hw_ep { · 62 unmodified lines
241 void __iomem *fifo;242 void __iomem *fifo;
242 void __iomem *regs;243 void __iomem *regs;
243 244
244#ifdef CONFIG_USB_MUSB_TUSB6010245#if defined(CONFIG_USB_MUSB_TUSB6010) || \
246 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
245 void __iomem *conf;247 void __iomem *conf;
246#endif248#endif
247 249
@@ -258,7 +260,8 @@ struct musb_hw_ep { · 10 unmodified lines
258 struct dma_channel *tx_channel;260 struct dma_channel *tx_channel;
259 struct dma_channel *rx_channel;261 struct dma_channel *rx_channel;
260 262
261#ifdef CONFIG_USB_MUSB_TUSB6010263#if defined(CONFIG_USB_MUSB_TUSB6010) || \
264 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
262 /* TUSB has "asynchronous" and "synchronous" dma modes */265 /* TUSB has "asynchronous" and "synchronous" dma modes */
263 dma_addr_t fifo_async;266 dma_addr_t fifo_async;
264 dma_addr_t fifo_sync;267 dma_addr_t fifo_sync;
@@ -356,7 +359,8 @@ struct musb { · 91 unmodified lines
356 void __iomem *ctrl_base;359 void __iomem *ctrl_base;
357 void __iomem *mregs;360 void __iomem *mregs;
358 361
359#ifdef CONFIG_USB_MUSB_TUSB6010362#if defined(CONFIG_USB_MUSB_TUSB6010) || \
363 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
360 dma_addr_t async;364 dma_addr_t async;
361 dma_addr_t sync;365 dma_addr_t sync;
362 void __iomem *sync_va;366 void __iomem *sync_va;
drivers/usb/musb/musb_gadget.c+3−1
@@ -1856,6 +1856,7 @@ int __init musb_gadget_setup(struct musb *musb) · 1855 unmodified lines
1856 1856
1857 return 0;1857 return 0;
1858err:1858err:
1859 musb->g.dev.parent = NULL;
1859 device_unregister(&musb->g.dev);1860 device_unregister(&musb->g.dev);
1860 return status;1861 return status;
1861}1862}
@@ -1863,7 +1864,8 @@ err: · 1 unmodified line
1863void musb_gadget_cleanup(struct musb *musb)1864void musb_gadget_cleanup(struct musb *musb)
1864{1865{
1865 usb_del_gadget_udc(&musb->g);1866 usb_del_gadget_udc(&musb->g);
1866 device_unregister(&musb->g.dev);1867 if (musb->g.dev.parent)
1868 device_unregister(&musb->g.dev);
1867}1869}
1868 1870
1869/*1871/*
drivers/usb/musb/musb_regs.h+4−2
@@ -234,7 +234,8 @@ · 233 unmodified lines
234#define MUSB_TESTMODE 0x0F /* 8 bit */234#define MUSB_TESTMODE 0x0F /* 8 bit */
235 235
236/* Get offset for a given FIFO from musb->mregs */236/* Get offset for a given FIFO from musb->mregs */
237#ifdef CONFIG_USB_MUSB_TUSB6010237#if defined(CONFIG_USB_MUSB_TUSB6010) || \
238 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
238#define MUSB_FIFO_OFFSET(epnum) (0x200 + ((epnum) * 0x20))239#define MUSB_FIFO_OFFSET(epnum) (0x200 + ((epnum) * 0x20))
239#else240#else
240#define MUSB_FIFO_OFFSET(epnum) (0x20 + ((epnum) * 4))241#define MUSB_FIFO_OFFSET(epnum) (0x20 + ((epnum) * 4))
@@ -295,7 +296,8 @@ · 54 unmodified lines
295#define MUSB_FLAT_OFFSET(_epnum, _offset) \296#define MUSB_FLAT_OFFSET(_epnum, _offset) \
296 (0x100 + (0x10*(_epnum)) + (_offset))297 (0x100 + (0x10*(_epnum)) + (_offset))
297 298
298#ifdef CONFIG_USB_MUSB_TUSB6010299#if defined(CONFIG_USB_MUSB_TUSB6010) || \
300 defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
299/* TUSB6010 EP0 configuration register is special */301/* TUSB6010 EP0 configuration register is special */
300#define MUSB_TUSB_OFFSET(_epnum, _offset) \302#define MUSB_TUSB_OFFSET(_epnum, _offset) \
301 (0x10 + _offset)303 (0x10 + _offset)
drivers/usb/musb/tusb6010.c+1−0
@@ -18,6 +18,7 @@ · 17 unmodified lines
18#include <linux/kernel.h>18#include <linux/kernel.h>
19#include <linux/errno.h>19#include <linux/errno.h>
20#include <linux/init.h>20#include <linux/init.h>
21#include <linux/prefetch.h>
21#include <linux/usb.h>22#include <linux/usb.h>
22#include <linux/irq.h>23#include <linux/irq.h>
23#include <linux/platform_device.h>24#include <linux/platform_device.h>
drivers/usb/musb/tusb6010_omap.c+1−0
@@ -20,6 +20,7 @@ · 19 unmodified lines
20#include <plat/mux.h>20#include <plat/mux.h>
21 21
22#include "musb_core.h"22#include "musb_core.h"
23#include "tusb6010.h"
23 24
24#define to_chdat(c) ((struct tusb_omap_dma_ch *)(c)->private_data)25#define to_chdat(c) ((struct tusb_omap_dma_ch *)(c)->private_data)
25 26
drivers/usb/musb/ux500_dma.c+21−17
@@ -65,7 +65,8 @@ static void ux500_tx_work(struct work_struct *data) · 64 unmodified lines
65 struct musb *musb = hw_ep->musb;65 struct musb *musb = hw_ep->musb;
66 unsigned long flags;66 unsigned long flags;
67 67
68 DBG(4, "DMA tx transfer done on hw_ep=%d\n", hw_ep->epnum);68 dev_dbg(musb->controller, "DMA tx transfer done on hw_ep=%d\n",
69 hw_ep->epnum);
69 70
70 spin_lock_irqsave(&musb->lock, flags);71 spin_lock_irqsave(&musb->lock, flags);
71 ux500_channel->channel.actual_len = ux500_channel->cur_len;72 ux500_channel->channel.actual_len = ux500_channel->cur_len;
@@ -84,7 +85,8 @@ static void ux500_rx_work(struct work_struct *data) · 12 unmodified lines
84 struct musb *musb = hw_ep->musb;85 struct musb *musb = hw_ep->musb;
85 unsigned long flags;86 unsigned long flags;
86 87
87 DBG(4, "DMA rx transfer done on hw_ep=%d\n", hw_ep->epnum);88 dev_dbg(musb->controller, "DMA rx transfer done on hw_ep=%d\n",
89 hw_ep->epnum);
88 90
89 spin_lock_irqsave(&musb->lock, flags);91 spin_lock_irqsave(&musb->lock, flags);
90 ux500_channel->channel.actual_len = ux500_channel->cur_len;92 ux500_channel->channel.actual_len = ux500_channel->cur_len;
@@ -116,9 +118,11 @@ static bool ux500_configure_channel(struct dma_channel *channel, · 25 unmodified lines
116 enum dma_slave_buswidth addr_width;118 enum dma_slave_buswidth addr_width;
117 dma_addr_t usb_fifo_addr = (MUSB_FIFO_OFFSET(hw_ep->epnum) +119 dma_addr_t usb_fifo_addr = (MUSB_FIFO_OFFSET(hw_ep->epnum) +
118 ux500_channel->controller->phy_base);120 ux500_channel->controller->phy_base);
121 struct musb *musb = ux500_channel->controller->private_data;
119 122
120 DBG(4, "packet_sz=%d, mode=%d, dma_addr=0x%x, len=%d is_tx=%d\n",123 dev_dbg(musb->controller,
121 packet_sz, mode, dma_addr, len, ux500_channel->is_tx);124 "packet_sz=%d, mode=%d, dma_addr=0x%x, len=%d is_tx=%d\n",
125 packet_sz, mode, dma_addr, len, ux500_channel->is_tx);
122 126
123 ux500_channel->cur_len = len;127 ux500_channel->cur_len = len;
124 128
@@ -133,15 +137,13 @@ static bool ux500_configure_channel(struct dma_channel *channel, · 8 unmodified lines
133 DMA_SLAVE_BUSWIDTH_4_BYTES;137 DMA_SLAVE_BUSWIDTH_4_BYTES;
134 138
135 slave_conf.direction = direction;139 slave_conf.direction = direction;
136 if (direction == DMA_FROM_DEVICE) {140 slave_conf.src_addr = usb_fifo_addr;
137 slave_conf.src_addr = usb_fifo_addr;141 slave_conf.src_addr_width = addr_width;
138 slave_conf.src_addr_width = addr_width;142 slave_conf.src_maxburst = 16;
139 slave_conf.src_maxburst = 16;143 slave_conf.dst_addr = usb_fifo_addr;
140 } else {144 slave_conf.dst_addr_width = addr_width;
141 slave_conf.dst_addr = usb_fifo_addr;145 slave_conf.dst_maxburst = 16;
142 slave_conf.dst_addr_width = addr_width;146
143 slave_conf.dst_maxburst = 16;
144 }
145 dma_chan->device->device_control(dma_chan, DMA_SLAVE_CONFIG,147 dma_chan->device->device_control(dma_chan, DMA_SLAVE_CONFIG,
146 (unsigned long) &slave_conf);148 (unsigned long) &slave_conf);
147 149
@@ -166,6 +168,7 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c, · 18 unmodified lines
166 struct ux500_dma_controller *controller = container_of(c,168 struct ux500_dma_controller *controller = container_of(c,
167 struct ux500_dma_controller, controller);169 struct ux500_dma_controller, controller);
168 struct ux500_dma_channel *ux500_channel = NULL;170 struct ux500_dma_channel *ux500_channel = NULL;
171 struct musb *musb = controller->private_data;
169 u8 ch_num = hw_ep->epnum - 1;172 u8 ch_num = hw_ep->epnum - 1;
170 u32 max_ch;173 u32 max_ch;
171 174
@@ -192,7 +195,7 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c, · 20 unmodified lines
192 ux500_channel->hw_ep = hw_ep;195 ux500_channel->hw_ep = hw_ep;
193 ux500_channel->is_allocated = 1;196 ux500_channel->is_allocated = 1;
194 197
195 DBG(7, "hw_ep=%d, is_tx=0x%x, channel=%d\n",198 dev_dbg(musb->controller, "hw_ep=%d, is_tx=0x%x, channel=%d\n",
196 hw_ep->epnum, is_tx, ch_num);199 hw_ep->epnum, is_tx, ch_num);
197 200
198 return &(ux500_channel->channel);201 return &(ux500_channel->channel);
@@ -201,8 +204,9 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c, · 2 unmodified lines
201static void ux500_dma_channel_release(struct dma_channel *channel)204static void ux500_dma_channel_release(struct dma_channel *channel)
202{205{
203 struct ux500_dma_channel *ux500_channel = channel->private_data;206 struct ux500_dma_channel *ux500_channel = channel->private_data;
207 struct musb *musb = ux500_channel->controller->private_data;
204 208
205 DBG(7, "channel=%d\n", ux500_channel->ch_num);209 dev_dbg(musb->controller, "channel=%d\n", ux500_channel->ch_num);
206 210
207 if (ux500_channel->is_allocated) {211 if (ux500_channel->is_allocated) {
208 ux500_channel->is_allocated = 0;212 ux500_channel->is_allocated = 0;
@@ -252,8 +256,8 @@ static int ux500_dma_channel_abort(struct dma_channel *channel) · 43 unmodified lines
252 void __iomem *epio = musb->endpoints[ux500_channel->hw_ep->epnum].regs;256 void __iomem *epio = musb->endpoints[ux500_channel->hw_ep->epnum].regs;
253 u16 csr;257 u16 csr;
254 258
255 DBG(4, "channel=%d, is_tx=%d\n", ux500_channel->ch_num,259 dev_dbg(musb->controller, "channel=%d, is_tx=%d\n",
256 ux500_channel->is_tx);260 ux500_channel->ch_num, ux500_channel->is_tx);
257 261
258 if (channel->status == MUSB_DMA_STATUS_BUSY) {262 if (channel->status == MUSB_DMA_STATUS_BUSY) {
259 if (ux500_channel->is_tx) {263 if (ux500_channel->is_tx) {
drivers/usb/serial/ftdi_sio.c+19−1
@@ -101,6 +101,7 @@ static int ftdi_jtag_probe(struct usb_serial *serial); · 100 unmodified lines
101static int ftdi_mtxorb_hack_setup(struct usb_serial *serial);101static int ftdi_mtxorb_hack_setup(struct usb_serial *serial);
102static int ftdi_NDI_device_setup(struct usb_serial *serial);102static int ftdi_NDI_device_setup(struct usb_serial *serial);
103static int ftdi_stmclite_probe(struct usb_serial *serial);103static int ftdi_stmclite_probe(struct usb_serial *serial);
104static int ftdi_8u2232c_probe(struct usb_serial *serial);
104static void ftdi_USB_UIRT_setup(struct ftdi_private *priv);105static void ftdi_USB_UIRT_setup(struct ftdi_private *priv);
105static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv);106static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv);
106 107
@@ -128,6 +129,10 @@ static struct ftdi_sio_quirk ftdi_stmclite_quirk = { · 21 unmodified lines
128 .probe = ftdi_stmclite_probe,129 .probe = ftdi_stmclite_probe,
129};130};
130 131
132static struct ftdi_sio_quirk ftdi_8u2232c_quirk = {
133 .probe = ftdi_8u2232c_probe,
134};
135
131/*136/*
132 * The 8U232AM has the same API as the sio except for:137 * The 8U232AM has the same API as the sio except for:
133 * - it can support MUCH higher baudrates; up to:138 * - it can support MUCH higher baudrates; up to:
@@ -178,7 +183,8 @@ static struct usb_device_id id_table_combined [] = { · 44 unmodified lines
178 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },183 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
179 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },184 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
180 { USB_DEVICE(FTDI_VID, FTDI_232RL_PID) },185 { USB_DEVICE(FTDI_VID, FTDI_232RL_PID) },
181 { USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) },186 { USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) ,
187 .driver_info = (kernel_ulong_t)&ftdi_8u2232c_quirk },
182 { USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },188 { USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },
183 { USB_DEVICE(FTDI_VID, FTDI_232H_PID) },189 { USB_DEVICE(FTDI_VID, FTDI_232H_PID) },
184 { USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },190 { USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },
@@ -1737,6 +1743,18 @@ static int ftdi_jtag_probe(struct usb_serial *serial) · 1552 unmodified lines
1737 return 0;1743 return 0;
1738}1744}
1739 1745
1746static int ftdi_8u2232c_probe(struct usb_serial *serial)
1747{
1748 struct usb_device *udev = serial->dev;
1749
1750 dbg("%s", __func__);
1751
1752 if (strcmp(udev->manufacturer, "CALAO Systems") == 0)
1753 return ftdi_jtag_probe(serial);
1754
1755 return 0;
1756}
1757
1740/*1758/*
1741 * First and second port on STMCLiteadaptors is reserved for JTAG interface1759 * First and second port on STMCLiteadaptors is reserved for JTAG interface
1742 * and the forth port for pio1760 * and the forth port for pio
drivers/usb/serial/option.c+101−3
@@ -148,6 +148,8 @@ static void option_instat_callback(struct urb *urb); · 147 unmodified lines
148#define HUAWEI_PRODUCT_K4505 0x1464148#define HUAWEI_PRODUCT_K4505 0x1464
149#define HUAWEI_PRODUCT_K3765 0x1465149#define HUAWEI_PRODUCT_K3765 0x1465
150#define HUAWEI_PRODUCT_E14AC 0x14AC150#define HUAWEI_PRODUCT_E14AC 0x14AC
151#define HUAWEI_PRODUCT_K3806 0x14AE
152#define HUAWEI_PRODUCT_K4605 0x14C6
151#define HUAWEI_PRODUCT_K3770 0x14C9153#define HUAWEI_PRODUCT_K3770 0x14C9
152#define HUAWEI_PRODUCT_K3771 0x14CA154#define HUAWEI_PRODUCT_K3771 0x14CA
153#define HUAWEI_PRODUCT_K4510 0x14CB155#define HUAWEI_PRODUCT_K4510 0x14CB
@@ -416,6 +418,56 @@ static void option_instat_callback(struct urb *urb); · 262 unmodified lines
416#define SAMSUNG_VENDOR_ID 0x04e8418#define SAMSUNG_VENDOR_ID 0x04e8
417#define SAMSUNG_PRODUCT_GT_B3730 0x6889419#define SAMSUNG_PRODUCT_GT_B3730 0x6889
418 420
421/* YUGA products www.yuga-info.com*/
422#define YUGA_VENDOR_ID 0x257A
423#define YUGA_PRODUCT_CEM600 0x1601
424#define YUGA_PRODUCT_CEM610 0x1602
425#define YUGA_PRODUCT_CEM500 0x1603
426#define YUGA_PRODUCT_CEM510 0x1604
427#define YUGA_PRODUCT_CEM800 0x1605
428#define YUGA_PRODUCT_CEM900 0x1606
429
430#define YUGA_PRODUCT_CEU818 0x1607
431#define YUGA_PRODUCT_CEU816 0x1608
432#define YUGA_PRODUCT_CEU828 0x1609
433#define YUGA_PRODUCT_CEU826 0x160A
434#define YUGA_PRODUCT_CEU518 0x160B
435#define YUGA_PRODUCT_CEU516 0x160C
436#define YUGA_PRODUCT_CEU528 0x160D
437#define YUGA_PRODUCT_CEU526 0x160F
438
439#define YUGA_PRODUCT_CWM600 0x2601
440#define YUGA_PRODUCT_CWM610 0x2602
441#define YUGA_PRODUCT_CWM500 0x2603
442#define YUGA_PRODUCT_CWM510 0x2604
443#define YUGA_PRODUCT_CWM800 0x2605
444#define YUGA_PRODUCT_CWM900 0x2606
445
446#define YUGA_PRODUCT_CWU718 0x2607
447#define YUGA_PRODUCT_CWU716 0x2608
448#define YUGA_PRODUCT_CWU728 0x2609
449#define YUGA_PRODUCT_CWU726 0x260A
450#define YUGA_PRODUCT_CWU518 0x260B
451#define YUGA_PRODUCT_CWU516 0x260C
452#define YUGA_PRODUCT_CWU528 0x260D
453#define YUGA_PRODUCT_CWU526 0x260F
454
455#define YUGA_PRODUCT_CLM600 0x2601
456#define YUGA_PRODUCT_CLM610 0x2602
457#define YUGA_PRODUCT_CLM500 0x2603
458#define YUGA_PRODUCT_CLM510 0x2604
459#define YUGA_PRODUCT_CLM800 0x2605
460#define YUGA_PRODUCT_CLM900 0x2606
461
462#define YUGA_PRODUCT_CLU718 0x2607
463#define YUGA_PRODUCT_CLU716 0x2608
464#define YUGA_PRODUCT_CLU728 0x2609
465#define YUGA_PRODUCT_CLU726 0x260A
466#define YUGA_PRODUCT_CLU518 0x260B
467#define YUGA_PRODUCT_CLU516 0x260C
468#define YUGA_PRODUCT_CLU528 0x260D
469#define YUGA_PRODUCT_CLU526 0x260F
470
419/* some devices interfaces need special handling due to a number of reasons */471/* some devices interfaces need special handling due to a number of reasons */
420enum option_blacklist_reason {472enum option_blacklist_reason {
421 OPTION_BLACKLIST_NONE = 0,473 OPTION_BLACKLIST_NONE = 0,
@@ -551,6 +603,8 @@ static const struct usb_device_id option_ids[] = { · 129 unmodified lines
551 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },603 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },
552 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },604 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
553 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) },605 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) },
606 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3806, 0xff, 0xff, 0xff) },
607 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff) },
554 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) },608 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) },
555 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) },609 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) },
556 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) },610 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) },
@@ -1005,6 +1059,48 @@ static const struct usb_device_id option_ids[] = { · 448 unmodified lines
1005 { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */1059 { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
1006 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */1060 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
1007 { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/1061 { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/
1062 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) },
1063 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) },
1064 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM500) },
1065 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM510) },
1066 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM800) },
1067 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM900) },
1068 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU818) },
1069 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU816) },
1070 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU828) },
1071 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU826) },
1072 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU518) },
1073 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU516) },
1074 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU528) },
1075 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEU526) },
1076 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM600) },
1077 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM610) },
1078 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM500) },
1079 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM510) },
1080 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM800) },
1081 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWM900) },
1082 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU718) },
1083 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU716) },
1084 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU728) },
1085 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU726) },
1086 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU518) },
1087 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU516) },
1088 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU528) },
1089 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CWU526) },
1090 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM600) },
1091 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM610) },
1092 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM500) },
1093 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM510) },
1094 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM800) },
1095 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLM900) },
1096 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU718) },
1097 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU716) },
1098 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU728) },
1099 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU726) },
1100 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU518) },
1101 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU516) },
1102 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU528) },
1103 { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CLU526) },
1008 { } /* Terminating entry */1104 { } /* Terminating entry */
1009};1105};
1010MODULE_DEVICE_TABLE(usb, option_ids);1106MODULE_DEVICE_TABLE(usb, option_ids);
@@ -1134,11 +1230,13 @@ static int option_probe(struct usb_serial *serial, · 123 unmodified lines
1134 serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)1230 serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)
1135 return -ENODEV;1231 return -ENODEV;
1136 1232
1137 /* Don't bind network interfaces on Huawei K3765 & K4505 */1233 /* Don't bind network interfaces on Huawei K3765, K4505 & K4605 */
1138 if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID &&1234 if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID &&
1139 (serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 ||1235 (serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 ||
1140 serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505) &&1236 serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505 ||
1141 serial->interface->cur_altsetting->desc.bInterfaceNumber == 1)1237 serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4605) &&
1238 (serial->interface->cur_altsetting->desc.bInterfaceNumber == 1 ||
1239 serial->interface->cur_altsetting->desc.bInterfaceNumber == 2))
1142 return -ENODEV;1240 return -ENODEV;
1143 1241
1144 /* Don't bind network interface on Samsung GT-B3730, it is handled by a separate module */1242 /* Don't bind network interface on Samsung GT-B3730, it is handled by a separate module */