• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
19 #include "fotg210.h"
20 
21 #define	DRIVER_DESC	"FOTG210 USB Device Controller Driver"
22 #define	DRIVER_VERSION	"30-April-2013"
23 
24 static const char udc_name[] = "fotg210_udc";
25 static const char * const fotg210_ep_name[] = {
26 	"ep0", "ep1", "ep2", "ep3", "ep4"};
27 
fotg210_disable_fifo_int(struct fotg210_ep * ep)28 static void fotg210_disable_fifo_int(struct fotg210_ep *ep)
29 {
30 	u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
31 
32 	if (ep->dir_in)
33 		value |= DMISGR1_MF_IN_INT(ep->epnum - 1);
34 	else
35 		value |= DMISGR1_MF_OUTSPK_INT(ep->epnum - 1);
36 	iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
37 }
38 
fotg210_enable_fifo_int(struct fotg210_ep * ep)39 static void fotg210_enable_fifo_int(struct fotg210_ep *ep)
40 {
41 	u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR1);
42 
43 	if (ep->dir_in)
44 		value &= ~DMISGR1_MF_IN_INT(ep->epnum - 1);
45 	else
46 		value &= ~DMISGR1_MF_OUTSPK_INT(ep->epnum - 1);
47 	iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR1);
48 }
49 
fotg210_set_cxdone(struct fotg210_udc * fotg210)50 static void fotg210_set_cxdone(struct fotg210_udc *fotg210)
51 {
52 	u32 value = ioread32(fotg210->reg + FOTG210_DCFESR);
53 
54 	value |= DCFESR_CX_DONE;
55 	iowrite32(value, fotg210->reg + FOTG210_DCFESR);
56 }
57 
fotg210_done(struct fotg210_ep * ep,struct fotg210_request * req,int status)58 static void fotg210_done(struct fotg210_ep *ep, struct fotg210_request *req,
59 			int status)
60 {
61 	list_del_init(&req->queue);
62 
63 	/* don't modify queue heads during completion callback */
64 	if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
65 		req->req.status = -ESHUTDOWN;
66 	else
67 		req->req.status = status;
68 
69 	spin_unlock(&ep->fotg210->lock);
70 	usb_gadget_giveback_request(&ep->ep, &req->req);
71 	spin_lock(&ep->fotg210->lock);
72 
73 	if (ep->epnum) {
74 		if (list_empty(&ep->queue))
75 			fotg210_disable_fifo_int(ep);
76 	} else {
77 		fotg210_set_cxdone(ep->fotg210);
78 	}
79 }
80 
fotg210_fifo_ep_mapping(struct fotg210_ep * ep,u32 epnum,u32 dir_in)81 static void fotg210_fifo_ep_mapping(struct fotg210_ep *ep, u32 epnum,
82 				u32 dir_in)
83 {
84 	struct fotg210_udc *fotg210 = ep->fotg210;
85 	u32 val;
86 
87 	/* Driver should map an ep to a fifo and then map the fifo
88 	 * to the ep. What a brain-damaged design!
89 	 */
90 
91 	/* map a fifo to an ep */
92 	val = ioread32(fotg210->reg + FOTG210_EPMAP);
93 	val &= ~EPMAP_FIFONOMSK(epnum, dir_in);
94 	val |= EPMAP_FIFONO(epnum, dir_in);
95 	iowrite32(val, fotg210->reg + FOTG210_EPMAP);
96 
97 	/* map the ep to the fifo */
98 	val = ioread32(fotg210->reg + FOTG210_FIFOMAP);
99 	val &= ~FIFOMAP_EPNOMSK(epnum);
100 	val |= FIFOMAP_EPNO(epnum);
101 	iowrite32(val, fotg210->reg + FOTG210_FIFOMAP);
102 
103 	/* enable fifo */
104 	val = ioread32(fotg210->reg + FOTG210_FIFOCF);
105 	val |= FIFOCF_FIFO_EN(epnum - 1);
106 	iowrite32(val, fotg210->reg + FOTG210_FIFOCF);
107 }
108 
fotg210_set_fifo_dir(struct fotg210_ep * ep,u32 epnum,u32 dir_in)109 static void fotg210_set_fifo_dir(struct fotg210_ep *ep, u32 epnum, u32 dir_in)
110 {
111 	struct fotg210_udc *fotg210 = ep->fotg210;
112 	u32 val;
113 
114 	val = ioread32(fotg210->reg + FOTG210_FIFOMAP);
115 	val |= (dir_in ? FIFOMAP_DIRIN(epnum - 1) : FIFOMAP_DIROUT(epnum - 1));
116 	iowrite32(val, fotg210->reg + FOTG210_FIFOMAP);
117 }
118 
fotg210_set_tfrtype(struct fotg210_ep * ep,u32 epnum,u32 type)119 static void fotg210_set_tfrtype(struct fotg210_ep *ep, u32 epnum, u32 type)
120 {
121 	struct fotg210_udc *fotg210 = ep->fotg210;
122 	u32 val;
123 
124 	val = ioread32(fotg210->reg + FOTG210_FIFOCF);
125 	val |= FIFOCF_TYPE(type, epnum - 1);
126 	iowrite32(val, fotg210->reg + FOTG210_FIFOCF);
127 }
128 
fotg210_set_mps(struct fotg210_ep * ep,u32 epnum,u32 mps,u32 dir_in)129 static void fotg210_set_mps(struct fotg210_ep *ep, u32 epnum, u32 mps,
130 				u32 dir_in)
131 {
132 	struct fotg210_udc *fotg210 = ep->fotg210;
133 	u32 val;
134 	u32 offset = dir_in ? FOTG210_INEPMPSR(epnum) :
135 				FOTG210_OUTEPMPSR(epnum);
136 
137 	val = ioread32(fotg210->reg + offset);
138 	val |= INOUTEPMPSR_MPS(mps);
139 	iowrite32(val, fotg210->reg + offset);
140 }
141 
fotg210_config_ep(struct fotg210_ep * ep,const struct usb_endpoint_descriptor * desc)142 static int fotg210_config_ep(struct fotg210_ep *ep,
143 		     const struct usb_endpoint_descriptor *desc)
144 {
145 	struct fotg210_udc *fotg210 = ep->fotg210;
146 
147 	fotg210_set_fifo_dir(ep, ep->epnum, ep->dir_in);
148 	fotg210_set_tfrtype(ep, ep->epnum, ep->type);
149 	fotg210_set_mps(ep, ep->epnum, ep->ep.maxpacket, ep->dir_in);
150 	fotg210_fifo_ep_mapping(ep, ep->epnum, ep->dir_in);
151 
152 	fotg210->ep[ep->epnum] = ep;
153 
154 	return 0;
155 }
156 
fotg210_ep_enable(struct usb_ep * _ep,const struct usb_endpoint_descriptor * desc)157 static int fotg210_ep_enable(struct usb_ep *_ep,
158 			  const struct usb_endpoint_descriptor *desc)
159 {
160 	struct fotg210_ep *ep;
161 
162 	ep = container_of(_ep, struct fotg210_ep, ep);
163 
164 	ep->desc = desc;
165 	ep->epnum = usb_endpoint_num(desc);
166 	ep->type = usb_endpoint_type(desc);
167 	ep->dir_in = usb_endpoint_dir_in(desc);
168 	ep->ep.maxpacket = usb_endpoint_maxp(desc);
169 
170 	return fotg210_config_ep(ep, desc);
171 }
172 
fotg210_reset_tseq(struct fotg210_udc * fotg210,u8 epnum)173 static void fotg210_reset_tseq(struct fotg210_udc *fotg210, u8 epnum)
174 {
175 	struct fotg210_ep *ep = fotg210->ep[epnum];
176 	u32 value;
177 	void __iomem *reg;
178 
179 	reg = (ep->dir_in) ?
180 		fotg210->reg + FOTG210_INEPMPSR(epnum) :
181 		fotg210->reg + FOTG210_OUTEPMPSR(epnum);
182 
183 	/* Note: Driver needs to set and clear INOUTEPMPSR_RESET_TSEQ
184 	 *	 bit. Controller wouldn't clear this bit. WTF!!!
185 	 */
186 
187 	value = ioread32(reg);
188 	value |= INOUTEPMPSR_RESET_TSEQ;
189 	iowrite32(value, reg);
190 
191 	value = ioread32(reg);
192 	value &= ~INOUTEPMPSR_RESET_TSEQ;
193 	iowrite32(value, reg);
194 }
195 
fotg210_ep_release(struct fotg210_ep * ep)196 static int fotg210_ep_release(struct fotg210_ep *ep)
197 {
198 	if (!ep->epnum)
199 		return 0;
200 	ep->epnum = 0;
201 	ep->stall = 0;
202 	ep->wedged = 0;
203 
204 	fotg210_reset_tseq(ep->fotg210, ep->epnum);
205 
206 	return 0;
207 }
208 
fotg210_ep_disable(struct usb_ep * _ep)209 static int fotg210_ep_disable(struct usb_ep *_ep)
210 {
211 	struct fotg210_ep *ep;
212 	struct fotg210_request *req;
213 	unsigned long flags;
214 
215 	BUG_ON(!_ep);
216 
217 	ep = container_of(_ep, struct fotg210_ep, ep);
218 
219 	while (!list_empty(&ep->queue)) {
220 		req = list_entry(ep->queue.next,
221 			struct fotg210_request, queue);
222 		spin_lock_irqsave(&ep->fotg210->lock, flags);
223 		fotg210_done(ep, req, -ECONNRESET);
224 		spin_unlock_irqrestore(&ep->fotg210->lock, flags);
225 	}
226 
227 	return fotg210_ep_release(ep);
228 }
229 
fotg210_ep_alloc_request(struct usb_ep * _ep,gfp_t gfp_flags)230 static struct usb_request *fotg210_ep_alloc_request(struct usb_ep *_ep,
231 						gfp_t gfp_flags)
232 {
233 	struct fotg210_request *req;
234 
235 	req = kzalloc(sizeof(struct fotg210_request), gfp_flags);
236 	if (!req)
237 		return NULL;
238 
239 	INIT_LIST_HEAD(&req->queue);
240 
241 	return &req->req;
242 }
243 
fotg210_ep_free_request(struct usb_ep * _ep,struct usb_request * _req)244 static void fotg210_ep_free_request(struct usb_ep *_ep,
245 					struct usb_request *_req)
246 {
247 	struct fotg210_request *req;
248 
249 	req = container_of(_req, struct fotg210_request, req);
250 	kfree(req);
251 }
252 
fotg210_enable_dma(struct fotg210_ep * ep,dma_addr_t d,u32 len)253 static void fotg210_enable_dma(struct fotg210_ep *ep,
254 			      dma_addr_t d, u32 len)
255 {
256 	u32 value;
257 	struct fotg210_udc *fotg210 = ep->fotg210;
258 
259 	/* set transfer length and direction */
260 	value = ioread32(fotg210->reg + FOTG210_DMACPSR1);
261 	value &= ~(DMACPSR1_DMA_LEN(0xFFFF) | DMACPSR1_DMA_TYPE(1));
262 	value |= DMACPSR1_DMA_LEN(len) | DMACPSR1_DMA_TYPE(ep->dir_in);
263 	iowrite32(value, fotg210->reg + FOTG210_DMACPSR1);
264 
265 	/* set device DMA target FIFO number */
266 	value = ioread32(fotg210->reg + FOTG210_DMATFNR);
267 	if (ep->epnum)
268 		value |= DMATFNR_ACC_FN(ep->epnum - 1);
269 	else
270 		value |= DMATFNR_ACC_CXF;
271 	iowrite32(value, fotg210->reg + FOTG210_DMATFNR);
272 
273 	/* set DMA memory address */
274 	iowrite32(d, fotg210->reg + FOTG210_DMACPSR2);
275 
276 	/* enable MDMA_EROR and MDMA_CMPLT interrupt */
277 	value = ioread32(fotg210->reg + FOTG210_DMISGR2);
278 	value &= ~(DMISGR2_MDMA_CMPLT | DMISGR2_MDMA_ERROR);
279 	iowrite32(value, fotg210->reg + FOTG210_DMISGR2);
280 
281 	/* start DMA */
282 	value = ioread32(fotg210->reg + FOTG210_DMACPSR1);
283 	value |= DMACPSR1_DMA_START;
284 	iowrite32(value, fotg210->reg + FOTG210_DMACPSR1);
285 }
286 
fotg210_disable_dma(struct fotg210_ep * ep)287 static void fotg210_disable_dma(struct fotg210_ep *ep)
288 {
289 	iowrite32(DMATFNR_DISDMA, ep->fotg210->reg + FOTG210_DMATFNR);
290 }
291 
fotg210_wait_dma_done(struct fotg210_ep * ep)292 static void fotg210_wait_dma_done(struct fotg210_ep *ep)
293 {
294 	u32 value;
295 
296 	do {
297 		value = ioread32(ep->fotg210->reg + FOTG210_DISGR2);
298 		if ((value & DISGR2_USBRST_INT) ||
299 		    (value & DISGR2_DMA_ERROR))
300 			goto dma_reset;
301 	} while (!(value & DISGR2_DMA_CMPLT));
302 
303 	value &= ~DISGR2_DMA_CMPLT;
304 	iowrite32(value, ep->fotg210->reg + FOTG210_DISGR2);
305 	return;
306 
307 dma_reset:
308 	value = ioread32(ep->fotg210->reg + FOTG210_DMACPSR1);
309 	value |= DMACPSR1_DMA_ABORT;
310 	iowrite32(value, ep->fotg210->reg + FOTG210_DMACPSR1);
311 
312 	/* reset fifo */
313 	if (ep->epnum) {
314 		value = ioread32(ep->fotg210->reg +
315 				FOTG210_FIBCR(ep->epnum - 1));
316 		value |= FIBCR_FFRST;
317 		iowrite32(value, ep->fotg210->reg +
318 				FOTG210_FIBCR(ep->epnum - 1));
319 	} else {
320 		value = ioread32(ep->fotg210->reg + FOTG210_DCFESR);
321 		value |= DCFESR_CX_CLR;
322 		iowrite32(value, ep->fotg210->reg + FOTG210_DCFESR);
323 	}
324 }
325 
fotg210_start_dma(struct fotg210_ep * ep,struct fotg210_request * req)326 static void fotg210_start_dma(struct fotg210_ep *ep,
327 			struct fotg210_request *req)
328 {
329 	dma_addr_t d;
330 	u8 *buffer;
331 	u32 length;
332 
333 	if (ep->epnum) {
334 		if (ep->dir_in) {
335 			buffer = req->req.buf;
336 			length = req->req.length;
337 		} else {
338 			buffer = req->req.buf + req->req.actual;
339 			length = ioread32(ep->fotg210->reg +
340 					FOTG210_FIBCR(ep->epnum - 1));
341 			length &= FIBCR_BCFX;
342 		}
343 	} else {
344 		buffer = req->req.buf + req->req.actual;
345 		if (req->req.length - req->req.actual > ep->ep.maxpacket)
346 			length = ep->ep.maxpacket;
347 		else
348 			length = req->req.length;
349 	}
350 
351 	d = dma_map_single(NULL, buffer, length,
352 			ep->dir_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
353 
354 	if (dma_mapping_error(NULL, d)) {
355 		pr_err("dma_mapping_error\n");
356 		return;
357 	}
358 
359 	dma_sync_single_for_device(NULL, d, length,
360 				   ep->dir_in ? DMA_TO_DEVICE :
361 					DMA_FROM_DEVICE);
362 
363 	fotg210_enable_dma(ep, d, length);
364 
365 	/* check if dma is done */
366 	fotg210_wait_dma_done(ep);
367 
368 	fotg210_disable_dma(ep);
369 
370 	/* update actual transfer length */
371 	req->req.actual += length;
372 
373 	dma_unmap_single(NULL, d, length, DMA_TO_DEVICE);
374 }
375 
fotg210_ep0_queue(struct fotg210_ep * ep,struct fotg210_request * req)376 static void fotg210_ep0_queue(struct fotg210_ep *ep,
377 				struct fotg210_request *req)
378 {
379 	if (!req->req.length) {
380 		fotg210_done(ep, req, 0);
381 		return;
382 	}
383 	if (ep->dir_in) { /* if IN */
384 		fotg210_start_dma(ep, req);
385 		if ((req->req.length == req->req.actual) ||
386 		    (req->req.actual < ep->ep.maxpacket))
387 			fotg210_done(ep, req, 0);
388 	} else { /* OUT */
389 		u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR0);
390 
391 		value &= ~DMISGR0_MCX_OUT_INT;
392 		iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR0);
393 	}
394 }
395 
fotg210_ep_queue(struct usb_ep * _ep,struct usb_request * _req,gfp_t gfp_flags)396 static int fotg210_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
397 				gfp_t gfp_flags)
398 {
399 	struct fotg210_ep *ep;
400 	struct fotg210_request *req;
401 	unsigned long flags;
402 	int request = 0;
403 
404 	ep = container_of(_ep, struct fotg210_ep, ep);
405 	req = container_of(_req, struct fotg210_request, req);
406 
407 	if (ep->fotg210->gadget.speed == USB_SPEED_UNKNOWN)
408 		return -ESHUTDOWN;
409 
410 	spin_lock_irqsave(&ep->fotg210->lock, flags);
411 
412 	if (list_empty(&ep->queue))
413 		request = 1;
414 
415 	list_add_tail(&req->queue, &ep->queue);
416 
417 	req->req.actual = 0;
418 	req->req.status = -EINPROGRESS;
419 
420 	if (!ep->epnum) /* ep0 */
421 		fotg210_ep0_queue(ep, req);
422 	else if (request && !ep->stall)
423 		fotg210_enable_fifo_int(ep);
424 
425 	spin_unlock_irqrestore(&ep->fotg210->lock, flags);
426 
427 	return 0;
428 }
429 
fotg210_ep_dequeue(struct usb_ep * _ep,struct usb_request * _req)430 static int fotg210_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
431 {
432 	struct fotg210_ep *ep;
433 	struct fotg210_request *req;
434 	unsigned long flags;
435 
436 	ep = container_of(_ep, struct fotg210_ep, ep);
437 	req = container_of(_req, struct fotg210_request, req);
438 
439 	spin_lock_irqsave(&ep->fotg210->lock, flags);
440 	if (!list_empty(&ep->queue))
441 		fotg210_done(ep, req, -ECONNRESET);
442 	spin_unlock_irqrestore(&ep->fotg210->lock, flags);
443 
444 	return 0;
445 }
446 
fotg210_set_epnstall(struct fotg210_ep * ep)447 static void fotg210_set_epnstall(struct fotg210_ep *ep)
448 {
449 	struct fotg210_udc *fotg210 = ep->fotg210;
450 	u32 value;
451 	void __iomem *reg;
452 
453 	/* check if IN FIFO is empty before stall */
454 	if (ep->dir_in) {
455 		do {
456 			value = ioread32(fotg210->reg + FOTG210_DCFESR);
457 		} while (!(value & DCFESR_FIFO_EMPTY(ep->epnum - 1)));
458 	}
459 
460 	reg = (ep->dir_in) ?
461 		fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
462 		fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
463 	value = ioread32(reg);
464 	value |= INOUTEPMPSR_STL_EP;
465 	iowrite32(value, reg);
466 }
467 
fotg210_clear_epnstall(struct fotg210_ep * ep)468 static void fotg210_clear_epnstall(struct fotg210_ep *ep)
469 {
470 	struct fotg210_udc *fotg210 = ep->fotg210;
471 	u32 value;
472 	void __iomem *reg;
473 
474 	reg = (ep->dir_in) ?
475 		fotg210->reg + FOTG210_INEPMPSR(ep->epnum) :
476 		fotg210->reg + FOTG210_OUTEPMPSR(ep->epnum);
477 	value = ioread32(reg);
478 	value &= ~INOUTEPMPSR_STL_EP;
479 	iowrite32(value, reg);
480 }
481 
fotg210_set_halt_and_wedge(struct usb_ep * _ep,int value,int wedge)482 static int fotg210_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedge)
483 {
484 	struct fotg210_ep *ep;
485 	struct fotg210_udc *fotg210;
486 	unsigned long flags;
487 	int ret = 0;
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 ret;
511 }
512 
fotg210_ep_set_halt(struct usb_ep * _ep,int value)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 
fotg210_ep_set_wedge(struct usb_ep * _ep)518 static int fotg210_ep_set_wedge(struct usb_ep *_ep)
519 {
520 	return fotg210_set_halt_and_wedge(_ep, 1, 1);
521 }
522 
fotg210_ep_fifo_flush(struct usb_ep * _ep)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 
fotg210_clear_tx0byte(struct fotg210_udc * fotg210)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 
fotg210_clear_rx0byte(struct fotg210_udc * fotg210)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 */
fotg210_rdsetupp(struct fotg210_udc * fotg210,u8 * buffer)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 
fotg210_set_configuration(struct fotg210_udc * fotg210)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 
fotg210_set_dev_addr(struct fotg210_udc * fotg210,u32 addr)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 
fotg210_set_cxstall(struct fotg210_udc * fotg210)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 
fotg210_request_error(struct fotg210_udc * fotg210)627 static void fotg210_request_error(struct fotg210_udc *fotg210)
628 {
629 	fotg210_set_cxstall(fotg210);
630 	pr_err("request error!!\n");
631 }
632 
fotg210_set_address(struct fotg210_udc * fotg210,struct usb_ctrlrequest * ctrl)633 static void fotg210_set_address(struct fotg210_udc *fotg210,
634 				struct usb_ctrlrequest *ctrl)
635 {
636 	if (ctrl->wValue >= 0x0100) {
637 		fotg210_request_error(fotg210);
638 	} else {
639 		fotg210_set_dev_addr(fotg210, ctrl->wValue);
640 		fotg210_set_cxdone(fotg210);
641 	}
642 }
643 
fotg210_set_feature(struct fotg210_udc * fotg210,struct usb_ctrlrequest * ctrl)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 
fotg210_clear_feature(struct fotg210_udc * fotg210,struct usb_ctrlrequest * ctrl)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 
fotg210_is_epnstall(struct fotg210_ep * ep)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 
fotg210_get_status(struct fotg210_udc * fotg210,struct usb_ctrlrequest * ctrl)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 = 1 << USB_DEVICE_SELF_POWERED;
721 		break;
722 	case USB_RECIP_INTERFACE:
723 		fotg210->ep0_data = 0;
724 		break;
725 	case USB_RECIP_ENDPOINT:
726 		epnum = ctrl->wIndex & USB_ENDPOINT_NUMBER_MASK;
727 		if (epnum)
728 			fotg210->ep0_data =
729 				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 
fotg210_setup_packet(struct fotg210_udc * fotg210,struct usb_ctrlrequest * ctrl)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 
fotg210_ep0out(struct fotg210_udc * fotg210)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 
fotg210_ep0in(struct fotg210_udc * fotg210)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.length - req->req.actual) < ep->ep.maxpacket)
828 			fotg210_done(ep, req, 0);
829 	} else {
830 		fotg210_set_cxdone(fotg210);
831 	}
832 }
833 
fotg210_clear_comabt_int(struct fotg210_udc * fotg210)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 
fotg210_in_fifo_handler(struct fotg210_ep * ep)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 
fotg210_out_fifo_handler(struct fotg210_ep * ep)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 
857 	fotg210_start_dma(ep, req);
858 
859 	/* finish out transfer */
860 	if (req->req.length == req->req.actual ||
861 	    req->req.actual < ep->ep.maxpacket)
862 		fotg210_done(ep, req, 0);
863 }
864 
fotg210_irq(int irq,void * _fotg210)865 static irqreturn_t fotg210_irq(int irq, void *_fotg210)
866 {
867 	struct fotg210_udc *fotg210 = _fotg210;
868 	u32 int_grp = ioread32(fotg210->reg + FOTG210_DIGR);
869 	u32 int_msk = ioread32(fotg210->reg + FOTG210_DMIGR);
870 
871 	int_grp &= ~int_msk;
872 
873 	spin_lock(&fotg210->lock);
874 
875 	if (int_grp & DIGR_INT_G2) {
876 		void __iomem *reg = fotg210->reg + FOTG210_DISGR2;
877 		u32 int_grp2 = ioread32(reg);
878 		u32 int_msk2 = ioread32(fotg210->reg + FOTG210_DMISGR2);
879 		u32 value;
880 
881 		int_grp2 &= ~int_msk2;
882 
883 		if (int_grp2 & DISGR2_USBRST_INT) {
884 			value = ioread32(reg);
885 			value &= ~DISGR2_USBRST_INT;
886 			iowrite32(value, reg);
887 			pr_info("fotg210 udc reset\n");
888 		}
889 		if (int_grp2 & DISGR2_SUSP_INT) {
890 			value = ioread32(reg);
891 			value &= ~DISGR2_SUSP_INT;
892 			iowrite32(value, reg);
893 			pr_info("fotg210 udc suspend\n");
894 		}
895 		if (int_grp2 & DISGR2_RESM_INT) {
896 			value = ioread32(reg);
897 			value &= ~DISGR2_RESM_INT;
898 			iowrite32(value, reg);
899 			pr_info("fotg210 udc resume\n");
900 		}
901 		if (int_grp2 & DISGR2_ISO_SEQ_ERR_INT) {
902 			value = ioread32(reg);
903 			value &= ~DISGR2_ISO_SEQ_ERR_INT;
904 			iowrite32(value, reg);
905 			pr_info("fotg210 iso sequence error\n");
906 		}
907 		if (int_grp2 & DISGR2_ISO_SEQ_ABORT_INT) {
908 			value = ioread32(reg);
909 			value &= ~DISGR2_ISO_SEQ_ABORT_INT;
910 			iowrite32(value, reg);
911 			pr_info("fotg210 iso sequence abort\n");
912 		}
913 		if (int_grp2 & DISGR2_TX0BYTE_INT) {
914 			fotg210_clear_tx0byte(fotg210);
915 			value = ioread32(reg);
916 			value &= ~DISGR2_TX0BYTE_INT;
917 			iowrite32(value, reg);
918 			pr_info("fotg210 transferred 0 byte\n");
919 		}
920 		if (int_grp2 & DISGR2_RX0BYTE_INT) {
921 			fotg210_clear_rx0byte(fotg210);
922 			value = ioread32(reg);
923 			value &= ~DISGR2_RX0BYTE_INT;
924 			iowrite32(value, reg);
925 			pr_info("fotg210 received 0 byte\n");
926 		}
927 		if (int_grp2 & DISGR2_DMA_ERROR) {
928 			value = ioread32(reg);
929 			value &= ~DISGR2_DMA_ERROR;
930 			iowrite32(value, reg);
931 		}
932 	}
933 
934 	if (int_grp & DIGR_INT_G0) {
935 		void __iomem *reg = fotg210->reg + FOTG210_DISGR0;
936 		u32 int_grp0 = ioread32(reg);
937 		u32 int_msk0 = ioread32(fotg210->reg + FOTG210_DMISGR0);
938 		struct usb_ctrlrequest ctrl;
939 
940 		int_grp0 &= ~int_msk0;
941 
942 		/* the highest priority in this source register */
943 		if (int_grp0 & DISGR0_CX_COMABT_INT) {
944 			fotg210_clear_comabt_int(fotg210);
945 			pr_info("fotg210 CX command abort\n");
946 		}
947 
948 		if (int_grp0 & DISGR0_CX_SETUP_INT) {
949 			if (fotg210_setup_packet(fotg210, &ctrl)) {
950 				spin_unlock(&fotg210->lock);
951 				if (fotg210->driver->setup(&fotg210->gadget,
952 							   &ctrl) < 0)
953 					fotg210_set_cxstall(fotg210);
954 				spin_lock(&fotg210->lock);
955 			}
956 		}
957 		if (int_grp0 & DISGR0_CX_COMEND_INT)
958 			pr_info("fotg210 cmd end\n");
959 
960 		if (int_grp0 & DISGR0_CX_IN_INT)
961 			fotg210_ep0in(fotg210);
962 
963 		if (int_grp0 & DISGR0_CX_OUT_INT)
964 			fotg210_ep0out(fotg210);
965 
966 		if (int_grp0 & DISGR0_CX_COMFAIL_INT) {
967 			fotg210_set_cxstall(fotg210);
968 			pr_info("fotg210 ep0 fail\n");
969 		}
970 	}
971 
972 	if (int_grp & DIGR_INT_G1) {
973 		void __iomem *reg = fotg210->reg + FOTG210_DISGR1;
974 		u32 int_grp1 = ioread32(reg);
975 		u32 int_msk1 = ioread32(fotg210->reg + FOTG210_DMISGR1);
976 		int fifo;
977 
978 		int_grp1 &= ~int_msk1;
979 
980 		for (fifo = 0; fifo < FOTG210_MAX_FIFO_NUM; fifo++) {
981 			if (int_grp1 & DISGR1_IN_INT(fifo))
982 				fotg210_in_fifo_handler(fotg210->ep[fifo + 1]);
983 
984 			if ((int_grp1 & DISGR1_OUT_INT(fifo)) ||
985 			    (int_grp1 & DISGR1_SPK_INT(fifo)))
986 				fotg210_out_fifo_handler(fotg210->ep[fifo + 1]);
987 		}
988 	}
989 
990 	spin_unlock(&fotg210->lock);
991 
992 	return IRQ_HANDLED;
993 }
994 
fotg210_disable_unplug(struct fotg210_udc * fotg210)995 static void fotg210_disable_unplug(struct fotg210_udc *fotg210)
996 {
997 	u32 reg = ioread32(fotg210->reg + FOTG210_PHYTMSR);
998 
999 	reg &= ~PHYTMSR_UNPLUG;
1000 	iowrite32(reg, fotg210->reg + FOTG210_PHYTMSR);
1001 }
1002 
fotg210_udc_start(struct usb_gadget * g,struct usb_gadget_driver * driver)1003 static int fotg210_udc_start(struct usb_gadget *g,
1004 		struct usb_gadget_driver *driver)
1005 {
1006 	struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1007 	u32 value;
1008 
1009 	/* hook up the driver */
1010 	driver->driver.bus = NULL;
1011 	fotg210->driver = driver;
1012 
1013 	/* enable device global interrupt */
1014 	value = ioread32(fotg210->reg + FOTG210_DMCR);
1015 	value |= DMCR_GLINT_EN;
1016 	iowrite32(value, fotg210->reg + FOTG210_DMCR);
1017 
1018 	return 0;
1019 }
1020 
fotg210_init(struct fotg210_udc * fotg210)1021 static void fotg210_init(struct fotg210_udc *fotg210)
1022 {
1023 	u32 value;
1024 
1025 	/* disable global interrupt and set int polarity to active high */
1026 	iowrite32(GMIR_MHC_INT | GMIR_MOTG_INT | GMIR_INT_POLARITY,
1027 		  fotg210->reg + FOTG210_GMIR);
1028 
1029 	/* disable device global interrupt */
1030 	value = ioread32(fotg210->reg + FOTG210_DMCR);
1031 	value &= ~DMCR_GLINT_EN;
1032 	iowrite32(value, fotg210->reg + FOTG210_DMCR);
1033 
1034 	/* disable all fifo interrupt */
1035 	iowrite32(~(u32)0, fotg210->reg + FOTG210_DMISGR1);
1036 
1037 	/* disable cmd end */
1038 	value = ioread32(fotg210->reg + FOTG210_DMISGR0);
1039 	value |= DMISGR0_MCX_COMEND;
1040 	iowrite32(value, fotg210->reg + FOTG210_DMISGR0);
1041 }
1042 
fotg210_udc_stop(struct usb_gadget * g)1043 static int fotg210_udc_stop(struct usb_gadget *g)
1044 {
1045 	struct fotg210_udc *fotg210 = gadget_to_fotg210(g);
1046 	unsigned long	flags;
1047 
1048 	spin_lock_irqsave(&fotg210->lock, flags);
1049 
1050 	fotg210_init(fotg210);
1051 	fotg210->driver = NULL;
1052 
1053 	spin_unlock_irqrestore(&fotg210->lock, flags);
1054 
1055 	return 0;
1056 }
1057 
1058 static const struct usb_gadget_ops fotg210_gadget_ops = {
1059 	.udc_start		= fotg210_udc_start,
1060 	.udc_stop		= fotg210_udc_stop,
1061 };
1062 
fotg210_udc_remove(struct platform_device * pdev)1063 static int fotg210_udc_remove(struct platform_device *pdev)
1064 {
1065 	struct fotg210_udc *fotg210 = platform_get_drvdata(pdev);
1066 	int i;
1067 
1068 	usb_del_gadget_udc(&fotg210->gadget);
1069 	iounmap(fotg210->reg);
1070 	free_irq(platform_get_irq(pdev, 0), fotg210);
1071 
1072 	fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1073 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++)
1074 		kfree(fotg210->ep[i]);
1075 	kfree(fotg210);
1076 
1077 	return 0;
1078 }
1079 
fotg210_udc_probe(struct platform_device * pdev)1080 static int fotg210_udc_probe(struct platform_device *pdev)
1081 {
1082 	struct resource *res, *ires;
1083 	struct fotg210_udc *fotg210 = NULL;
1084 	struct fotg210_ep *_ep[FOTG210_MAX_NUM_EP];
1085 	int ret = 0;
1086 	int i;
1087 
1088 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1089 	if (!res) {
1090 		pr_err("platform_get_resource error.\n");
1091 		return -ENODEV;
1092 	}
1093 
1094 	ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1095 	if (!ires) {
1096 		pr_err("platform_get_resource IORESOURCE_IRQ error.\n");
1097 		return -ENODEV;
1098 	}
1099 
1100 	ret = -ENOMEM;
1101 
1102 	/* initialize udc */
1103 	fotg210 = kzalloc(sizeof(struct fotg210_udc), GFP_KERNEL);
1104 	if (fotg210 == NULL)
1105 		goto err;
1106 
1107 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++) {
1108 		_ep[i] = kzalloc(sizeof(struct fotg210_ep), GFP_KERNEL);
1109 		if (_ep[i] == NULL)
1110 			goto err_alloc;
1111 		fotg210->ep[i] = _ep[i];
1112 	}
1113 
1114 	fotg210->reg = ioremap(res->start, resource_size(res));
1115 	if (fotg210->reg == NULL) {
1116 		pr_err("ioremap error.\n");
1117 		goto err_alloc;
1118 	}
1119 
1120 	spin_lock_init(&fotg210->lock);
1121 
1122 	platform_set_drvdata(pdev, fotg210);
1123 
1124 	fotg210->gadget.ops = &fotg210_gadget_ops;
1125 
1126 	fotg210->gadget.max_speed = USB_SPEED_HIGH;
1127 	fotg210->gadget.dev.parent = &pdev->dev;
1128 	fotg210->gadget.dev.dma_mask = pdev->dev.dma_mask;
1129 	fotg210->gadget.name = udc_name;
1130 
1131 	INIT_LIST_HEAD(&fotg210->gadget.ep_list);
1132 
1133 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++) {
1134 		struct fotg210_ep *ep = fotg210->ep[i];
1135 
1136 		if (i) {
1137 			INIT_LIST_HEAD(&fotg210->ep[i]->ep.ep_list);
1138 			list_add_tail(&fotg210->ep[i]->ep.ep_list,
1139 				      &fotg210->gadget.ep_list);
1140 		}
1141 		ep->fotg210 = fotg210;
1142 		INIT_LIST_HEAD(&ep->queue);
1143 		ep->ep.name = fotg210_ep_name[i];
1144 		ep->ep.ops = &fotg210_ep_ops;
1145 		usb_ep_set_maxpacket_limit(&ep->ep, (unsigned short) ~0);
1146 
1147 		if (i == 0) {
1148 			ep->ep.caps.type_control = true;
1149 		} else {
1150 			ep->ep.caps.type_iso = true;
1151 			ep->ep.caps.type_bulk = true;
1152 			ep->ep.caps.type_int = true;
1153 		}
1154 
1155 		ep->ep.caps.dir_in = true;
1156 		ep->ep.caps.dir_out = true;
1157 	}
1158 	usb_ep_set_maxpacket_limit(&fotg210->ep[0]->ep, 0x40);
1159 	fotg210->gadget.ep0 = &fotg210->ep[0]->ep;
1160 	INIT_LIST_HEAD(&fotg210->gadget.ep0->ep_list);
1161 
1162 	fotg210->ep0_req = fotg210_ep_alloc_request(&fotg210->ep[0]->ep,
1163 				GFP_KERNEL);
1164 	if (fotg210->ep0_req == NULL)
1165 		goto err_map;
1166 
1167 	fotg210_init(fotg210);
1168 
1169 	fotg210_disable_unplug(fotg210);
1170 
1171 	ret = request_irq(ires->start, fotg210_irq, IRQF_SHARED,
1172 			  udc_name, fotg210);
1173 	if (ret < 0) {
1174 		pr_err("request_irq error (%d)\n", ret);
1175 		goto err_req;
1176 	}
1177 
1178 	ret = usb_add_gadget_udc(&pdev->dev, &fotg210->gadget);
1179 	if (ret)
1180 		goto err_add_udc;
1181 
1182 	dev_info(&pdev->dev, "version %s\n", DRIVER_VERSION);
1183 
1184 	return 0;
1185 
1186 err_add_udc:
1187 	free_irq(ires->start, fotg210);
1188 
1189 err_req:
1190 	fotg210_ep_free_request(&fotg210->ep[0]->ep, fotg210->ep0_req);
1191 
1192 err_map:
1193 	iounmap(fotg210->reg);
1194 
1195 err_alloc:
1196 	for (i = 0; i < FOTG210_MAX_NUM_EP; i++)
1197 		kfree(fotg210->ep[i]);
1198 	kfree(fotg210);
1199 
1200 err:
1201 	return ret;
1202 }
1203 
1204 static struct platform_driver fotg210_driver = {
1205 	.driver		= {
1206 		.name =	(char *)udc_name,
1207 	},
1208 	.probe		= fotg210_udc_probe,
1209 	.remove		= fotg210_udc_remove,
1210 };
1211 
1212 module_platform_driver(fotg210_driver);
1213 
1214 MODULE_AUTHOR("Yuan-Hsin Chen, Feng-Hsin Chiang <john453@faraday-tech.com>");
1215 MODULE_LICENSE("GPL");
1216 MODULE_DESCRIPTION(DRIVER_DESC);
1217