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