USB: storage: iRiver P7 UNUSUAL_DEV patch
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / usb / gadget / imx_udc.c
CommitLineData
2a4f136f
DA
1/*
2 * driver/usb/gadget/imx_udc.c
3 *
593bef6c 4 * Copyright (C) 2005 Mike Lee <eemike@gmail.com>
2a4f136f
DA
5 * Copyright (C) 2008 Darius Augulis <augulis.darius@gmail.com>
6 *
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.
11 *
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.
16 */
17
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>
25#include <linux/io.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>
b633d28e 31#include <linux/timer.h>
2a4f136f
DA
32
33#include <linux/usb/ch9.h>
34#include <linux/usb/gadget.h>
35
36#include <mach/usb.h>
37#include <mach/hardware.h>
38
39#include "imx_udc.h"
40
41static const char driver_name[] = "imx_udc";
42static const char ep0name[] = "ep0";
43
44void ep0_chg_stat(const char *label, struct imx_udc_struct *imx_usb,
45 enum ep0_state stat);
46
47/*******************************************************************************
48 * IMX UDC hardware related functions
49 *******************************************************************************
50 */
51
52void imx_udc_enable(struct imx_udc_struct *imx_usb)
53{
54 int temp = __raw_readl(imx_usb->base + USB_CTRL);
593bef6c
DA
55 __raw_writel(temp | CTRL_FE_ENA | CTRL_AFE_ENA,
56 imx_usb->base + USB_CTRL);
2a4f136f
DA
57 imx_usb->gadget.speed = USB_SPEED_FULL;
58}
59
60void imx_udc_disable(struct imx_udc_struct *imx_usb)
61{
62 int temp = __raw_readl(imx_usb->base + USB_CTRL);
63
64 __raw_writel(temp & ~(CTRL_FE_ENA | CTRL_AFE_ENA),
65 imx_usb->base + USB_CTRL);
66
67 ep0_chg_stat(__func__, imx_usb, EP0_IDLE);
68 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
69}
70
71void imx_udc_reset(struct imx_udc_struct *imx_usb)
72{
73 int temp = __raw_readl(imx_usb->base + USB_ENAB);
74
75 /* set RST bit */
76 __raw_writel(temp | ENAB_RST, imx_usb->base + USB_ENAB);
77
78 /* wait RST bit to clear */
79 do {} while (__raw_readl(imx_usb->base + USB_ENAB) & ENAB_RST);
80
81 /* wait CFG bit to assert */
82 do {} while (!(__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG));
83
84 /* udc module is now ready */
85}
86
87void imx_udc_config(struct imx_udc_struct *imx_usb)
88{
89 u8 ep_conf[5];
90 u8 i, j, cfg;
91 struct imx_ep_struct *imx_ep;
92
93 /* wait CFG bit to assert */
94 do {} while (!(__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG));
95
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);
101 }
102
103 /* Download the endpoint buffers for endpoints 1-5.
104 * We specify two configurations, one interface
105 */
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;
116 /* TRXTYP */
117 ep_conf[3] = 0xC0;
118 /* FIFO no */
119 ep_conf[4] = i;
120
121 D_INI(imx_usb->dev,
122 "<%s> ep%d_conf[%d]:"
123 "[%02x-%02x-%02x-%02x-%02x]\n",
124 __func__, i, cfg,
125 ep_conf[0], ep_conf[1], ep_conf[2],
126 ep_conf[3], ep_conf[4]);
127
128 for (j = 0; j < 5; j++) {
129 __raw_writeb(ep_conf[j],
130 imx_usb->base + USB_DDAT);
593bef6c
DA
131 do {} while (__raw_readl(imx_usb->base
132 + USB_DADR)
2a4f136f
DA
133 & DADR_BSY);
134 }
135 }
136 }
137
138 /* wait CFG bit to clear */
139 do {} while (__raw_readl(imx_usb->base + USB_DADR) & DADR_CFG);
140}
141
142void imx_udc_init_irq(struct imx_udc_struct *imx_usb)
143{
144 int i;
145
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));
152 }
153
154 /* Enable USB irqs */
155 __raw_writel(INTR_MSOF | INTR_FRAME_MATCH, imx_usb->base + USB_MASK);
156
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));
161}
162
163void imx_udc_init_ep(struct imx_udc_struct *imx_usb)
164{
165 int i, max, temp;
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) {
170 case 8:
171 max = 0;
172 break;
173 case 16:
174 max = 1;
175 break;
176 case 32:
177 max = 2;
178 break;
179 case 64:
180 max = 3;
181 break;
182 default:
183 max = 1;
184 break;
185 }
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));
593bef6c
DA
189 __raw_writel(temp | EPSTAT_FLUSH,
190 imx_usb->base + USB_EP_STAT(i));
2a4f136f
DA
191 D_INI(imx_usb->dev, "<%s> ep%d_stat %08x\n", __func__, i,
192 __raw_readl(imx_usb->base + USB_EP_STAT(i)));
193 }
194}
195
196void imx_udc_init_fifo(struct imx_udc_struct *imx_usb)
197{
198 int i, temp;
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];
202
203 /* Fifo control */
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)));
208
209 /* Fifo alarm */
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)));
214 }
215}
216
217static void imx_udc_init(struct imx_udc_struct *imx_usb)
218{
219 /* Reset UDC */
220 imx_udc_reset(imx_usb);
221
222 /* Download config to enpoint buffer */
223 imx_udc_config(imx_usb);
224
225 /* Setup interrups */
226 imx_udc_init_irq(imx_usb);
227
228 /* Setup endpoints */
229 imx_udc_init_ep(imx_usb);
230
231 /* Setup fifos */
232 imx_udc_init_fifo(imx_usb);
233}
234
235void imx_ep_irq_enable(struct imx_ep_struct *imx_ep)
236{
237
238 int i = EP_NO(imx_ep);
239
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));
244}
245
246void imx_ep_irq_disable(struct imx_ep_struct *imx_ep)
247{
248
249 int i = EP_NO(imx_ep);
250
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));
253}
254
255int imx_ep_empty(struct imx_ep_struct *imx_ep)
256{
257 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
258
259 return __raw_readl(imx_usb->base + USB_EP_FSTAT(EP_NO(imx_ep)))
260 & FSTAT_EMPTY;
261}
262
263unsigned imx_fifo_bcount(struct imx_ep_struct *imx_ep)
264{
265 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
266
267 return (__raw_readl(imx_usb->base + USB_EP_STAT(EP_NO(imx_ep)))
268 & EPSTAT_BCOUNT) >> 16;
269}
270
271void imx_flush(struct imx_ep_struct *imx_ep)
272{
273 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
274
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)));
278}
279
280void imx_ep_stall(struct imx_ep_struct *imx_ep)
281{
282 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
283 int temp, i;
284
593bef6c
DA
285 D_ERR(imx_usb->dev,
286 "<%s> Forced stall on %s\n", __func__, imx_ep->ep.name);
2a4f136f
DA
287
288 imx_flush(imx_ep);
289
290 /* Special care for ep0 */
8f182e5d 291 if (!EP_NO(imx_ep)) {
2a4f136f 292 temp = __raw_readl(imx_usb->base + USB_CTRL);
593bef6c
DA
293 __raw_writel(temp | CTRL_CMDOVER | CTRL_CMDERROR,
294 imx_usb->base + USB_CTRL);
295 do { } while (__raw_readl(imx_usb->base + USB_CTRL)
296 & CTRL_CMDOVER);
2a4f136f
DA
297 temp = __raw_readl(imx_usb->base + USB_CTRL);
298 __raw_writel(temp & ~CTRL_CMDERROR, imx_usb->base + USB_CTRL);
299 }
300 else {
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)));
304
305 for (i = 0; i < 100; i ++) {
593bef6c
DA
306 temp = __raw_readl(imx_usb->base
307 + USB_EP_STAT(EP_NO(imx_ep)));
0df24792 308 if (!(temp & EPSTAT_STALL))
2a4f136f
DA
309 break;
310 udelay(20);
311 }
8f182e5d 312 if (i == 100)
2a4f136f
DA
313 D_ERR(imx_usb->dev, "<%s> Non finished stall on %s\n",
314 __func__, imx_ep->ep.name);
315 }
316}
317
318static int imx_udc_get_frame(struct usb_gadget *_gadget)
319{
320 struct imx_udc_struct *imx_usb = container_of(_gadget,
321 struct imx_udc_struct, gadget);
322
323 return __raw_readl(imx_usb->base + USB_FRAME) & 0x7FF;
324}
325
326static int imx_udc_wakeup(struct usb_gadget *_gadget)
327{
328 return 0;
329}
330
331/*******************************************************************************
332 * USB request control functions
333 *******************************************************************************
334 */
335
593bef6c
DA
336static void ep_add_request(struct imx_ep_struct *imx_ep,
337 struct imx_request *req)
2a4f136f
DA
338{
339 if (unlikely(!req))
340 return;
341
342 req->in_use = 1;
343 list_add_tail(&req->queue, &imx_ep->queue);
344}
345
593bef6c
DA
346static void ep_del_request(struct imx_ep_struct *imx_ep,
347 struct imx_request *req)
2a4f136f
DA
348{
349 if (unlikely(!req))
350 return;
351
352 list_del_init(&req->queue);
353 req->in_use = 0;
354}
355
593bef6c
DA
356static void done(struct imx_ep_struct *imx_ep,
357 struct imx_request *req, int status)
2a4f136f
DA
358{
359 ep_del_request(imx_ep, req);
360
361 if (likely(req->req.status == -EINPROGRESS))
362 req->req.status = status;
363 else
364 status = req->req.status;
365
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);
371
372 req->req.complete(&imx_ep->ep, &req->req);
373}
374
375static void nuke(struct imx_ep_struct *imx_ep, int status)
376{
377 struct imx_request *req;
378
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);
382 }
383}
384
385/*******************************************************************************
386 * Data tansfer over USB functions
387 *******************************************************************************
388 */
389static int read_packet(struct imx_ep_struct *imx_ep, struct imx_request *req)
390{
391 u8 *buf;
392 int bytes_ep, bufferspace, count, i;
393
394 bytes_ep = imx_fifo_bcount(imx_ep);
395 bufferspace = req->req.length - req->req.actual;
396
397 buf = req->req.buf + req->req.actual;
398 prefetchw(buf);
399
400 if (unlikely(imx_ep_empty(imx_ep)))
401 count = 0; /* zlp */
402 else
403 count = min(bytes_ep, bufferspace);
404
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;
409
410 return count;
411}
412
413static int write_packet(struct imx_ep_struct *imx_ep, struct imx_request *req)
414{
415 u8 *buf;
416 int length, count, temp;
417
680cc645
DG
418 if (unlikely(__raw_readl(imx_ep->imx_usb->base +
419 USB_EP_STAT(EP_NO(imx_ep))) & EPSTAT_ZLPS)) {
420 D_TRX(imx_ep->imx_usb->dev, "<%s> zlp still queued in EP %s\n",
421 __func__, imx_ep->ep.name);
422 return -1;
423 }
424
2a4f136f
DA
425 buf = req->req.buf + req->req.actual;
426 prefetch(buf);
427
428 length = min(req->req.length - req->req.actual, (u32)imx_ep->fifosize);
429
430 if (imx_fifo_bcount(imx_ep) + length > imx_ep->fifosize) {
431 D_TRX(imx_ep->imx_usb->dev, "<%s> packet overfill %s fifo\n",
432 __func__, imx_ep->ep.name);
433 return -1;
434 }
435
436 req->req.actual += length;
437 count = length;
438
439 if (!count && req->req.zero) { /* zlp */
440 temp = __raw_readl(imx_ep->imx_usb->base
441 + USB_EP_STAT(EP_NO(imx_ep)));
442 __raw_writel(temp | EPSTAT_ZLPS, imx_ep->imx_usb->base
443 + USB_EP_STAT(EP_NO(imx_ep)));
444 D_TRX(imx_ep->imx_usb->dev, "<%s> zero packet\n", __func__);
445 return 0;
446 }
447
448 while (count--) {
449 if (count == 0) { /* last byte */
450 temp = __raw_readl(imx_ep->imx_usb->base
451 + USB_EP_FCTRL(EP_NO(imx_ep)));
452 __raw_writel(temp | FCTRL_WFR, imx_ep->imx_usb->base
453 + USB_EP_FCTRL(EP_NO(imx_ep)));
454 }
455 __raw_writeb(*buf++,
456 imx_ep->imx_usb->base + USB_EP_FDAT0(EP_NO(imx_ep)));
457 }
458
459 return length;
460}
461
462static int read_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
463{
464 int bytes = 0,
465 count,
466 completed = 0;
467
468 while (__raw_readl(imx_ep->imx_usb->base + USB_EP_FSTAT(EP_NO(imx_ep)))
469 & FSTAT_FR) {
470 count = read_packet(imx_ep, req);
471 bytes += count;
472
473 completed = (count != imx_ep->fifosize);
474 if (completed || req->req.actual == req->req.length) {
475 completed = 1;
476 break;
477 }
478 }
479
480 if (completed || !req->req.length) {
481 done(imx_ep, req, 0);
482 D_REQ(imx_ep->imx_usb->dev, "<%s> %s req<%p> %s\n",
483 __func__, imx_ep->ep.name, req,
484 completed ? "completed" : "not completed");
485 if (!EP_NO(imx_ep))
486 ep0_chg_stat(__func__, imx_ep->imx_usb, EP0_IDLE);
487 }
488
489 D_TRX(imx_ep->imx_usb->dev, "<%s> bytes read: %d\n", __func__, bytes);
490
491 return completed;
492}
493
494static int write_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
495{
496 int bytes = 0,
497 count,
498 completed = 0;
499
500 while (!completed) {
501 count = write_packet(imx_ep, req);
502 if (count < 0)
503 break; /* busy */
504 bytes += count;
505
506 /* last packet "must be" short (or a zlp) */
507 completed = (count != imx_ep->fifosize);
508
509 if (unlikely(completed)) {
510 done(imx_ep, req, 0);
511 D_REQ(imx_ep->imx_usb->dev, "<%s> %s req<%p> %s\n",
512 __func__, imx_ep->ep.name, req,
513 completed ? "completed" : "not completed");
514 if (!EP_NO(imx_ep))
593bef6c
DA
515 ep0_chg_stat(__func__,
516 imx_ep->imx_usb, EP0_IDLE);
2a4f136f
DA
517 }
518 }
519
520 D_TRX(imx_ep->imx_usb->dev, "<%s> bytes sent: %d\n", __func__, bytes);
521
522 return completed;
523}
524
525/*******************************************************************************
526 * Endpoint handlers
527 *******************************************************************************
528 */
529static int handle_ep(struct imx_ep_struct *imx_ep)
530{
531 struct imx_request *req;
532 int completed = 0;
533
534 do {
535 if (!list_empty(&imx_ep->queue))
536 req = list_entry(imx_ep->queue.next,
537 struct imx_request, queue);
538 else {
539 D_REQ(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
540 __func__, imx_ep->ep.name);
541 return 0;
542 }
543
544 if (EP_DIR(imx_ep)) /* to host */
545 completed = write_fifo(imx_ep, req);
546 else /* to device */
547 completed = read_fifo(imx_ep, req);
548
549 dump_ep_stat(__func__, imx_ep);
550
551 } while (completed);
552
553 return 0;
554}
555
556static int handle_ep0(struct imx_ep_struct *imx_ep)
557{
558 struct imx_request *req = NULL;
559 int ret = 0;
560
8f182e5d 561 if (!list_empty(&imx_ep->queue)) {
2a4f136f
DA
562 req = list_entry(imx_ep->queue.next, struct imx_request, queue);
563
2a4f136f
DA
564 switch (imx_ep->imx_usb->ep0state) {
565
566 case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR */
567 write_fifo(imx_ep, req);
568 break;
569 case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR */
570 read_fifo(imx_ep, req);
571 break;
572 default:
573 D_EP0(imx_ep->imx_usb->dev,
574 "<%s> ep0 i/o, odd state %d\n",
575 __func__, imx_ep->imx_usb->ep0state);
576 ep_del_request(imx_ep, req);
577 ret = -EL2HLT;
578 break;
579 }
580 }
581
8f182e5d
DA
582 else
583 D_ERR(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
584 __func__, imx_ep->ep.name);
585
2a4f136f
DA
586 return ret;
587}
588
589static void handle_ep0_devreq(struct imx_udc_struct *imx_usb)
590{
591 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
592 union {
593 struct usb_ctrlrequest r;
594 u8 raw[8];
595 u32 word[2];
596 } u;
597 int temp, i;
598
599 nuke(imx_ep, -EPROTO);
600
601 /* read SETUP packet */
602 for (i = 0; i < 2; i++) {
603 if (imx_ep_empty(imx_ep)) {
604 D_ERR(imx_usb->dev,
605 "<%s> no setup packet received\n", __func__);
606 goto stall;
607 }
593bef6c
DA
608 u.word[i] = __raw_readl(imx_usb->base
609 + USB_EP_FDAT(EP_NO(imx_ep)));
2a4f136f
DA
610 }
611
612 temp = imx_ep_empty(imx_ep);
613 while (!imx_ep_empty(imx_ep)) {
614 i = __raw_readl(imx_usb->base + USB_EP_FDAT(EP_NO(imx_ep)));
615 D_ERR(imx_usb->dev,
616 "<%s> wrong to have extra bytes for setup : 0x%08x\n",
617 __func__, i);
618 }
619 if (!temp)
620 goto stall;
621
622 le16_to_cpus(&u.r.wValue);
623 le16_to_cpus(&u.r.wIndex);
624 le16_to_cpus(&u.r.wLength);
625
626 D_REQ(imx_usb->dev, "<%s> SETUP %02x.%02x v%04x i%04x l%04x\n",
627 __func__, u.r.bRequestType, u.r.bRequest,
628 u.r.wValue, u.r.wIndex, u.r.wLength);
629
630 if (imx_usb->set_config) {
631 /* NACK the host by using CMDOVER */
632 temp = __raw_readl(imx_usb->base + USB_CTRL);
633 __raw_writel(temp | CTRL_CMDOVER, imx_usb->base + USB_CTRL);
634
635 D_ERR(imx_usb->dev,
636 "<%s> set config req is pending, NACK the host\n",
637 __func__);
638 return;
639 }
640
641 if (u.r.bRequestType & USB_DIR_IN)
642 ep0_chg_stat(__func__, imx_usb, EP0_IN_DATA_PHASE);
643 else
644 ep0_chg_stat(__func__, imx_usb, EP0_OUT_DATA_PHASE);
645
646 i = imx_usb->driver->setup(&imx_usb->gadget, &u.r);
647 if (i < 0) {
648 D_ERR(imx_usb->dev, "<%s> device setup error %d\n",
649 __func__, i);
650 goto stall;
651 }
652
653 return;
654stall:
655 D_ERR(imx_usb->dev, "<%s> protocol STALL\n", __func__);
656 imx_ep_stall(imx_ep);
657 ep0_chg_stat(__func__, imx_usb, EP0_STALL);
658 return;
659}
660
661/*******************************************************************************
662 * USB gadget callback functions
663 *******************************************************************************
664 */
665
666static int imx_ep_enable(struct usb_ep *usb_ep,
667 const struct usb_endpoint_descriptor *desc)
668{
669 struct imx_ep_struct *imx_ep = container_of(usb_ep,
670 struct imx_ep_struct, ep);
671 struct imx_udc_struct *imx_usb = imx_ep->imx_usb;
672 unsigned long flags;
673
674 if (!usb_ep
675 || !desc
676 || !EP_NO(imx_ep)
677 || desc->bDescriptorType != USB_DT_ENDPOINT
678 || imx_ep->bEndpointAddress != desc->bEndpointAddress) {
679 D_ERR(imx_usb->dev,
680 "<%s> bad ep or descriptor\n", __func__);
681 return -EINVAL;
682 }
683
684 if (imx_ep->bmAttributes != desc->bmAttributes) {
685 D_ERR(imx_usb->dev,
686 "<%s> %s type mismatch\n", __func__, usb_ep->name);
687 return -EINVAL;
688 }
689
690 if (imx_ep->fifosize < le16_to_cpu(desc->wMaxPacketSize)) {
691 D_ERR(imx_usb->dev,
692 "<%s> bad %s maxpacket\n", __func__, usb_ep->name);
693 return -ERANGE;
694 }
695
696 if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
697 D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
698 return -ESHUTDOWN;
699 }
700
701 local_irq_save(flags);
702
703 imx_ep->stopped = 0;
704 imx_flush(imx_ep);
705 imx_ep_irq_enable(imx_ep);
706
707 local_irq_restore(flags);
708
709 D_EPX(imx_usb->dev, "<%s> ENABLED %s\n", __func__, usb_ep->name);
710 return 0;
711}
712
713static int imx_ep_disable(struct usb_ep *usb_ep)
714{
715 struct imx_ep_struct *imx_ep = container_of(usb_ep,
716 struct imx_ep_struct, ep);
717 unsigned long flags;
718
719 if (!usb_ep || !EP_NO(imx_ep) || !list_empty(&imx_ep->queue)) {
720 D_ERR(imx_ep->imx_usb->dev, "<%s> %s can not be disabled\n",
721 __func__, usb_ep ? imx_ep->ep.name : NULL);
722 return -EINVAL;
723 }
724
725 local_irq_save(flags);
726
727 imx_ep->stopped = 1;
728 nuke(imx_ep, -ESHUTDOWN);
729 imx_flush(imx_ep);
730 imx_ep_irq_disable(imx_ep);
731
732 local_irq_restore(flags);
733
734 D_EPX(imx_ep->imx_usb->dev,
735 "<%s> DISABLED %s\n", __func__, usb_ep->name);
736 return 0;
737}
738
739static struct usb_request *imx_ep_alloc_request
740 (struct usb_ep *usb_ep, gfp_t gfp_flags)
741{
742 struct imx_request *req;
743
1e0abb7e
DM
744 if (!usb_ep)
745 return NULL;
746
2a4f136f 747 req = kzalloc(sizeof *req, gfp_flags);
1e0abb7e
DM
748 if (!req)
749 return NULL;
2a4f136f
DA
750
751 INIT_LIST_HEAD(&req->queue);
752 req->in_use = 0;
753
754 return &req->req;
755}
756
757static void imx_ep_free_request
758 (struct usb_ep *usb_ep, struct usb_request *usb_req)
759{
760 struct imx_request *req;
761
762 req = container_of(usb_req, struct imx_request, req);
763 WARN_ON(!list_empty(&req->queue));
764 kfree(req);
765}
766
767static int imx_ep_queue
768 (struct usb_ep *usb_ep, struct usb_request *usb_req, gfp_t gfp_flags)
769{
770 struct imx_ep_struct *imx_ep;
771 struct imx_udc_struct *imx_usb;
772 struct imx_request *req;
773 unsigned long flags;
774 int ret = 0;
775
776 imx_ep = container_of(usb_ep, struct imx_ep_struct, ep);
777 imx_usb = imx_ep->imx_usb;
778 req = container_of(usb_req, struct imx_request, req);
779
780 /*
781 Special care on IMX udc.
782 Ignore enqueue when after set configuration from the
783 host. This assume all gadget drivers reply set
784 configuration with the next ep0 req enqueue.
785 */
786 if (imx_usb->set_config && !EP_NO(imx_ep)) {
787 imx_usb->set_config = 0;
8f182e5d 788 D_ERR(imx_usb->dev,
2a4f136f
DA
789 "<%s> gadget reply set config\n", __func__);
790 return 0;
791 }
792
793 if (unlikely(!usb_req || !req || !usb_req->complete || !usb_req->buf)) {
794 D_ERR(imx_usb->dev, "<%s> bad params\n", __func__);
795 return -EINVAL;
796 }
797
798 if (unlikely(!usb_ep || !imx_ep)) {
799 D_ERR(imx_usb->dev, "<%s> bad ep\n", __func__);
800 return -EINVAL;
801 }
802
803 if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
804 D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
805 return -ESHUTDOWN;
806 }
807
2a4f136f
DA
808 /* Debug */
809 D_REQ(imx_usb->dev, "<%s> ep%d %s request for [%d] bytes\n",
810 __func__, EP_NO(imx_ep),
593bef6c
DA
811 ((!EP_NO(imx_ep) && imx_ep->imx_usb->ep0state
812 == EP0_IN_DATA_PHASE)
813 || (EP_NO(imx_ep) && EP_DIR(imx_ep)))
814 ? "IN" : "OUT", usb_req->length);
2a4f136f
DA
815 dump_req(__func__, imx_ep, usb_req);
816
817 if (imx_ep->stopped) {
818 usb_req->status = -ESHUTDOWN;
8f182e5d 819 return -ESHUTDOWN;
2a4f136f
DA
820 }
821
822 if (req->in_use) {
823 D_ERR(imx_usb->dev,
824 "<%s> refusing to queue req %p (already queued)\n",
825 __func__, req);
8f182e5d 826 return 0;
2a4f136f
DA
827 }
828
8f182e5d
DA
829 local_irq_save(flags);
830
2a4f136f
DA
831 usb_req->status = -EINPROGRESS;
832 usb_req->actual = 0;
833
834 ep_add_request(imx_ep, req);
835
836 if (!EP_NO(imx_ep))
837 ret = handle_ep0(imx_ep);
838 else
839 ret = handle_ep(imx_ep);
8f182e5d 840
2a4f136f
DA
841 local_irq_restore(flags);
842 return ret;
843}
844
845static int imx_ep_dequeue(struct usb_ep *usb_ep, struct usb_request *usb_req)
846{
847
848 struct imx_ep_struct *imx_ep = container_of
849 (usb_ep, struct imx_ep_struct, ep);
850 struct imx_request *req;
851 unsigned long flags;
852
853 if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
854 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
855 return -EINVAL;
856 }
857
858 local_irq_save(flags);
859
860 /* make sure it's actually queued on this endpoint */
861 list_for_each_entry(req, &imx_ep->queue, queue) {
862 if (&req->req == usb_req)
863 break;
864 }
865 if (&req->req != usb_req) {
866 local_irq_restore(flags);
867 return -EINVAL;
868 }
869
870 done(imx_ep, req, -ECONNRESET);
871
872 local_irq_restore(flags);
873 return 0;
874}
875
876static int imx_ep_set_halt(struct usb_ep *usb_ep, int value)
877{
878 struct imx_ep_struct *imx_ep = container_of
879 (usb_ep, struct imx_ep_struct, ep);
880 unsigned long flags;
881
882 if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
883 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
884 return -EINVAL;
885 }
886
887 local_irq_save(flags);
888
889 if ((imx_ep->bEndpointAddress & USB_DIR_IN)
890 && !list_empty(&imx_ep->queue)) {
891 local_irq_restore(flags);
892 return -EAGAIN;
893 }
894
895 imx_ep_stall(imx_ep);
896
897 local_irq_restore(flags);
898
899 D_EPX(imx_ep->imx_usb->dev, "<%s> %s halt\n", __func__, usb_ep->name);
900 return 0;
901}
902
903static int imx_ep_fifo_status(struct usb_ep *usb_ep)
904{
905 struct imx_ep_struct *imx_ep = container_of
906 (usb_ep, struct imx_ep_struct, ep);
907
908 if (!usb_ep) {
909 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
910 return -ENODEV;
911 }
912
913 if (imx_ep->imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
914 return 0;
915 else
916 return imx_fifo_bcount(imx_ep);
917}
918
919static void imx_ep_fifo_flush(struct usb_ep *usb_ep)
920{
921 struct imx_ep_struct *imx_ep = container_of
922 (usb_ep, struct imx_ep_struct, ep);
923 unsigned long flags;
924
925 local_irq_save(flags);
926
927 if (!usb_ep || !EP_NO(imx_ep) || !list_empty(&imx_ep->queue)) {
928 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
929 local_irq_restore(flags);
930 return;
931 }
932
933 /* toggle and halt bits stay unchanged */
934 imx_flush(imx_ep);
935
936 local_irq_restore(flags);
937}
938
939static struct usb_ep_ops imx_ep_ops = {
940 .enable = imx_ep_enable,
941 .disable = imx_ep_disable,
942
943 .alloc_request = imx_ep_alloc_request,
944 .free_request = imx_ep_free_request,
945
946 .queue = imx_ep_queue,
947 .dequeue = imx_ep_dequeue,
948
949 .set_halt = imx_ep_set_halt,
950 .fifo_status = imx_ep_fifo_status,
951 .fifo_flush = imx_ep_fifo_flush,
952};
953
954/*******************************************************************************
955 * USB endpoint control functions
956 *******************************************************************************
957 */
958
959void ep0_chg_stat(const char *label,
960 struct imx_udc_struct *imx_usb, enum ep0_state stat)
961{
962 D_EP0(imx_usb->dev, "<%s> from %15s to %15s\n",
963 label, state_name[imx_usb->ep0state], state_name[stat]);
964
965 if (imx_usb->ep0state == stat)
966 return;
967
968 imx_usb->ep0state = stat;
969}
970
971static void usb_init_data(struct imx_udc_struct *imx_usb)
972{
973 struct imx_ep_struct *imx_ep;
974 u8 i;
975
976 /* device/ep0 records init */
977 INIT_LIST_HEAD(&imx_usb->gadget.ep_list);
978 INIT_LIST_HEAD(&imx_usb->gadget.ep0->ep_list);
979 ep0_chg_stat(__func__, imx_usb, EP0_IDLE);
980
981 /* basic endpoint records init */
982 for (i = 0; i < IMX_USB_NB_EP; i++) {
983 imx_ep = &imx_usb->imx_ep[i];
984
985 if (i) {
986 list_add_tail(&imx_ep->ep.ep_list,
987 &imx_usb->gadget.ep_list);
988 imx_ep->stopped = 1;
989 } else
990 imx_ep->stopped = 0;
991
992 INIT_LIST_HEAD(&imx_ep->queue);
993 }
994}
995
996static void udc_stop_activity(struct imx_udc_struct *imx_usb,
997 struct usb_gadget_driver *driver)
998{
999 struct imx_ep_struct *imx_ep;
1000 int i;
1001
1002 if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
1003 driver = NULL;
1004
1005 /* prevent new request submissions, kill any outstanding requests */
1006 for (i = 1; i < IMX_USB_NB_EP; i++) {
1007 imx_ep = &imx_usb->imx_ep[i];
1008 imx_flush(imx_ep);
1009 imx_ep->stopped = 1;
1010 imx_ep_irq_disable(imx_ep);
1011 nuke(imx_ep, -ESHUTDOWN);
1012 }
1013
1014 imx_usb->cfg = 0;
1015 imx_usb->intf = 0;
1016 imx_usb->alt = 0;
1017
1018 if (driver)
1019 driver->disconnect(&imx_usb->gadget);
1020}
1021
1022/*******************************************************************************
1023 * Interrupt handlers
1024 *******************************************************************************
1025 */
1026
b633d28e
DA
1027/*
1028 * Called when timer expires.
1029 * Timer is started when CFG_CHG is received.
1030 */
1031static void handle_config(unsigned long data)
2a4f136f 1032{
b633d28e 1033 struct imx_udc_struct *imx_usb = (void *)data;
2a4f136f
DA
1034 struct usb_ctrlrequest u;
1035 int temp, cfg, intf, alt;
2a4f136f 1036
b633d28e 1037 local_irq_disable();
2a4f136f 1038
b633d28e
DA
1039 temp = __raw_readl(imx_usb->base + USB_STAT);
1040 cfg = (temp & STAT_CFG) >> 5;
1041 intf = (temp & STAT_INTF) >> 3;
1042 alt = temp & STAT_ALTSET;
2a4f136f 1043
b633d28e
DA
1044 D_REQ(imx_usb->dev,
1045 "<%s> orig config C=%d, I=%d, A=%d / "
1046 "req config C=%d, I=%d, A=%d\n",
1047 __func__, imx_usb->cfg, imx_usb->intf, imx_usb->alt,
1048 cfg, intf, alt);
2a4f136f 1049
b633d28e 1050 if (cfg == 1 || cfg == 2) {
2a4f136f 1051
2a4f136f 1052 if (imx_usb->cfg != cfg) {
2a4f136f
DA
1053 u.bRequest = USB_REQ_SET_CONFIGURATION;
1054 u.bRequestType = USB_DIR_OUT |
1055 USB_TYPE_STANDARD |
1056 USB_RECIP_DEVICE;
1057 u.wValue = cfg;
1058 u.wIndex = 0;
1059 u.wLength = 0;
1060 imx_usb->cfg = cfg;
2a4f136f 1061 imx_usb->driver->setup(&imx_usb->gadget, &u);
2a4f136f
DA
1062
1063 }
1064 if (imx_usb->intf != intf || imx_usb->alt != alt) {
2a4f136f
DA
1065 u.bRequest = USB_REQ_SET_INTERFACE;
1066 u.bRequestType = USB_DIR_OUT |
1067 USB_TYPE_STANDARD |
1068 USB_RECIP_INTERFACE;
1069 u.wValue = alt;
1070 u.wIndex = intf;
1071 u.wLength = 0;
1072 imx_usb->intf = intf;
1073 imx_usb->alt = alt;
2a4f136f 1074 imx_usb->driver->setup(&imx_usb->gadget, &u);
2a4f136f
DA
1075 }
1076 }
1077
b633d28e
DA
1078 imx_usb->set_config = 0;
1079
1080 local_irq_enable();
1081}
1082
1083static irqreturn_t imx_udc_irq(int irq, void *dev)
1084{
1085 struct imx_udc_struct *imx_usb = dev;
1086 int intr = __raw_readl(imx_usb->base + USB_INTR);
1087 int temp;
1088
1089 if (intr & (INTR_WAKEUP | INTR_SUSPEND | INTR_RESUME | INTR_RESET_START
1090 | INTR_RESET_STOP | INTR_CFG_CHG)) {
1091 dump_intr(__func__, intr, imx_usb->dev);
1092 dump_usb_stat(__func__, imx_usb);
1093 }
1094
1095 if (!imx_usb->driver)
1096 goto end_irq;
1097
2a4f136f 1098 if (intr & INTR_SOF) {
8f182e5d
DA
1099 /* Copy from Freescale BSP.
1100 We must enable SOF intr and set CMDOVER.
1101 Datasheet don't specifiy this action, but it
1102 is done in Freescale BSP, so just copy it.
1103 */
2a4f136f
DA
1104 if (imx_usb->ep0state == EP0_IDLE) {
1105 temp = __raw_readl(imx_usb->base + USB_CTRL);
593bef6c
DA
1106 __raw_writel(temp | CTRL_CMDOVER,
1107 imx_usb->base + USB_CTRL);
2a4f136f
DA
1108 }
1109 }
1110
b633d28e
DA
1111 if (intr & INTR_CFG_CHG) {
1112 /* A workaround of serious IMX UDC bug.
1113 Handling of CFG_CHG should be delayed for some time, because
1114 IMX does not NACK the host when CFG_CHG interrupt is pending.
1115 There is no time to handle current CFG_CHG
1116 if next CFG_CHG or SETUP packed is send immediately.
1117 We have to clear CFG_CHG, start the timer and
1118 NACK the host by setting CTRL_CMDOVER
1119 if it sends any SETUP packet.
1120 When timer expires, handler is called to handle configuration
1121 changes. While CFG_CHG is not handled (set_config=1),
1122 we must NACK the host to every SETUP packed.
1123 This delay prevents from going out of sync with host.
1124 */
1125 __raw_writel(INTR_CFG_CHG, imx_usb->base + USB_INTR);
1126 imx_usb->set_config = 1;
1127 mod_timer(&imx_usb->timer, jiffies + 5);
1128 goto end_irq;
1129 }
1130
1131 if (intr & INTR_WAKEUP) {
1132 if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN
1133 && imx_usb->driver && imx_usb->driver->resume)
1134 imx_usb->driver->resume(&imx_usb->gadget);
1135 imx_usb->set_config = 0;
1136 del_timer(&imx_usb->timer);
1137 imx_usb->gadget.speed = USB_SPEED_FULL;
1138 }
1139
1140 if (intr & INTR_SUSPEND) {
1141 if (imx_usb->gadget.speed != USB_SPEED_UNKNOWN
1142 && imx_usb->driver && imx_usb->driver->suspend)
1143 imx_usb->driver->suspend(&imx_usb->gadget);
1144 imx_usb->set_config = 0;
1145 del_timer(&imx_usb->timer);
1146 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1147 }
1148
1149 if (intr & INTR_RESET_START) {
1150 __raw_writel(intr, imx_usb->base + USB_INTR);
1151 udc_stop_activity(imx_usb, imx_usb->driver);
1152 imx_usb->set_config = 0;
1153 del_timer(&imx_usb->timer);
1154 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1155 }
1156
1157 if (intr & INTR_RESET_STOP)
1158 imx_usb->gadget.speed = USB_SPEED_FULL;
1159
2a4f136f
DA
1160end_irq:
1161 __raw_writel(intr, imx_usb->base + USB_INTR);
1162 return IRQ_HANDLED;
1163}
1164
1165static irqreturn_t imx_udc_ctrl_irq(int irq, void *dev)
1166{
1167 struct imx_udc_struct *imx_usb = dev;
d24921a3 1168 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
2a4f136f
DA
1169 int intr = __raw_readl(imx_usb->base + USB_EP_INTR(0));
1170
1171 dump_ep_intr(__func__, 0, intr, imx_usb->dev);
1172
1173 if (!imx_usb->driver) {
1174 __raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1175 return IRQ_HANDLED;
1176 }
1177
d24921a3 1178 /* DEVREQ has highest priority */
2a4f136f
DA
1179 if (intr & (EPINTR_DEVREQ | EPINTR_MDEVREQ))
1180 handle_ep0_devreq(imx_usb);
1181 /* Seem i.MX is missing EOF interrupt sometimes.
d24921a3
DA
1182 * Therefore we don't monitor EOF.
1183 * We call handle_ep0() only if a request is queued for ep0.
2a4f136f 1184 */
d24921a3
DA
1185 else if (!list_empty(&imx_ep->queue))
1186 handle_ep0(imx_ep);
2a4f136f
DA
1187
1188 __raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1189
1190 return IRQ_HANDLED;
1191}
1192
1193static irqreturn_t imx_udc_bulk_irq(int irq, void *dev)
1194{
1195 struct imx_udc_struct *imx_usb = dev;
1196 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[irq - USBD_INT0];
1197 int intr = __raw_readl(imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1198
1199 dump_ep_intr(__func__, irq - USBD_INT0, intr, imx_usb->dev);
1200
1201 if (!imx_usb->driver) {
1202 __raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1203 return IRQ_HANDLED;
1204 }
1205
1206 handle_ep(imx_ep);
1207
1208 __raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1209
1210 return IRQ_HANDLED;
1211}
1212
1213irq_handler_t intr_handler(int i)
1214{
1215 switch (i) {
1216 case 0:
1217 return imx_udc_ctrl_irq;
1218 case 1:
1219 case 2:
1220 case 3:
1221 case 4:
1222 case 5:
1223 return imx_udc_bulk_irq;
1224 default:
1225 return imx_udc_irq;
1226 }
1227}
1228
1229/*******************************************************************************
1230 * Static defined IMX UDC structure
1231 *******************************************************************************
1232 */
1233
1234static const struct usb_gadget_ops imx_udc_ops = {
1235 .get_frame = imx_udc_get_frame,
1236 .wakeup = imx_udc_wakeup,
1237};
1238
1239static struct imx_udc_struct controller = {
1240 .gadget = {
1241 .ops = &imx_udc_ops,
1242 .ep0 = &controller.imx_ep[0].ep,
1243 .name = driver_name,
1244 .dev = {
5df58524
KS
1245 .init_name = "gadget",
1246 },
2a4f136f
DA
1247 },
1248
1249 .imx_ep[0] = {
1250 .ep = {
1251 .name = ep0name,
1252 .ops = &imx_ep_ops,
1253 .maxpacket = 32,
1254 },
1255 .imx_usb = &controller,
1256 .fifosize = 32,
1257 .bEndpointAddress = 0,
1258 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
1259 },
1260 .imx_ep[1] = {
1261 .ep = {
1262 .name = "ep1in-bulk",
1263 .ops = &imx_ep_ops,
1264 .maxpacket = 64,
1265 },
1266 .imx_usb = &controller,
1267 .fifosize = 64,
1268 .bEndpointAddress = USB_DIR_IN | 1,
1269 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1270 },
1271 .imx_ep[2] = {
1272 .ep = {
1273 .name = "ep2out-bulk",
1274 .ops = &imx_ep_ops,
1275 .maxpacket = 64,
1276 },
1277 .imx_usb = &controller,
1278 .fifosize = 64,
1279 .bEndpointAddress = USB_DIR_OUT | 2,
1280 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1281 },
1282 .imx_ep[3] = {
1283 .ep = {
1284 .name = "ep3out-bulk",
1285 .ops = &imx_ep_ops,
1286 .maxpacket = 32,
1287 },
1288 .imx_usb = &controller,
1289 .fifosize = 32,
1290 .bEndpointAddress = USB_DIR_OUT | 3,
1291 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1292 },
1293 .imx_ep[4] = {
1294 .ep = {
1295 .name = "ep4in-int",
1296 .ops = &imx_ep_ops,
1297 .maxpacket = 32,
1298 },
1299 .imx_usb = &controller,
1300 .fifosize = 32,
1301 .bEndpointAddress = USB_DIR_IN | 4,
1302 .bmAttributes = USB_ENDPOINT_XFER_INT,
1303 },
1304 .imx_ep[5] = {
1305 .ep = {
1306 .name = "ep5out-int",
1307 .ops = &imx_ep_ops,
1308 .maxpacket = 32,
1309 },
1310 .imx_usb = &controller,
1311 .fifosize = 32,
1312 .bEndpointAddress = USB_DIR_OUT | 5,
1313 .bmAttributes = USB_ENDPOINT_XFER_INT,
1314 },
1315};
1316
1317/*******************************************************************************
1318 * USB gadged driver functions
1319 *******************************************************************************
1320 */
1321int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1322{
1323 struct imx_udc_struct *imx_usb = &controller;
1324 int retval;
1325
1326 if (!driver
1327 || driver->speed < USB_SPEED_FULL
1328 || !driver->bind
1329 || !driver->disconnect
1330 || !driver->setup)
1331 return -EINVAL;
1332 if (!imx_usb)
1333 return -ENODEV;
1334 if (imx_usb->driver)
1335 return -EBUSY;
1336
1337 /* first hook up the driver ... */
1338 imx_usb->driver = driver;
1339 imx_usb->gadget.dev.driver = &driver->driver;
1340
1341 retval = device_add(&imx_usb->gadget.dev);
1342 if (retval)
1343 goto fail;
1344 retval = driver->bind(&imx_usb->gadget);
1345 if (retval) {
1346 D_ERR(imx_usb->dev, "<%s> bind to driver %s --> error %d\n",
1347 __func__, driver->driver.name, retval);
1348 device_del(&imx_usb->gadget.dev);
1349
1350 goto fail;
1351 }
1352
1353 D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n",
1354 __func__, driver->driver.name);
1355
1356 imx_udc_enable(imx_usb);
1357
1358 return 0;
1359fail:
1360 imx_usb->driver = NULL;
1361 imx_usb->gadget.dev.driver = NULL;
1362 return retval;
1363}
1364EXPORT_SYMBOL(usb_gadget_register_driver);
1365
1366int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
1367{
1368 struct imx_udc_struct *imx_usb = &controller;
1369
1370 if (!imx_usb)
1371 return -ENODEV;
1372 if (!driver || driver != imx_usb->driver || !driver->unbind)
1373 return -EINVAL;
1374
1375 udc_stop_activity(imx_usb, driver);
1376 imx_udc_disable(imx_usb);
b633d28e 1377 del_timer(&imx_usb->timer);
2a4f136f
DA
1378
1379 driver->unbind(&imx_usb->gadget);
1380 imx_usb->gadget.dev.driver = NULL;
1381 imx_usb->driver = NULL;
1382
1383 device_del(&imx_usb->gadget.dev);
1384
1385 D_INI(imx_usb->dev, "<%s> unregistered gadget driver '%s'\n",
1386 __func__, driver->driver.name);
1387
1388 return 0;
1389}
1390EXPORT_SYMBOL(usb_gadget_unregister_driver);
1391
1392/*******************************************************************************
1393 * Module functions
1394 *******************************************************************************
1395 */
1396
1397static int __init imx_udc_probe(struct platform_device *pdev)
1398{
1399 struct imx_udc_struct *imx_usb = &controller;
1400 struct resource *res;
1401 struct imxusb_platform_data *pdata;
1402 struct clk *clk;
1403 void __iomem *base;
1404 int ret = 0;
1405 int i, res_size;
1406
1407 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1408 if (!res) {
1409 dev_err(&pdev->dev, "can't get device resources\n");
1410 return -ENODEV;
1411 }
1412
1413 pdata = pdev->dev.platform_data;
1414 if (!pdata) {
1415 dev_err(&pdev->dev, "driver needs platform data\n");
1416 return -ENODEV;
1417 }
1418
1419 res_size = res->end - res->start + 1;
1420 if (!request_mem_region(res->start, res_size, res->name)) {
1421 dev_err(&pdev->dev, "can't allocate %d bytes at %d address\n",
1422 res_size, res->start);
1423 return -ENOMEM;
1424 }
1425
1426 if (pdata->init) {
1427 ret = pdata->init(&pdev->dev);
1428 if (ret)
1429 goto fail0;
1430 }
1431
1432 base = ioremap(res->start, res_size);
1433 if (!base) {
1434 dev_err(&pdev->dev, "ioremap failed\n");
1435 ret = -EIO;
1436 goto fail1;
1437 }
1438
1439 clk = clk_get(NULL, "usbd_clk");
1440 if (IS_ERR(clk)) {
1441 ret = PTR_ERR(clk);
1442 dev_err(&pdev->dev, "can't get USB clock\n");
1443 goto fail2;
1444 }
1445 clk_enable(clk);
1446
1447 if (clk_get_rate(clk) != 48000000) {
1448 D_INI(&pdev->dev,
1449 "Bad USB clock (%d Hz), changing to 48000000 Hz\n",
1450 (int)clk_get_rate(clk));
1451 if (clk_set_rate(clk, 48000000)) {
1452 dev_err(&pdev->dev,
1453 "Unable to set correct USB clock (48MHz)\n");
1454 ret = -EIO;
1455 goto fail3;
1456 }
1457 }
1458
1459 for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1460 imx_usb->usbd_int[i] = platform_get_irq(pdev, i);
1461 if (imx_usb->usbd_int[i] < 0) {
1462 dev_err(&pdev->dev, "can't get irq number\n");
1463 ret = -ENODEV;
1464 goto fail3;
1465 }
1466 }
1467
1468 for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1469 ret = request_irq(imx_usb->usbd_int[i], intr_handler(i),
1470 IRQF_DISABLED, driver_name, imx_usb);
1471 if (ret) {
1472 dev_err(&pdev->dev, "can't get irq %i, err %d\n",
1473 imx_usb->usbd_int[i], ret);
1474 for (--i; i >= 0; i--)
1475 free_irq(imx_usb->usbd_int[i], imx_usb);
1476 goto fail3;
1477 }
1478 }
1479
1480 imx_usb->res = res;
1481 imx_usb->base = base;
1482 imx_usb->clk = clk;
1483 imx_usb->dev = &pdev->dev;
1484
1485 device_initialize(&imx_usb->gadget.dev);
1486
1487 imx_usb->gadget.dev.parent = &pdev->dev;
1488 imx_usb->gadget.dev.dma_mask = pdev->dev.dma_mask;
1489
1490 platform_set_drvdata(pdev, imx_usb);
1491
1492 usb_init_data(imx_usb);
1493 imx_udc_init(imx_usb);
1494
b633d28e
DA
1495 init_timer(&imx_usb->timer);
1496 imx_usb->timer.function = handle_config;
1497 imx_usb->timer.data = (unsigned long)imx_usb;
1498
2a4f136f
DA
1499 return 0;
1500
1501fail3:
1502 clk_put(clk);
1503 clk_disable(clk);
1504fail2:
1505 iounmap(base);
1506fail1:
1507 if (pdata->exit)
1508 pdata->exit(&pdev->dev);
1509fail0:
1510 release_mem_region(res->start, res_size);
1511 return ret;
1512}
1513
1514static int __exit imx_udc_remove(struct platform_device *pdev)
1515{
1516 struct imx_udc_struct *imx_usb = platform_get_drvdata(pdev);
1517 struct imxusb_platform_data *pdata = pdev->dev.platform_data;
1518 int i;
1519
1520 imx_udc_disable(imx_usb);
b633d28e 1521 del_timer(&imx_usb->timer);
2a4f136f
DA
1522
1523 for (i = 0; i < IMX_USB_NB_EP + 1; i++)
1524 free_irq(imx_usb->usbd_int[i], imx_usb);
1525
1526 clk_put(imx_usb->clk);
1527 clk_disable(imx_usb->clk);
1528 iounmap(imx_usb->base);
1529
1530 release_mem_region(imx_usb->res->start,
1531 imx_usb->res->end - imx_usb->res->start + 1);
1532
1533 if (pdata->exit)
1534 pdata->exit(&pdev->dev);
1535
1536 platform_set_drvdata(pdev, NULL);
1537
1538 return 0;
1539}
1540
1541/*----------------------------------------------------------------------------*/
1542
1543#ifdef CONFIG_PM
1544#define imx_udc_suspend NULL
1545#define imx_udc_resume NULL
1546#else
1547#define imx_udc_suspend NULL
1548#define imx_udc_resume NULL
1549#endif
1550
1551/*----------------------------------------------------------------------------*/
1552
1553static struct platform_driver udc_driver = {
1554 .driver = {
1555 .name = driver_name,
1556 .owner = THIS_MODULE,
1557 },
1558 .remove = __exit_p(imx_udc_remove),
1559 .suspend = imx_udc_suspend,
1560 .resume = imx_udc_resume,
1561};
1562
1563static int __init udc_init(void)
1564{
1565 return platform_driver_probe(&udc_driver, imx_udc_probe);
1566}
1567module_init(udc_init);
1568
1569static void __exit udc_exit(void)
1570{
1571 platform_driver_unregister(&udc_driver);
1572}
1573module_exit(udc_exit);
1574
1575MODULE_DESCRIPTION("IMX USB Device Controller driver");
1576MODULE_AUTHOR("Darius Augulis <augulis.darius@gmail.com>");
1577MODULE_LICENSE("GPL");
1578MODULE_ALIAS("platform:imx_udc");