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>
32 #include <linux/slab.h>
33 #include <linux/prefetch.h>
35 #include <linux/usb/ch9.h>
36 #include <linux/usb/gadget.h>
39 #include <mach/hardware.h>
43 static const char driver_name
[] = "imx_udc";
44 static const char ep0name
[] = "ep0";
46 void ep0_chg_stat(const char *label
, struct imx_udc_struct
*imx_usb
,
49 /*******************************************************************************
50 * IMX UDC hardware related functions
51 *******************************************************************************
54 void imx_udc_enable(struct imx_udc_struct
*imx_usb
)
56 int temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
57 __raw_writel(temp
| CTRL_FE_ENA
| CTRL_AFE_ENA
,
58 imx_usb
->base
+ USB_CTRL
);
59 imx_usb
->gadget
.speed
= USB_SPEED_FULL
;
62 void imx_udc_disable(struct imx_udc_struct
*imx_usb
)
64 int temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
66 __raw_writel(temp
& ~(CTRL_FE_ENA
| CTRL_AFE_ENA
),
67 imx_usb
->base
+ USB_CTRL
);
69 ep0_chg_stat(__func__
, imx_usb
, EP0_IDLE
);
70 imx_usb
->gadget
.speed
= USB_SPEED_UNKNOWN
;
73 void imx_udc_reset(struct imx_udc_struct
*imx_usb
)
75 int temp
= __raw_readl(imx_usb
->base
+ USB_ENAB
);
78 __raw_writel(temp
| ENAB_RST
, imx_usb
->base
+ USB_ENAB
);
80 /* wait RST bit to clear */
81 do {} while (__raw_readl(imx_usb
->base
+ USB_ENAB
) & ENAB_RST
);
83 /* wait CFG bit to assert */
84 do {} while (!(__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_CFG
));
86 /* udc module is now ready */
89 void imx_udc_config(struct imx_udc_struct
*imx_usb
)
93 struct imx_ep_struct
*imx_ep
;
95 /* wait CFG bit to assert */
96 do {} while (!(__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_CFG
));
98 /* Download the endpoint buffer for endpoint 0. */
99 for (j
= 0; j
< 5; j
++) {
100 i
= (j
== 2 ? imx_usb
->imx_ep
[0].fifosize
: 0x00);
101 __raw_writeb(i
, imx_usb
->base
+ USB_DDAT
);
102 do {} while (__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_BSY
);
105 /* Download the endpoint buffers for endpoints 1-5.
106 * We specify two configurations, one interface
108 for (cfg
= 1; cfg
< 3; cfg
++) {
109 for (i
= 1; i
< IMX_USB_NB_EP
; i
++) {
110 imx_ep
= &imx_usb
->imx_ep
[i
];
111 /* EP no | Config no */
112 ep_conf
[0] = (i
<< 4) | (cfg
<< 2);
113 /* Type | Direction */
114 ep_conf
[1] = (imx_ep
->bmAttributes
<< 3) |
115 (EP_DIR(imx_ep
) << 2);
116 /* Max packet size */
117 ep_conf
[2] = imx_ep
->fifosize
;
124 "<%s> ep%d_conf[%d]:"
125 "[%02x-%02x-%02x-%02x-%02x]\n",
127 ep_conf
[0], ep_conf
[1], ep_conf
[2],
128 ep_conf
[3], ep_conf
[4]);
130 for (j
= 0; j
< 5; j
++) {
131 __raw_writeb(ep_conf
[j
],
132 imx_usb
->base
+ USB_DDAT
);
133 do {} while (__raw_readl(imx_usb
->base
140 /* wait CFG bit to clear */
141 do {} while (__raw_readl(imx_usb
->base
+ USB_DADR
) & DADR_CFG
);
144 void imx_udc_init_irq(struct imx_udc_struct
*imx_usb
)
148 /* Mask and clear all irqs */
149 __raw_writel(0xFFFFFFFF, imx_usb
->base
+ USB_MASK
);
150 __raw_writel(0xFFFFFFFF, imx_usb
->base
+ USB_INTR
);
151 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
152 __raw_writel(0x1FF, imx_usb
->base
+ USB_EP_MASK(i
));
153 __raw_writel(0x1FF, imx_usb
->base
+ USB_EP_INTR(i
));
156 /* Enable USB irqs */
157 __raw_writel(INTR_MSOF
| INTR_FRAME_MATCH
, imx_usb
->base
+ USB_MASK
);
159 /* Enable EP0 irqs */
160 __raw_writel(0x1FF & ~(EPINTR_DEVREQ
| EPINTR_MDEVREQ
| EPINTR_EOT
161 | EPINTR_EOF
| EPINTR_FIFO_EMPTY
| EPINTR_FIFO_FULL
),
162 imx_usb
->base
+ USB_EP_MASK(0));
165 void imx_udc_init_ep(struct imx_udc_struct
*imx_usb
)
168 struct imx_ep_struct
*imx_ep
;
169 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
170 imx_ep
= &imx_usb
->imx_ep
[i
];
171 switch (imx_ep
->fifosize
) {
188 temp
= (EP_DIR(imx_ep
) << 7) | (max
<< 5)
189 | (imx_ep
->bmAttributes
<< 3);
190 __raw_writel(temp
, imx_usb
->base
+ USB_EP_STAT(i
));
191 __raw_writel(temp
| EPSTAT_FLUSH
,
192 imx_usb
->base
+ USB_EP_STAT(i
));
193 D_INI(imx_usb
->dev
, "<%s> ep%d_stat %08x\n", __func__
, i
,
194 __raw_readl(imx_usb
->base
+ USB_EP_STAT(i
)));
198 void imx_udc_init_fifo(struct imx_udc_struct
*imx_usb
)
201 struct imx_ep_struct
*imx_ep
;
202 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
203 imx_ep
= &imx_usb
->imx_ep
[i
];
206 temp
= EP_DIR(imx_ep
) ? 0x0B000000 : 0x0F000000;
207 __raw_writel(temp
, imx_usb
->base
+ USB_EP_FCTRL(i
));
208 D_INI(imx_usb
->dev
, "<%s> ep%d_fctrl %08x\n", __func__
, i
,
209 __raw_readl(imx_usb
->base
+ USB_EP_FCTRL(i
)));
212 temp
= (i
? imx_ep
->fifosize
/ 2 : 0);
213 __raw_writel(temp
, imx_usb
->base
+ USB_EP_FALRM(i
));
214 D_INI(imx_usb
->dev
, "<%s> ep%d_falrm %08x\n", __func__
, i
,
215 __raw_readl(imx_usb
->base
+ USB_EP_FALRM(i
)));
219 static void imx_udc_init(struct imx_udc_struct
*imx_usb
)
222 imx_udc_reset(imx_usb
);
224 /* Download config to enpoint buffer */
225 imx_udc_config(imx_usb
);
227 /* Setup interrups */
228 imx_udc_init_irq(imx_usb
);
230 /* Setup endpoints */
231 imx_udc_init_ep(imx_usb
);
234 imx_udc_init_fifo(imx_usb
);
237 void imx_ep_irq_enable(struct imx_ep_struct
*imx_ep
)
240 int i
= EP_NO(imx_ep
);
242 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_MASK(i
));
243 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_INTR(i
));
244 __raw_writel(0x1FF & ~(EPINTR_EOT
| EPINTR_EOF
),
245 imx_ep
->imx_usb
->base
+ USB_EP_MASK(i
));
248 void imx_ep_irq_disable(struct imx_ep_struct
*imx_ep
)
251 int i
= EP_NO(imx_ep
);
253 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_MASK(i
));
254 __raw_writel(0x1FF, imx_ep
->imx_usb
->base
+ USB_EP_INTR(i
));
257 int imx_ep_empty(struct imx_ep_struct
*imx_ep
)
259 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
261 return __raw_readl(imx_usb
->base
+ USB_EP_FSTAT(EP_NO(imx_ep
)))
265 unsigned imx_fifo_bcount(struct imx_ep_struct
*imx_ep
)
267 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
269 return (__raw_readl(imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)))
270 & EPSTAT_BCOUNT
) >> 16;
273 void imx_flush(struct imx_ep_struct
*imx_ep
)
275 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
277 int temp
= __raw_readl(imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
278 __raw_writel(temp
| EPSTAT_FLUSH
,
279 imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
282 void imx_ep_stall(struct imx_ep_struct
*imx_ep
)
284 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
288 "<%s> Forced stall on %s\n", __func__
, imx_ep
->ep
.name
);
292 /* Special care for ep0 */
293 if (!EP_NO(imx_ep
)) {
294 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
295 __raw_writel(temp
| CTRL_CMDOVER
| CTRL_CMDERROR
,
296 imx_usb
->base
+ USB_CTRL
);
297 do { } while (__raw_readl(imx_usb
->base
+ USB_CTRL
)
299 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
300 __raw_writel(temp
& ~CTRL_CMDERROR
, imx_usb
->base
+ USB_CTRL
);
303 temp
= __raw_readl(imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
304 __raw_writel(temp
| EPSTAT_STALL
,
305 imx_usb
->base
+ USB_EP_STAT(EP_NO(imx_ep
)));
307 for (i
= 0; i
< 100; i
++) {
308 temp
= __raw_readl(imx_usb
->base
309 + USB_EP_STAT(EP_NO(imx_ep
)));
310 if (!(temp
& EPSTAT_STALL
))
315 D_ERR(imx_usb
->dev
, "<%s> Non finished stall on %s\n",
316 __func__
, imx_ep
->ep
.name
);
320 static int imx_udc_get_frame(struct usb_gadget
*_gadget
)
322 struct imx_udc_struct
*imx_usb
= container_of(_gadget
,
323 struct imx_udc_struct
, gadget
);
325 return __raw_readl(imx_usb
->base
+ USB_FRAME
) & 0x7FF;
328 static int imx_udc_wakeup(struct usb_gadget
*_gadget
)
333 /*******************************************************************************
334 * USB request control functions
335 *******************************************************************************
338 static void ep_add_request(struct imx_ep_struct
*imx_ep
,
339 struct imx_request
*req
)
345 list_add_tail(&req
->queue
, &imx_ep
->queue
);
348 static void ep_del_request(struct imx_ep_struct
*imx_ep
,
349 struct imx_request
*req
)
354 list_del_init(&req
->queue
);
358 static void done(struct imx_ep_struct
*imx_ep
,
359 struct imx_request
*req
, int status
)
361 ep_del_request(imx_ep
, req
);
363 if (likely(req
->req
.status
== -EINPROGRESS
))
364 req
->req
.status
= status
;
366 status
= req
->req
.status
;
368 if (status
&& status
!= -ESHUTDOWN
)
369 D_ERR(imx_ep
->imx_usb
->dev
,
370 "<%s> complete %s req %p stat %d len %u/%u\n", __func__
,
371 imx_ep
->ep
.name
, &req
->req
, status
,
372 req
->req
.actual
, req
->req
.length
);
374 req
->req
.complete(&imx_ep
->ep
, &req
->req
);
377 static void nuke(struct imx_ep_struct
*imx_ep
, int status
)
379 struct imx_request
*req
;
381 while (!list_empty(&imx_ep
->queue
)) {
382 req
= list_entry(imx_ep
->queue
.next
, struct imx_request
, queue
);
383 done(imx_ep
, req
, status
);
387 /*******************************************************************************
388 * Data tansfer over USB functions
389 *******************************************************************************
391 static int read_packet(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
394 int bytes_ep
, bufferspace
, count
, i
;
396 bytes_ep
= imx_fifo_bcount(imx_ep
);
397 bufferspace
= req
->req
.length
- req
->req
.actual
;
399 buf
= req
->req
.buf
+ req
->req
.actual
;
402 if (unlikely(imx_ep_empty(imx_ep
)))
405 count
= min(bytes_ep
, bufferspace
);
407 for (i
= count
; i
> 0; i
--)
408 *buf
++ = __raw_readb(imx_ep
->imx_usb
->base
409 + USB_EP_FDAT0(EP_NO(imx_ep
)));
410 req
->req
.actual
+= count
;
415 static int write_packet(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
418 int length
, count
, temp
;
420 if (unlikely(__raw_readl(imx_ep
->imx_usb
->base
+
421 USB_EP_STAT(EP_NO(imx_ep
))) & EPSTAT_ZLPS
)) {
422 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> zlp still queued in EP %s\n",
423 __func__
, imx_ep
->ep
.name
);
427 buf
= req
->req
.buf
+ req
->req
.actual
;
430 length
= min(req
->req
.length
- req
->req
.actual
, (u32
)imx_ep
->fifosize
);
432 if (imx_fifo_bcount(imx_ep
) + length
> imx_ep
->fifosize
) {
433 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> packet overfill %s fifo\n",
434 __func__
, imx_ep
->ep
.name
);
438 req
->req
.actual
+= length
;
441 if (!count
&& req
->req
.zero
) { /* zlp */
442 temp
= __raw_readl(imx_ep
->imx_usb
->base
443 + USB_EP_STAT(EP_NO(imx_ep
)));
444 __raw_writel(temp
| EPSTAT_ZLPS
, imx_ep
->imx_usb
->base
445 + USB_EP_STAT(EP_NO(imx_ep
)));
446 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> zero packet\n", __func__
);
451 if (count
== 0) { /* last byte */
452 temp
= __raw_readl(imx_ep
->imx_usb
->base
453 + USB_EP_FCTRL(EP_NO(imx_ep
)));
454 __raw_writel(temp
| FCTRL_WFR
, imx_ep
->imx_usb
->base
455 + USB_EP_FCTRL(EP_NO(imx_ep
)));
458 imx_ep
->imx_usb
->base
+ USB_EP_FDAT0(EP_NO(imx_ep
)));
464 static int read_fifo(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
470 while (__raw_readl(imx_ep
->imx_usb
->base
+ USB_EP_FSTAT(EP_NO(imx_ep
)))
472 count
= read_packet(imx_ep
, req
);
475 completed
= (count
!= imx_ep
->fifosize
);
476 if (completed
|| req
->req
.actual
== req
->req
.length
) {
482 if (completed
|| !req
->req
.length
) {
483 done(imx_ep
, req
, 0);
484 D_REQ(imx_ep
->imx_usb
->dev
, "<%s> %s req<%p> %s\n",
485 __func__
, imx_ep
->ep
.name
, req
,
486 completed
? "completed" : "not completed");
488 ep0_chg_stat(__func__
, imx_ep
->imx_usb
, EP0_IDLE
);
491 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> bytes read: %d\n", __func__
, bytes
);
496 static int write_fifo(struct imx_ep_struct
*imx_ep
, struct imx_request
*req
)
503 count
= write_packet(imx_ep
, req
);
508 /* last packet "must be" short (or a zlp) */
509 completed
= (count
!= imx_ep
->fifosize
);
511 if (unlikely(completed
)) {
512 done(imx_ep
, req
, 0);
513 D_REQ(imx_ep
->imx_usb
->dev
, "<%s> %s req<%p> %s\n",
514 __func__
, imx_ep
->ep
.name
, req
,
515 completed
? "completed" : "not completed");
517 ep0_chg_stat(__func__
,
518 imx_ep
->imx_usb
, EP0_IDLE
);
522 D_TRX(imx_ep
->imx_usb
->dev
, "<%s> bytes sent: %d\n", __func__
, bytes
);
527 /*******************************************************************************
529 *******************************************************************************
531 static int handle_ep(struct imx_ep_struct
*imx_ep
)
533 struct imx_request
*req
;
537 if (!list_empty(&imx_ep
->queue
))
538 req
= list_entry(imx_ep
->queue
.next
,
539 struct imx_request
, queue
);
541 D_REQ(imx_ep
->imx_usb
->dev
, "<%s> no request on %s\n",
542 __func__
, imx_ep
->ep
.name
);
546 if (EP_DIR(imx_ep
)) /* to host */
547 completed
= write_fifo(imx_ep
, req
);
549 completed
= read_fifo(imx_ep
, req
);
551 dump_ep_stat(__func__
, imx_ep
);
558 static int handle_ep0(struct imx_ep_struct
*imx_ep
)
560 struct imx_request
*req
= NULL
;
563 if (!list_empty(&imx_ep
->queue
)) {
564 req
= list_entry(imx_ep
->queue
.next
, struct imx_request
, queue
);
566 switch (imx_ep
->imx_usb
->ep0state
) {
568 case EP0_IN_DATA_PHASE
: /* GET_DESCRIPTOR */
569 write_fifo(imx_ep
, req
);
571 case EP0_OUT_DATA_PHASE
: /* SET_DESCRIPTOR */
572 read_fifo(imx_ep
, req
);
575 D_EP0(imx_ep
->imx_usb
->dev
,
576 "<%s> ep0 i/o, odd state %d\n",
577 __func__
, imx_ep
->imx_usb
->ep0state
);
578 ep_del_request(imx_ep
, req
);
585 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> no request on %s\n",
586 __func__
, imx_ep
->ep
.name
);
591 static void handle_ep0_devreq(struct imx_udc_struct
*imx_usb
)
593 struct imx_ep_struct
*imx_ep
= &imx_usb
->imx_ep
[0];
595 struct usb_ctrlrequest r
;
601 nuke(imx_ep
, -EPROTO
);
603 /* read SETUP packet */
604 for (i
= 0; i
< 2; i
++) {
605 if (imx_ep_empty(imx_ep
)) {
607 "<%s> no setup packet received\n", __func__
);
610 u
.word
[i
] = __raw_readl(imx_usb
->base
611 + USB_EP_FDAT(EP_NO(imx_ep
)));
614 temp
= imx_ep_empty(imx_ep
);
615 while (!imx_ep_empty(imx_ep
)) {
616 i
= __raw_readl(imx_usb
->base
+ USB_EP_FDAT(EP_NO(imx_ep
)));
618 "<%s> wrong to have extra bytes for setup : 0x%08x\n",
624 le16_to_cpus(&u
.r
.wValue
);
625 le16_to_cpus(&u
.r
.wIndex
);
626 le16_to_cpus(&u
.r
.wLength
);
628 D_REQ(imx_usb
->dev
, "<%s> SETUP %02x.%02x v%04x i%04x l%04x\n",
629 __func__
, u
.r
.bRequestType
, u
.r
.bRequest
,
630 u
.r
.wValue
, u
.r
.wIndex
, u
.r
.wLength
);
632 if (imx_usb
->set_config
) {
633 /* NACK the host by using CMDOVER */
634 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
635 __raw_writel(temp
| CTRL_CMDOVER
, imx_usb
->base
+ USB_CTRL
);
638 "<%s> set config req is pending, NACK the host\n",
643 if (u
.r
.bRequestType
& USB_DIR_IN
)
644 ep0_chg_stat(__func__
, imx_usb
, EP0_IN_DATA_PHASE
);
646 ep0_chg_stat(__func__
, imx_usb
, EP0_OUT_DATA_PHASE
);
648 i
= imx_usb
->driver
->setup(&imx_usb
->gadget
, &u
.r
);
650 D_ERR(imx_usb
->dev
, "<%s> device setup error %d\n",
657 D_ERR(imx_usb
->dev
, "<%s> protocol STALL\n", __func__
);
658 imx_ep_stall(imx_ep
);
659 ep0_chg_stat(__func__
, imx_usb
, EP0_STALL
);
663 /*******************************************************************************
664 * USB gadget callback functions
665 *******************************************************************************
668 static int imx_ep_enable(struct usb_ep
*usb_ep
,
669 const struct usb_endpoint_descriptor
*desc
)
671 struct imx_ep_struct
*imx_ep
= container_of(usb_ep
,
672 struct imx_ep_struct
, ep
);
673 struct imx_udc_struct
*imx_usb
= imx_ep
->imx_usb
;
679 || desc
->bDescriptorType
!= USB_DT_ENDPOINT
680 || imx_ep
->bEndpointAddress
!= desc
->bEndpointAddress
) {
682 "<%s> bad ep or descriptor\n", __func__
);
686 if (imx_ep
->bmAttributes
!= desc
->bmAttributes
) {
688 "<%s> %s type mismatch\n", __func__
, usb_ep
->name
);
692 if (imx_ep
->fifosize
< le16_to_cpu(desc
->wMaxPacketSize
)) {
694 "<%s> bad %s maxpacket\n", __func__
, usb_ep
->name
);
698 if (!imx_usb
->driver
|| imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
699 D_ERR(imx_usb
->dev
, "<%s> bogus device state\n", __func__
);
703 local_irq_save(flags
);
707 imx_ep_irq_enable(imx_ep
);
709 local_irq_restore(flags
);
711 D_EPX(imx_usb
->dev
, "<%s> ENABLED %s\n", __func__
, usb_ep
->name
);
715 static int imx_ep_disable(struct usb_ep
*usb_ep
)
717 struct imx_ep_struct
*imx_ep
= container_of(usb_ep
,
718 struct imx_ep_struct
, ep
);
721 if (!usb_ep
|| !EP_NO(imx_ep
) || !list_empty(&imx_ep
->queue
)) {
722 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> %s can not be disabled\n",
723 __func__
, usb_ep
? imx_ep
->ep
.name
: NULL
);
727 local_irq_save(flags
);
730 nuke(imx_ep
, -ESHUTDOWN
);
732 imx_ep_irq_disable(imx_ep
);
734 local_irq_restore(flags
);
736 D_EPX(imx_ep
->imx_usb
->dev
,
737 "<%s> DISABLED %s\n", __func__
, usb_ep
->name
);
741 static struct usb_request
*imx_ep_alloc_request
742 (struct usb_ep
*usb_ep
, gfp_t gfp_flags
)
744 struct imx_request
*req
;
749 req
= kzalloc(sizeof *req
, gfp_flags
);
753 INIT_LIST_HEAD(&req
->queue
);
759 static void imx_ep_free_request
760 (struct usb_ep
*usb_ep
, struct usb_request
*usb_req
)
762 struct imx_request
*req
;
764 req
= container_of(usb_req
, struct imx_request
, req
);
765 WARN_ON(!list_empty(&req
->queue
));
769 static int imx_ep_queue
770 (struct usb_ep
*usb_ep
, struct usb_request
*usb_req
, gfp_t gfp_flags
)
772 struct imx_ep_struct
*imx_ep
;
773 struct imx_udc_struct
*imx_usb
;
774 struct imx_request
*req
;
778 imx_ep
= container_of(usb_ep
, struct imx_ep_struct
, ep
);
779 imx_usb
= imx_ep
->imx_usb
;
780 req
= container_of(usb_req
, struct imx_request
, req
);
783 Special care on IMX udc.
784 Ignore enqueue when after set configuration from the
785 host. This assume all gadget drivers reply set
786 configuration with the next ep0 req enqueue.
788 if (imx_usb
->set_config
&& !EP_NO(imx_ep
)) {
789 imx_usb
->set_config
= 0;
791 "<%s> gadget reply set config\n", __func__
);
795 if (unlikely(!usb_req
|| !req
|| !usb_req
->complete
|| !usb_req
->buf
)) {
796 D_ERR(imx_usb
->dev
, "<%s> bad params\n", __func__
);
800 if (unlikely(!usb_ep
|| !imx_ep
)) {
801 D_ERR(imx_usb
->dev
, "<%s> bad ep\n", __func__
);
805 if (!imx_usb
->driver
|| imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
806 D_ERR(imx_usb
->dev
, "<%s> bogus device state\n", __func__
);
811 D_REQ(imx_usb
->dev
, "<%s> ep%d %s request for [%d] bytes\n",
812 __func__
, EP_NO(imx_ep
),
813 ((!EP_NO(imx_ep
) && imx_ep
->imx_usb
->ep0state
814 == EP0_IN_DATA_PHASE
)
815 || (EP_NO(imx_ep
) && EP_DIR(imx_ep
)))
816 ? "IN" : "OUT", usb_req
->length
);
817 dump_req(__func__
, imx_ep
, usb_req
);
819 if (imx_ep
->stopped
) {
820 usb_req
->status
= -ESHUTDOWN
;
826 "<%s> refusing to queue req %p (already queued)\n",
831 local_irq_save(flags
);
833 usb_req
->status
= -EINPROGRESS
;
836 ep_add_request(imx_ep
, req
);
839 ret
= handle_ep0(imx_ep
);
841 ret
= handle_ep(imx_ep
);
843 local_irq_restore(flags
);
847 static int imx_ep_dequeue(struct usb_ep
*usb_ep
, struct usb_request
*usb_req
)
850 struct imx_ep_struct
*imx_ep
= container_of
851 (usb_ep
, struct imx_ep_struct
, ep
);
852 struct imx_request
*req
;
855 if (unlikely(!usb_ep
|| !EP_NO(imx_ep
))) {
856 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
860 local_irq_save(flags
);
862 /* make sure it's actually queued on this endpoint */
863 list_for_each_entry(req
, &imx_ep
->queue
, queue
) {
864 if (&req
->req
== usb_req
)
867 if (&req
->req
!= usb_req
) {
868 local_irq_restore(flags
);
872 done(imx_ep
, req
, -ECONNRESET
);
874 local_irq_restore(flags
);
878 static int imx_ep_set_halt(struct usb_ep
*usb_ep
, int value
)
880 struct imx_ep_struct
*imx_ep
= container_of
881 (usb_ep
, struct imx_ep_struct
, ep
);
884 if (unlikely(!usb_ep
|| !EP_NO(imx_ep
))) {
885 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
889 local_irq_save(flags
);
891 if ((imx_ep
->bEndpointAddress
& USB_DIR_IN
)
892 && !list_empty(&imx_ep
->queue
)) {
893 local_irq_restore(flags
);
897 imx_ep_stall(imx_ep
);
899 local_irq_restore(flags
);
901 D_EPX(imx_ep
->imx_usb
->dev
, "<%s> %s halt\n", __func__
, usb_ep
->name
);
905 static int imx_ep_fifo_status(struct usb_ep
*usb_ep
)
907 struct imx_ep_struct
*imx_ep
= container_of
908 (usb_ep
, struct imx_ep_struct
, ep
);
911 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
915 if (imx_ep
->imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
)
918 return imx_fifo_bcount(imx_ep
);
921 static void imx_ep_fifo_flush(struct usb_ep
*usb_ep
)
923 struct imx_ep_struct
*imx_ep
= container_of
924 (usb_ep
, struct imx_ep_struct
, ep
);
927 local_irq_save(flags
);
929 if (!usb_ep
|| !EP_NO(imx_ep
) || !list_empty(&imx_ep
->queue
)) {
930 D_ERR(imx_ep
->imx_usb
->dev
, "<%s> bad ep\n", __func__
);
931 local_irq_restore(flags
);
935 /* toggle and halt bits stay unchanged */
938 local_irq_restore(flags
);
941 static struct usb_ep_ops imx_ep_ops
= {
942 .enable
= imx_ep_enable
,
943 .disable
= imx_ep_disable
,
945 .alloc_request
= imx_ep_alloc_request
,
946 .free_request
= imx_ep_free_request
,
948 .queue
= imx_ep_queue
,
949 .dequeue
= imx_ep_dequeue
,
951 .set_halt
= imx_ep_set_halt
,
952 .fifo_status
= imx_ep_fifo_status
,
953 .fifo_flush
= imx_ep_fifo_flush
,
956 /*******************************************************************************
957 * USB endpoint control functions
958 *******************************************************************************
961 void ep0_chg_stat(const char *label
,
962 struct imx_udc_struct
*imx_usb
, enum ep0_state stat
)
964 D_EP0(imx_usb
->dev
, "<%s> from %15s to %15s\n",
965 label
, state_name
[imx_usb
->ep0state
], state_name
[stat
]);
967 if (imx_usb
->ep0state
== stat
)
970 imx_usb
->ep0state
= stat
;
973 static void usb_init_data(struct imx_udc_struct
*imx_usb
)
975 struct imx_ep_struct
*imx_ep
;
978 /* device/ep0 records init */
979 INIT_LIST_HEAD(&imx_usb
->gadget
.ep_list
);
980 INIT_LIST_HEAD(&imx_usb
->gadget
.ep0
->ep_list
);
981 ep0_chg_stat(__func__
, imx_usb
, EP0_IDLE
);
983 /* basic endpoint records init */
984 for (i
= 0; i
< IMX_USB_NB_EP
; i
++) {
985 imx_ep
= &imx_usb
->imx_ep
[i
];
988 list_add_tail(&imx_ep
->ep
.ep_list
,
989 &imx_usb
->gadget
.ep_list
);
994 INIT_LIST_HEAD(&imx_ep
->queue
);
998 static void udc_stop_activity(struct imx_udc_struct
*imx_usb
,
999 struct usb_gadget_driver
*driver
)
1001 struct imx_ep_struct
*imx_ep
;
1004 if (imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1007 /* prevent new request submissions, kill any outstanding requests */
1008 for (i
= 1; i
< IMX_USB_NB_EP
; i
++) {
1009 imx_ep
= &imx_usb
->imx_ep
[i
];
1011 imx_ep
->stopped
= 1;
1012 imx_ep_irq_disable(imx_ep
);
1013 nuke(imx_ep
, -ESHUTDOWN
);
1021 driver
->disconnect(&imx_usb
->gadget
);
1024 /*******************************************************************************
1025 * Interrupt handlers
1026 *******************************************************************************
1030 * Called when timer expires.
1031 * Timer is started when CFG_CHG is received.
1033 static void handle_config(unsigned long data
)
1035 struct imx_udc_struct
*imx_usb
= (void *)data
;
1036 struct usb_ctrlrequest u
;
1037 int temp
, cfg
, intf
, alt
;
1039 local_irq_disable();
1041 temp
= __raw_readl(imx_usb
->base
+ USB_STAT
);
1042 cfg
= (temp
& STAT_CFG
) >> 5;
1043 intf
= (temp
& STAT_INTF
) >> 3;
1044 alt
= temp
& STAT_ALTSET
;
1047 "<%s> orig config C=%d, I=%d, A=%d / "
1048 "req config C=%d, I=%d, A=%d\n",
1049 __func__
, imx_usb
->cfg
, imx_usb
->intf
, imx_usb
->alt
,
1052 if (cfg
== 1 || cfg
== 2) {
1054 if (imx_usb
->cfg
!= cfg
) {
1055 u
.bRequest
= USB_REQ_SET_CONFIGURATION
;
1056 u
.bRequestType
= USB_DIR_OUT
|
1063 imx_usb
->driver
->setup(&imx_usb
->gadget
, &u
);
1066 if (imx_usb
->intf
!= intf
|| imx_usb
->alt
!= alt
) {
1067 u
.bRequest
= USB_REQ_SET_INTERFACE
;
1068 u
.bRequestType
= USB_DIR_OUT
|
1070 USB_RECIP_INTERFACE
;
1074 imx_usb
->intf
= intf
;
1076 imx_usb
->driver
->setup(&imx_usb
->gadget
, &u
);
1080 imx_usb
->set_config
= 0;
1085 static irqreturn_t
imx_udc_irq(int irq
, void *dev
)
1087 struct imx_udc_struct
*imx_usb
= dev
;
1088 int intr
= __raw_readl(imx_usb
->base
+ USB_INTR
);
1091 if (intr
& (INTR_WAKEUP
| INTR_SUSPEND
| INTR_RESUME
| INTR_RESET_START
1092 | INTR_RESET_STOP
| INTR_CFG_CHG
)) {
1093 dump_intr(__func__
, intr
, imx_usb
->dev
);
1094 dump_usb_stat(__func__
, imx_usb
);
1097 if (!imx_usb
->driver
)
1100 if (intr
& INTR_SOF
) {
1101 /* Copy from Freescale BSP.
1102 We must enable SOF intr and set CMDOVER.
1103 Datasheet don't specifiy this action, but it
1104 is done in Freescale BSP, so just copy it.
1106 if (imx_usb
->ep0state
== EP0_IDLE
) {
1107 temp
= __raw_readl(imx_usb
->base
+ USB_CTRL
);
1108 __raw_writel(temp
| CTRL_CMDOVER
,
1109 imx_usb
->base
+ USB_CTRL
);
1113 if (intr
& INTR_CFG_CHG
) {
1114 /* A workaround of serious IMX UDC bug.
1115 Handling of CFG_CHG should be delayed for some time, because
1116 IMX does not NACK the host when CFG_CHG interrupt is pending.
1117 There is no time to handle current CFG_CHG
1118 if next CFG_CHG or SETUP packed is send immediately.
1119 We have to clear CFG_CHG, start the timer and
1120 NACK the host by setting CTRL_CMDOVER
1121 if it sends any SETUP packet.
1122 When timer expires, handler is called to handle configuration
1123 changes. While CFG_CHG is not handled (set_config=1),
1124 we must NACK the host to every SETUP packed.
1125 This delay prevents from going out of sync with host.
1127 __raw_writel(INTR_CFG_CHG
, imx_usb
->base
+ USB_INTR
);
1128 imx_usb
->set_config
= 1;
1129 mod_timer(&imx_usb
->timer
, jiffies
+ 5);
1133 if (intr
& INTR_WAKEUP
) {
1134 if (imx_usb
->gadget
.speed
== USB_SPEED_UNKNOWN
1135 && imx_usb
->driver
&& imx_usb
->driver
->resume
)
1136 imx_usb
->driver
->resume(&imx_usb
->gadget
);
1137 imx_usb
->set_config
= 0;
1138 del_timer(&imx_usb
->timer
);
1139 imx_usb
->gadget
.speed
= USB_SPEED_FULL
;
1142 if (intr
& INTR_SUSPEND
) {
1143 if (imx_usb
->gadget
.speed
!= USB_SPEED_UNKNOWN
1144 && imx_usb
->driver
&& imx_usb
->driver
->suspend
)
1145 imx_usb
->driver
->suspend(&imx_usb
->gadget
);
1146 imx_usb
->set_config
= 0;
1147 del_timer(&imx_usb
->timer
);
1148 imx_usb
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1151 if (intr
& INTR_RESET_START
) {
1152 __raw_writel(intr
, imx_usb
->base
+ USB_INTR
);
1153 udc_stop_activity(imx_usb
, imx_usb
->driver
);
1154 imx_usb
->set_config
= 0;
1155 del_timer(&imx_usb
->timer
);
1156 imx_usb
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1159 if (intr
& INTR_RESET_STOP
)
1160 imx_usb
->gadget
.speed
= USB_SPEED_FULL
;
1163 __raw_writel(intr
, imx_usb
->base
+ USB_INTR
);
1167 static irqreturn_t
imx_udc_ctrl_irq(int irq
, void *dev
)
1169 struct imx_udc_struct
*imx_usb
= dev
;
1170 struct imx_ep_struct
*imx_ep
= &imx_usb
->imx_ep
[0];
1171 int intr
= __raw_readl(imx_usb
->base
+ USB_EP_INTR(0));
1173 dump_ep_intr(__func__
, 0, intr
, imx_usb
->dev
);
1175 if (!imx_usb
->driver
) {
1176 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(0));
1180 /* DEVREQ has highest priority */
1181 if (intr
& (EPINTR_DEVREQ
| EPINTR_MDEVREQ
))
1182 handle_ep0_devreq(imx_usb
);
1183 /* Seem i.MX is missing EOF interrupt sometimes.
1184 * Therefore we don't monitor EOF.
1185 * We call handle_ep0() only if a request is queued for ep0.
1187 else if (!list_empty(&imx_ep
->queue
))
1190 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(0));
1195 #ifndef MX1_INT_USBD0
1196 #define MX1_INT_USBD0 MX1_USBD_INT0
1199 static irqreturn_t
imx_udc_bulk_irq(int irq
, void *dev
)
1201 struct imx_udc_struct
*imx_usb
= dev
;
1202 struct imx_ep_struct
*imx_ep
= &imx_usb
->imx_ep
[irq
- MX1_INT_USBD0
];
1203 int intr
= __raw_readl(imx_usb
->base
+ USB_EP_INTR(EP_NO(imx_ep
)));
1205 dump_ep_intr(__func__
, irq
- MX1_INT_USBD0
, intr
, imx_usb
->dev
);
1207 if (!imx_usb
->driver
) {
1208 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(EP_NO(imx_ep
)));
1214 __raw_writel(intr
, imx_usb
->base
+ USB_EP_INTR(EP_NO(imx_ep
)));
1219 irq_handler_t
intr_handler(int i
)
1223 return imx_udc_ctrl_irq
;
1229 return imx_udc_bulk_irq
;
1235 /*******************************************************************************
1236 * Static defined IMX UDC structure
1237 *******************************************************************************
1240 static int imx_udc_start(struct usb_gadget_driver
*driver
,
1241 int (*bind
)(struct usb_gadget
*));
1242 static int imx_udc_stop(struct usb_gadget_driver
*driver
);
1243 static const struct usb_gadget_ops imx_udc_ops
= {
1244 .get_frame
= imx_udc_get_frame
,
1245 .wakeup
= imx_udc_wakeup
,
1246 .start
= imx_udc_start
,
1247 .stop
= imx_udc_stop
,
1250 static struct imx_udc_struct controller
= {
1252 .ops
= &imx_udc_ops
,
1253 .ep0
= &controller
.imx_ep
[0].ep
,
1254 .name
= driver_name
,
1256 .init_name
= "gadget",
1266 .imx_usb
= &controller
,
1268 .bEndpointAddress
= 0,
1269 .bmAttributes
= USB_ENDPOINT_XFER_CONTROL
,
1273 .name
= "ep1in-bulk",
1277 .imx_usb
= &controller
,
1279 .bEndpointAddress
= USB_DIR_IN
| 1,
1280 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
1284 .name
= "ep2out-bulk",
1288 .imx_usb
= &controller
,
1290 .bEndpointAddress
= USB_DIR_OUT
| 2,
1291 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
1295 .name
= "ep3out-bulk",
1299 .imx_usb
= &controller
,
1301 .bEndpointAddress
= USB_DIR_OUT
| 3,
1302 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
1306 .name
= "ep4in-int",
1310 .imx_usb
= &controller
,
1312 .bEndpointAddress
= USB_DIR_IN
| 4,
1313 .bmAttributes
= USB_ENDPOINT_XFER_INT
,
1317 .name
= "ep5out-int",
1321 .imx_usb
= &controller
,
1323 .bEndpointAddress
= USB_DIR_OUT
| 5,
1324 .bmAttributes
= USB_ENDPOINT_XFER_INT
,
1328 /*******************************************************************************
1329 * USB gadget driver functions
1330 *******************************************************************************
1332 static int imx_udc_start(struct usb_gadget_driver
*driver
,
1333 int (*bind
)(struct usb_gadget
*))
1335 struct imx_udc_struct
*imx_usb
= &controller
;
1339 || driver
->speed
< USB_SPEED_FULL
1341 || !driver
->disconnect
1346 if (imx_usb
->driver
)
1349 /* first hook up the driver ... */
1350 imx_usb
->driver
= driver
;
1351 imx_usb
->gadget
.dev
.driver
= &driver
->driver
;
1353 retval
= device_add(&imx_usb
->gadget
.dev
);
1356 retval
= bind(&imx_usb
->gadget
);
1358 D_ERR(imx_usb
->dev
, "<%s> bind to driver %s --> error %d\n",
1359 __func__
, driver
->driver
.name
, retval
);
1360 device_del(&imx_usb
->gadget
.dev
);
1365 D_INI(imx_usb
->dev
, "<%s> registered gadget driver '%s'\n",
1366 __func__
, driver
->driver
.name
);
1368 imx_udc_enable(imx_usb
);
1372 imx_usb
->driver
= NULL
;
1373 imx_usb
->gadget
.dev
.driver
= NULL
;
1377 static int imx_udc_stop(struct usb_gadget_driver
*driver
)
1379 struct imx_udc_struct
*imx_usb
= &controller
;
1383 if (!driver
|| driver
!= imx_usb
->driver
|| !driver
->unbind
)
1386 udc_stop_activity(imx_usb
, driver
);
1387 imx_udc_disable(imx_usb
);
1388 del_timer(&imx_usb
->timer
);
1390 driver
->unbind(&imx_usb
->gadget
);
1391 imx_usb
->gadget
.dev
.driver
= NULL
;
1392 imx_usb
->driver
= NULL
;
1394 device_del(&imx_usb
->gadget
.dev
);
1396 D_INI(imx_usb
->dev
, "<%s> unregistered gadget driver '%s'\n",
1397 __func__
, driver
->driver
.name
);
1402 /*******************************************************************************
1404 *******************************************************************************
1407 static int __init
imx_udc_probe(struct platform_device
*pdev
)
1409 struct imx_udc_struct
*imx_usb
= &controller
;
1410 struct resource
*res
;
1411 struct imxusb_platform_data
*pdata
;
1416 resource_size_t res_size
;
1418 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1420 dev_err(&pdev
->dev
, "can't get device resources\n");
1424 pdata
= pdev
->dev
.platform_data
;
1426 dev_err(&pdev
->dev
, "driver needs platform data\n");
1430 res_size
= resource_size(res
);
1431 if (!request_mem_region(res
->start
, res_size
, res
->name
)) {
1432 dev_err(&pdev
->dev
, "can't allocate %d bytes at %d address\n",
1433 res_size
, res
->start
);
1438 ret
= pdata
->init(&pdev
->dev
);
1443 base
= ioremap(res
->start
, res_size
);
1445 dev_err(&pdev
->dev
, "ioremap failed\n");
1450 clk
= clk_get(NULL
, "usbd_clk");
1453 dev_err(&pdev
->dev
, "can't get USB clock\n");
1458 if (clk_get_rate(clk
) != 48000000) {
1460 "Bad USB clock (%d Hz), changing to 48000000 Hz\n",
1461 (int)clk_get_rate(clk
));
1462 if (clk_set_rate(clk
, 48000000)) {
1464 "Unable to set correct USB clock (48MHz)\n");
1470 for (i
= 0; i
< IMX_USB_NB_EP
+ 1; i
++) {
1471 imx_usb
->usbd_int
[i
] = platform_get_irq(pdev
, i
);
1472 if (imx_usb
->usbd_int
[i
] < 0) {
1473 dev_err(&pdev
->dev
, "can't get irq number\n");
1479 for (i
= 0; i
< IMX_USB_NB_EP
+ 1; i
++) {
1480 ret
= request_irq(imx_usb
->usbd_int
[i
], intr_handler(i
),
1481 IRQF_DISABLED
, driver_name
, imx_usb
);
1483 dev_err(&pdev
->dev
, "can't get irq %i, err %d\n",
1484 imx_usb
->usbd_int
[i
], ret
);
1485 for (--i
; i
>= 0; i
--)
1486 free_irq(imx_usb
->usbd_int
[i
], imx_usb
);
1492 imx_usb
->base
= base
;
1494 imx_usb
->dev
= &pdev
->dev
;
1496 device_initialize(&imx_usb
->gadget
.dev
);
1498 imx_usb
->gadget
.dev
.parent
= &pdev
->dev
;
1499 imx_usb
->gadget
.dev
.dma_mask
= pdev
->dev
.dma_mask
;
1501 platform_set_drvdata(pdev
, imx_usb
);
1503 usb_init_data(imx_usb
);
1504 imx_udc_init(imx_usb
);
1506 init_timer(&imx_usb
->timer
);
1507 imx_usb
->timer
.function
= handle_config
;
1508 imx_usb
->timer
.data
= (unsigned long)imx_usb
;
1510 ret
= usb_add_gadget_udc(&pdev
->dev
, &imx_usb
->gadget
);
1516 for (i
= 0; i
< IMX_USB_NB_EP
+ 1; i
++)
1517 free_irq(imx_usb
->usbd_int
[i
], imx_usb
);
1525 pdata
->exit(&pdev
->dev
);
1527 release_mem_region(res
->start
, res_size
);
1531 static int __exit
imx_udc_remove(struct platform_device
*pdev
)
1533 struct imx_udc_struct
*imx_usb
= platform_get_drvdata(pdev
);
1534 struct imxusb_platform_data
*pdata
= pdev
->dev
.platform_data
;
1537 usb_del_gadget_udc(&imx_usb
->gadget
);
1538 imx_udc_disable(imx_usb
);
1539 del_timer(&imx_usb
->timer
);
1541 for (i
= 0; i
< IMX_USB_NB_EP
+ 1; i
++)
1542 free_irq(imx_usb
->usbd_int
[i
], imx_usb
);
1544 clk_put(imx_usb
->clk
);
1545 clk_disable(imx_usb
->clk
);
1546 iounmap(imx_usb
->base
);
1548 release_mem_region(imx_usb
->res
->start
, resource_size(imx_usb
->res
));
1551 pdata
->exit(&pdev
->dev
);
1553 platform_set_drvdata(pdev
, NULL
);
1558 /*----------------------------------------------------------------------------*/
1561 #define imx_udc_suspend NULL
1562 #define imx_udc_resume NULL
1564 #define imx_udc_suspend NULL
1565 #define imx_udc_resume NULL
1568 /*----------------------------------------------------------------------------*/
1570 static struct platform_driver udc_driver
= {
1572 .name
= driver_name
,
1573 .owner
= THIS_MODULE
,
1575 .remove
= __exit_p(imx_udc_remove
),
1576 .suspend
= imx_udc_suspend
,
1577 .resume
= imx_udc_resume
,
1580 static int __init
udc_init(void)
1582 return platform_driver_probe(&udc_driver
, imx_udc_probe
);
1584 module_init(udc_init
);
1586 static void __exit
udc_exit(void)
1588 platform_driver_unregister(&udc_driver
);
1590 module_exit(udc_exit
);
1592 MODULE_DESCRIPTION("IMX USB Device Controller driver");
1593 MODULE_AUTHOR("Darius Augulis <augulis.darius@gmail.com>");
1594 MODULE_LICENSE("GPL");
1595 MODULE_ALIAS("platform:imx_udc");