Commit 273d23574f9dacd9c63c80e7d63639a669aad441

Authored by Jerry Huang
Committed by Greg Kroah-Hartman
1 parent 55b5a624a0

QE/FHCI: fixed the CONTROL bug

For USB CONTROL transaction, when the data length is zero,
the IN package is needed to finish this transaction in status stage.

Signed-off-by: Jerry Huang <r66093@freescale.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Showing 1 changed file with 15 additions and 4 deletions Side-by-side Diff

drivers/usb/host/fhci-sched.c
1 1 /*
2 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 5 * Shlomi Gridish <gridish@freescale.com>
6 6 * Jerry Huang <Chang-Ming.Huang@freescale.com>
7 7 * Copyright (c) Logic Product Development, Inc. 2007
8 8  
... ... @@ -810,9 +810,11 @@
810 810 ed->dev_addr = usb_pipedevice(urb->pipe);
811 811 ed->max_pkt_size = usb_maxpacket(urb->dev, urb->pipe,
812 812 usb_pipeout(urb->pipe));
  813 + /* setup stage */
813 814 td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, FHCI_TA_SETUP,
814 815 USB_TD_TOGGLE_DATA0, urb->setup_packet, 8, 0, 0, true);
815 816  
  817 + /* data stage */
816 818 if (data_len > 0) {
817 819 td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
818 820 usb_pipeout(urb->pipe) ? FHCI_TA_OUT :
... ... @@ -820,9 +822,18 @@
820 822 USB_TD_TOGGLE_DATA1, data, data_len, 0, 0,
821 823 true);
822 824 }
823   - td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
824   - usb_pipeout(urb->pipe) ? FHCI_TA_IN : FHCI_TA_OUT,
825   - USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true);
  825 +
  826 + /* status stage */
  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 837 urb_state = US_CTRL_SETUP;
827 838 break;
828 839 case FHCI_TF_ISO: