usb: convert endpoint devices to bus-less childs of the usb interface
[linux-2.6-block.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
418 buf = req->req.buf + req->req.actual;
419 prefetch(buf);
420
421 length = min(req->req.length - req->req.actual, (u32)imx_ep->fifosize);
422
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);
426 return -1;
427 }
428
429 req->req.actual += length;
430 count = length;
431
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__);
438 return 0;
439 }
440
441 while (count--) {
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)));
447 }
448 __raw_writeb(*buf++,
449 imx_ep->imx_usb->base + USB_EP_FDAT0(EP_NO(imx_ep)));
450 }
451
452 return length;
453}
454
455static int read_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
456{
457 int bytes = 0,
458 count,
459 completed = 0;
460
461 while (__raw_readl(imx_ep->imx_usb->base + USB_EP_FSTAT(EP_NO(imx_ep)))
462 & FSTAT_FR) {
463 count = read_packet(imx_ep, req);
464 bytes += count;
465
466 completed = (count != imx_ep->fifosize);
467 if (completed || req->req.actual == req->req.length) {
468 completed = 1;
469 break;
470 }
471 }
472
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");
478 if (!EP_NO(imx_ep))
479 ep0_chg_stat(__func__, imx_ep->imx_usb, EP0_IDLE);
480 }
481
482 D_TRX(imx_ep->imx_usb->dev, "<%s> bytes read: %d\n", __func__, bytes);
483
484 return completed;
485}
486
487static int write_fifo(struct imx_ep_struct *imx_ep, struct imx_request *req)
488{
489 int bytes = 0,
490 count,
491 completed = 0;
492
493 while (!completed) {
494 count = write_packet(imx_ep, req);
495 if (count < 0)
496 break; /* busy */
497 bytes += count;
498
499 /* last packet "must be" short (or a zlp) */
500 completed = (count != imx_ep->fifosize);
501
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");
507 if (!EP_NO(imx_ep))
593bef6c
DA
508 ep0_chg_stat(__func__,
509 imx_ep->imx_usb, EP0_IDLE);
2a4f136f
DA
510 }
511 }
512
513 D_TRX(imx_ep->imx_usb->dev, "<%s> bytes sent: %d\n", __func__, bytes);
514
515 return completed;
516}
517
518/*******************************************************************************
519 * Endpoint handlers
520 *******************************************************************************
521 */
522static int handle_ep(struct imx_ep_struct *imx_ep)
523{
524 struct imx_request *req;
525 int completed = 0;
526
527 do {
528 if (!list_empty(&imx_ep->queue))
529 req = list_entry(imx_ep->queue.next,
530 struct imx_request, queue);
531 else {
532 D_REQ(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
533 __func__, imx_ep->ep.name);
534 return 0;
535 }
536
537 if (EP_DIR(imx_ep)) /* to host */
538 completed = write_fifo(imx_ep, req);
539 else /* to device */
540 completed = read_fifo(imx_ep, req);
541
542 dump_ep_stat(__func__, imx_ep);
543
544 } while (completed);
545
546 return 0;
547}
548
549static int handle_ep0(struct imx_ep_struct *imx_ep)
550{
551 struct imx_request *req = NULL;
552 int ret = 0;
553
8f182e5d 554 if (!list_empty(&imx_ep->queue)) {
2a4f136f
DA
555 req = list_entry(imx_ep->queue.next, struct imx_request, queue);
556
2a4f136f
DA
557 switch (imx_ep->imx_usb->ep0state) {
558
559 case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR */
560 write_fifo(imx_ep, req);
561 break;
562 case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR */
563 read_fifo(imx_ep, req);
564 break;
565 default:
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);
570 ret = -EL2HLT;
571 break;
572 }
573 }
574
8f182e5d
DA
575 else
576 D_ERR(imx_ep->imx_usb->dev, "<%s> no request on %s\n",
577 __func__, imx_ep->ep.name);
578
2a4f136f
DA
579 return ret;
580}
581
582static void handle_ep0_devreq(struct imx_udc_struct *imx_usb)
583{
584 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
585 union {
586 struct usb_ctrlrequest r;
587 u8 raw[8];
588 u32 word[2];
589 } u;
590 int temp, i;
591
592 nuke(imx_ep, -EPROTO);
593
594 /* read SETUP packet */
595 for (i = 0; i < 2; i++) {
596 if (imx_ep_empty(imx_ep)) {
597 D_ERR(imx_usb->dev,
598 "<%s> no setup packet received\n", __func__);
599 goto stall;
600 }
593bef6c
DA
601 u.word[i] = __raw_readl(imx_usb->base
602 + USB_EP_FDAT(EP_NO(imx_ep)));
2a4f136f
DA
603 }
604
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)));
608 D_ERR(imx_usb->dev,
609 "<%s> wrong to have extra bytes for setup : 0x%08x\n",
610 __func__, i);
611 }
612 if (!temp)
613 goto stall;
614
615 le16_to_cpus(&u.r.wValue);
616 le16_to_cpus(&u.r.wIndex);
617 le16_to_cpus(&u.r.wLength);
618
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);
622
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);
627
628 D_ERR(imx_usb->dev,
629 "<%s> set config req is pending, NACK the host\n",
630 __func__);
631 return;
632 }
633
634 if (u.r.bRequestType & USB_DIR_IN)
635 ep0_chg_stat(__func__, imx_usb, EP0_IN_DATA_PHASE);
636 else
637 ep0_chg_stat(__func__, imx_usb, EP0_OUT_DATA_PHASE);
638
639 i = imx_usb->driver->setup(&imx_usb->gadget, &u.r);
640 if (i < 0) {
641 D_ERR(imx_usb->dev, "<%s> device setup error %d\n",
642 __func__, i);
643 goto stall;
644 }
645
646 return;
647stall:
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);
651 return;
652}
653
654/*******************************************************************************
655 * USB gadget callback functions
656 *******************************************************************************
657 */
658
659static int imx_ep_enable(struct usb_ep *usb_ep,
660 const struct usb_endpoint_descriptor *desc)
661{
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;
665 unsigned long flags;
666
667 if (!usb_ep
668 || !desc
669 || !EP_NO(imx_ep)
670 || desc->bDescriptorType != USB_DT_ENDPOINT
671 || imx_ep->bEndpointAddress != desc->bEndpointAddress) {
672 D_ERR(imx_usb->dev,
673 "<%s> bad ep or descriptor\n", __func__);
674 return -EINVAL;
675 }
676
677 if (imx_ep->bmAttributes != desc->bmAttributes) {
678 D_ERR(imx_usb->dev,
679 "<%s> %s type mismatch\n", __func__, usb_ep->name);
680 return -EINVAL;
681 }
682
683 if (imx_ep->fifosize < le16_to_cpu(desc->wMaxPacketSize)) {
684 D_ERR(imx_usb->dev,
685 "<%s> bad %s maxpacket\n", __func__, usb_ep->name);
686 return -ERANGE;
687 }
688
689 if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
690 D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
691 return -ESHUTDOWN;
692 }
693
694 local_irq_save(flags);
695
696 imx_ep->stopped = 0;
697 imx_flush(imx_ep);
698 imx_ep_irq_enable(imx_ep);
699
700 local_irq_restore(flags);
701
702 D_EPX(imx_usb->dev, "<%s> ENABLED %s\n", __func__, usb_ep->name);
703 return 0;
704}
705
706static int imx_ep_disable(struct usb_ep *usb_ep)
707{
708 struct imx_ep_struct *imx_ep = container_of(usb_ep,
709 struct imx_ep_struct, ep);
710 unsigned long flags;
711
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);
715 return -EINVAL;
716 }
717
718 local_irq_save(flags);
719
720 imx_ep->stopped = 1;
721 nuke(imx_ep, -ESHUTDOWN);
722 imx_flush(imx_ep);
723 imx_ep_irq_disable(imx_ep);
724
725 local_irq_restore(flags);
726
727 D_EPX(imx_ep->imx_usb->dev,
728 "<%s> DISABLED %s\n", __func__, usb_ep->name);
729 return 0;
730}
731
732static struct usb_request *imx_ep_alloc_request
733 (struct usb_ep *usb_ep, gfp_t gfp_flags)
734{
735 struct imx_request *req;
736
737 req = kzalloc(sizeof *req, gfp_flags);
738 if (!req || !usb_ep)
739 return 0;
740
741 INIT_LIST_HEAD(&req->queue);
742 req->in_use = 0;
743
744 return &req->req;
745}
746
747static void imx_ep_free_request
748 (struct usb_ep *usb_ep, struct usb_request *usb_req)
749{
750 struct imx_request *req;
751
752 req = container_of(usb_req, struct imx_request, req);
753 WARN_ON(!list_empty(&req->queue));
754 kfree(req);
755}
756
757static int imx_ep_queue
758 (struct usb_ep *usb_ep, struct usb_request *usb_req, gfp_t gfp_flags)
759{
760 struct imx_ep_struct *imx_ep;
761 struct imx_udc_struct *imx_usb;
762 struct imx_request *req;
763 unsigned long flags;
764 int ret = 0;
765
766 imx_ep = container_of(usb_ep, struct imx_ep_struct, ep);
767 imx_usb = imx_ep->imx_usb;
768 req = container_of(usb_req, struct imx_request, req);
769
770 /*
771 Special care on IMX udc.
772 Ignore enqueue when after set configuration from the
773 host. This assume all gadget drivers reply set
774 configuration with the next ep0 req enqueue.
775 */
776 if (imx_usb->set_config && !EP_NO(imx_ep)) {
777 imx_usb->set_config = 0;
8f182e5d 778 D_ERR(imx_usb->dev,
2a4f136f
DA
779 "<%s> gadget reply set config\n", __func__);
780 return 0;
781 }
782
783 if (unlikely(!usb_req || !req || !usb_req->complete || !usb_req->buf)) {
784 D_ERR(imx_usb->dev, "<%s> bad params\n", __func__);
785 return -EINVAL;
786 }
787
788 if (unlikely(!usb_ep || !imx_ep)) {
789 D_ERR(imx_usb->dev, "<%s> bad ep\n", __func__);
790 return -EINVAL;
791 }
792
793 if (!imx_usb->driver || imx_usb->gadget.speed == USB_SPEED_UNKNOWN) {
794 D_ERR(imx_usb->dev, "<%s> bogus device state\n", __func__);
795 return -ESHUTDOWN;
796 }
797
2a4f136f
DA
798 /* Debug */
799 D_REQ(imx_usb->dev, "<%s> ep%d %s request for [%d] bytes\n",
800 __func__, EP_NO(imx_ep),
593bef6c
DA
801 ((!EP_NO(imx_ep) && imx_ep->imx_usb->ep0state
802 == EP0_IN_DATA_PHASE)
803 || (EP_NO(imx_ep) && EP_DIR(imx_ep)))
804 ? "IN" : "OUT", usb_req->length);
2a4f136f
DA
805 dump_req(__func__, imx_ep, usb_req);
806
807 if (imx_ep->stopped) {
808 usb_req->status = -ESHUTDOWN;
8f182e5d 809 return -ESHUTDOWN;
2a4f136f
DA
810 }
811
812 if (req->in_use) {
813 D_ERR(imx_usb->dev,
814 "<%s> refusing to queue req %p (already queued)\n",
815 __func__, req);
8f182e5d 816 return 0;
2a4f136f
DA
817 }
818
8f182e5d
DA
819 local_irq_save(flags);
820
2a4f136f
DA
821 usb_req->status = -EINPROGRESS;
822 usb_req->actual = 0;
823
824 ep_add_request(imx_ep, req);
825
826 if (!EP_NO(imx_ep))
827 ret = handle_ep0(imx_ep);
828 else
829 ret = handle_ep(imx_ep);
8f182e5d 830
2a4f136f
DA
831 local_irq_restore(flags);
832 return ret;
833}
834
835static int imx_ep_dequeue(struct usb_ep *usb_ep, struct usb_request *usb_req)
836{
837
838 struct imx_ep_struct *imx_ep = container_of
839 (usb_ep, struct imx_ep_struct, ep);
840 struct imx_request *req;
841 unsigned long flags;
842
843 if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
844 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
845 return -EINVAL;
846 }
847
848 local_irq_save(flags);
849
850 /* make sure it's actually queued on this endpoint */
851 list_for_each_entry(req, &imx_ep->queue, queue) {
852 if (&req->req == usb_req)
853 break;
854 }
855 if (&req->req != usb_req) {
856 local_irq_restore(flags);
857 return -EINVAL;
858 }
859
860 done(imx_ep, req, -ECONNRESET);
861
862 local_irq_restore(flags);
863 return 0;
864}
865
866static int imx_ep_set_halt(struct usb_ep *usb_ep, int value)
867{
868 struct imx_ep_struct *imx_ep = container_of
869 (usb_ep, struct imx_ep_struct, ep);
870 unsigned long flags;
871
872 if (unlikely(!usb_ep || !EP_NO(imx_ep))) {
873 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
874 return -EINVAL;
875 }
876
877 local_irq_save(flags);
878
879 if ((imx_ep->bEndpointAddress & USB_DIR_IN)
880 && !list_empty(&imx_ep->queue)) {
881 local_irq_restore(flags);
882 return -EAGAIN;
883 }
884
885 imx_ep_stall(imx_ep);
886
887 local_irq_restore(flags);
888
889 D_EPX(imx_ep->imx_usb->dev, "<%s> %s halt\n", __func__, usb_ep->name);
890 return 0;
891}
892
893static int imx_ep_fifo_status(struct usb_ep *usb_ep)
894{
895 struct imx_ep_struct *imx_ep = container_of
896 (usb_ep, struct imx_ep_struct, ep);
897
898 if (!usb_ep) {
899 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
900 return -ENODEV;
901 }
902
903 if (imx_ep->imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
904 return 0;
905 else
906 return imx_fifo_bcount(imx_ep);
907}
908
909static void imx_ep_fifo_flush(struct usb_ep *usb_ep)
910{
911 struct imx_ep_struct *imx_ep = container_of
912 (usb_ep, struct imx_ep_struct, ep);
913 unsigned long flags;
914
915 local_irq_save(flags);
916
917 if (!usb_ep || !EP_NO(imx_ep) || !list_empty(&imx_ep->queue)) {
918 D_ERR(imx_ep->imx_usb->dev, "<%s> bad ep\n", __func__);
919 local_irq_restore(flags);
920 return;
921 }
922
923 /* toggle and halt bits stay unchanged */
924 imx_flush(imx_ep);
925
926 local_irq_restore(flags);
927}
928
929static struct usb_ep_ops imx_ep_ops = {
930 .enable = imx_ep_enable,
931 .disable = imx_ep_disable,
932
933 .alloc_request = imx_ep_alloc_request,
934 .free_request = imx_ep_free_request,
935
936 .queue = imx_ep_queue,
937 .dequeue = imx_ep_dequeue,
938
939 .set_halt = imx_ep_set_halt,
940 .fifo_status = imx_ep_fifo_status,
941 .fifo_flush = imx_ep_fifo_flush,
942};
943
944/*******************************************************************************
945 * USB endpoint control functions
946 *******************************************************************************
947 */
948
949void ep0_chg_stat(const char *label,
950 struct imx_udc_struct *imx_usb, enum ep0_state stat)
951{
952 D_EP0(imx_usb->dev, "<%s> from %15s to %15s\n",
953 label, state_name[imx_usb->ep0state], state_name[stat]);
954
955 if (imx_usb->ep0state == stat)
956 return;
957
958 imx_usb->ep0state = stat;
959}
960
961static void usb_init_data(struct imx_udc_struct *imx_usb)
962{
963 struct imx_ep_struct *imx_ep;
964 u8 i;
965
966 /* device/ep0 records init */
967 INIT_LIST_HEAD(&imx_usb->gadget.ep_list);
968 INIT_LIST_HEAD(&imx_usb->gadget.ep0->ep_list);
969 ep0_chg_stat(__func__, imx_usb, EP0_IDLE);
970
971 /* basic endpoint records init */
972 for (i = 0; i < IMX_USB_NB_EP; i++) {
973 imx_ep = &imx_usb->imx_ep[i];
974
975 if (i) {
976 list_add_tail(&imx_ep->ep.ep_list,
977 &imx_usb->gadget.ep_list);
978 imx_ep->stopped = 1;
979 } else
980 imx_ep->stopped = 0;
981
982 INIT_LIST_HEAD(&imx_ep->queue);
983 }
984}
985
986static void udc_stop_activity(struct imx_udc_struct *imx_usb,
987 struct usb_gadget_driver *driver)
988{
989 struct imx_ep_struct *imx_ep;
990 int i;
991
992 if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN)
993 driver = NULL;
994
995 /* prevent new request submissions, kill any outstanding requests */
996 for (i = 1; i < IMX_USB_NB_EP; i++) {
997 imx_ep = &imx_usb->imx_ep[i];
998 imx_flush(imx_ep);
999 imx_ep->stopped = 1;
1000 imx_ep_irq_disable(imx_ep);
1001 nuke(imx_ep, -ESHUTDOWN);
1002 }
1003
1004 imx_usb->cfg = 0;
1005 imx_usb->intf = 0;
1006 imx_usb->alt = 0;
1007
1008 if (driver)
1009 driver->disconnect(&imx_usb->gadget);
1010}
1011
1012/*******************************************************************************
1013 * Interrupt handlers
1014 *******************************************************************************
1015 */
1016
b633d28e
DA
1017/*
1018 * Called when timer expires.
1019 * Timer is started when CFG_CHG is received.
1020 */
1021static void handle_config(unsigned long data)
2a4f136f 1022{
b633d28e 1023 struct imx_udc_struct *imx_usb = (void *)data;
2a4f136f
DA
1024 struct usb_ctrlrequest u;
1025 int temp, cfg, intf, alt;
2a4f136f 1026
b633d28e 1027 local_irq_disable();
2a4f136f 1028
b633d28e
DA
1029 temp = __raw_readl(imx_usb->base + USB_STAT);
1030 cfg = (temp & STAT_CFG) >> 5;
1031 intf = (temp & STAT_INTF) >> 3;
1032 alt = temp & STAT_ALTSET;
2a4f136f 1033
b633d28e
DA
1034 D_REQ(imx_usb->dev,
1035 "<%s> orig config C=%d, I=%d, A=%d / "
1036 "req config C=%d, I=%d, A=%d\n",
1037 __func__, imx_usb->cfg, imx_usb->intf, imx_usb->alt,
1038 cfg, intf, alt);
2a4f136f 1039
b633d28e 1040 if (cfg == 1 || cfg == 2) {
2a4f136f 1041
2a4f136f 1042 if (imx_usb->cfg != cfg) {
2a4f136f
DA
1043 u.bRequest = USB_REQ_SET_CONFIGURATION;
1044 u.bRequestType = USB_DIR_OUT |
1045 USB_TYPE_STANDARD |
1046 USB_RECIP_DEVICE;
1047 u.wValue = cfg;
1048 u.wIndex = 0;
1049 u.wLength = 0;
1050 imx_usb->cfg = cfg;
2a4f136f 1051 imx_usb->driver->setup(&imx_usb->gadget, &u);
2a4f136f
DA
1052
1053 }
1054 if (imx_usb->intf != intf || imx_usb->alt != alt) {
2a4f136f
DA
1055 u.bRequest = USB_REQ_SET_INTERFACE;
1056 u.bRequestType = USB_DIR_OUT |
1057 USB_TYPE_STANDARD |
1058 USB_RECIP_INTERFACE;
1059 u.wValue = alt;
1060 u.wIndex = intf;
1061 u.wLength = 0;
1062 imx_usb->intf = intf;
1063 imx_usb->alt = alt;
2a4f136f 1064 imx_usb->driver->setup(&imx_usb->gadget, &u);
2a4f136f
DA
1065 }
1066 }
1067
b633d28e
DA
1068 imx_usb->set_config = 0;
1069
1070 local_irq_enable();
1071}
1072
1073static irqreturn_t imx_udc_irq(int irq, void *dev)
1074{
1075 struct imx_udc_struct *imx_usb = dev;
1076 int intr = __raw_readl(imx_usb->base + USB_INTR);
1077 int temp;
1078
1079 if (intr & (INTR_WAKEUP | INTR_SUSPEND | INTR_RESUME | INTR_RESET_START
1080 | INTR_RESET_STOP | INTR_CFG_CHG)) {
1081 dump_intr(__func__, intr, imx_usb->dev);
1082 dump_usb_stat(__func__, imx_usb);
1083 }
1084
1085 if (!imx_usb->driver)
1086 goto end_irq;
1087
2a4f136f 1088 if (intr & INTR_SOF) {
8f182e5d
DA
1089 /* Copy from Freescale BSP.
1090 We must enable SOF intr and set CMDOVER.
1091 Datasheet don't specifiy this action, but it
1092 is done in Freescale BSP, so just copy it.
1093 */
2a4f136f
DA
1094 if (imx_usb->ep0state == EP0_IDLE) {
1095 temp = __raw_readl(imx_usb->base + USB_CTRL);
593bef6c
DA
1096 __raw_writel(temp | CTRL_CMDOVER,
1097 imx_usb->base + USB_CTRL);
2a4f136f
DA
1098 }
1099 }
1100
b633d28e
DA
1101 if (intr & INTR_CFG_CHG) {
1102 /* A workaround of serious IMX UDC bug.
1103 Handling of CFG_CHG should be delayed for some time, because
1104 IMX does not NACK the host when CFG_CHG interrupt is pending.
1105 There is no time to handle current CFG_CHG
1106 if next CFG_CHG or SETUP packed is send immediately.
1107 We have to clear CFG_CHG, start the timer and
1108 NACK the host by setting CTRL_CMDOVER
1109 if it sends any SETUP packet.
1110 When timer expires, handler is called to handle configuration
1111 changes. While CFG_CHG is not handled (set_config=1),
1112 we must NACK the host to every SETUP packed.
1113 This delay prevents from going out of sync with host.
1114 */
1115 __raw_writel(INTR_CFG_CHG, imx_usb->base + USB_INTR);
1116 imx_usb->set_config = 1;
1117 mod_timer(&imx_usb->timer, jiffies + 5);
1118 goto end_irq;
1119 }
1120
1121 if (intr & INTR_WAKEUP) {
1122 if (imx_usb->gadget.speed == USB_SPEED_UNKNOWN
1123 && imx_usb->driver && imx_usb->driver->resume)
1124 imx_usb->driver->resume(&imx_usb->gadget);
1125 imx_usb->set_config = 0;
1126 del_timer(&imx_usb->timer);
1127 imx_usb->gadget.speed = USB_SPEED_FULL;
1128 }
1129
1130 if (intr & INTR_SUSPEND) {
1131 if (imx_usb->gadget.speed != USB_SPEED_UNKNOWN
1132 && imx_usb->driver && imx_usb->driver->suspend)
1133 imx_usb->driver->suspend(&imx_usb->gadget);
1134 imx_usb->set_config = 0;
1135 del_timer(&imx_usb->timer);
1136 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1137 }
1138
1139 if (intr & INTR_RESET_START) {
1140 __raw_writel(intr, imx_usb->base + USB_INTR);
1141 udc_stop_activity(imx_usb, imx_usb->driver);
1142 imx_usb->set_config = 0;
1143 del_timer(&imx_usb->timer);
1144 imx_usb->gadget.speed = USB_SPEED_UNKNOWN;
1145 }
1146
1147 if (intr & INTR_RESET_STOP)
1148 imx_usb->gadget.speed = USB_SPEED_FULL;
1149
2a4f136f
DA
1150end_irq:
1151 __raw_writel(intr, imx_usb->base + USB_INTR);
1152 return IRQ_HANDLED;
1153}
1154
1155static irqreturn_t imx_udc_ctrl_irq(int irq, void *dev)
1156{
1157 struct imx_udc_struct *imx_usb = dev;
d24921a3 1158 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
2a4f136f
DA
1159 int intr = __raw_readl(imx_usb->base + USB_EP_INTR(0));
1160
1161 dump_ep_intr(__func__, 0, intr, imx_usb->dev);
1162
1163 if (!imx_usb->driver) {
1164 __raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1165 return IRQ_HANDLED;
1166 }
1167
d24921a3 1168 /* DEVREQ has highest priority */
2a4f136f
DA
1169 if (intr & (EPINTR_DEVREQ | EPINTR_MDEVREQ))
1170 handle_ep0_devreq(imx_usb);
1171 /* Seem i.MX is missing EOF interrupt sometimes.
d24921a3
DA
1172 * Therefore we don't monitor EOF.
1173 * We call handle_ep0() only if a request is queued for ep0.
2a4f136f 1174 */
d24921a3
DA
1175 else if (!list_empty(&imx_ep->queue))
1176 handle_ep0(imx_ep);
2a4f136f
DA
1177
1178 __raw_writel(intr, imx_usb->base + USB_EP_INTR(0));
1179
1180 return IRQ_HANDLED;
1181}
1182
1183static irqreturn_t imx_udc_bulk_irq(int irq, void *dev)
1184{
1185 struct imx_udc_struct *imx_usb = dev;
1186 struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[irq - USBD_INT0];
1187 int intr = __raw_readl(imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1188
1189 dump_ep_intr(__func__, irq - USBD_INT0, intr, imx_usb->dev);
1190
1191 if (!imx_usb->driver) {
1192 __raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1193 return IRQ_HANDLED;
1194 }
1195
1196 handle_ep(imx_ep);
1197
1198 __raw_writel(intr, imx_usb->base + USB_EP_INTR(EP_NO(imx_ep)));
1199
1200 return IRQ_HANDLED;
1201}
1202
1203irq_handler_t intr_handler(int i)
1204{
1205 switch (i) {
1206 case 0:
1207 return imx_udc_ctrl_irq;
1208 case 1:
1209 case 2:
1210 case 3:
1211 case 4:
1212 case 5:
1213 return imx_udc_bulk_irq;
1214 default:
1215 return imx_udc_irq;
1216 }
1217}
1218
1219/*******************************************************************************
1220 * Static defined IMX UDC structure
1221 *******************************************************************************
1222 */
1223
1224static const struct usb_gadget_ops imx_udc_ops = {
1225 .get_frame = imx_udc_get_frame,
1226 .wakeup = imx_udc_wakeup,
1227};
1228
1229static struct imx_udc_struct controller = {
1230 .gadget = {
1231 .ops = &imx_udc_ops,
1232 .ep0 = &controller.imx_ep[0].ep,
1233 .name = driver_name,
1234 .dev = {
5df58524
KS
1235 .init_name = "gadget",
1236 },
2a4f136f
DA
1237 },
1238
1239 .imx_ep[0] = {
1240 .ep = {
1241 .name = ep0name,
1242 .ops = &imx_ep_ops,
1243 .maxpacket = 32,
1244 },
1245 .imx_usb = &controller,
1246 .fifosize = 32,
1247 .bEndpointAddress = 0,
1248 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
1249 },
1250 .imx_ep[1] = {
1251 .ep = {
1252 .name = "ep1in-bulk",
1253 .ops = &imx_ep_ops,
1254 .maxpacket = 64,
1255 },
1256 .imx_usb = &controller,
1257 .fifosize = 64,
1258 .bEndpointAddress = USB_DIR_IN | 1,
1259 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1260 },
1261 .imx_ep[2] = {
1262 .ep = {
1263 .name = "ep2out-bulk",
1264 .ops = &imx_ep_ops,
1265 .maxpacket = 64,
1266 },
1267 .imx_usb = &controller,
1268 .fifosize = 64,
1269 .bEndpointAddress = USB_DIR_OUT | 2,
1270 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1271 },
1272 .imx_ep[3] = {
1273 .ep = {
1274 .name = "ep3out-bulk",
1275 .ops = &imx_ep_ops,
1276 .maxpacket = 32,
1277 },
1278 .imx_usb = &controller,
1279 .fifosize = 32,
1280 .bEndpointAddress = USB_DIR_OUT | 3,
1281 .bmAttributes = USB_ENDPOINT_XFER_BULK,
1282 },
1283 .imx_ep[4] = {
1284 .ep = {
1285 .name = "ep4in-int",
1286 .ops = &imx_ep_ops,
1287 .maxpacket = 32,
1288 },
1289 .imx_usb = &controller,
1290 .fifosize = 32,
1291 .bEndpointAddress = USB_DIR_IN | 4,
1292 .bmAttributes = USB_ENDPOINT_XFER_INT,
1293 },
1294 .imx_ep[5] = {
1295 .ep = {
1296 .name = "ep5out-int",
1297 .ops = &imx_ep_ops,
1298 .maxpacket = 32,
1299 },
1300 .imx_usb = &controller,
1301 .fifosize = 32,
1302 .bEndpointAddress = USB_DIR_OUT | 5,
1303 .bmAttributes = USB_ENDPOINT_XFER_INT,
1304 },
1305};
1306
1307/*******************************************************************************
1308 * USB gadged driver functions
1309 *******************************************************************************
1310 */
1311int usb_gadget_register_driver(struct usb_gadget_driver *driver)
1312{
1313 struct imx_udc_struct *imx_usb = &controller;
1314 int retval;
1315
1316 if (!driver
1317 || driver->speed < USB_SPEED_FULL
1318 || !driver->bind
1319 || !driver->disconnect
1320 || !driver->setup)
1321 return -EINVAL;
1322 if (!imx_usb)
1323 return -ENODEV;
1324 if (imx_usb->driver)
1325 return -EBUSY;
1326
1327 /* first hook up the driver ... */
1328 imx_usb->driver = driver;
1329 imx_usb->gadget.dev.driver = &driver->driver;
1330
1331 retval = device_add(&imx_usb->gadget.dev);
1332 if (retval)
1333 goto fail;
1334 retval = driver->bind(&imx_usb->gadget);
1335 if (retval) {
1336 D_ERR(imx_usb->dev, "<%s> bind to driver %s --> error %d\n",
1337 __func__, driver->driver.name, retval);
1338 device_del(&imx_usb->gadget.dev);
1339
1340 goto fail;
1341 }
1342
1343 D_INI(imx_usb->dev, "<%s> registered gadget driver '%s'\n",
1344 __func__, driver->driver.name);
1345
1346 imx_udc_enable(imx_usb);
1347
1348 return 0;
1349fail:
1350 imx_usb->driver = NULL;
1351 imx_usb->gadget.dev.driver = NULL;
1352 return retval;
1353}
1354EXPORT_SYMBOL(usb_gadget_register_driver);
1355
1356int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
1357{
1358 struct imx_udc_struct *imx_usb = &controller;
1359
1360 if (!imx_usb)
1361 return -ENODEV;
1362 if (!driver || driver != imx_usb->driver || !driver->unbind)
1363 return -EINVAL;
1364
1365 udc_stop_activity(imx_usb, driver);
1366 imx_udc_disable(imx_usb);
b633d28e 1367 del_timer(&imx_usb->timer);
2a4f136f
DA
1368
1369 driver->unbind(&imx_usb->gadget);
1370 imx_usb->gadget.dev.driver = NULL;
1371 imx_usb->driver = NULL;
1372
1373 device_del(&imx_usb->gadget.dev);
1374
1375 D_INI(imx_usb->dev, "<%s> unregistered gadget driver '%s'\n",
1376 __func__, driver->driver.name);
1377
1378 return 0;
1379}
1380EXPORT_SYMBOL(usb_gadget_unregister_driver);
1381
1382/*******************************************************************************
1383 * Module functions
1384 *******************************************************************************
1385 */
1386
1387static int __init imx_udc_probe(struct platform_device *pdev)
1388{
1389 struct imx_udc_struct *imx_usb = &controller;
1390 struct resource *res;
1391 struct imxusb_platform_data *pdata;
1392 struct clk *clk;
1393 void __iomem *base;
1394 int ret = 0;
1395 int i, res_size;
1396
1397 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1398 if (!res) {
1399 dev_err(&pdev->dev, "can't get device resources\n");
1400 return -ENODEV;
1401 }
1402
1403 pdata = pdev->dev.platform_data;
1404 if (!pdata) {
1405 dev_err(&pdev->dev, "driver needs platform data\n");
1406 return -ENODEV;
1407 }
1408
1409 res_size = res->end - res->start + 1;
1410 if (!request_mem_region(res->start, res_size, res->name)) {
1411 dev_err(&pdev->dev, "can't allocate %d bytes at %d address\n",
1412 res_size, res->start);
1413 return -ENOMEM;
1414 }
1415
1416 if (pdata->init) {
1417 ret = pdata->init(&pdev->dev);
1418 if (ret)
1419 goto fail0;
1420 }
1421
1422 base = ioremap(res->start, res_size);
1423 if (!base) {
1424 dev_err(&pdev->dev, "ioremap failed\n");
1425 ret = -EIO;
1426 goto fail1;
1427 }
1428
1429 clk = clk_get(NULL, "usbd_clk");
1430 if (IS_ERR(clk)) {
1431 ret = PTR_ERR(clk);
1432 dev_err(&pdev->dev, "can't get USB clock\n");
1433 goto fail2;
1434 }
1435 clk_enable(clk);
1436
1437 if (clk_get_rate(clk) != 48000000) {
1438 D_INI(&pdev->dev,
1439 "Bad USB clock (%d Hz), changing to 48000000 Hz\n",
1440 (int)clk_get_rate(clk));
1441 if (clk_set_rate(clk, 48000000)) {
1442 dev_err(&pdev->dev,
1443 "Unable to set correct USB clock (48MHz)\n");
1444 ret = -EIO;
1445 goto fail3;
1446 }
1447 }
1448
1449 for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1450 imx_usb->usbd_int[i] = platform_get_irq(pdev, i);
1451 if (imx_usb->usbd_int[i] < 0) {
1452 dev_err(&pdev->dev, "can't get irq number\n");
1453 ret = -ENODEV;
1454 goto fail3;
1455 }
1456 }
1457
1458 for (i = 0; i < IMX_USB_NB_EP + 1; i++) {
1459 ret = request_irq(imx_usb->usbd_int[i], intr_handler(i),
1460 IRQF_DISABLED, driver_name, imx_usb);
1461 if (ret) {
1462 dev_err(&pdev->dev, "can't get irq %i, err %d\n",
1463 imx_usb->usbd_int[i], ret);
1464 for (--i; i >= 0; i--)
1465 free_irq(imx_usb->usbd_int[i], imx_usb);
1466 goto fail3;
1467 }
1468 }
1469
1470 imx_usb->res = res;
1471 imx_usb->base = base;
1472 imx_usb->clk = clk;
1473 imx_usb->dev = &pdev->dev;
1474
1475 device_initialize(&imx_usb->gadget.dev);
1476
1477 imx_usb->gadget.dev.parent = &pdev->dev;
1478 imx_usb->gadget.dev.dma_mask = pdev->dev.dma_mask;
1479
1480 platform_set_drvdata(pdev, imx_usb);
1481
1482 usb_init_data(imx_usb);
1483 imx_udc_init(imx_usb);
1484
b633d28e
DA
1485 init_timer(&imx_usb->timer);
1486 imx_usb->timer.function = handle_config;
1487 imx_usb->timer.data = (unsigned long)imx_usb;
1488
2a4f136f
DA
1489 return 0;
1490
1491fail3:
1492 clk_put(clk);
1493 clk_disable(clk);
1494fail2:
1495 iounmap(base);
1496fail1:
1497 if (pdata->exit)
1498 pdata->exit(&pdev->dev);
1499fail0:
1500 release_mem_region(res->start, res_size);
1501 return ret;
1502}
1503
1504static int __exit imx_udc_remove(struct platform_device *pdev)
1505{
1506 struct imx_udc_struct *imx_usb = platform_get_drvdata(pdev);
1507 struct imxusb_platform_data *pdata = pdev->dev.platform_data;
1508 int i;
1509
1510 imx_udc_disable(imx_usb);
b633d28e 1511 del_timer(&imx_usb->timer);
2a4f136f
DA
1512
1513 for (i = 0; i < IMX_USB_NB_EP + 1; i++)
1514 free_irq(imx_usb->usbd_int[i], imx_usb);
1515
1516 clk_put(imx_usb->clk);
1517 clk_disable(imx_usb->clk);
1518 iounmap(imx_usb->base);
1519
1520 release_mem_region(imx_usb->res->start,
1521 imx_usb->res->end - imx_usb->res->start + 1);
1522
1523 if (pdata->exit)
1524 pdata->exit(&pdev->dev);
1525
1526 platform_set_drvdata(pdev, NULL);
1527
1528 return 0;
1529}
1530
1531/*----------------------------------------------------------------------------*/
1532
1533#ifdef CONFIG_PM
1534#define imx_udc_suspend NULL
1535#define imx_udc_resume NULL
1536#else
1537#define imx_udc_suspend NULL
1538#define imx_udc_resume NULL
1539#endif
1540
1541/*----------------------------------------------------------------------------*/
1542
1543static struct platform_driver udc_driver = {
1544 .driver = {
1545 .name = driver_name,
1546 .owner = THIS_MODULE,
1547 },
1548 .remove = __exit_p(imx_udc_remove),
1549 .suspend = imx_udc_suspend,
1550 .resume = imx_udc_resume,
1551};
1552
1553static int __init udc_init(void)
1554{
1555 return platform_driver_probe(&udc_driver, imx_udc_probe);
1556}
1557module_init(udc_init);
1558
1559static void __exit udc_exit(void)
1560{
1561 platform_driver_unregister(&udc_driver);
1562}
1563module_exit(udc_exit);
1564
1565MODULE_DESCRIPTION("IMX USB Device Controller driver");
1566MODULE_AUTHOR("Darius Augulis <augulis.darius@gmail.com>");
1567MODULE_LICENSE("GPL");
1568MODULE_ALIAS("platform:imx_udc");