xref: /linux/drivers/usb/fotg210/fotg210-udc.c (revision 497e6b37b0099dc415578488287fd84fb74433eb)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * FOTG210 UDC Driver supports Bulk transfer so far
4  *
5  * Copyright (C) 2013 Faraday Technology Corporation
6  *
7  * Author : Yuan-Hsin Chen <yhchen@faraday-tech.com>
8  */
9 
10 #include <linux/dma-mapping.h>
11 #include <linux/err.h>
12 #include <linux/interrupt.h>
13 #include <linux/io.h>
14 #include <linux/module.h>
15 #include <linux/platform_device.h>
16 #include <linux/usb/ch9.h>
17 #include <linux/usb/gadget.h>
18 #include <linux/clk.h>
19 #include <linux/usb/otg.h>
20 #include <linux/usb/phy.h>
21 
22 #include "fotg210.h"
23 #include "fotg210-udc.h"
24 
25 #define	DRIVER_DESC	"FOTG210 USB Device Controller Driver"
26 #define	DRIVER_VERSION	"30-April-2013"
27 
28 static const char udc_name[] = "fotg210_udc";
29 static const char * const fotg210_ep_name[] = {
30 	"ep0", "ep1", "ep2", "ep3", "ep4"};
31 
32 static void fotg210_disable_fifo_int(struct fotg210_ep *ep)
33 {
34 	u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
35 
36 	if (ep->dir_in)
37 		value |= DMISGR1_MF_IN_INT(ep->epnum - 1);
38 	else
39 		value |= DMISGR1_MF_OUTSPK_INT(ep->epnum - 1);
40 	iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
41 }
42 
43 static void fotg210_enable_fifo_int(struct fotg210_ep *ep)
44 {
45 	u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
46 
47 	if (ep->dir_in)
48 		value &= ~DMISGR1_MF_IN_INT(ep->epnum - 1);
49 	else
50 		value &= ~DMISGR1_MF_OUTSPK_INT(ep->epnum - 1);
51 	iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
52 }
53 
54 static void fotg210_set_cxdone(struct fotg210_udc *fotg210)
55 {
56 	u32 value = ioread32(fotg210->reg + FOTG210_DCFESR);
57 
58 	value |= DCFESR_CX_DONE;
59 	iowrite32(value, fotg210->reg + FOTG210_DCFESR);
60 }
61 
62 static void fotg210_done(struct fotg210_ep *ep, struct fotg210_request *req,
63 			int status)
64 {
65 	list_del_init(&req->queue);
66 
67 	/* don't modify queue heads during completion callback */
68 	if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
69 		req->req.status = -ESHUTDOWN;
70 	else
71 		req->req.status = status;
72 
73 	spin_unlock(&ep->fotg210->lock);
74 	usb_gadget_giveback_request(&ep->ep, &req->req);
75 	spin_lock(&ep->fotg210->lock);
76 
77 	if (ep->epnum) {
78 		if (list_empty(&ep->queue))
79 			fotg210_disable_fifo_int(ep);
80 	} else {
81 		fotg210_set_cxdone(ep->fotg210);
82 	}
83 }
84 
85 static void fotg210_fifo_ep_mapping(struct fotg210_ep *ep, u32 epnum,
86 				u32 dir_in)
87 {
88 	struct fotg210_udc *fotg210 = ep->fotg210;
89 	u32 val;
90 
91 	/* Driver should map an ep to a fifo and then map the fifo
92 	 * to the ep. What a brain-damaged design!
93 	 */
94 
95 	/* map a fifo to an ep */
96 	val = ioread32(fotg210->reg + FOTG210_EPMAP);
97 	val &= ~EPMAP_FIFONOMSK(epnum, dir_in);
98 	val |= EPMAP_FIFONO(epnum, dir_in);
99 	iowrite32(val, fotg210->reg + FOTG210_EPMAP);
100 
101 	/* map the ep to the fifo */
102 	val = ioread32(fotg210->reg + FOTG210_FIFOMAP);
103 	val &= ~FIFOMAP_EPNOMSK(epnum);
104 	val |= FIFOMAP_EPNO(epnum);
105 	iowrite32(val, fotg210->reg + FOTG210_FIFOMAP);
106 
107 	/* enable fifo */
108 	val = ioread32(fotg210->reg + FOTG210_FIFOCF);
109 	val |= FIFOCF_FIFO_EN(epnum - 1);
110 	iowrite32(val, fotg210->reg + FOTG210_FIFOCF);
111 }
112 
113 static void fotg210_set_fifo_dir(struct fotg210_ep *ep, u32 epnum, u32 dir_in)
114 {
115 	struct fotg210_udc *fotg210 = ep->fotg210;
116 	u32 val;
117 
118 	val = ioread32(fotg210->reg + FOTG210_FIFOMAP);
119 	val |= (dir_in ? FIFOMAP_DIRIN(epnum - 1) : FIFOMAP_DIROUT(epnum - 1));
120 	iowrite32(val, fotg210->reg + FOTG210_FIFOMAP);
121 }
122 
123 static void fotg210_set_tfrtype(struct fotg210_ep *ep, u32 epnum, u32 type)
124 {
125 	struct fotg210_udc *fotg210 = ep->fotg210;
126 	u32 val;
127 
128 	val = ioread32(fotg210->reg + FOTG210_FIFOCF);
129 	val |= FIFOCF_TYPE(type, epnum - 1);
130 	iowrite32(val, fotg210->reg + FOTG210_FIFOCF);
131 }
132 
133 static void fotg210_set_mps(struct fotg210_ep *ep, u32 epnum, u32 mps,
134 				u32 dir_in)
135 {
136 	struct fotg210_udc *fotg210 = ep->fotg210;
137 	u32 val;
138 	u32 offset = dir_in ? FOTG210_INEPMPSR(epnum) :
139 				FOTG210_OUTEPMPSR(epnum);
140 
141 	val = ioread32(fotg210->reg + offset);
142 	val |= INOUTEPMPSR_MPS(mps);
143 	iowrite32(val, fotg210->reg + offset);
144 }
145 
146 static int fotg210_config_ep(struct fotg210_ep *ep,
147 		     const struct usb_endpoint_descriptor *desc)
148 {
149 	struct fotg210_udc *fotg210 = ep->fotg210;
150 
151 	fotg210_set_fifo_dir(ep, ep->epnum, ep->dir_in);
152 	fotg210_set_tfrtype(ep, ep->epnum, ep->type);
153 	fotg210_set_mps(ep, ep->epnum, ep->ep.maxpacket, ep->dir_in);
154 	fotg210_fifo_ep_mapping(ep, ep->epnum, ep->dir_in);
155 
156 	fotg210->ep[ep->epnum] = ep;
157 
158 	return 0;
159 }
160 
161 static int fotg210_ep_enable(struct usb_ep *_ep,
162 			  const struct usb_endpoint_descriptor *desc)
163 {
164 	struct fotg210_ep *ep;
165 
166 	ep = container_of(_ep, struct fotg210_ep, ep);
167 
168 	ep->desc = desc;
169 	ep->epnum = usb_endpoint_num(desc);
170 	ep->type = usb_endpoint_type(desc);
171 	ep->dir_in = usb_endpoint_dir_in(desc);
172 	ep->ep.maxpacket = usb_endpoint_maxp(desc);
173 
174 	return fotg210_config_ep(ep, desc);
175 }
176 
177 static void fotg210_reset_tseq(struct fotg210_udc *fotg210, u8 epnum)
178 {
179 	struct fotg210_ep *ep = fotg210->ep[epnum];
180 	u32 value;
181 	void __iomem *reg;
182 
183 	reg = (ep->dir_in) ?
184 		fotg210->reg + FOTG210_INEPMPSR(epnum) :
185 		fotg210->reg + FOTG210_OUTEPMPSR(epnum);
186 
187 	/* Note: Driver needs to set and clear INOUTEPMPSR_RESET_TSEQ
188 	 *	 bit. Controller wouldn't clear this bit. WTF!!!
189 	 */
190 
191 	value = ioread32(reg);
192 	value |= INOUTEPMPSR_RESET_TSEQ;
193 	iowrite32(value, reg);
194 
195 	value = ioread32(reg);
196 	value &= ~INOUTEPMPSR_RESET_TSEQ;
197 	iowrite32(value, reg);
198 }
199 
200 static int fotg210_ep_release(struct fotg210_ep *ep)
201 {
202 	if (!ep->epnum)
203 		return 0;
204 	ep->epnum = 0;
205 	ep->stall = 0;
206 	ep->wedged = 0;
207 
208 	fotg210_reset_tseq(ep->fotg210, ep->epnum);
209 
210 	return 0;
211 }
212 
213 static int fotg210_ep_disable(struct usb_ep *_ep)
214 {
215 	struct fotg210_ep *ep;
216 	struct fotg210_request *req;
217 	unsigned long flags;
218 
219 	BUG_ON(!_ep);
220 
221 	ep = container_of(_ep, struct fotg210_ep, ep);
222 
223 	while (!list_empty(&ep->queue)) {
224 		req = list_entry(ep->queue.next,
225 			struct fotg210_request, queue);
226 		spin_lock_irqsave(&ep->fotg210->lock, flags);
227 		fotg210_done(ep, req, -ECONNRESET);
228 		spin_unlock_irqrestore(&ep->fotg210->lock, flags);
229 	}
230 
231 	return fotg210_ep_release(ep);
232 }
233 
234 static struct usb_request *fotg210_ep_alloc_request(struct usb_ep *_ep,
235 						gfp_t gfp_flags)
236 {
237 	struct fotg210_request *req;
238 
239 	req = kzalloc(sizeof(struct fotg210_request), gfp_flags);
240 	if (!req)
241 		return NULL;
242 
243 	INIT_LIST_HEAD(&req->queue);
244 
245 	return &req->req;
246 }
247 
248 static void fotg210_ep_free_request(struct usb_ep *_ep,
249 					struct usb_request *_req)
250 {
251 	struct fotg210_request *req;
252 
253 	req = container_of(_req, struct fotg210_request, req);
254 	kfree(req);
255 }
256 
257 static void fotg210_enable_dma(struct fotg210_ep *ep,
258 			      dma_addr_t d, u32 len)
259 {
260 	u32 value;
261 	struct fotg210_udc *fotg210 = ep->fotg210;
262 
263 	/* set transfer length and direction */
264 	value = ioread32(fotg210->reg + FOTG210_DMACPSR1);
265 	value &= ~(DMACPSR1_DMA_LEN(0xFFFF) | DMACPSR1_DMA_TYPE(1));
266 	value |= DMACPSR1_DMA_LEN(len) | DMACPSR1_DMA_TYPE(ep->dir_in);
267 	iowrite32(value, fotg210->reg + FOTG210_DMACPSR1);
268 
269 	/* set device DMA target FIFO number */
270 	value = ioread32(fotg210->reg + FOTG210_DMATFNR);
271 	if (ep->epnum)
272 		value |= DMATFNR_ACC_FN(ep->epnum - 1);
273 	else
274 		value |= DMATFNR_ACC_CXF;
275 	iowrite32(value, fotg210->reg + FOTG210_DMATFNR);
276 
277 	/* set DMA memory address */
278 	iowrite32(d, fotg210->reg + FOTG210_DMACPSR2);
279 
280 	/* enable MDMA_EROR and MDMA_CMPLT interrupt */
281 	value = ioread32(fotg210->reg + FOTG210_DMISGR2);
282 	value &= ~(DMISGR2_MDMA_CMPLT | DMISGR2_MDMA_ERROR);
283 	iowrite32(value, fotg210->reg + FOTG210_DMISGR2);
284 
285 	/* start DMA */
286 	value = ioread32(fotg210->reg + FOTG210_DMACPSR1);
287 	value |= DMACPSR1_DMA_START;
288 	iowrite32(value, fotg210->reg + FOTG210_DMACPSR1);
289 }
290 
291 static void fotg210_disable_dma(struct fotg210_ep *ep)
292 {
293 	iowrite32(DMATFNR_DISDMA, ep->fotg210->reg + FOTG210_DMATFNR);
294 }
295 
296 static void fotg210_wait_dma_done(struct fotg210_ep *ep)
297 {
298 	u32 value;
299 
300 	do {
301 		value = ioread32(ep->fotg210->reg + FOTG210_DISGR2);
302 		if ((value & DISGR2_USBRST_INT) ||
303 		    (value & DISGR2_DMA_ERROR))
304 			goto dma_reset;
305 	} while (!(value & DISGR2_DMA_CMPLT));
306 
307 	value &= ~DISGR2_DMA_CMPLT;
308 	iowrite32(value, ep->fotg210->reg + FOTG210_DISGR2);
309 	return;
310 
311 dma_reset:
312 	value = ioread32(ep->fotg210->reg + FOTG210_DMACPSR1);
313 	value |= DMACPSR1_DMA_ABORT;
314 	iowrite32(value, ep->fotg210->reg + FOTG210_DMACPSR1);
315 
316 	/* reset fifo */
317 	if (ep->epnum) {
318 		value = ioread32(ep->fotg210->reg +
319 				FOTG210_FIBCR(ep->epnum - 1));
320 		value |= FIBCR_FFRST;
321 		iowrite32(value, ep->fotg210->reg +
322 				FOTG210_FIBCR(ep->epnum - 1));
323 	} else {
324 		value = ioread32(ep->fotg210->reg + FOTG210_DCFESR);
325 		value |= DCFESR_CX_CLR;
326 		iowrite32(value, ep->fotg210->reg + FOTG210_DCFESR);
327 	}
328 }
329 
330 static void fotg210_start_dma(struct fotg210_ep *ep,
331 			struct fotg210_request *req)
332 {
333 	struct device *dev = &ep->fotg210->gadget.dev;
334 	dma_addr_t d;
335 	u8 *buffer;
336 	u32 length;
337 
338 	if (ep->epnum) {
339 		if (ep->dir_in) {
340 			buffer = req->req.buf;
341 			length = req->req.length;
342 		} else {
343 			buffer = req->req.buf + req->req.actual;
344 			length = ioread32(ep->fotg210->reg +
345 					FOTG210_FIBCR(ep->epnum - 1)) & FIBCR_BCFX;
346 			if (length > req->req.length - req->req.actual)
347 				length = req->req.length - req->req.actual;
348 		}
349 	} else {
350 		buffer = req->req.buf + req->req.actual;
351 		if (req->req.length - req->req.actual > ep->ep.maxpacket)
352 			length = ep->ep.maxpacket;
353 		else
354 			length = req->req.length - req->req.actual;
355 	}
356 
357 	d = dma_map_single(dev, buffer, length,
358 			ep->dir_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
359 
360 	if (dma_mapping_error(dev, d)) {
361 		pr_err("dma_mapping_error\n");
362 		return;
363 	}
364 
365 	fotg210_enable_dma(ep, d, length);
366 
367 	/* check if dma is done */
368 	fotg210_wait_dma_done(ep);
369 
370 	fotg210_disable_dma(ep);
371 
372 	/* update actual transfer length */
373 	req->req.actual += length;
374 
375 	dma_unmap_single(dev, d, length, DMA_TO_DEVICE);
376 }
377 
378 static void fotg210_ep0_queue(struct fotg210_ep *ep,
379 				struct fotg210_request *req)
380 {
381 	if (!req->req.length) {
382 		fotg210_done(ep, req, 0);
383 		return;
384 	}
385 	if (ep->dir_in) { /* if IN */
386 		fotg210_start_dma(ep, req);
387 		if (req->req.length == req->req.actual)
388 			fotg210_done(ep, req, 0);
389 	} else { /* OUT */
390 		u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR0);
391 
392 		value &= ~DMISGR0_MCX_OUT_INT;
393 		iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR0);
394 	}
395 }
396 
397 static int fotg210_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
398 				gfp_t gfp_flags)
399 {
400 	struct fotg210_ep *ep;
401 	struct fotg210_request *req;
402 	unsigned long flags;
403 	int request = 0;
404 
405 	ep = container_of(_ep, struct fotg210_ep, ep);
406 	req = container_of(_req, struct fotg210_request, req);
407 
408 	if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
409 		return -ESHUTDOWN;
410 
411 	spin_lock_irqsave(&ep->fotg210->lock, flags);
412 
413 	if (list_empty(&ep->queue))
414 		request = 1;
415 
416 	list_add_tail(&req->queue, &ep->queue);
417 
418 	req->req.actual = 0;
419 	req->req.status = -EINPROGRESS;
420 
421 	if (!ep->epnum) /* ep0 */
422 		fotg210_ep0_queue(ep, req);
423 	else if (request && !ep->stall)
424 		fotg210_enable_fifo_int(ep);
425 
426 	spin_unlock_irqrestore(&ep->fotg210->lock, flags);
427 
428 	return 0;
429 }
430 
431 static int fotg210_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
432 {
433 	struct fotg210_ep *ep;
434 	struct fotg210_request *req;
435 	unsigned long flags;
436 
437 	ep = container_of(_ep, struct fotg210_ep, ep);
438 	req = container_of(_req, struct fotg210_request, req);
439 
440 	spin_lock_irqsave(&ep->fotg210->lock, flags);
441 	if (!list_empty(&ep->queue))
442 		fotg210_done(ep, req, -ECONNRESET);
443 	spin_unlock_irqrestore(&ep->fotg210->lock, flags);
444 
445 	return 0;
446 }
447 
448 static void fotg210_set_epnstall(struct fotg210_ep *ep)
449 {
450 	struct fotg210_udc *fotg210 = ep->fotg210;
451 	u32 value;
452 	void __iomem *reg;
453 
454 	/* check if IN FIFO is empty before stall */
455 	if (ep->dir_in) {
456 		do {
457 			value = ioread32(fotg210->reg + FOTG210_DCFESR);
458 		} while (!(value & DCFESR_FIFO_EMPTY(ep->epnum - 1)));
459 	}
460 
461 	reg = (ep->dir_in) ?
462 		fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
463 		fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
464 	value = ioread32(reg);
465 	value |= INOUTEPMPSR_STL_EP;
466 	iowrite32(value, reg);
467 }
468 
469 static void fotg210_clear_epnstall(struct fotg210_ep *ep)
470 {
471 	struct fotg210_udc *fotg210 = ep->fotg210;
472 	u32 value;
473 	void __iomem *reg;
474 
475 	reg = (ep->dir_in) ?
476 		fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
477 		fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
478 	value = ioread32(reg);
479 	value &= ~INOUTEPMPSR_STL_EP;
480 	iowrite32(value, reg);
481 }
482 
483 static int fotg210_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedge)
484 {
485 	struct fotg210_ep *ep;
486 	struct fotg210_udc *fotg210;
487 	unsigned long flags;
488 
489 	ep = container_of(_ep, struct fotg210_ep, ep);
490 
491 	fotg210 = ep->fotg210;
492 
493 	spin_lock_irqsave(&ep->fotg210->lock, flags);
494 
495 	if (value) {
496 		fotg210_set_epnstall(ep);
497 		ep->stall = 1;
498 		if (wedge)
499 			ep->wedged = 1;
500 	} else {
501 		fotg210_reset_tseq(fotg210, ep->epnum);
502 		fotg210_clear_epnstall(ep);
503 		ep->stall = 0;
504 		ep->wedged = 0;
505 		if (!list_empty(&ep->queue))
506 			fotg210_enable_fifo_int(ep);
507 	}
508 
509 	spin_unlock_irqrestore(&ep->fotg210->lock, flags);
510 	return 0;
511 }
512 
513 static int fotg210_ep_set_halt(struct usb_ep *_ep, int value)
514 {
515 	return fotg210_set_halt_and_wedge(_ep, value, 0);
516 }
517 
518 static int fotg210_ep_set_wedge(struct usb_ep *_ep)
519 {
520 	return fotg210_set_halt_and_wedge(_ep, 1, 1);
521 }
522 
523 static void fotg210_ep_fifo_flush(struct usb_ep *_ep)
524 {
525 }
526 
527 static const struct usb_ep_ops fotg210_ep_ops = {
528 	.enable		= fotg210_ep_enable,
529 	.disable	= fotg210_ep_disable,
530 
531 	.alloc_request	= fotg210_ep_alloc_request,
532 	.free_request	= fotg210_ep_free_request,
533 
534 	.queue		= fotg210_ep_queue,
535 	.dequeue	= fotg210_ep_dequeue,
536 
537 	.set_halt	= fotg210_ep_set_halt,
538 	.fifo_flush	= fotg210_ep_fifo_flush,
539 	.set_wedge	= fotg210_ep_set_wedge,
540 };
541 
542 static void fotg210_clear_tx0byte(struct fotg210_udc *fotg210)
543 {
544 	u32 value = ioread32(fotg210->reg + FOTG210_TX0BYTE);
545 
546 	value &= ~(TX0BYTE_EP1 | TX0BYTE_EP2 | TX0BYTE_EP3
547 		   | TX0BYTE_EP4);
548 	iowrite32(value, fotg210->reg + FOTG210_TX0BYTE);
549 }
550 
551 static void fotg210_clear_rx0byte(struct fotg210_udc *fotg210)
552 {
553 	u32 value = ioread32(fotg210->reg + FOTG210_RX0BYTE);
554 
555 	value &= ~(RX0BYTE_EP1 | RX0BYTE_EP2 | RX0BYTE_EP3
556 		   | RX0BYTE_EP4);
557 	iowrite32(value, fotg210->reg + FOTG210_RX0BYTE);
558 }
559 
560 /* read 8-byte setup packet only */
561 static void fotg210_rdsetupp(struct fotg210_udc *fotg210,
562 		   u8 *buffer)
563 {
564 	int i = 0;
565 	u8 *tmp = buffer;
566 	u32 data;
567 	u32 length = 8;
568 
569 	iowrite32(DMATFNR_ACC_CXF, fotg210->reg + FOTG210_DMATFNR);
570 
571 	for (i = (length >> 2); i > 0; i--) {
572 		data = ioread32(fotg210->reg + FOTG210_CXPORT);
573 		*tmp = data & 0xFF;
574 		*(tmp + 1) = (data >> 8) & 0xFF;
575 		*(tmp + 2) = (data >> 16) & 0xFF;
576 		*(tmp + 3) = (data >> 24) & 0xFF;
577 		tmp = tmp + 4;
578 	}
579 
580 	switch (length % 4) {
581 	case 1:
582 		data = ioread32(fotg210->reg + FOTG210_CXPORT);
583 		*tmp = data & 0xFF;
584 		break;
585 	case 2:
586 		data = ioread32(fotg210->reg + FOTG210_CXPORT);
587 		*tmp = data & 0xFF;
588 		*(tmp + 1) = (data >> 8) & 0xFF;
589 		break;
590 	case 3:
591 		data = ioread32(fotg210->reg + FOTG210_CXPORT);
592 		*tmp = data & 0xFF;
593 		*(tmp + 1) = (data >> 8) & 0xFF;
594 		*(tmp + 2) = (data >> 16) & 0xFF;
595 		break;
596 	default:
597 		break;
598 	}
599 
600 	iowrite32(DMATFNR_DISDMA, fotg210->reg + FOTG210_DMATFNR);
601 }
602 
603 static void fotg210_set_configuration(struct fotg210_udc *fotg210)
604 {
605 	u32 value = ioread32(fotg210->reg + FOTG210_DAR);
606 
607 	value |= DAR_AFT_CONF;
608 	iowrite32(value, fotg210->reg + FOTG210_DAR);
609 }
610 
611 static void fotg210_set_dev_addr(struct fotg210_udc *fotg210, u32 addr)
612 {
613 	u32 value = ioread32(fotg210->reg + FOTG210_DAR);
614 
615 	value |= (addr & 0x7F);
616 	iowrite32(value, fotg210->reg + FOTG210_DAR);
617 }
618 
619 static void fotg210_set_cxstall(struct fotg210_udc *fotg210)
620 {
621 	u32 value = ioread32(fotg210->reg + FOTG210_DCFESR);
622 
623 	value |= DCFESR_CX_STL;
624 	iowrite32(value, fotg210->reg + FOTG210_DCFESR);
625 }
626 
627 static void fotg210_request_error(struct fotg210_udc *fotg210)
628 {
629 	fotg210_set_cxstall(fotg210);
630 	pr_err("request error!!\n");
631 }
632 
633 static void fotg210_set_address(struct fotg210_udc *fotg210,
634 				struct usb_ctrlrequest *ctrl)
635 {
636 	if (le16_to_cpu(ctrl->wValue) >= 0x0100) {
637 		fotg210_request_error(fotg210);
638 	} else {
639 		fotg210_set_dev_addr(fotg210, le16_to_cpu(ctrl->wValue));
640 		fotg210_set_cxdone(fotg210);
641 	}
642 }
643 
644 static void fotg210_set_feature(struct fotg210_udc *fotg210,
645 				struct usb_ctrlrequest *ctrl)
646 {
647 	switch (ctrl->bRequestType & USB_RECIP_MASK) {
648 	case USB_RECIP_DEVICE:
649 		fotg210_set_cxdone(fotg210);
650 		break;
651 	case USB_RECIP_INTERFACE:
652 		fotg210_set_cxdone(fotg210);
653 		break;
654 	case USB_RECIP_ENDPOINT: {
655 		u8 epnum;
656 		epnum = le16_to_cpu(ctrl->wIndex) & USB_ENDPOINT_NUMBER_MASK;
657 		if (epnum)
658 			fotg210_set_epnstall(fotg210->ep[epnum]);
659 		else
660 			fotg210_set_cxstall(fotg210);
661 		fotg210_set_cxdone(fotg210);
662 		}
663 		break;
664 	default:
665 		fotg210_request_error(fotg210);
666 		break;
667 	}
668 }
669 
670 static void fotg210_clear_feature(struct fotg210_udc *fotg210,
671 				struct usb_ctrlrequest *ctrl)
672 {
673 	struct fotg210_ep *ep =
674 		fotg210->ep[ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK];
675 
676 	switch (ctrl->bRequestType & USB_RECIP_MASK) {
677 	case USB_RECIP_DEVICE:
678 		fotg210_set_cxdone(fotg210);
679 		break;
680 	case USB_RECIP_INTERFACE:
681 		fotg210_set_cxdone(fotg210);
682 		break;
683 	case USB_RECIP_ENDPOINT:
684 		if (ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK) {
685 			if (ep->wedged) {
686 				fotg210_set_cxdone(fotg210);
687 				break;
688 			}
689 			if (ep->stall)
690 				fotg210_set_halt_and_wedge(&ep->ep, 0, 0);
691 		}
692 		fotg210_set_cxdone(fotg210);
693 		break;
694 	default:
695 		fotg210_request_error(fotg210);
696 		break;
697 	}
698 }
699 
700 static int fotg210_is_epnstall(struct fotg210_ep *ep)
701 {
702 	struct fotg210_udc *fotg210 = ep->fotg210;
703 	u32 value;
704 	void __iomem *reg;
705 
706 	reg = (ep->dir_in) ?
707 		fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
708 		fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
709 	value = ioread32(reg);
710 	return value & INOUTEPMPSR_STL_EP ? 1 : 0;
711 }
712 
713 static void fotg210_get_status(struct fotg210_udc *fotg210,
714 				struct usb_ctrlrequest *ctrl)
715 {
716 	u8 epnum;
717 
718 	switch (ctrl->bRequestType & USB_RECIP_MASK) {
719 	case USB_RECIP_DEVICE:
720 		fotg210->ep0_data = cpu_to_le16(1 << USB_DEVICE_SELF_POWERED);
721 		break;
722 	case USB_RECIP_INTERFACE:
723 		fotg210->ep0_data = cpu_to_le16(0);
724 		break;
725 	case USB_RECIP_ENDPOINT:
726 		epnum = ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK;
727 		if (epnum)
728 			fotg210->ep0_data =
729 				cpu_to_le16(fotg210_is_epnstall(fotg210->ep[epnum])
730 					    << USB_ENDPOINT_HALT);
731 		else
732 			fotg210_request_error(fotg210);
733 		break;
734 
735 	default:
736 		fotg210_request_error(fotg210);
737 		return;		/* exit */
738 	}
739 
740 	fotg210->ep0_req->buf = &fotg210->ep0_data;
741 	fotg210->ep0_req->length = 2;
742 
743 	spin_unlock(&fotg210->lock);
744 	fotg210_ep_queue(fotg210->gadget.ep0, fotg210->ep0_req, GFP_ATOMIC);
745 	spin_lock(&fotg210->lock);
746 }
747 
748 static int fotg210_setup_packet(struct fotg210_udc *fotg210,
749 				struct usb_ctrlrequest *ctrl)
750 {
751 	u8 *p = (u8 *)ctrl;
752 	u8 ret = 0;
753 
754 	fotg210_rdsetupp(fotg210, p);
755 
756 	fotg210->ep[0]->dir_in = ctrl->bRequestType & USB_DIR_IN;
757 
758 	if (fotg210->gadget.speed == USB_SPEED_UNKNOWN) {
759 		u32 value = ioread32(fotg210->reg + FOTG210_DMCR);
760 		fotg210->gadget.speed = value & DMCR_HS_EN ?
761 				USB_SPEED_HIGH : USB_SPEED_FULL;
762 	}
763 
764 	/* check request */
765 	if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) {
766 		switch (ctrl->bRequest) {
767 		case USB_REQ_GET_STATUS:
768 			fotg210_get_status(fotg210, ctrl);
769 			break;
770 		case USB_REQ_CLEAR_FEATURE:
771 			fotg210_clear_feature(fotg210, ctrl);
772 			break;
773 		case USB_REQ_SET_FEATURE:
774 			fotg210_set_feature(fotg210, ctrl);
775 			break;
776 		case USB_REQ_SET_ADDRESS:
777 			fotg210_set_address(fotg210, ctrl);
778 			break;
779 		case USB_REQ_SET_CONFIGURATION:
780 			fotg210_set_configuration(fotg210);
781 			ret = 1;
782 			break;
783 		default:
784 			ret = 1;
785 			break;
786 		}
787 	} else {
788 		ret = 1;
789 	}
790 
791 	return ret;
792 }
793 
794 static void fotg210_ep0out(struct fotg210_udc *fotg210)
795 {
796 	struct fotg210_ep *ep = fotg210->ep[0];
797 
798 	if (!list_empty(&ep->queue) && !ep->dir_in) {
799 		struct fotg210_request *req;
800 
801 		req = list_first_entry(&ep->queue,
802 			struct fotg210_request, queue);
803 
804 		if (req->req.length)
805 			fotg210_start_dma(ep, req);
806 
807 		if ((req->req.length - req->req.actual) < ep->ep.maxpacket)
808 			fotg210_done(ep, req, 0);
809 	} else {
810 		pr_err("%s : empty queue\n", __func__);
811 	}
812 }
813 
814 static void fotg210_ep0in(struct fotg210_udc *fotg210)
815 {
816 	struct fotg210_ep *ep = fotg210->ep[0];
817 
818 	if ((!list_empty(&ep->queue)) && (ep->dir_in)) {
819 		struct fotg210_request *req;
820 
821 		req = list_entry(ep->queue.next,
822 				struct fotg210_request, queue);
823 
824 		if (req->req.length)
825 			fotg210_start_dma(ep, req);
826 
827 		if (req->req.actual == req->req.length)
828 			fotg210_done(ep, req, 0);
829 	} else {
830 		fotg210_set_cxdone(fotg210);
831 	}
832 }
833 
834 static void fotg210_clear_comabt_int(struct fotg210_udc *fotg210)
835 {
836 	u32 value = ioread32(fotg210->reg + FOTG210_DISGR0);
837 
838 	value &= ~DISGR0_CX_COMABT_INT;
839 	iowrite32(value, fotg210->reg + FOTG210_DISGR0);
840 }
841 
842 static void fotg210_in_fifo_handler(struct fotg210_ep *ep)
843 {
844 	struct fotg210_request *req = list_entry(ep->queue.next,
845 					struct fotg210_request, queue);
846 
847 	if (req->req.length)
848 		fotg210_start_dma(ep, req);
849 	fotg210_done(ep, req, 0);
850 }
851 
852 static void fotg210_out_fifo_handler(struct fotg210_ep *ep)
853 {
854 	struct fotg210_request *req = list_entry(ep->queue.next,
855 						 struct fotg210_request, queue);
856 	int disgr1 = ioread32(ep->fotg210->reg + FOTG210_DISGR1);
857 
858 	fotg210_start_dma(ep, req);
859 
860 	/* Complete the request when it's full or a short packet arrived.
861 	 * Like other drivers, short_not_ok isn't handled.
862 	 */
863 
864 	if (req->req.length == req->req.actual ||
865 	    (disgr1 & DISGR1_SPK_INT(ep->epnum - 1)))
866 		fotg210_done(ep, req, 0);
867 }
868 
869 static irqreturn_t fotg210_irq(int irq, void *_fotg210)
870 {
871 	struct fotg210_udc *fotg210 = _fotg210;
872 	u32 int_grp = ioread32(fotg210->reg + FOTG210_DIGR);
873 	u32 int_msk = ioread32(fotg210->reg + FOTG210_DMIGR);
874 
875 	int_grp &= ~int_msk;
876 
877 	spin_lock(&fotg210->lock);
878 
879 	if (int_grp & DIGR_INT_G2) {
880 		void __iomem *reg = fotg210->reg + FOTG210_DISGR2;
881 		u32 int_grp2 = ioread32(reg);
882 		u32 int_msk2 = ioread32(fotg210->reg + FOTG210_DMISGR2);
883 		u32 value;
884 
885 		int_grp2 &= ~int_msk2;
886 
887 		if (int_grp2 & DISGR2_USBRST_INT) {
888 			usb_gadget_udc_reset(&fotg210->gadget,
889 					     fotg210->driver);
890 			value = ioread32(reg);
891 			value &= ~DISGR2_USBRST_INT;
892 			iowrite32(value, reg);
893 			pr_info("fotg210 udc reset\n");
894 		}
895 		if (int_grp2 & DISGR2_SUSP_INT) {
896 			value = ioread32(reg);
897 			value &= ~DISGR2_SUSP_INT;
898 			iowrite32(value, reg);
899 			pr_info("fotg210 udc suspend\n");
900 		}
901 		if (int_grp2 & DISGR2_RESM_INT) {
902 			value = ioread32(reg);
903 			value &= ~DISGR2_RESM_INT;
904 			iowrite32(value, reg);
905 			pr_info("fotg210 udc resume\n");
906 		}
907 		if (int_grp2 & DISGR2_ISO_SEQ_ERR_INT) {
908 			value = ioread32(reg);
909 			value &= ~DISGR2_ISO_SEQ_ERR_INT;
910 			iowrite32(value, reg);
911 			pr_info("fotg210 iso sequence error\n");
912 		}
913 		if (int_grp2 & DISGR2_ISO_SEQ_ABORT_INT) {
914 			value = ioread32(reg);
915 			value &= ~DISGR2_ISO_SEQ_ABORT_INT;
916 			iowrite32(value, reg);
917 			pr_info("fotg210 iso sequence abort\n");
918 		}
919 		if (int_grp2 & DISGR2_TX0BYTE_INT) {
920 			fotg210_clear_tx0byte(fotg210);
921 			value = ioread32(reg);
922 			value &= ~DISGR2_TX0BYTE_INT;
923 			iowrite32(value, reg);
924 			pr_info("fotg210 transferred 0 byte\n");
925 		}
926 		if (int_grp2 & DISGR2_RX0BYTE_INT) {
927 			fotg210_clear_rx0byte(fotg210);
928 			value = ioread32(reg);
929 			value &= ~DISGR2_RX0BYTE_INT;
930 			iowrite32(value, reg);
931 			pr_info("fotg210 received 0 byte\n");
932 		}
933 		if (int_grp2 & DISGR2_DMA_ERROR) {
934 			value = ioread32(reg);
935 			value &= ~DISGR2_DMA_ERROR;
936 			iowrite32(value, reg);
937 		}
938 	}
939 
940 	if (int_grp & DIGR_INT_G0) {
941 		void __iomem *reg = fotg210->reg + FOTG210_DISGR0;
942 		u32 int_grp0 = ioread32(reg);
943 		u32 int_msk0 = ioread32(fotg210->reg + FOTG210_DMISGR0);
944 		struct usb_ctrlrequest ctrl;
945 
946 		int_grp0 &= ~int_msk0;
947 
948 		/* the highest priority in this source register */
949 		if (int_grp0 & DISGR0_CX_COMABT_INT) {
950 			fotg210_clear_comabt_int(fotg210);
951 			pr_info("fotg210 CX command abort\n");
952 		}
953 
954 		if (int_grp0 & DISGR0_CX_SETUP_INT) {
955 			if (fotg210_setup_packet(fotg210, &ctrl)) {
956 				spin_unlock(&fotg210->lock);
957 				if (fotg210->driver->setup(&fotg210->gadget,
958 							   &ctrl) < 0)
959 					fotg210_set_cxstall(fotg210);
960 				spin_lock(&fotg210->lock);
961 			}
962 		}
963 		if (int_grp0 & DISGR0_CX_COMEND_INT)
964 			pr_info("fotg210 cmd end\n");
965 
966 		if (int_grp0 & DISGR0_CX_IN_INT)
967 			fotg210_ep0in(fotg210);
968 
969 		if (int_grp0 & DISGR0_CX_OUT_INT)
970 			fotg210_ep0out(fotg210);
971 
972 		if (int_grp0 & DISGR0_CX_COMFAIL_INT) {
973 			fotg210_set_cxstall(fotg210);
974 			pr_info("fotg210 ep0 fail\n");
975 		}
976 	}
977 
978 	if (int_grp & DIGR_INT_G1) {
979 		void __iomem *reg = fotg210->reg + FOTG210_DISGR1;
980 		u32 int_grp1 = ioread32(reg);
981 		u32 int_msk1 = ioread32(fotg210->reg + FOTG210_DMISGR1);
982 		int fifo;
983 
984 		int_grp1 &= ~int_msk1;
985 
986 		for (fifo = 0; fifo < FOTG210_MAX_FIFO_NUM; fifo++) {
987 			if (int_grp1 & DISGR1_IN_INT(fifo))
988 				fotg210_in_fifo_handler(fotg210->ep[fifo + 1]);
989 
990 			if ((int_grp1 & DISGR1_OUT_INT(fifo)) ||
991 			    (int_grp1 & DISGR1_SPK_INT(fifo)))
992 				fotg210_out_fifo_handler(fotg210->ep[fifo + 1]);
993 		}
994 	}
995 
996 	spin_unlock(&fotg210->lock);
997 
998 	return IRQ_HANDLED;
999 }
1000 
1001 static void fotg210_disable_unplug(struct fotg210_udc *fotg210)
1002 {
1003 	u32 reg = ioread32(fotg210->reg + FOTG210_PHYTMSR);
1004 
1005 	reg &= ~PHYTMSR_UNPLUG;
1006 	iowrite32(reg, fotg210->reg + FOTG210_PHYTMSR);
1007 }
1008 
1009 static int fotg210_udc_start(struct usb_gadget *g,
1010 		struct usb_gadget_driver *driver)
1011 {
1012 	struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1013 	u32 value;
1014 	int ret;
1015 
1016 	/* hook up the driver */
1017 	driver->driver.bus = NULL;
1018 	fotg210->driver = driver;
1019 
1020 	if (!IS_ERR_OR_NULL(fotg210->phy)) {
1021 		ret = otg_set_peripheral(fotg210->phy->otg,
1022 					 &fotg210->gadget);
1023 		if (ret)
1024 			dev_err(fotg210->dev, "can't bind to phy\n");
1025 	}
1026 
1027 	/* enable device global interrupt */
1028 	value = ioread32(fotg210->reg + FOTG210_DMCR);
1029 	value |= DMCR_GLINT_EN;
1030 	iowrite32(value, fotg210->reg + FOTG210_DMCR);
1031 
1032 	return 0;
1033 }
1034 
1035 static void fotg210_init(struct fotg210_udc *fotg210)
1036 {
1037 	u32 value;
1038 
1039 	/* disable global interrupt and set int polarity to active high */
1040 	iowrite32(GMIR_MHC_INT | GMIR_MOTG_INT | GMIR_INT_POLARITY,
1041 		  fotg210->reg + FOTG210_GMIR);
1042 
1043 	/* disable device global interrupt */
1044 	value = ioread32(fotg210->reg + FOTG210_DMCR);
1045 	value &= ~DMCR_GLINT_EN;
1046 	iowrite32(value, fotg210->reg + FOTG210_DMCR);
1047 
1048 	/* enable only grp2 irqs we handle */
1049 	iowrite32(~(DISGR2_DMA_ERROR | DISGR2_RX0BYTE_INT | DISGR2_TX0BYTE_INT
1050 		    | DISGR2_ISO_SEQ_ABORT_INT | DISGR2_ISO_SEQ_ERR_INT
1051 		    | DISGR2_RESM_INT | DISGR2_SUSP_INT | DISGR2_USBRST_INT),
1052 		  fotg210->reg + FOTG210_DMISGR2);
1053 
1054 	/* disable all fifo interrupt */
1055 	iowrite32(~(u32)0, fotg210->reg + FOTG210_DMISGR1);
1056 
1057 	/* disable cmd end */
1058 	value = ioread32(fotg210->reg + FOTG210_DMISGR0);
1059 	value |= DMISGR0_MCX_COMEND;
1060 	iowrite32(value, fotg210->reg + FOTG210_DMISGR0);
1061 }
1062 
1063 static int fotg210_udc_stop(struct usb_gadget *g)
1064 {
1065 	struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1066 	unsigned long	flags;
1067 
1068 	if (!IS_ERR_OR_NULL(fotg210->phy))
1069 		return otg_set_peripheral(fotg210->phy->otg, NULL);
1070 
1071 	spin_lock_irqsave(&fotg210->lock, flags);
1072 
1073 	fotg210_init(fotg210);
1074 	fotg210->driver = NULL;
1075 
1076 	spin_unlock_irqrestore(&fotg210->lock, flags);
1077 
1078 	return 0;
1079 }
1080 
1081 static const struct usb_gadget_ops fotg210_gadget_ops = {
1082 	.udc_start		= fotg210_udc_start,
1083 	.udc_stop		= fotg210_udc_stop,
1084 };
1085 
1086 /**
1087  * fotg210_phy_event - Called by phy upon VBus event
1088  * @nb: notifier block
1089  * @action: phy action, is vbus connect or disconnect
1090  * @data: the usb_gadget structure in fotg210
1091  *
1092  * Called by the USB Phy when a cable connect or disconnect is sensed.
1093  *
1094  * Returns NOTIFY_OK or NOTIFY_DONE
1095  */
1096 static int fotg210_phy_event(struct notifier_block *nb, unsigned long action,
1097 			     void *data)
1098 {
1099 	struct usb_gadget *gadget = data;
1100 
1101 	if (!gadget)
1102 		return NOTIFY_DONE;
1103 
1104 	switch (action) {
1105 	case USB_EVENT_VBUS:
1106 		usb_gadget_vbus_connect(gadget);
1107 		return NOTIFY_OK;
1108 	case USB_EVENT_NONE:
1109 		usb_gadget_vbus_disconnect(gadget);
1110 		return NOTIFY_OK;
1111 	default:
1112 		return NOTIFY_DONE;
1113 	}
1114 }
1115 
1116 static struct notifier_block fotg210_phy_notifier = {
1117 	.notifier_call = fotg210_phy_event,
1118 };
1119 
1120 int fotg210_udc_remove(struct platform_device *pdev)
1121 {
1122 	struct fotg210_udc *fotg210 = platform_get_drvdata(pdev);
1123 	int i;
1124 
1125 	usb_del_gadget_udc(&fotg210->gadget);
1126 	if (!IS_ERR_OR_NULL(fotg210->phy)) {
1127 		usb_unregister_notifier(fotg210->phy, &fotg210_phy_notifier);
1128 		usb_put_phy(fotg210->phy);
1129 	}
1130 	iounmap(fotg210->reg);
1131 	free_irq(platform_get_irq(pdev, 0), fotg210);
1132 
1133 	fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1134 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++)
1135 		kfree(fotg210->ep[i]);
1136 
1137 	if (!IS_ERR(fotg210->pclk))
1138 		clk_disable_unprepare(fotg210->pclk);
1139 
1140 	kfree(fotg210);
1141 
1142 	return 0;
1143 }
1144 
1145 int fotg210_udc_probe(struct platform_device *pdev)
1146 {
1147 	struct resource *res;
1148 	struct fotg210_udc *fotg210 = NULL;
1149 	struct device *dev = &pdev->dev;
1150 	int irq;
1151 	int ret = 0;
1152 	int i;
1153 
1154 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1155 	if (!res) {
1156 		pr_err("platform_get_resource error.\n");
1157 		return -ENODEV;
1158 	}
1159 
1160 	irq = platform_get_irq(pdev, 0);
1161 	if (irq < 0) {
1162 		pr_err("could not get irq\n");
1163 		return -ENODEV;
1164 	}
1165 
1166 	/* initialize udc */
1167 	fotg210 = kzalloc(sizeof(struct fotg210_udc), GFP_KERNEL);
1168 	if (fotg210 == NULL)
1169 		return -ENOMEM;
1170 
1171 	fotg210->dev = dev;
1172 
1173 	/* It's OK not to supply this clock */
1174 	fotg210->pclk = devm_clk_get(dev, "PCLK");
1175 	if (!IS_ERR(fotg210->pclk)) {
1176 		ret = clk_prepare_enable(fotg210->pclk);
1177 		if (ret) {
1178 			dev_err(dev, "failed to enable PCLK\n");
1179 			goto err;
1180 		}
1181 	} else if (PTR_ERR(fotg210->pclk) == -EPROBE_DEFER) {
1182 		/*
1183 		 * Percolate deferrals, for anything else,
1184 		 * just live without the clocking.
1185 		 */
1186 		ret = -EPROBE_DEFER;
1187 		goto err;
1188 	}
1189 
1190 	fotg210->phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 0);
1191 	if (IS_ERR(fotg210->phy)) {
1192 		ret = PTR_ERR(fotg210->phy);
1193 		if (ret == -EPROBE_DEFER)
1194 			goto err_pclk;
1195 		dev_info(dev, "no PHY found\n");
1196 		fotg210->phy = NULL;
1197 	} else {
1198 		ret = usb_phy_init(fotg210->phy);
1199 		if (ret)
1200 			goto err_pclk;
1201 		dev_info(dev, "found and initialized PHY\n");
1202 	}
1203 
1204 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++) {
1205 		fotg210->ep[i] = kzalloc(sizeof(struct fotg210_ep), GFP_KERNEL);
1206 		if (!fotg210->ep[i])
1207 			goto err_alloc;
1208 	}
1209 
1210 	fotg210->reg = ioremap(res->start, resource_size(res));
1211 	if (fotg210->reg == NULL) {
1212 		dev_err(dev, "ioremap error\n");
1213 		goto err_alloc;
1214 	}
1215 
1216 	spin_lock_init(&fotg210->lock);
1217 
1218 	platform_set_drvdata(pdev, fotg210);
1219 
1220 	fotg210->gadget.ops = &fotg210_gadget_ops;
1221 
1222 	fotg210->gadget.max_speed = USB_SPEED_HIGH;
1223 	fotg210->gadget.dev.parent = dev;
1224 	fotg210->gadget.dev.dma_mask = dev->dma_mask;
1225 	fotg210->gadget.name = udc_name;
1226 
1227 	INIT_LIST_HEAD(&fotg210->gadget.ep_list);
1228 
1229 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++) {
1230 		struct fotg210_ep *ep = fotg210->ep[i];
1231 
1232 		if (i) {
1233 			INIT_LIST_HEAD(&fotg210->ep[i]->ep.ep_list);
1234 			list_add_tail(&fotg210->ep[i]->ep.ep_list,
1235 				      &fotg210->gadget.ep_list);
1236 		}
1237 		ep->fotg210 = fotg210;
1238 		INIT_LIST_HEAD(&ep->queue);
1239 		ep->ep.name = fotg210_ep_name[i];
1240 		ep->ep.ops = &fotg210_ep_ops;
1241 		usb_ep_set_maxpacket_limit(&ep->ep, (unsigned short) ~0);
1242 
1243 		if (i == 0) {
1244 			ep->ep.caps.type_control = true;
1245 		} else {
1246 			ep->ep.caps.type_iso = true;
1247 			ep->ep.caps.type_bulk = true;
1248 			ep->ep.caps.type_int = true;
1249 		}
1250 
1251 		ep->ep.caps.dir_in = true;
1252 		ep->ep.caps.dir_out = true;
1253 	}
1254 	usb_ep_set_maxpacket_limit(&fotg210->ep[0]->ep, 0x40);
1255 	fotg210->gadget.ep0 = &fotg210->ep[0]->ep;
1256 	INIT_LIST_HEAD(&fotg210->gadget.ep0->ep_list);
1257 
1258 	fotg210->ep0_req = fotg210_ep_alloc_request(&fotg210->ep[0]->ep,
1259 				GFP_KERNEL);
1260 	if (fotg210->ep0_req == NULL)
1261 		goto err_map;
1262 
1263 	fotg210_init(fotg210);
1264 
1265 	fotg210_disable_unplug(fotg210);
1266 
1267 	ret = request_irq(irq, fotg210_irq, IRQF_SHARED,
1268 			  udc_name, fotg210);
1269 	if (ret < 0) {
1270 		dev_err(dev, "request_irq error (%d)\n", ret);
1271 		goto err_req;
1272 	}
1273 
1274 	if (!IS_ERR_OR_NULL(fotg210->phy))
1275 		usb_register_notifier(fotg210->phy, &fotg210_phy_notifier);
1276 
1277 	ret = usb_add_gadget_udc(dev, &fotg210->gadget);
1278 	if (ret)
1279 		goto err_add_udc;
1280 
1281 	dev_info(dev, "version %s\n", DRIVER_VERSION);
1282 
1283 	return 0;
1284 
1285 err_add_udc:
1286 	if (!IS_ERR_OR_NULL(fotg210->phy))
1287 		usb_unregister_notifier(fotg210->phy, &fotg210_phy_notifier);
1288 	free_irq(irq, fotg210);
1289 
1290 err_req:
1291 	fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1292 
1293 err_map:
1294 	iounmap(fotg210->reg);
1295 
1296 err_alloc:
1297 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++)
1298 		kfree(fotg210->ep[i]);
1299 err_pclk:
1300 	if (!IS_ERR(fotg210->pclk))
1301 		clk_disable_unprepare(fotg210->pclk);
1302 
1303 err:
1304 	kfree(fotg210);
1305 	return ret;
1306 }
1307