diff options
| -rw-r--r-- | drivers/usb/musb/musb_gadget.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 6fca870e957e..de0ca90ceb9b 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
| @@ -568,11 +568,19 @@ static void rxstate(struct musb *musb, struct musb_request *req) | |||
| 568 | { | 568 | { |
| 569 | const u8 epnum = req->epnum; | 569 | const u8 epnum = req->epnum; |
| 570 | struct usb_request *request = &req->request; | 570 | struct usb_request *request = &req->request; |
| 571 | struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_out; | 571 | struct musb_ep *musb_ep; |
| 572 | void __iomem *epio = musb->endpoints[epnum].regs; | 572 | void __iomem *epio = musb->endpoints[epnum].regs; |
| 573 | unsigned fifo_count = 0; | 573 | unsigned fifo_count = 0; |
| 574 | u16 len = musb_ep->packet_sz; | 574 | u16 len; |
| 575 | u16 csr = musb_readw(epio, MUSB_RXCSR); | 575 | u16 csr = musb_readw(epio, MUSB_RXCSR); |
| 576 | struct musb_hw_ep *hw_ep = &musb->endpoints[epnum]; | ||
| 577 | |||
| 578 | if (hw_ep->is_shared_fifo) | ||
| 579 | musb_ep = &hw_ep->ep_in; | ||
| 580 | else | ||
| 581 | musb_ep = &hw_ep->ep_out; | ||
| 582 | |||
| 583 | len = musb_ep->packet_sz; | ||
| 576 | 584 | ||
| 577 | /* We shouldn't get here while DMA is active, but we do... */ | 585 | /* We shouldn't get here while DMA is active, but we do... */ |
| 578 | if (dma_channel_status(musb_ep->dma) == MUSB_DMA_STATUS_BUSY) { | 586 | if (dma_channel_status(musb_ep->dma) == MUSB_DMA_STATUS_BUSY) { |
| @@ -740,9 +748,15 @@ void musb_g_rx(struct musb *musb, u8 epnum) | |||
| 740 | u16 csr; | 748 | u16 csr; |
| 741 | struct usb_request *request; | 749 | struct usb_request *request; |
| 742 | void __iomem *mbase = musb->mregs; | 750 | void __iomem *mbase = musb->mregs; |
| 743 | struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_out; | 751 | struct musb_ep *musb_ep; |
| 744 | void __iomem *epio = musb->endpoints[epnum].regs; | 752 | void __iomem *epio = musb->endpoints[epnum].regs; |
| 745 | struct dma_channel *dma; | 753 | struct dma_channel *dma; |
| 754 | struct musb_hw_ep *hw_ep = &musb->endpoints[epnum]; | ||
| 755 | |||
| 756 | if (hw_ep->is_shared_fifo) | ||
| 757 | musb_ep = &hw_ep->ep_in; | ||
| 758 | else | ||
| 759 | musb_ep = &hw_ep->ep_out; | ||
| 746 | 760 | ||
| 747 | musb_ep_select(mbase, epnum); | 761 | musb_ep_select(mbase, epnum); |
| 748 | 762 | ||
