diff options
Diffstat (limited to 'drivers/usb/host/fhci-sched.c')
-rw-r--r-- | drivers/usb/host/fhci-sched.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/usb/host/fhci-sched.c b/drivers/usb/host/fhci-sched.c index a42ef380e917..2df851b4bc7c 100644 --- a/drivers/usb/host/fhci-sched.c +++ b/drivers/usb/host/fhci-sched.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Freescale QUICC Engine USB Host Controller Driver | 2 | * Freescale QUICC Engine USB Host Controller Driver |
3 | * | 3 | * |
4 | * Copyright (c) Freescale Semicondutor, Inc. 2006. | 4 | * Copyright (c) Freescale Semicondutor, Inc. 2006, 2011. |
5 | * Shlomi Gridish <gridish@freescale.com> | 5 | * Shlomi Gridish <gridish@freescale.com> |
6 | * Jerry Huang <Chang-Ming.Huang@freescale.com> | 6 | * Jerry Huang <Chang-Ming.Huang@freescale.com> |
7 | * Copyright (c) Logic Product Development, Inc. 2007 | 7 | * Copyright (c) Logic Product Development, Inc. 2007 |
@@ -810,9 +810,11 @@ void fhci_queue_urb(struct fhci_hcd *fhci, struct urb *urb) | |||
810 | ed->dev_addr = usb_pipedevice(urb->pipe); | 810 | ed->dev_addr = usb_pipedevice(urb->pipe); |
811 | ed->max_pkt_size = usb_maxpacket(urb->dev, urb->pipe, | 811 | ed->max_pkt_size = usb_maxpacket(urb->dev, urb->pipe, |
812 | usb_pipeout(urb->pipe)); | 812 | usb_pipeout(urb->pipe)); |
813 | /* setup stage */ | ||
813 | td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, FHCI_TA_SETUP, | 814 | td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, FHCI_TA_SETUP, |
814 | USB_TD_TOGGLE_DATA0, urb->setup_packet, 8, 0, 0, true); | 815 | USB_TD_TOGGLE_DATA0, urb->setup_packet, 8, 0, 0, true); |
815 | 816 | ||
817 | /* data stage */ | ||
816 | if (data_len > 0) { | 818 | if (data_len > 0) { |
817 | td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, | 819 | td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, |
818 | usb_pipeout(urb->pipe) ? FHCI_TA_OUT : | 820 | usb_pipeout(urb->pipe) ? FHCI_TA_OUT : |
@@ -820,9 +822,18 @@ void fhci_queue_urb(struct fhci_hcd *fhci, struct urb *urb) | |||
820 | USB_TD_TOGGLE_DATA1, data, data_len, 0, 0, | 822 | USB_TD_TOGGLE_DATA1, data, data_len, 0, 0, |
821 | true); | 823 | true); |
822 | } | 824 | } |
823 | td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, | 825 | |
824 | usb_pipeout(urb->pipe) ? FHCI_TA_IN : FHCI_TA_OUT, | 826 | /* status stage */ |
825 | USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true); | 827 | if (data_len > 0) |
828 | td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, | ||
829 | (usb_pipeout(urb->pipe) ? FHCI_TA_IN : | ||
830 | FHCI_TA_OUT), | ||
831 | USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true); | ||
832 | else | ||
833 | td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, | ||
834 | FHCI_TA_IN, | ||
835 | USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true); | ||
836 | |||
826 | urb_state = US_CTRL_SETUP; | 837 | urb_state = US_CTRL_SETUP; |
827 | break; | 838 | break; |
828 | case FHCI_TF_ISO: | 839 | case FHCI_TF_ISO: |