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 | ||