diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/usb/musb/musb_host.c | 49 | 
1 files changed, 22 insertions, 27 deletions
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 75aa01e0036..7295e316bdf 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -837,33 +837,28 @@ static void musb_ep_program(struct musb *musb, u8 epnum,  		/* kick things off */  		if ((is_cppi_enabled() || tusb_dma_omap()) && dma_channel) { -			/* candidate for DMA */ -			if (dma_channel) { -				dma_channel->actual_len = 0L; -				qh->segsize = len; - -				/* AUTOREQ is in a DMA register */ -				musb_writew(hw_ep->regs, MUSB_RXCSR, csr); -				csr = musb_readw(hw_ep->regs, -						MUSB_RXCSR); - -				/* unless caller treats short rx transfers as -				 * errors, we dare not queue multiple transfers. -				 */ -				dma_ok = dma_controller->channel_program( -						dma_channel, packet_sz, -						!(urb->transfer_flags -							& URB_SHORT_NOT_OK), -						urb->transfer_dma + offset, -						qh->segsize); -				if (!dma_ok) { -					dma_controller->channel_release( -							dma_channel); -					hw_ep->rx_channel = NULL; -					dma_channel = NULL; -				} else -					csr |= MUSB_RXCSR_DMAENAB; -			} +			/* Candidate for DMA */ +			dma_channel->actual_len = 0L; +			qh->segsize = len; + +			/* AUTOREQ is in a DMA register */ +			musb_writew(hw_ep->regs, MUSB_RXCSR, csr); +			csr = musb_readw(hw_ep->regs, MUSB_RXCSR); + +			/* +			 * Unless caller treats short RX transfers as +			 * errors, we dare not queue multiple transfers. +			 */ +			dma_ok = dma_controller->channel_program(dma_channel, +					packet_sz, !(urb->transfer_flags & +						     URB_SHORT_NOT_OK), +					urb->transfer_dma + offset, +					qh->segsize); +			if (!dma_ok) { +				dma_controller->channel_release(dma_channel); +				hw_ep->rx_channel = dma_channel = NULL; +			} else +				csr |= MUSB_RXCSR_DMAENAB;  		}  		csr |= MUSB_RXCSR_H_REQPKT;  | 
