aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb/musb_gadget.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/musb/musb_gadget.c')
-rw-r--r--drivers/usb/musb/musb_gadget.c37
1 files changed, 20 insertions, 17 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index 86decba48f28..0f59bf935c85 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -189,7 +189,7 @@ __acquires(ep->musb->lock)
189 189
190 req = to_musb_request(request); 190 req = to_musb_request(request);
191 191
192 list_del(&request->list); 192 list_del(&req->list);
193 if (req->request.status == -EINPROGRESS) 193 if (req->request.status == -EINPROGRESS)
194 req->request.status = status; 194 req->request.status = status;
195 musb = req->musb; 195 musb = req->musb;
@@ -251,9 +251,8 @@ static void nuke(struct musb_ep *ep, const int status)
251 ep->dma = NULL; 251 ep->dma = NULL;
252 } 252 }
253 253
254 while (!list_empty(&(ep->req_list))) { 254 while (!list_empty(&ep->req_list)) {
255 req = container_of(ep->req_list.next, struct musb_request, 255 req = list_first_entry(&ep->req_list, struct musb_request, list);
256 request.list);
257 musb_g_giveback(ep, &req->request, status); 256 musb_g_giveback(ep, &req->request, status);
258 } 257 }
259} 258}
@@ -485,6 +484,7 @@ static void txstate(struct musb *musb, struct musb_request *req)
485void musb_g_tx(struct musb *musb, u8 epnum) 484void musb_g_tx(struct musb *musb, u8 epnum)
486{ 485{
487 u16 csr; 486 u16 csr;
487 struct musb_request *req;
488 struct usb_request *request; 488 struct usb_request *request;
489 u8 __iomem *mbase = musb->mregs; 489 u8 __iomem *mbase = musb->mregs;
490 struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_in; 490 struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_in;
@@ -492,7 +492,8 @@ void musb_g_tx(struct musb *musb, u8 epnum)
492 struct dma_channel *dma; 492 struct dma_channel *dma;
493 493
494 musb_ep_select(mbase, epnum); 494 musb_ep_select(mbase, epnum);
495 request = next_request(musb_ep); 495 req = next_request(musb_ep);
496 request = &req->request;
496 497
497 csr = musb_readw(epio, MUSB_TXCSR); 498 csr = musb_readw(epio, MUSB_TXCSR);
498 DBG(4, "<== %s, txcsr %04x\n", musb_ep->end_point.name, csr); 499 DBG(4, "<== %s, txcsr %04x\n", musb_ep->end_point.name, csr);
@@ -571,15 +572,15 @@ void musb_g_tx(struct musb *musb, u8 epnum)
571 572
572 if (request->actual == request->length) { 573 if (request->actual == request->length) {
573 musb_g_giveback(musb_ep, request, 0); 574 musb_g_giveback(musb_ep, request, 0);
574 request = musb_ep->desc ? next_request(musb_ep) : NULL; 575 req = musb_ep->desc ? next_request(musb_ep) : NULL;
575 if (!request) { 576 if (!req) {
576 DBG(4, "%s idle now\n", 577 DBG(4, "%s idle now\n",
577 musb_ep->end_point.name); 578 musb_ep->end_point.name);
578 return; 579 return;
579 } 580 }
580 } 581 }
581 582
582 txstate(musb, to_musb_request(request)); 583 txstate(musb, req);
583 } 584 }
584} 585}
585 586
@@ -821,6 +822,7 @@ static void rxstate(struct musb *musb, struct musb_request *req)
821void musb_g_rx(struct musb *musb, u8 epnum) 822void musb_g_rx(struct musb *musb, u8 epnum)
822{ 823{
823 u16 csr; 824 u16 csr;
825 struct musb_request *req;
824 struct usb_request *request; 826 struct usb_request *request;
825 void __iomem *mbase = musb->mregs; 827 void __iomem *mbase = musb->mregs;
826 struct musb_ep *musb_ep; 828 struct musb_ep *musb_ep;
@@ -835,10 +837,12 @@ void musb_g_rx(struct musb *musb, u8 epnum)
835 837
836 musb_ep_select(mbase, epnum); 838 musb_ep_select(mbase, epnum);
837 839
838 request = next_request(musb_ep); 840 req = next_request(musb_ep);
839 if (!request) 841 if (!req)
840 return; 842 return;
841 843
844 request = &req->request;
845
842 csr = musb_readw(epio, MUSB_RXCSR); 846 csr = musb_readw(epio, MUSB_RXCSR);
843 dma = is_dma_capable() ? musb_ep->dma : NULL; 847 dma = is_dma_capable() ? musb_ep->dma : NULL;
844 848
@@ -914,15 +918,15 @@ void musb_g_rx(struct musb *musb, u8 epnum)
914#endif 918#endif
915 musb_g_giveback(musb_ep, request, 0); 919 musb_g_giveback(musb_ep, request, 0);
916 920
917 request = next_request(musb_ep); 921 req = next_request(musb_ep);
918 if (!request) 922 if (!req)
919 return; 923 return;
920 } 924 }
921#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_TUSB_OMAP_DMA) 925#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_TUSB_OMAP_DMA)
922exit: 926exit:
923#endif 927#endif
924 /* Analyze request */ 928 /* Analyze request */
925 rxstate(musb, to_musb_request(request)); 929 rxstate(musb, req);
926} 930}
927 931
928/* ------------------------------------------------------------ */ 932/* ------------------------------------------------------------ */
@@ -1171,7 +1175,6 @@ struct usb_request *musb_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
1171 return NULL; 1175 return NULL;
1172 } 1176 }
1173 1177
1174 INIT_LIST_HEAD(&request->request.list);
1175 request->request.dma = DMA_ADDR_INVALID; 1178 request->request.dma = DMA_ADDR_INVALID;
1176 request->epnum = musb_ep->current_epnum; 1179 request->epnum = musb_ep->current_epnum;
1177 request->ep = musb_ep; 1180 request->ep = musb_ep;
@@ -1257,10 +1260,10 @@ static int musb_gadget_queue(struct usb_ep *ep, struct usb_request *req,
1257 } 1260 }
1258 1261
1259 /* add request to the list */ 1262 /* add request to the list */
1260 list_add_tail(&(request->request.list), &(musb_ep->req_list)); 1263 list_add_tail(&request->list, &musb_ep->req_list);
1261 1264
1262 /* it this is the head of the queue, start i/o ... */ 1265 /* it this is the head of the queue, start i/o ... */
1263 if (!musb_ep->busy && &request->request.list == musb_ep->req_list.next) 1266 if (!musb_ep->busy && &request->list == musb_ep->req_list.next)
1264 musb_ep_restart(musb, request); 1267 musb_ep_restart(musb, request);
1265 1268
1266cleanup: 1269cleanup:
@@ -1349,7 +1352,7 @@ static int musb_gadget_set_halt(struct usb_ep *ep, int value)
1349 1352
1350 musb_ep_select(mbase, epnum); 1353 musb_ep_select(mbase, epnum);
1351 1354
1352 request = to_musb_request(next_request(musb_ep)); 1355 request = next_request(musb_ep);
1353 if (value) { 1356 if (value) {
1354 if (request) { 1357 if (request) {
1355 DBG(3, "request in progress, cannot halt %s\n", 1358 DBG(3, "request in progress, cannot halt %s\n",