2 * driver/usb/gadget/imx_udc.c
4 * Copyright (C) 2005 Mike Lee <eemike@gmail.com>
5 * Copyright (C) 2008 Darius Augulis <augulis.darius@gmail.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
18 #include <linux/init.h>
19 #include <linux/kernel.h>
20 #include <linux/platform_device.h>
21 #include <linux/module.h>
22 #include <linux/errno.h>
23 #include <linux/list.h>
24 #include <linux/interrupt.h>
26 #include <linux/irq.h>
27 #include <linux/device.h>
28 #include <linux/dma-mapping.h>
29 #include <linux/clk.h>
30 #include <linux/delay.h>
31 #include <linux/timer.h>
33 #include <linux/usb/ch9.h>
34 #include <linux/usb/gadget.h>
37 #include <mach/hardware.h>
41 static const char driver_name[] = "imx_udc";
42 static const char ep0name[] = "ep0";
44 void ep0_chg_stat(const char *label, struct imx_udc_struct *imx_usb,
47 /*******************************************************************************
48 * IMX UDC hardware related functions
49 *******************************************************************************
52 void imx_udc_enable(struct imx_udc_struct *imx_usb)
54 int temp = __raw_readl(imx_usb->base + USB_CTRL);
55 __raw_writel(temp | CTRL_FE_ENA | CTRL_AFE_ENA,
56 imx_usb->base + USB_CTRL);
57 imx_usb->gadget.speed = USB_SPEED_FULL;
60 void imx_udc_disable(struct imx_udc_struct *imx_usb)
62 int temp = __raw_readl(imx_usb->base + USB_CTRL);
64 __raw_writel(temp & ~(CTRL_FE_ENA | CTRL_AFE_ENA),
65 imx_usb->base + USB_CTRL);
67 ep0_chg_stat(__func__, imx_usb, EP0_IDLE);
68 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
71 void imx_udc_reset(struct imx_udc_struct *imx_usb)
73 int temp = __raw_readl(imx_usb->base + USB_ENAB);
76 __raw_writel(temp | ENAB_RST, imx_usb->base + USB_ENAB);
78 /* wait RST bit to clear */
79 do {} while (__raw_readl(imx_usb->base + USB_ENAB) & ENAB_RST);
81 /* wait CFG bit to assert */
82 do {} while (!(__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG));
84 /* udc module is now ready */
87 void imx_udc_config(struct imx_udc_struct *imx_usb)
91 struct imx_ep_struct *imx_ep;
93 /* wait CFG bit to assert */
94 do {} while (!(__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG));
96 /* Download the endpoint buffer for endpoint 0. */
97 for (j = 0; j < 5; j++) {
98 i = (j == 2 ? imx_usb->imx_ep[0].fifosize : 0x00);
99 __raw_writeb(i, imx_usb->base + USB_DDAT);
100 do {} while (__raw_readl(imx_usb->base + USB_DADR) & DADR_BSY);
103 /* Download the endpoint buffers for endpoints 1-5.
104 * We specify two configurations, one interface
106 for (cfg = 1; cfg < 3; cfg++) {
107 for (i = 1; i < IMX_USB_NB_EP; i++) {
108 imx_ep = &imx_usb->imx_ep[i];
109 /* EP no | Config no */
110 ep_conf[0] = (i << 4) | (cfg << 2);
111 /* Type | Direction */
112 ep_conf[1] = (imx_ep->bmAttributes << 3) |
113 (EP_DIR(imx_ep) << 2);
114 /* Max packet size */
115 ep_conf[2] = imx_ep->fifosize;
122 "<%s> ep%d_conf[%d]:"
123 "[%02x-%02x-%02x-%02x-%02x]\n",
125 ep_conf[0], ep_conf[1], ep_conf[2],
126 ep_conf[3], ep_conf[4]);
128 for (j = 0; j < 5; j++) {
129 __raw_writeb(ep_conf[j],
130 imx_usb->base + USB_DDAT);
131 do {} while (__raw_readl(imx_usb->base
138 /* wait CFG bit to clear */
139 do {} while (__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG);
142 void imx_udc_init_irq(struct imx_udc_struct *imx_usb)
146 /* Mask and clear all irqs */
147 __raw_writel(0xFFFFFFFF, imx_usb->base + USB_MASK);
148 __raw_writel(0xFFFFFFFF, imx_usb->base + USB_INTR);
149 for (i = 0; i < IMX_USB_NB_EP; i++) {
150 __raw_writel(0x1FF, imx_usb->base + USB_EP_MASK(i));
151 __raw_writel(0x1FF, imx_usb->base + USB_EP_INTR(i));
154 /* Enable USB irqs */
155 __raw_writel(INTR_MSOF | INTR_FRAME_MATCH, imx_usb->base + USB_MASK);
157 /* Enable EP0 irqs */
158 __raw_writel(0x1FF & ~(EPINTR_DEVREQ | EPINTR_MDEVREQ | EPINTR_EOT
159 | EPINTR_EOF | EPINTR_FIFO_EMPTY | EPINTR_FIFO_FULL),
160 imx_usb->base + USB_EP_MASK(0));
163 void imx_udc_init_ep(struct imx_udc_struct *imx_usb)
166 struct imx_ep_struct *imx_ep;
167 for (i = 0; i < IMX_USB_NB_EP; i++) {
168 imx_ep = &imx_usb->imx_ep[i];
169 switch (imx_ep->fifosize) {
186 temp = (EP_DIR(imx_ep) << 7) | (max << 5)
187 | (imx_ep->bmAttributes << 3);
188 __raw_writel(temp, imx_usb->base + USB_EP_STAT(i));
189 __raw_writel(temp | EPSTAT_FLUSH,
190 imx_usb->base + USB_EP_STAT(i));
191 D_INI(imx_usb->dev, "<%s> ep%d_stat %08x\n", __func__, i,
192 __raw_readl(imx_usb->base + USB_EP_STAT(i)));
196 void imx_udc_init_fifo(struct imx_udc_struct *imx_usb)
199 struct imx_ep_struct *imx_ep;
200 for (i = 0; i < IMX_USB_NB_EP; i++) {
201 imx_ep = &imx_usb->imx_ep[i];
204 temp = EP_DIR(imx_ep) ? 0x0B000000 : 0x0F000000;
205 __raw_writel(temp, imx_usb->base + USB_EP_FCTRL(i));
206 D_INI(imx_usb->dev, "<%s> ep%d_fctrl %08x\n", __func__, i,
207 __raw_readl(imx_usb->base + USB_EP_FCTRL(i)));
210 temp = (i ? imx_ep->fifosize / 2 : 0);
211 __raw_writel(temp, imx_usb->base + USB_EP_FALRM(i));
212 D_INI(imx_usb->dev, "<%s> ep%d_falrm %08x\n", __func__, i,
213 __raw_readl(imx_usb->base + USB_EP_FALRM(i)));
217 static void imx_udc_init(struct imx_udc_struct *imx_usb)
220 imx_udc_reset(imx_usb);
222 /* Download config to enpoint buffer */
223 imx_udc_config(imx_usb);
225 /* Setup interrups */
226 imx_udc_init_irq(imx_usb);
228 /* Setup endpoints */
229 imx_udc_init_ep(imx_usb);
232 imx_udc_init_fifo(imx_usb);
235 void imx_ep_irq_enable(struct imx_ep_struct *imx_ep)
238 int i = EP_NO(imx_ep);
240 __raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_MASK(i));
241 __raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_INTR(i));
242 __raw_writel(0x1FF & ~(EPINTR_EOT | EPINTR_EOF),
243 imx_ep->imx_usb->base + USB_EP_MASK(i));
246 void imx_ep_irq_disable(struct imx_ep_struct *imx_ep)
249 int i = EP_NO(imx_ep);
251 __raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_MASK(i));
252 __raw_writel(0x1FF, imx_ep->imx_usb->base + USB_EP_INTR(i));
255 int imx_ep_empty(struct imx_ep_struct *imx_ep)
257 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
259 return __raw_readl(imx_usb->base + USB_EP_FSTAT(EP_NO(imx_ep)))
263 unsigned imx_fifo_bcount(struct imx_ep_struct *imx_ep)
265 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
267 return (__raw_readl(imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)))
268 & EPSTAT_BCOUNT) >> 16;
271 void imx_flush(struct imx_ep_struct *imx_ep)
273 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
275 int temp = __raw_readl(imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
276 __raw_writel(temp | EPSTAT_FLUSH,
277 imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
280 void imx_ep_stall(struct imx_ep_struct *imx_ep)
282 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
286 "<%s> Forced stall on %s\n", __func__, imx_ep->ep.name);
290 /* Special care for ep0 */
291 if (!EP_NO(imx_ep)) {
292 temp = __raw_readl(imx_usb->base + USB_CTRL);
293 __raw_writel(temp | CTRL_CMDOVER | CTRL_CMDERROR,
294 imx_usb->base + USB_CTRL);
295 do { } while (__raw_readl(imx_usb->base + USB_CTRL)
297 temp = __raw_readl(imx_usb->base + USB_CTRL);
298 __raw_writel(temp & ~CTRL_CMDERROR, imx_usb->base + USB_CTRL);
301 temp = __raw_readl(imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
302 __raw_writel(temp | EPSTAT_STALL,
303 imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)));
305 for (i = 0; i < 100; i ++) {
306 temp = __raw_readl(imx_usb->base
307 + USB_EP_STAT(EP_NO(imx_ep)));
308 if (!(temp & EPSTAT_STALL))
313 D_ERR(imx_usb->dev, "<%s> Non finished stall on %s\n",
314 __func__, imx_ep->ep.name);
318 static int imx_udc_get_frame(struct usb_gadget *_gadget)
320 struct imx_udc_struct *imx_usb = container_of(_gadget,
321 struct imx_udc_struct, gadget);
323 return __raw_readl(imx_usb->base + USB_FRAME) & 0x7FF;
326 static int imx_udc_wakeup(struct usb_gadget *_gadget)
331 /*******************************************************************************
332 * USB request control functions
333 *******************************************************************************
336 static void ep_add_request(struct imx_ep_struct *imx_ep,
337 struct imx_request *req)
343 list_add_tail(&req->queue, &imx_ep->queue);
346 static void ep_del_request(struct imx_ep_struct *imx_ep,
347 struct imx_request *req)
352 list_del_init(&req->queue);
356 static void done(struct imx_ep_struct *imx_ep,
357 struct imx_request *req, int status)
359 ep_del_request(imx_ep, req);
361 if (likely(req->req.status == -EINPROGRESS))
362 req->req.status = status;
364 status = req->req.status;
366 if (status && status != -ESHUTDOWN)
367 D_ERR(imx_ep->imx_usb->dev,
368 "<%s> complete %s req %p stat %d len %u/%u\n", __func__,
369 imx_ep->ep.name, &req->req, status,
370 req->req.actual, req->req.length);
372 req->req.complete(&imx_ep->ep, &req->req);
375 static void nuke(struct imx_ep_struct *imx_ep, int status)
377 struct imx_request *req;
379 while (!list_empty(&imx_ep->queue)) {
380 req = list_entry(imx_ep->queue.next, struct imx_request, queue);
381 done(imx_ep, req, status);
385 /*******************************************************************************
386 * Data tansfer over USB functions
387 *******************************************************************************
389 static int read_packet(struct imx_ep_struct *imx_ep, struct imx_request *req)
392 int bytes_ep, bufferspace, count, i;
394 bytes_ep = imx_fifo_bcount(imx_ep);
395 bufferspace = req->req.length - req->req.actual;
397 buf = req->req.buf + req->req.actual;
400 if (unlikely(imx_ep_empty(imx_ep)))
403 count = min(bytes_ep, bufferspace);
405 for (i = count; i > 0; i--)
406 *buf++ = __raw_readb(imx_ep->imx_usb->base
407 + USB_EP_FDAT0(EP_NO(imx_ep)));
408 req->req.actual += count;
413 static int write_packet(struct imx_ep_struct *imx_ep, struct imx_request *req)
416 int length, count, temp;
418 buf = req->req.buf + req->req.actual;
421 length = min(req->req.length - req->req.actual, (u32)imx_ep->fifosize);
423 if (imx_fifo_bcount(imx_ep) + length > imx_ep->fifosize) {
424 D_TRX(imx_ep->imx_usb->dev, "<%s> packet overfill %s fifo\n",
425 __func__, imx_ep->ep.name);
429 req->req.actual += length;
432 if (!count && req->req.zero) { /* zlp */
433 temp = __raw_readl(imx_ep->imx_usb->base
434 + USB_EP_STAT(EP_NO(imx_ep)));
435 __raw_writel(temp | EPSTAT_ZLPS, imx_ep->imx_usb->base
436 + USB_EP_STAT(EP_NO(imx_ep)));
437 D_TRX(imx_ep->imx_usb->dev, "<%s> zero packet\n", __func__);
442 if (count == 0) { /* last byte */
443 temp = __raw_readl(imx_ep->imx_usb->base
444 + USB_EP_FCTRL(EP_NO(imx_ep)));
445 __raw_writel(temp | FCTRL_WFR, imx_ep->imx_usb->base
446 + USB_EP_FCTRL(EP_NO(imx_ep)));
449 imx_ep->imx_usb->base + USB_EP_FDAT0(EP_NO(imx_ep)));
455 static int read_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
461 while (__raw_readl(imx_ep->imx_usb->base + USB_EP_FSTAT(EP_NO(imx_ep)))
463 count = read_packet(imx_ep, req);
466 completed = (count != imx_ep->fifosize);
467 if (completed || req->req.actual == req->req.length) {
473 if (completed || !req->req.length) {
474 done(imx_ep, req, 0);
475 D_REQ(imx_ep->imx_usb->dev, "<%s> %s req<%p> %s\n",
476 __func__, imx_ep->ep.name, req,
477 completed ? "completed" : "not completed");
479 ep0_chg_stat(__func__, imx_ep->imx_usb, EP0_IDLE);
482 D_TRX(imx_ep->imx_usb->dev, "<%s> bytes read: %d\n", __func__, bytes);
487 static int write_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
494 count = write_packet(imx_ep, req);
499 /* last packet "must be" short (or a zlp) */
500 completed = (count != imx_ep->fifosize);
502 if (unlikely(completed)) {
503 done(imx_ep, req, 0);
504 D_REQ(imx_ep->imx_usb->dev, "<%s> %s req<%p> %s\n",
505 __func__, imx_ep->ep.name, req,
506 completed ? "completed" : "not completed");
508 ep0_chg_stat(__func__,
509 imx_ep->imx_usb, EP0_IDLE);
513 D_TRX(imx_ep->imx_usb->dev, "<%s> bytes sent: %d\n", __func__, bytes);
518 /*******************************************************************************
520 *******************************************************************************
522 static int handle_ep(struct imx_ep_struct *imx_ep)
524 struct imx_request *req;
528 if (!list_empty(&imx_ep->queue))
529 req = list_entry(imx_ep->queue.next,
530 struct imx_request, queue);
532 D_REQ(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
533 __func__, imx_ep->ep.name);
537 if (EP_DIR(imx_ep)) /* to host */
538 completed = write_fifo(imx_ep, req);
540 completed = read_fifo(imx_ep, req);
542 dump_ep_stat(__func__, imx_ep);
549 static int handle_ep0(struct imx_ep_struct *imx_ep)
551 struct imx_request *req = NULL;
554 if (!list_empty(&imx_ep->queue)) {
555 req = list_entry(imx_ep->queue.next, struct imx_request, queue);
557 switch (imx_ep->imx_usb->ep0state) {
559 case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR */
560 write_fifo(imx_ep, req);
562 case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR */
563 read_fifo(imx_ep, req);
566 D_EP0(imx_ep->imx_usb->dev,
567 "<%s> ep0 i/o, odd state %d\n",
568 __func__, imx_ep->imx_usb->ep0state);
569 ep_del_request(imx_ep, req);
576 D_ERR(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
577 __func__, imx_ep->ep.name);
582 static void handle_ep0_devreq(struct imx_udc_struct *imx_usb)
584 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
586 struct usb_ctrlrequest r;
592 nuke(imx_ep, -EPROTO);
594 /* read SETUP packet */
595 for (i = 0; i < 2; i++) {
596 if (imx_ep_empty(imx_ep)) {
598 "<%s> no setup packet received\n", __func__);
601 u.word[i] = __raw_readl(imx_usb->base
602 + USB_EP_FDAT(EP_NO(imx_ep)));
605 temp = imx_ep_empty(imx_ep);
606 while (!imx_ep_empty(imx_ep)) {
607 i = __raw_readl(imx_usb->base + USB_EP_FDAT(EP_NO(imx_ep)));
609 "<%s> wrong to have extra bytes for setup : 0x%08x\n",
615 le16_to_cpus(&u.r.wValue);
616 le16_to_cpus(&u.r.wIndex);
617 le16_to_cpus(&u.r.wLength);
619 D_REQ(imx_usb->dev, "<%s> SETUP %02x.%02x v%04x i%04x l%04x\n",
620 __func__, u.r.bRequestType, u.r.bRequest,
621 u.r.wValue, u.r.wIndex, u.r.wLength);
623 if (imx_usb->set_config) {
624 /* NACK the host by using CMDOVER */
625 temp = __raw_readl(imx_usb->base + USB_CTRL);
626 __raw_writel(temp | CTRL_CMDOVER, imx_usb->base + USB_CTRL);
629 "<%s> set config req is pending, NACK the host\n",
634 if (u.r.bRequestType & USB_DIR_IN)
635 ep0_chg_stat(__func__, imx_usb, EP0_IN_DATA_PHASE);
637 ep0_chg_stat(__func__, imx_usb, EP0_OUT_DATA_PHASE);
639 i = imx_usb->driver->setup(&imx_usb->gadget, &u.r);
641 D_ERR(imx_usb->dev, "<%s> device setup error %d\n",
648 D_ERR(imx_usb->dev, "<%s> protocol STALL\n", __func__);
649 imx_ep_stall(imx_ep);
650 ep0_chg_stat(__func__, imx_usb, EP0_STALL);
654 /*******************************************************************************
655 * USB gadget callback functions
656 *******************************************************************************
659 static int imx_ep_enable(struct usb_ep *usb_ep,
660 const struct usb_endpoint_descriptor *desc)
662 struct imx_ep_struct *imx_ep = container_of(usb_ep,
663 struct imx_ep_struct, ep);
664 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
670 || desc->bDescriptorType != USB_DT_ENDPOINT
671 || imx_ep->bEndpointAddress != desc->bEndpointAddress) {
673 "<%s> bad ep or descriptor\n", __func__);
677 if (imx_ep->bmAttributes != desc->bmAttributes) {
679 "<%s> %s type mismatch\n", __func__, usb_ep->name);
683 if (imx_ep->fifosize < le16_to_cpu(desc->wMaxPacketSize)) {
685 "<%s> bad %s maxpacket\n", __func__, usb_ep->name);
689 if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
690 D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
694 local_irq_save(flags);
698 imx_ep_irq_enable(imx_ep);
700 local_irq_restore(flags);
702 D_EPX(imx_usb->dev, "<%s> ENABLED %s\n", __func__, usb_ep->name);
706 static int imx_ep_disable(struct usb_ep *usb_ep)
708 struct imx_ep_struct *imx_ep = container_of(usb_ep,
709 struct imx_ep_struct, ep);
712 if (!usb_ep || !EP_NO(imx_ep) || !list_empty(&imx_ep->queue)) {
713 D_ERR(imx_ep->imx_usb->dev, "<%s> %s can not be disabled\n",
714 __func__, usb_ep ? imx_ep->ep.name : NULL);
718 local_irq_save(flags);
721 nuke(imx_ep, -ESHUTDOWN);
723 imx_ep_irq_disable(imx_ep);
725 local_irq_restore(flags);
727 D_EPX(imx_ep->imx_usb->dev,
728 "<%s> DISABLED %s\n", __func__, usb_ep->name);
732 static struct usb_request *imx_ep_alloc_request
733 (struct usb_ep *usb_ep, gfp_t gfp_flags)
735 struct imx_request *req;
740 req = kzalloc(sizeof *req, gfp_flags);
744 INIT_LIST_HEAD(&req->queue);
750 static void imx_ep_free_request
751 (struct usb_ep *usb_ep, struct usb_request *usb_req)
753 struct imx_request *req;
755 req = container_of(usb_req, struct imx_request, req);
756 WARN_ON(!list_empty(&req->queue));
760 static int imx_ep_queue
761 (struct usb_ep *usb_ep, struct usb_request *usb_req, gfp_t gfp_flags)
763 struct imx_ep_struct *imx_ep;
764 struct imx_udc_struct *imx_usb;
765 struct imx_request *req;
769 imx_ep = container_of(usb_ep, struct imx_ep_struct, ep);
770 imx_usb = imx_ep->imx_usb;
771 req = container_of(usb_req, struct imx_request, req);
774 Special care on IMX udc.
775 Ignore enqueue when after set configuration from the
776 host. This assume all gadget drivers reply set
777 configuration with the next ep0 req enqueue.
779 if (imx_usb->set_config && !EP_NO(imx_ep)) {
780 imx_usb->set_config = 0;
782 "<%s> gadget reply set config\n", __func__);
786 if (unlikely(!usb_req || !req || !usb_req->complete || !usb_req->buf)) {
787 D_ERR(imx_usb->dev, "<%s> bad params\n", __func__);
791 if (unlikely(!usb_ep || !imx_ep)) {
792 D_ERR(imx_usb->dev, "<%s> bad ep\n", __func__);
796 if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
797 D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
802 D_REQ(imx_usb->dev, "<%s> ep%d %s request for [%d] bytes\n",
803 __func__, EP_NO(imx_ep),
804 ((!EP_NO(imx_ep) && imx_ep->imx_usb->ep0state
805 == EP0_IN_DATA_PHASE)
806 || (EP_NO(imx_ep) && EP_DIR(imx_ep)))
807 ? "IN" : "OUT", usb_req->length);
808 dump_req(__func__, imx_ep, usb_req);
810 if (imx_ep->stopped) {
811 usb_req->status = -ESHUTDOWN;
817 "<%s> refusing to queue req %p (already queued)\n",
822 local_irq_save(flags);
824 usb_req->status = -EINPROGRESS;
827 ep_add_request(imx_ep, req);
830 ret = handle_ep0(imx_ep);
832 ret = handle_ep(imx_ep);
834 local_irq_restore(flags);
838 static int imx_ep_dequeue(struct usb_ep *usb_ep, struct usb_request *usb_req)
841 struct imx_ep_struct *imx_ep = container_of
842 (usb_ep, struct imx_ep_struct, ep);
843 struct imx_request *req;
846 if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
847 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
851 local_irq_save(flags);
853 /* make sure it's actually queued on this endpoint */
854 list_for_each_entry(req, &imx_ep->queue, queue) {
855 if (&req->req == usb_req)
858 if (&req->req != usb_req) {
859 local_irq_restore(flags);
863 done(imx_ep, req, -ECONNRESET);
865 local_irq_restore(flags);
869 static int imx_ep_set_halt(struct usb_ep *usb_ep, int value)
871 struct imx_ep_struct *imx_ep = container_of
872 (usb_ep, struct imx_ep_struct, ep);
875 if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
876 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
880 local_irq_save(flags);
882 if ((imx_ep->bEndpointAddress & USB_DIR_IN)
883 && !list_empty(&imx_ep->queue)) {
884 local_irq_restore(flags);
888 imx_ep_stall(imx_ep);
890 local_irq_restore(flags);
892 D_EPX(imx_ep->imx_usb->dev, "<%s> %s halt\n", __func__, usb_ep->name);
896 static int imx_ep_fifo_status(struct usb_ep *usb_ep)
898 struct imx_ep_struct *imx_ep = container_of
899 (usb_ep, struct imx_ep_struct, ep);
902 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
906 if (imx_ep->imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
909 return imx_fifo_bcount(imx_ep);
912 static void imx_ep_fifo_flush(struct usb_ep *usb_ep)
914 struct imx_ep_struct *imx_ep = container_of
915 (usb_ep, struct imx_ep_struct, ep);
918 local_irq_save(flags);
920 if (!usb_ep || !EP_NO(imx_ep) || !list_empty(&imx_ep->queue)) {
921 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
922 local_irq_restore(flags);
926 /* toggle and halt bits stay unchanged */
929 local_irq_restore(flags);
932 static struct usb_ep_ops imx_ep_ops = {
933 .enable = imx_ep_enable,
934 .disable = imx_ep_disable,
936 .alloc_request = imx_ep_alloc_request,
937 .free_request = imx_ep_free_request,
939 .queue = imx_ep_queue,
940 .dequeue = imx_ep_dequeue,
942 .set_halt = imx_ep_set_halt,
943 .fifo_status = imx_ep_fifo_status,
944 .fifo_flush = imx_ep_fifo_flush,
947 /*******************************************************************************
948 * USB endpoint control functions
949 *******************************************************************************
952 void ep0_chg_stat(const char *label,
953 struct imx_udc_struct *imx_usb, enum ep0_state stat)
955 D_EP0(imx_usb->dev, "<%s> from %15s to %15s\n",
956 label, state_name[imx_usb->ep0state], state_name[stat]);
958 if (imx_usb->ep0state == stat)
961 imx_usb->ep0state = stat;
964 static void usb_init_data(struct imx_udc_struct *imx_usb)
966 struct imx_ep_struct *imx_ep;
969 /* device/ep0 records init */
970 INIT_LIST_HEAD(&imx_usb->gadget.ep_list);
971 INIT_LIST_HEAD(&imx_usb->gadget.ep0->ep_list);
972 ep0_chg_stat(__func__, imx_usb, EP0_IDLE);
974 /* basic endpoint records init */
975 for (i = 0; i < IMX_USB_NB_EP; i++) {
976 imx_ep = &imx_usb->imx_ep[i];
979 list_add_tail(&imx_ep->ep.ep_list,
980 &imx_usb->gadget.ep_list);
985 INIT_LIST_HEAD(&imx_ep->queue);
989 static void udc_stop_activity(struct imx_udc_struct *imx_usb,
990 struct usb_gadget_driver *driver)
992 struct imx_ep_struct *imx_ep;
995 if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
998 /* prevent new request submissions, kill any outstanding requests */
999 for (i = 1; i < IMX_USB_NB_EP; i++) {
1000 imx_ep = &imx_usb->imx_ep[i];
1002 imx_ep->stopped = 1;
1003 imx_ep_irq_disable(imx_ep);
1004 nuke(imx_ep, -ESHUTDOWN);
1012 driver->disconnect(&imx_usb->gadget);
1015 /*******************************************************************************
1016 * Interrupt handlers
1017 *******************************************************************************
1021 * Called when timer expires.
1022 * Timer is started when CFG_CHG is received.
1024 static void handle_config(unsigned long data)
1026 struct imx_udc_struct *imx_usb = (void *)data;
1027 struct usb_ctrlrequest u;
1028 int temp, cfg, intf, alt;
1030 local_irq_disable();
1032 temp = __raw_readl(imx_usb->base + USB_STAT);
1033 cfg = (temp & STAT_CFG) >> 5;
1034 intf = (temp & STAT_INTF) >> 3;
1035 alt = temp & STAT_ALTSET;
1038 "<%s> orig config C=%d, I=%d, A=%d / "
1039 "req config C=%d, I=%d, A=%d\n",
1040 __func__, imx_usb->cfg, imx_usb->intf, imx_usb->alt,
1043 if (cfg == 1 || cfg == 2) {
1045 if (imx_usb->cfg != cfg) {
1046 u.bRequest = USB_REQ_SET_CONFIGURATION;
1047 u.bRequestType = USB_DIR_OUT |
1054 imx_usb->driver->setup(&imx_usb->gadget, &u);
1057 if (imx_usb->intf != intf || imx_usb->alt != alt) {
1058 u.bRequest = USB_REQ_SET_INTERFACE;
1059 u.bRequestType = USB_DIR_OUT |
1061 USB_RECIP_INTERFACE;
1065 imx_usb->intf = intf;
1067 imx_usb->driver->setup(&imx_usb->gadget, &u);
1071 imx_usb->set_config = 0;
1076 static irqreturn_t imx_udc_irq(int irq, void *dev)
1078 struct imx_udc_struct *imx_usb = dev;
1079 int intr = __raw_readl(imx_usb->base + USB_INTR);
1082 if (intr & (INTR_WAKEUP | INTR_SUSPEND | INTR_RESUME | INTR_RESET_START
1083 | INTR_RESET_STOP | INTR_CFG_CHG)) {
1084 dump_intr(__func__, intr, imx_usb->dev);
1085 dump_usb_stat(__func__, imx_usb);
1088 if (!imx_usb->driver)
1091 if (intr & INTR_SOF) {
1092 /* Copy from Freescale BSP.
1093 We must enable SOF intr and set CMDOVER.
1094 Datasheet don't specifiy this action, but it
1095 is done in Freescale BSP, so just copy it.
1097 if (imx_usb->ep0state == EP0_IDLE) {
1098 temp = __raw_readl(imx_usb->base + USB_CTRL);
1099 __raw_writel(temp | CTRL_CMDOVER,
1100 imx_usb->base + USB_CTRL);
1104 if (intr & INTR_CFG_CHG) {
1105 /* A workaround of serious IMX UDC bug.
1106 Handling of CFG_CHG should be delayed for some time, because
1107 IMX does not NACK the host when CFG_CHG interrupt is pending.
1108 There is no time to handle current CFG_CHG
1109 if next CFG_CHG or SETUP packed is send immediately.
1110 We have to clear CFG_CHG, start the timer and
1111 NACK the host by setting CTRL_CMDOVER
1112 if it sends any SETUP packet.
1113 When timer expires, handler is called to handle configuration
1114 changes. While CFG_CHG is not handled (set_config=1),
1115 we must NACK the host to every SETUP packed.
1116 This delay prevents from going out of sync with host.
1118 __raw_writel(INTR_CFG_CHG, imx_usb->base + USB_INTR);
1119 imx_usb->set_config = 1;
1120 mod_timer(&imx_usb->timer, jiffies + 5);
1124 if (intr & INTR_WAKEUP) {
1125 if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN
1126 && imx_usb->driver && imx_usb->driver->resume)
1127 imx_usb->driver->resume(&imx_usb->gadget);
1128 imx_usb->set_config = 0;
1129 del_timer(&imx_usb->timer);
1130 imx_usb->gadget.speed = USB_SPEED_FULL;
1133 if (intr & INTR_SUSPEND) {
1134 if (imx_usb->gadget.speed != USB_SPEED_UNKNOWN
1135 && imx_usb->driver && imx_usb->driver->suspend)
1136 imx_usb->driver->suspend(&imx_usb->gadget);
1137 imx_usb->set_config = 0;
1138 del_timer(&imx_usb->timer);
1139 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1142 if (intr & INTR_RESET_START) {
1143 __raw_writel(intr, imx_usb->base + USB_INTR);
1144 udc_stop_activity(imx_usb, imx_usb->driver);
1145 imx_usb->set_config = 0;
1146 del_timer(&imx_usb->timer);
1147 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1150 if (intr & INTR_RESET_STOP)
1151 imx_usb->gadget.speed = USB_SPEED_FULL;
1154 __raw_writel(intr, imx_usb->base + USB_INTR);
1158 static irqreturn_t imx_udc_ctrl_irq(int irq, void *dev)
1160 struct imx_udc_struct *imx_usb = dev;
1161 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
1162 int intr = __raw_readl(imx_usb->base + USB_EP_INTR(0));
1164 dump_ep_intr(__func__, 0, intr, imx_usb->dev);
1166 if (!imx_usb->driver) {
1167 __raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1171 /* DEVREQ has highest priority */
1172 if (intr & (EPINTR_DEVREQ | EPINTR_MDEVREQ))
1173 handle_ep0_devreq(imx_usb);
1174 /* Seem i.MX is missing EOF interrupt sometimes.
1175 * Therefore we don't monitor EOF.
1176 * We call handle_ep0() only if a request is queued for ep0.
1178 else if (!list_empty(&imx_ep->queue))
1181 __raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1186 static irqreturn_t imx_udc_bulk_irq(int irq, void *dev)
1188 struct imx_udc_struct *imx_usb = dev;
1189 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[irq - USBD_INT0];
1190 int intr = __raw_readl(imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1192 dump_ep_intr(__func__, irq - USBD_INT0, intr, imx_usb->dev);
1194 if (!imx_usb->driver) {
1195 __raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1201 __raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1206 irq_handler_t intr_handler(int i)
1210 return imx_udc_ctrl_irq;
1216 return imx_udc_bulk_irq;
1222 /*******************************************************************************
1223 * Static defined IMX UDC structure
1224 *******************************************************************************
1227 static const struct usb_gadget_ops imx_udc_ops = {
1228 .get_frame = imx_udc_get_frame,
1229 .wakeup = imx_udc_wakeup,
1232 static struct imx_udc_struct controller = {
1234 .ops = &imx_udc_ops,
1235 .ep0 = &controller.imx_ep[0].ep,
1236 .name = driver_name,
1238 .init_name = "gadget",
1248 .imx_usb = &controller,
1250 .bEndpointAddress = 0,
1251 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
1255 .name = "ep1in-bulk",
1259 .imx_usb = &controller,
1261 .bEndpointAddress = USB_DIR_IN | 1,
1262 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1266 .name = "ep2out-bulk",
1270 .imx_usb = &controller,
1272 .bEndpointAddress = USB_DIR_OUT | 2,
1273 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1277 .name = "ep3out-bulk",
1281 .imx_usb = &controller,
1283 .bEndpointAddress = USB_DIR_OUT | 3,
1284 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1288 .name = "ep4in-int",
1292 .imx_usb = &controller,
1294 .bEndpointAddress = USB_DIR_IN | 4,
1295 .bmAttributes = USB_ENDPOINT_XFER_INT,
1299 .name = "ep5out-int",
1303 .imx_usb = &controller,
1305 .bEndpointAddress = USB_DIR_OUT | 5,
1306 .bmAttributes = USB_ENDPOINT_XFER_INT,
1310 /*******************************************************************************
1311 * USB gadged driver functions
1312 *******************************************************************************
1314 int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1316 struct imx_udc_struct *imx_usb = &controller;
1320 || driver->speed < USB_SPEED_FULL
1322 || !driver->disconnect
1327 if (imx_usb->driver)
1330 /* first hook up the driver ... */
1331 imx_usb->driver = driver;
1332 imx_usb->gadget.dev.driver = &driver->driver;
1334 retval = device_add(&imx_usb->gadget.dev);
1337 retval = driver->bind(&imx_usb->gadget);
1339 D_ERR(imx_usb->dev, "<%s> bind to driver %s --> error %d\n",
1340 __func__, driver->driver.name, retval);
1341 device_del(&imx_usb->gadget.dev);
1346 D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n",
1347 __func__, driver->driver.name);
1349 imx_udc_enable(imx_usb);
1353 imx_usb->driver = NULL;
1354 imx_usb->gadget.dev.driver = NULL;
1357 EXPORT_SYMBOL(usb_gadget_register_driver);
1359 int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
1361 struct imx_udc_struct *imx_usb = &controller;
1365 if (!driver || driver != imx_usb->driver || !driver->unbind)
1368 udc_stop_activity(imx_usb, driver);
1369 imx_udc_disable(imx_usb);
1370 del_timer(&imx_usb->timer);
1372 driver->unbind(&imx_usb->gadget);
1373 imx_usb->gadget.dev.driver = NULL;
1374 imx_usb->driver = NULL;
1376 device_del(&imx_usb->gadget.dev);
1378 D_INI(imx_usb->dev, "<%s> unregistered gadget driver '%s'\n",
1379 __func__, driver->driver.name);
1383 EXPORT_SYMBOL(usb_gadget_unregister_driver);
1385 /*******************************************************************************
1387 *******************************************************************************
1390 static int __init imx_udc_probe(struct platform_device *pdev)
1392 struct imx_udc_struct *imx_usb = &controller;
1393 struct resource *res;
1394 struct imxusb_platform_data *pdata;
1400 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1402 dev_err(&pdev->dev, "can't get device resources\n");
1406 pdata = pdev->dev.platform_data;
1408 dev_err(&pdev->dev, "driver needs platform data\n");
1412 res_size = res->end - res->start + 1;
1413 if (!request_mem_region(res->start, res_size, res->name)) {
1414 dev_err(&pdev->dev, "can't allocate %d bytes at %d address\n",
1415 res_size, res->start);
1420 ret = pdata->init(&pdev->dev);
1425 base = ioremap(res->start, res_size);
1427 dev_err(&pdev->dev, "ioremap failed\n");
1432 clk = clk_get(NULL, "usbd_clk");
1435 dev_err(&pdev->dev, "can't get USB clock\n");
1440 if (clk_get_rate(clk) != 48000000) {
1442 "Bad USB clock (%d Hz), changing to 48000000 Hz\n",
1443 (int)clk_get_rate(clk));
1444 if (clk_set_rate(clk, 48000000)) {
1446 "Unable to set correct USB clock (48MHz)\n");
1452 for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1453 imx_usb->usbd_int[i] = platform_get_irq(pdev, i);
1454 if (imx_usb->usbd_int[i] < 0) {
1455 dev_err(&pdev->dev, "can't get irq number\n");
1461 for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1462 ret = request_irq(imx_usb->usbd_int[i], intr_handler(i),
1463 IRQF_DISABLED, driver_name, imx_usb);
1465 dev_err(&pdev->dev, "can't get irq %i, err %d\n",
1466 imx_usb->usbd_int[i], ret);
1467 for (--i; i >= 0; i--)
1468 free_irq(imx_usb->usbd_int[i], imx_usb);
1474 imx_usb->base = base;
1476 imx_usb->dev = &pdev->dev;
1478 device_initialize(&imx_usb->gadget.dev);
1480 imx_usb->gadget.dev.parent = &pdev->dev;
1481 imx_usb->gadget.dev.dma_mask = pdev->dev.dma_mask;
1483 platform_set_drvdata(pdev, imx_usb);
1485 usb_init_data(imx_usb);
1486 imx_udc_init(imx_usb);
1488 init_timer(&imx_usb->timer);
1489 imx_usb->timer.function = handle_config;
1490 imx_usb->timer.data = (unsigned long)imx_usb;
1501 pdata->exit(&pdev->dev);
1503 release_mem_region(res->start, res_size);
1507 static int __exit imx_udc_remove(struct platform_device *pdev)
1509 struct imx_udc_struct *imx_usb = platform_get_drvdata(pdev);
1510 struct imxusb_platform_data *pdata = pdev->dev.platform_data;
1513 imx_udc_disable(imx_usb);
1514 del_timer(&imx_usb->timer);
1516 for (i = 0; i < IMX_USB_NB_EP + 1; i++)
1517 free_irq(imx_usb->usbd_int[i], imx_usb);
1519 clk_put(imx_usb->clk);
1520 clk_disable(imx_usb->clk);
1521 iounmap(imx_usb->base);
1523 release_mem_region(imx_usb->res->start,
1524 imx_usb->res->end - imx_usb->res->start + 1);
1527 pdata->exit(&pdev->dev);
1529 platform_set_drvdata(pdev, NULL);
1534 /*----------------------------------------------------------------------------*/
1537 #define imx_udc_suspend NULL
1538 #define imx_udc_resume NULL
1540 #define imx_udc_suspend NULL
1541 #define imx_udc_resume NULL
1544 /*----------------------------------------------------------------------------*/
1546 static struct platform_driver udc_driver = {
1548 .name = driver_name,
1549 .owner = THIS_MODULE,
1551 .remove = __exit_p(imx_udc_remove),
1552 .suspend = imx_udc_suspend,
1553 .resume = imx_udc_resume,
1556 static int __init udc_init(void)
1558 return platform_driver_probe(&udc_driver, imx_udc_probe);
1560 module_init(udc_init);
1562 static void __exit udc_exit(void)
1564 platform_driver_unregister(&udc_driver);
1566 module_exit(udc_exit);
1568 MODULE_DESCRIPTION("IMX USB Device Controller driver");
1569 MODULE_AUTHOR("Darius Augulis <augulis.darius@gmail.com>");
1570 MODULE_LICENSE("GPL");
1571 MODULE_ALIAS("platform:imx_udc");