diff options
Diffstat (limited to 'drivers/usb/musb/musb_gadget_ep0.c')
-rw-r--r-- | drivers/usb/musb/musb_gadget_ep0.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/drivers/usb/musb/musb_gadget_ep0.c b/drivers/usb/musb/musb_gadget_ep0.c index 6dd03f4c5f49..b2faff235507 100644 --- a/drivers/usb/musb/musb_gadget_ep0.c +++ b/drivers/usb/musb/musb_gadget_ep0.c | |||
@@ -209,7 +209,7 @@ static inline void musb_try_b_hnp_enable(struct musb *musb) | |||
209 | void __iomem *mbase = musb->mregs; | 209 | void __iomem *mbase = musb->mregs; |
210 | u8 devctl; | 210 | u8 devctl; |
211 | 211 | ||
212 | DBG(1, "HNP: Setting HR\n"); | 212 | dev_dbg(musb->controller, "HNP: Setting HR\n"); |
213 | devctl = musb_readb(mbase, MUSB_DEVCTL); | 213 | devctl = musb_readb(mbase, MUSB_DEVCTL); |
214 | musb_writeb(mbase, MUSB_DEVCTL, devctl | MUSB_DEVCTL_HR); | 214 | musb_writeb(mbase, MUSB_DEVCTL, devctl | MUSB_DEVCTL_HR); |
215 | } | 215 | } |
@@ -304,10 +304,9 @@ __acquires(musb->lock) | |||
304 | } | 304 | } |
305 | 305 | ||
306 | /* Maybe start the first request in the queue */ | 306 | /* Maybe start the first request in the queue */ |
307 | request = to_musb_request( | 307 | request = next_request(musb_ep); |
308 | next_request(musb_ep)); | ||
309 | if (!musb_ep->busy && request) { | 308 | if (!musb_ep->busy && request) { |
310 | DBG(3, "restarting the request\n"); | 309 | dev_dbg(musb->controller, "restarting the request\n"); |
311 | musb_ep_restart(musb, request); | 310 | musb_ep_restart(musb, request); |
312 | } | 311 | } |
313 | 312 | ||
@@ -491,10 +490,12 @@ stall: | |||
491 | static void ep0_rxstate(struct musb *musb) | 490 | static void ep0_rxstate(struct musb *musb) |
492 | { | 491 | { |
493 | void __iomem *regs = musb->control_ep->regs; | 492 | void __iomem *regs = musb->control_ep->regs; |
493 | struct musb_request *request; | ||
494 | struct usb_request *req; | 494 | struct usb_request *req; |
495 | u16 count, csr; | 495 | u16 count, csr; |
496 | 496 | ||
497 | req = next_ep0_request(musb); | 497 | request = next_ep0_request(musb); |
498 | req = &request->request; | ||
498 | 499 | ||
499 | /* read packet and ack; or stall because of gadget driver bug: | 500 | /* read packet and ack; or stall because of gadget driver bug: |
500 | * should have provided the rx buffer before setup() returned. | 501 | * should have provided the rx buffer before setup() returned. |
@@ -544,17 +545,20 @@ static void ep0_rxstate(struct musb *musb) | |||
544 | static void ep0_txstate(struct musb *musb) | 545 | static void ep0_txstate(struct musb *musb) |
545 | { | 546 | { |
546 | void __iomem *regs = musb->control_ep->regs; | 547 | void __iomem *regs = musb->control_ep->regs; |
547 | struct usb_request *request = next_ep0_request(musb); | 548 | struct musb_request *req = next_ep0_request(musb); |
549 | struct usb_request *request; | ||
548 | u16 csr = MUSB_CSR0_TXPKTRDY; | 550 | u16 csr = MUSB_CSR0_TXPKTRDY; |
549 | u8 *fifo_src; | 551 | u8 *fifo_src; |
550 | u8 fifo_count; | 552 | u8 fifo_count; |
551 | 553 | ||
552 | if (!request) { | 554 | if (!req) { |
553 | /* WARN_ON(1); */ | 555 | /* WARN_ON(1); */ |
554 | DBG(2, "odd; csr0 %04x\n", musb_readw(regs, MUSB_CSR0)); | 556 | dev_dbg(musb->controller, "odd; csr0 %04x\n", musb_readw(regs, MUSB_CSR0)); |
555 | return; | 557 | return; |
556 | } | 558 | } |
557 | 559 | ||
560 | request = &req->request; | ||
561 | |||
558 | /* load the data */ | 562 | /* load the data */ |
559 | fifo_src = (u8 *) request->buf + request->actual; | 563 | fifo_src = (u8 *) request->buf + request->actual; |
560 | fifo_count = min((unsigned) MUSB_EP0_FIFOSIZE, | 564 | fifo_count = min((unsigned) MUSB_EP0_FIFOSIZE, |
@@ -598,7 +602,7 @@ static void ep0_txstate(struct musb *musb) | |||
598 | static void | 602 | static void |
599 | musb_read_setup(struct musb *musb, struct usb_ctrlrequest *req) | 603 | musb_read_setup(struct musb *musb, struct usb_ctrlrequest *req) |
600 | { | 604 | { |
601 | struct usb_request *r; | 605 | struct musb_request *r; |
602 | void __iomem *regs = musb->control_ep->regs; | 606 | void __iomem *regs = musb->control_ep->regs; |
603 | 607 | ||
604 | musb_read_fifo(&musb->endpoints[0], sizeof *req, (u8 *)req); | 608 | musb_read_fifo(&musb->endpoints[0], sizeof *req, (u8 *)req); |
@@ -606,7 +610,7 @@ musb_read_setup(struct musb *musb, struct usb_ctrlrequest *req) | |||
606 | /* NOTE: earlier 2.6 versions changed setup packets to host | 610 | /* NOTE: earlier 2.6 versions changed setup packets to host |
607 | * order, but now USB packets always stay in USB byte order. | 611 | * order, but now USB packets always stay in USB byte order. |
608 | */ | 612 | */ |
609 | DBG(3, "SETUP req%02x.%02x v%04x i%04x l%d\n", | 613 | dev_dbg(musb->controller, "SETUP req%02x.%02x v%04x i%04x l%d\n", |
610 | req->bRequestType, | 614 | req->bRequestType, |
611 | req->bRequest, | 615 | req->bRequest, |
612 | le16_to_cpu(req->wValue), | 616 | le16_to_cpu(req->wValue), |
@@ -616,7 +620,7 @@ musb_read_setup(struct musb *musb, struct usb_ctrlrequest *req) | |||
616 | /* clean up any leftover transfers */ | 620 | /* clean up any leftover transfers */ |
617 | r = next_ep0_request(musb); | 621 | r = next_ep0_request(musb); |
618 | if (r) | 622 | if (r) |
619 | musb_g_ep0_giveback(musb, r); | 623 | musb_g_ep0_giveback(musb, &r->request); |
620 | 624 | ||
621 | /* For zero-data requests we want to delay the STATUS stage to | 625 | /* For zero-data requests we want to delay the STATUS stage to |
622 | * avoid SETUPEND errors. If we read data (OUT), delay accepting | 626 | * avoid SETUPEND errors. If we read data (OUT), delay accepting |
@@ -674,7 +678,7 @@ irqreturn_t musb_g_ep0_irq(struct musb *musb) | |||
674 | csr = musb_readw(regs, MUSB_CSR0); | 678 | csr = musb_readw(regs, MUSB_CSR0); |
675 | len = musb_readb(regs, MUSB_COUNT0); | 679 | len = musb_readb(regs, MUSB_COUNT0); |
676 | 680 | ||
677 | DBG(4, "csr %04x, count %d, myaddr %d, ep0stage %s\n", | 681 | dev_dbg(musb->controller, "csr %04x, count %d, myaddr %d, ep0stage %s\n", |
678 | csr, len, | 682 | csr, len, |
679 | musb_readb(mbase, MUSB_FADDR), | 683 | musb_readb(mbase, MUSB_FADDR), |
680 | decode_ep0stage(musb->ep0_state)); | 684 | decode_ep0stage(musb->ep0_state)); |
@@ -745,7 +749,7 @@ irqreturn_t musb_g_ep0_irq(struct musb *musb) | |||
745 | 749 | ||
746 | /* enter test mode if needed (exit by reset) */ | 750 | /* enter test mode if needed (exit by reset) */ |
747 | else if (musb->test_mode) { | 751 | else if (musb->test_mode) { |
748 | DBG(1, "entering TESTMODE\n"); | 752 | dev_dbg(musb->controller, "entering TESTMODE\n"); |
749 | 753 | ||
750 | if (MUSB_TEST_PACKET == musb->test_mode_nr) | 754 | if (MUSB_TEST_PACKET == musb->test_mode_nr) |
751 | musb_load_testpacket(musb); | 755 | musb_load_testpacket(musb); |
@@ -758,11 +762,11 @@ irqreturn_t musb_g_ep0_irq(struct musb *musb) | |||
758 | case MUSB_EP0_STAGE_STATUSOUT: | 762 | case MUSB_EP0_STAGE_STATUSOUT: |
759 | /* end of sequence #1: write to host (TX state) */ | 763 | /* end of sequence #1: write to host (TX state) */ |
760 | { | 764 | { |
761 | struct usb_request *req; | 765 | struct musb_request *req; |
762 | 766 | ||
763 | req = next_ep0_request(musb); | 767 | req = next_ep0_request(musb); |
764 | if (req) | 768 | if (req) |
765 | musb_g_ep0_giveback(musb, req); | 769 | musb_g_ep0_giveback(musb, &req->request); |
766 | } | 770 | } |
767 | 771 | ||
768 | /* | 772 | /* |
@@ -857,7 +861,7 @@ setup: | |||
857 | break; | 861 | break; |
858 | } | 862 | } |
859 | 863 | ||
860 | DBG(3, "handled %d, csr %04x, ep0stage %s\n", | 864 | dev_dbg(musb->controller, "handled %d, csr %04x, ep0stage %s\n", |
861 | handled, csr, | 865 | handled, csr, |
862 | decode_ep0stage(musb->ep0_state)); | 866 | decode_ep0stage(musb->ep0_state)); |
863 | 867 | ||
@@ -874,7 +878,7 @@ setup: | |||
874 | if (handled < 0) { | 878 | if (handled < 0) { |
875 | musb_ep_select(mbase, 0); | 879 | musb_ep_select(mbase, 0); |
876 | stall: | 880 | stall: |
877 | DBG(3, "stall (%d)\n", handled); | 881 | dev_dbg(musb->controller, "stall (%d)\n", handled); |
878 | musb->ackpend |= MUSB_CSR0_P_SENDSTALL; | 882 | musb->ackpend |= MUSB_CSR0_P_SENDSTALL; |
879 | musb->ep0_state = MUSB_EP0_STAGE_IDLE; | 883 | musb->ep0_state = MUSB_EP0_STAGE_IDLE; |
880 | finish: | 884 | finish: |
@@ -954,16 +958,16 @@ musb_g_ep0_queue(struct usb_ep *e, struct usb_request *r, gfp_t gfp_flags) | |||
954 | status = 0; | 958 | status = 0; |
955 | break; | 959 | break; |
956 | default: | 960 | default: |
957 | DBG(1, "ep0 request queued in state %d\n", | 961 | dev_dbg(musb->controller, "ep0 request queued in state %d\n", |
958 | musb->ep0_state); | 962 | musb->ep0_state); |
959 | status = -EINVAL; | 963 | status = -EINVAL; |
960 | goto cleanup; | 964 | goto cleanup; |
961 | } | 965 | } |
962 | 966 | ||
963 | /* add request to the list */ | 967 | /* add request to the list */ |
964 | list_add_tail(&(req->request.list), &(ep->req_list)); | 968 | list_add_tail(&req->list, &ep->req_list); |
965 | 969 | ||
966 | DBG(3, "queue to %s (%s), length=%d\n", | 970 | dev_dbg(musb->controller, "queue to %s (%s), length=%d\n", |
967 | ep->name, ep->is_in ? "IN/TX" : "OUT/RX", | 971 | ep->name, ep->is_in ? "IN/TX" : "OUT/RX", |
968 | req->request.length); | 972 | req->request.length); |
969 | 973 | ||
@@ -1056,7 +1060,7 @@ static int musb_g_ep0_halt(struct usb_ep *e, int value) | |||
1056 | musb->ackpend = 0; | 1060 | musb->ackpend = 0; |
1057 | break; | 1061 | break; |
1058 | default: | 1062 | default: |
1059 | DBG(1, "ep0 can't halt in state %d\n", musb->ep0_state); | 1063 | dev_dbg(musb->controller, "ep0 can't halt in state %d\n", musb->ep0_state); |
1060 | status = -EINVAL; | 1064 | status = -EINVAL; |
1061 | } | 1065 | } |
1062 | 1066 | ||