usb: chipidea: cleanup dma_pool if udc_start() fails
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / usb / chipidea / udc.c
CommitLineData
aa69a809 1/*
eb70e5ab 2 * udc.c - ChipIdea UDC driver
aa69a809
DL
3 *
4 * Copyright (C) 2008 Chipidea - MIPS Technologies, Inc. All rights reserved.
5 *
6 * Author: David Lopo
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
36825a2d 13#include <linux/delay.h>
aa69a809
DL
14#include <linux/device.h>
15#include <linux/dmapool.h>
16#include <linux/dma-mapping.h>
ded017ee 17#include <linux/err.h>
aa69a809 18#include <linux/init.h>
62bb84ed
AS
19#include <linux/platform_device.h>
20#include <linux/module.h>
aa69a809 21#include <linux/interrupt.h>
aa69a809
DL
22#include <linux/io.h>
23#include <linux/irq.h>
24#include <linux/kernel.h>
5a0e3ad6 25#include <linux/slab.h>
c036019e 26#include <linux/pm_runtime.h>
aa69a809
DL
27#include <linux/usb/ch9.h>
28#include <linux/usb/gadget.h>
f01ef574 29#include <linux/usb/otg.h>
e443b333 30#include <linux/usb/chipidea.h>
aa69a809 31
e443b333
AS
32#include "ci.h"
33#include "udc.h"
34#include "bits.h"
35#include "debug.h"
954aad8c 36
aa69a809
DL
37/* control endpoint description */
38static const struct usb_endpoint_descriptor
ca9cfea0 39ctrl_endpt_out_desc = {
aa69a809
DL
40 .bLength = USB_DT_ENDPOINT_SIZE,
41 .bDescriptorType = USB_DT_ENDPOINT,
42
ca9cfea0
PK
43 .bEndpointAddress = USB_DIR_OUT,
44 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
45 .wMaxPacketSize = cpu_to_le16(CTRL_PAYLOAD_MAX),
46};
47
48static const struct usb_endpoint_descriptor
49ctrl_endpt_in_desc = {
50 .bLength = USB_DT_ENDPOINT_SIZE,
51 .bDescriptorType = USB_DT_ENDPOINT,
52
53 .bEndpointAddress = USB_DIR_IN,
aa69a809
DL
54 .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
55 .wMaxPacketSize = cpu_to_le16(CTRL_PAYLOAD_MAX),
56};
57
aa69a809
DL
58/**
59 * hw_ep_bit: calculates the bit number
60 * @num: endpoint number
61 * @dir: endpoint direction
62 *
63 * This function returns bit number
64 */
65static inline int hw_ep_bit(int num, int dir)
66{
67 return num + (dir ? 16 : 0);
68}
69
26c696c6 70static inline int ep_to_bit(struct ci13xxx *ci, int n)
dd39c358 71{
26c696c6 72 int fill = 16 - ci->hw_ep_max / 2;
dd39c358 73
26c696c6 74 if (n >= ci->hw_ep_max / 2)
dd39c358
MKB
75 n += fill;
76
77 return n;
78}
79
aa69a809 80/**
c0a48e6c 81 * hw_device_state: enables/disables interrupts (execute without interruption)
aa69a809
DL
82 * @dma: 0 => disable, !0 => enable and set dma engine
83 *
84 * This function returns an error code
85 */
26c696c6 86static int hw_device_state(struct ci13xxx *ci, u32 dma)
aa69a809
DL
87{
88 if (dma) {
26c696c6 89 hw_write(ci, OP_ENDPTLISTADDR, ~0, dma);
aa69a809 90 /* interrupt, error, port change, reset, sleep/suspend */
26c696c6 91 hw_write(ci, OP_USBINTR, ~0,
aa69a809 92 USBi_UI|USBi_UEI|USBi_PCI|USBi_URI|USBi_SLI);
aa69a809 93 } else {
26c696c6 94 hw_write(ci, OP_USBINTR, ~0, 0);
aa69a809
DL
95 }
96 return 0;
97}
98
99/**
100 * hw_ep_flush: flush endpoint fifo (execute without interruption)
101 * @num: endpoint number
102 * @dir: endpoint direction
103 *
104 * This function returns an error code
105 */
26c696c6 106static int hw_ep_flush(struct ci13xxx *ci, int num, int dir)
aa69a809
DL
107{
108 int n = hw_ep_bit(num, dir);
109
110 do {
111 /* flush any pending transfer */
26c696c6
RZ
112 hw_write(ci, OP_ENDPTFLUSH, BIT(n), BIT(n));
113 while (hw_read(ci, OP_ENDPTFLUSH, BIT(n)))
aa69a809 114 cpu_relax();
26c696c6 115 } while (hw_read(ci, OP_ENDPTSTAT, BIT(n)));
aa69a809
DL
116
117 return 0;
118}
119
120/**
121 * hw_ep_disable: disables endpoint (execute without interruption)
122 * @num: endpoint number
123 * @dir: endpoint direction
124 *
125 * This function returns an error code
126 */
26c696c6 127static int hw_ep_disable(struct ci13xxx *ci, int num, int dir)
aa69a809 128{
26c696c6
RZ
129 hw_ep_flush(ci, num, dir);
130 hw_write(ci, OP_ENDPTCTRL + num,
d3595d13 131 dir ? ENDPTCTRL_TXE : ENDPTCTRL_RXE, 0);
aa69a809
DL
132 return 0;
133}
134
135/**
136 * hw_ep_enable: enables endpoint (execute without interruption)
137 * @num: endpoint number
138 * @dir: endpoint direction
139 * @type: endpoint type
140 *
141 * This function returns an error code
142 */
26c696c6 143static int hw_ep_enable(struct ci13xxx *ci, int num, int dir, int type)
aa69a809
DL
144{
145 u32 mask, data;
146
147 if (dir) {
148 mask = ENDPTCTRL_TXT; /* type */
149 data = type << ffs_nr(mask);
150
151 mask |= ENDPTCTRL_TXS; /* unstall */
152 mask |= ENDPTCTRL_TXR; /* reset data toggle */
153 data |= ENDPTCTRL_TXR;
154 mask |= ENDPTCTRL_TXE; /* enable */
155 data |= ENDPTCTRL_TXE;
156 } else {
157 mask = ENDPTCTRL_RXT; /* type */
158 data = type << ffs_nr(mask);
159
160 mask |= ENDPTCTRL_RXS; /* unstall */
161 mask |= ENDPTCTRL_RXR; /* reset data toggle */
162 data |= ENDPTCTRL_RXR;
163 mask |= ENDPTCTRL_RXE; /* enable */
164 data |= ENDPTCTRL_RXE;
165 }
26c696c6 166 hw_write(ci, OP_ENDPTCTRL + num, mask, data);
aa69a809
DL
167 return 0;
168}
169
170/**
171 * hw_ep_get_halt: return endpoint halt status
172 * @num: endpoint number
173 * @dir: endpoint direction
174 *
175 * This function returns 1 if endpoint halted
176 */
26c696c6 177static int hw_ep_get_halt(struct ci13xxx *ci, int num, int dir)
aa69a809
DL
178{
179 u32 mask = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
180
26c696c6 181 return hw_read(ci, OP_ENDPTCTRL + num, mask) ? 1 : 0;
aa69a809
DL
182}
183
aa69a809
DL
184/**
185 * hw_test_and_clear_setup_status: test & clear setup status (execute without
186 * interruption)
dd39c358 187 * @n: endpoint number
aa69a809
DL
188 *
189 * This function returns setup status
190 */
26c696c6 191static int hw_test_and_clear_setup_status(struct ci13xxx *ci, int n)
aa69a809 192{
26c696c6
RZ
193 n = ep_to_bit(ci, n);
194 return hw_test_and_clear(ci, OP_ENDPTSETUPSTAT, BIT(n));
aa69a809
DL
195}
196
197/**
198 * hw_ep_prime: primes endpoint (execute without interruption)
199 * @num: endpoint number
200 * @dir: endpoint direction
201 * @is_ctrl: true if control endpoint
202 *
203 * This function returns an error code
204 */
26c696c6 205static int hw_ep_prime(struct ci13xxx *ci, int num, int dir, int is_ctrl)
aa69a809
DL
206{
207 int n = hw_ep_bit(num, dir);
208
26c696c6 209 if (is_ctrl && dir == RX && hw_read(ci, OP_ENDPTSETUPSTAT, BIT(num)))
aa69a809
DL
210 return -EAGAIN;
211
26c696c6 212 hw_write(ci, OP_ENDPTPRIME, BIT(n), BIT(n));
aa69a809 213
26c696c6 214 while (hw_read(ci, OP_ENDPTPRIME, BIT(n)))
aa69a809 215 cpu_relax();
26c696c6 216 if (is_ctrl && dir == RX && hw_read(ci, OP_ENDPTSETUPSTAT, BIT(num)))
aa69a809
DL
217 return -EAGAIN;
218
219 /* status shoult be tested according with manual but it doesn't work */
220 return 0;
221}
222
223/**
224 * hw_ep_set_halt: configures ep halt & resets data toggle after clear (execute
225 * without interruption)
226 * @num: endpoint number
227 * @dir: endpoint direction
228 * @value: true => stall, false => unstall
229 *
230 * This function returns an error code
231 */
26c696c6 232static int hw_ep_set_halt(struct ci13xxx *ci, int num, int dir, int value)
aa69a809
DL
233{
234 if (value != 0 && value != 1)
235 return -EINVAL;
236
237 do {
262c1632 238 enum ci13xxx_regs reg = OP_ENDPTCTRL + num;
aa69a809
DL
239 u32 mask_xs = dir ? ENDPTCTRL_TXS : ENDPTCTRL_RXS;
240 u32 mask_xr = dir ? ENDPTCTRL_TXR : ENDPTCTRL_RXR;
241
242 /* data toggle - reserved for EP0 but it's in ESS */
26c696c6 243 hw_write(ci, reg, mask_xs|mask_xr,
262c1632 244 value ? mask_xs : mask_xr);
26c696c6 245 } while (value != hw_ep_get_halt(ci, num, dir));
aa69a809
DL
246
247 return 0;
248}
249
aa69a809
DL
250/**
251 * hw_is_port_high_speed: test if port is high speed
252 *
253 * This function returns true if high speed port
254 */
26c696c6 255static int hw_port_is_high_speed(struct ci13xxx *ci)
aa69a809 256{
26c696c6
RZ
257 return ci->hw_bank.lpm ? hw_read(ci, OP_DEVLC, DEVLC_PSPD) :
258 hw_read(ci, OP_PORTSC, PORTSC_HSP);
aa69a809
DL
259}
260
aa69a809
DL
261/**
262 * hw_read_intr_enable: returns interrupt enable register
263 *
264 * This function returns register data
265 */
26c696c6 266static u32 hw_read_intr_enable(struct ci13xxx *ci)
aa69a809 267{
26c696c6 268 return hw_read(ci, OP_USBINTR, ~0);
aa69a809
DL
269}
270
271/**
272 * hw_read_intr_status: returns interrupt status register
273 *
274 * This function returns register data
275 */
26c696c6 276static u32 hw_read_intr_status(struct ci13xxx *ci)
aa69a809 277{
26c696c6 278 return hw_read(ci, OP_USBSTS, ~0);
aa69a809
DL
279}
280
aa69a809
DL
281/**
282 * hw_test_and_clear_complete: test & clear complete status (execute without
283 * interruption)
dd39c358 284 * @n: endpoint number
aa69a809
DL
285 *
286 * This function returns complete status
287 */
26c696c6 288static int hw_test_and_clear_complete(struct ci13xxx *ci, int n)
aa69a809 289{
26c696c6
RZ
290 n = ep_to_bit(ci, n);
291 return hw_test_and_clear(ci, OP_ENDPTCOMPLETE, BIT(n));
aa69a809
DL
292}
293
294/**
295 * hw_test_and_clear_intr_active: test & clear active interrupts (execute
296 * without interruption)
297 *
298 * This function returns active interrutps
299 */
26c696c6 300static u32 hw_test_and_clear_intr_active(struct ci13xxx *ci)
aa69a809 301{
26c696c6 302 u32 reg = hw_read_intr_status(ci) & hw_read_intr_enable(ci);
aa69a809 303
26c696c6 304 hw_write(ci, OP_USBSTS, ~0, reg);
aa69a809
DL
305 return reg;
306}
307
308/**
309 * hw_test_and_clear_setup_guard: test & clear setup guard (execute without
310 * interruption)
311 *
312 * This function returns guard value
313 */
26c696c6 314static int hw_test_and_clear_setup_guard(struct ci13xxx *ci)
aa69a809 315{
26c696c6 316 return hw_test_and_write(ci, OP_USBCMD, USBCMD_SUTW, 0);
aa69a809
DL
317}
318
319/**
320 * hw_test_and_set_setup_guard: test & set setup guard (execute without
321 * interruption)
322 *
323 * This function returns guard value
324 */
26c696c6 325static int hw_test_and_set_setup_guard(struct ci13xxx *ci)
aa69a809 326{
26c696c6 327 return hw_test_and_write(ci, OP_USBCMD, USBCMD_SUTW, USBCMD_SUTW);
aa69a809
DL
328}
329
330/**
331 * hw_usb_set_address: configures USB address (execute without interruption)
332 * @value: new USB address
333 *
ef15e549
AS
334 * This function explicitly sets the address, without the "USBADRA" (advance)
335 * feature, which is not supported by older versions of the controller.
aa69a809 336 */
26c696c6 337static void hw_usb_set_address(struct ci13xxx *ci, u8 value)
aa69a809 338{
26c696c6 339 hw_write(ci, OP_DEVICEADDR, DEVICEADDR_USBADR,
ef15e549 340 value << ffs_nr(DEVICEADDR_USBADR));
aa69a809
DL
341}
342
343/**
344 * hw_usb_reset: restart device after a bus reset (execute without
345 * interruption)
346 *
347 * This function returns an error code
348 */
26c696c6 349static int hw_usb_reset(struct ci13xxx *ci)
aa69a809 350{
26c696c6 351 hw_usb_set_address(ci, 0);
aa69a809
DL
352
353 /* ESS flushes only at end?!? */
26c696c6 354 hw_write(ci, OP_ENDPTFLUSH, ~0, ~0);
aa69a809
DL
355
356 /* clear setup token semaphores */
26c696c6 357 hw_write(ci, OP_ENDPTSETUPSTAT, 0, 0);
aa69a809
DL
358
359 /* clear complete status */
26c696c6 360 hw_write(ci, OP_ENDPTCOMPLETE, 0, 0);
aa69a809
DL
361
362 /* wait until all bits cleared */
26c696c6 363 while (hw_read(ci, OP_ENDPTPRIME, ~0))
aa69a809
DL
364 udelay(10); /* not RTOS friendly */
365
366 /* reset all endpoints ? */
367
368 /* reset internal status and wait for further instructions
369 no need to verify the port reset status (ESS does it) */
370
371 return 0;
372}
373
aa69a809
DL
374/******************************************************************************
375 * UTIL block
376 *****************************************************************************/
377/**
378 * _usb_addr: calculates endpoint address from direction & number
379 * @ep: endpoint
380 */
381static inline u8 _usb_addr(struct ci13xxx_ep *ep)
382{
383 return ((ep->dir == TX) ? USB_ENDPOINT_DIR_MASK : 0) | ep->num;
384}
385
386/**
387 * _hardware_queue: configures a request at hardware level
388 * @gadget: gadget
389 * @mEp: endpoint
390 *
391 * This function returns an error code
392 */
393static int _hardware_enqueue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
394{
26c696c6 395 struct ci13xxx *ci = mEp->ci;
aa69a809 396 unsigned i;
0e6ca199
PK
397 int ret = 0;
398 unsigned length = mReq->req.length;
aa69a809 399
aa69a809
DL
400 /* don't queue twice */
401 if (mReq->req.status == -EALREADY)
402 return -EALREADY;
403
aa69a809 404 mReq->req.status = -EALREADY;
aa69a809 405
0e6ca199
PK
406 if (mReq->req.zero && length && (length % mEp->ep.maxpacket == 0)) {
407 mReq->zptr = dma_pool_alloc(mEp->td_pool, GFP_ATOMIC,
408 &mReq->zdma);
5e0aa49e 409 if (mReq->zptr == NULL)
0e6ca199 410 return -ENOMEM;
5e0aa49e 411
0e6ca199
PK
412 memset(mReq->zptr, 0, sizeof(*mReq->zptr));
413 mReq->zptr->next = TD_TERMINATE;
414 mReq->zptr->token = TD_STATUS_ACTIVE;
415 if (!mReq->req.no_interrupt)
416 mReq->zptr->token |= TD_IOC;
417 }
26c696c6 418 ret = usb_gadget_map_request(&ci->gadget, &mReq->req, mEp->dir);
5e0aa49e
AS
419 if (ret)
420 return ret;
421
aa69a809
DL
422 /*
423 * TD configuration
424 * TODO - handle requests which spawns into several TDs
425 */
426 memset(mReq->ptr, 0, sizeof(*mReq->ptr));
0e6ca199 427 mReq->ptr->token = length << ffs_nr(TD_TOTAL_BYTES);
aa69a809 428 mReq->ptr->token &= TD_TOTAL_BYTES;
aa69a809 429 mReq->ptr->token |= TD_STATUS_ACTIVE;
0e6ca199
PK
430 if (mReq->zptr) {
431 mReq->ptr->next = mReq->zdma;
432 } else {
433 mReq->ptr->next = TD_TERMINATE;
434 if (!mReq->req.no_interrupt)
435 mReq->ptr->token |= TD_IOC;
436 }
aa69a809
DL
437 mReq->ptr->page[0] = mReq->req.dma;
438 for (i = 1; i < 5; i++)
439 mReq->ptr->page[i] =
0a313c4d 440 (mReq->req.dma + i * CI13XXX_PAGE_SIZE) & ~TD_RESERVED_MASK;
aa69a809 441
0e6ca199
PK
442 if (!list_empty(&mEp->qh.queue)) {
443 struct ci13xxx_req *mReqPrev;
444 int n = hw_ep_bit(mEp->num, mEp->dir);
445 int tmp_stat;
446
447 mReqPrev = list_entry(mEp->qh.queue.prev,
448 struct ci13xxx_req, queue);
449 if (mReqPrev->zptr)
450 mReqPrev->zptr->next = mReq->dma & TD_ADDR_MASK;
451 else
452 mReqPrev->ptr->next = mReq->dma & TD_ADDR_MASK;
453 wmb();
26c696c6 454 if (hw_read(ci, OP_ENDPTPRIME, BIT(n)))
0e6ca199
PK
455 goto done;
456 do {
26c696c6
RZ
457 hw_write(ci, OP_USBCMD, USBCMD_ATDTW, USBCMD_ATDTW);
458 tmp_stat = hw_read(ci, OP_ENDPTSTAT, BIT(n));
459 } while (!hw_read(ci, OP_USBCMD, USBCMD_ATDTW));
460 hw_write(ci, OP_USBCMD, USBCMD_ATDTW, 0);
0e6ca199
PK
461 if (tmp_stat)
462 goto done;
463 }
464
465 /* QH configuration */
ca9cfea0
PK
466 mEp->qh.ptr->td.next = mReq->dma; /* TERMINATE = 0 */
467 mEp->qh.ptr->td.token &= ~TD_STATUS; /* clear status */
0e6ca199 468 mEp->qh.ptr->cap |= QH_ZLT;
aa69a809
DL
469
470 wmb(); /* synchronize before ep prime */
471
26c696c6 472 ret = hw_ep_prime(ci, mEp->num, mEp->dir,
aa69a809 473 mEp->type == USB_ENDPOINT_XFER_CONTROL);
0e6ca199
PK
474done:
475 return ret;
aa69a809
DL
476}
477
478/**
479 * _hardware_dequeue: handles a request at hardware level
480 * @gadget: gadget
481 * @mEp: endpoint
482 *
483 * This function returns an error code
484 */
485static int _hardware_dequeue(struct ci13xxx_ep *mEp, struct ci13xxx_req *mReq)
486{
aa69a809
DL
487 if (mReq->req.status != -EALREADY)
488 return -EINVAL;
489
0e6ca199
PK
490 if ((TD_STATUS_ACTIVE & mReq->ptr->token) != 0)
491 return -EBUSY;
492
493 if (mReq->zptr) {
494 if ((TD_STATUS_ACTIVE & mReq->zptr->token) != 0)
495 return -EBUSY;
496 dma_pool_free(mEp->td_pool, mReq->zptr, mReq->zdma);
497 mReq->zptr = NULL;
498 }
aa69a809
DL
499
500 mReq->req.status = 0;
501
26c696c6 502 usb_gadget_unmap_request(&mEp->ci->gadget, &mReq->req, mEp->dir);
aa69a809
DL
503
504 mReq->req.status = mReq->ptr->token & TD_STATUS;
0e6ca199 505 if ((TD_STATUS_HALTED & mReq->req.status) != 0)
aa69a809
DL
506 mReq->req.status = -1;
507 else if ((TD_STATUS_DT_ERR & mReq->req.status) != 0)
508 mReq->req.status = -1;
509 else if ((TD_STATUS_TR_ERR & mReq->req.status) != 0)
510 mReq->req.status = -1;
511
512 mReq->req.actual = mReq->ptr->token & TD_TOTAL_BYTES;
513 mReq->req.actual >>= ffs_nr(TD_TOTAL_BYTES);
514 mReq->req.actual = mReq->req.length - mReq->req.actual;
515 mReq->req.actual = mReq->req.status ? 0 : mReq->req.actual;
516
517 return mReq->req.actual;
518}
519
520/**
521 * _ep_nuke: dequeues all endpoint requests
522 * @mEp: endpoint
523 *
524 * This function returns an error code
525 * Caller must hold lock
526 */
527static int _ep_nuke(struct ci13xxx_ep *mEp)
528__releases(mEp->lock)
529__acquires(mEp->lock)
530{
aa69a809
DL
531 if (mEp == NULL)
532 return -EINVAL;
533
26c696c6 534 hw_ep_flush(mEp->ci, mEp->num, mEp->dir);
aa69a809 535
ca9cfea0 536 while (!list_empty(&mEp->qh.queue)) {
aa69a809
DL
537
538 /* pop oldest request */
539 struct ci13xxx_req *mReq = \
ca9cfea0 540 list_entry(mEp->qh.queue.next,
aa69a809
DL
541 struct ci13xxx_req, queue);
542 list_del_init(&mReq->queue);
543 mReq->req.status = -ESHUTDOWN;
544
7c25a826 545 if (mReq->req.complete != NULL) {
aa69a809
DL
546 spin_unlock(mEp->lock);
547 mReq->req.complete(&mEp->ep, &mReq->req);
548 spin_lock(mEp->lock);
549 }
550 }
551 return 0;
552}
553
554/**
555 * _gadget_stop_activity: stops all USB activity, flushes & disables all endpts
556 * @gadget: gadget
557 *
558 * This function returns an error code
aa69a809
DL
559 */
560static int _gadget_stop_activity(struct usb_gadget *gadget)
aa69a809
DL
561{
562 struct usb_ep *ep;
26c696c6 563 struct ci13xxx *ci = container_of(gadget, struct ci13xxx, gadget);
e2b61c1d 564 unsigned long flags;
aa69a809 565
26c696c6
RZ
566 spin_lock_irqsave(&ci->lock, flags);
567 ci->gadget.speed = USB_SPEED_UNKNOWN;
568 ci->remote_wakeup = 0;
569 ci->suspended = 0;
570 spin_unlock_irqrestore(&ci->lock, flags);
e2b61c1d 571
aa69a809
DL
572 /* flush all endpoints */
573 gadget_for_each_ep(ep, gadget) {
574 usb_ep_fifo_flush(ep);
575 }
26c696c6
RZ
576 usb_ep_fifo_flush(&ci->ep0out->ep);
577 usb_ep_fifo_flush(&ci->ep0in->ep);
aa69a809 578
26c696c6
RZ
579 if (ci->driver)
580 ci->driver->disconnect(gadget);
aa69a809
DL
581
582 /* make sure to disable all endpoints */
583 gadget_for_each_ep(ep, gadget) {
584 usb_ep_disable(ep);
585 }
aa69a809 586
26c696c6
RZ
587 if (ci->status != NULL) {
588 usb_ep_free_request(&ci->ep0in->ep, ci->status);
589 ci->status = NULL;
aa69a809
DL
590 }
591
aa69a809
DL
592 return 0;
593}
594
595/******************************************************************************
596 * ISR block
597 *****************************************************************************/
598/**
599 * isr_reset_handler: USB reset interrupt handler
26c696c6 600 * @ci: UDC device
aa69a809
DL
601 *
602 * This function resets USB engine after a bus reset occurred
603 */
26c696c6
RZ
604static void isr_reset_handler(struct ci13xxx *ci)
605__releases(ci->lock)
606__acquires(ci->lock)
aa69a809 607{
aa69a809
DL
608 int retval;
609
aa69a809
DL
610 dbg_event(0xFF, "BUS RST", 0);
611
26c696c6
RZ
612 spin_unlock(&ci->lock);
613 retval = _gadget_stop_activity(&ci->gadget);
aa69a809
DL
614 if (retval)
615 goto done;
616
26c696c6 617 retval = hw_usb_reset(ci);
aa69a809
DL
618 if (retval)
619 goto done;
620
26c696c6
RZ
621 ci->status = usb_ep_alloc_request(&ci->ep0in->ep, GFP_ATOMIC);
622 if (ci->status == NULL)
ac1aa6a2 623 retval = -ENOMEM;
ca9cfea0 624
b9322252 625done:
26c696c6 626 spin_lock(&ci->lock);
aa69a809 627
aa69a809 628 if (retval)
26c696c6 629 dev_err(ci->dev, "error: %i\n", retval);
aa69a809
DL
630}
631
632/**
633 * isr_get_status_complete: get_status request complete function
634 * @ep: endpoint
635 * @req: request handled
636 *
637 * Caller must release lock
638 */
639static void isr_get_status_complete(struct usb_ep *ep, struct usb_request *req)
640{
0f089094 641 if (ep == NULL || req == NULL)
aa69a809 642 return;
aa69a809
DL
643
644 kfree(req->buf);
645 usb_ep_free_request(ep, req);
646}
647
648/**
649 * isr_get_status_response: get_status request response
26c696c6 650 * @ci: ci struct
aa69a809
DL
651 * @setup: setup request packet
652 *
653 * This function returns an error code
654 */
26c696c6 655static int isr_get_status_response(struct ci13xxx *ci,
aa69a809
DL
656 struct usb_ctrlrequest *setup)
657__releases(mEp->lock)
658__acquires(mEp->lock)
659{
26c696c6 660 struct ci13xxx_ep *mEp = ci->ep0in;
aa69a809
DL
661 struct usb_request *req = NULL;
662 gfp_t gfp_flags = GFP_ATOMIC;
663 int dir, num, retval;
664
aa69a809
DL
665 if (mEp == NULL || setup == NULL)
666 return -EINVAL;
667
668 spin_unlock(mEp->lock);
669 req = usb_ep_alloc_request(&mEp->ep, gfp_flags);
670 spin_lock(mEp->lock);
671 if (req == NULL)
672 return -ENOMEM;
673
674 req->complete = isr_get_status_complete;
675 req->length = 2;
676 req->buf = kzalloc(req->length, gfp_flags);
677 if (req->buf == NULL) {
678 retval = -ENOMEM;
679 goto err_free_req;
680 }
681
682 if ((setup->bRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE) {
e2b61c1d 683 /* Assume that device is bus powered for now. */
26c696c6 684 *(u16 *)req->buf = ci->remote_wakeup << 1;
aa69a809
DL
685 retval = 0;
686 } else if ((setup->bRequestType & USB_RECIP_MASK) \
687 == USB_RECIP_ENDPOINT) {
688 dir = (le16_to_cpu(setup->wIndex) & USB_ENDPOINT_DIR_MASK) ?
689 TX : RX;
690 num = le16_to_cpu(setup->wIndex) & USB_ENDPOINT_NUMBER_MASK;
26c696c6 691 *(u16 *)req->buf = hw_ep_get_halt(ci, num, dir);
aa69a809
DL
692 }
693 /* else do nothing; reserved for future use */
694
695 spin_unlock(mEp->lock);
696 retval = usb_ep_queue(&mEp->ep, req, gfp_flags);
697 spin_lock(mEp->lock);
698 if (retval)
699 goto err_free_buf;
700
701 return 0;
702
703 err_free_buf:
704 kfree(req->buf);
705 err_free_req:
706 spin_unlock(mEp->lock);
707 usb_ep_free_request(&mEp->ep, req);
708 spin_lock(mEp->lock);
709 return retval;
710}
711
541cace8
PK
712/**
713 * isr_setup_status_complete: setup_status request complete function
714 * @ep: endpoint
715 * @req: request handled
716 *
717 * Caller must release lock. Put the port in test mode if test mode
718 * feature is selected.
719 */
720static void
721isr_setup_status_complete(struct usb_ep *ep, struct usb_request *req)
722{
26c696c6 723 struct ci13xxx *ci = req->context;
541cace8
PK
724 unsigned long flags;
725
26c696c6
RZ
726 if (ci->setaddr) {
727 hw_usb_set_address(ci, ci->address);
728 ci->setaddr = false;
ef15e549
AS
729 }
730
26c696c6
RZ
731 spin_lock_irqsave(&ci->lock, flags);
732 if (ci->test_mode)
733 hw_port_test_set(ci, ci->test_mode);
734 spin_unlock_irqrestore(&ci->lock, flags);
541cace8
PK
735}
736
aa69a809
DL
737/**
738 * isr_setup_status_phase: queues the status phase of a setup transation
26c696c6 739 * @ci: ci struct
aa69a809
DL
740 *
741 * This function returns an error code
742 */
26c696c6 743static int isr_setup_status_phase(struct ci13xxx *ci)
aa69a809
DL
744__releases(mEp->lock)
745__acquires(mEp->lock)
746{
747 int retval;
ca9cfea0 748 struct ci13xxx_ep *mEp;
aa69a809 749
26c696c6
RZ
750 mEp = (ci->ep0_dir == TX) ? ci->ep0out : ci->ep0in;
751 ci->status->context = ci;
752 ci->status->complete = isr_setup_status_complete;
aa69a809
DL
753
754 spin_unlock(mEp->lock);
26c696c6 755 retval = usb_ep_queue(&mEp->ep, ci->status, GFP_ATOMIC);
aa69a809
DL
756 spin_lock(mEp->lock);
757
758 return retval;
759}
760
761/**
762 * isr_tr_complete_low: transaction complete low level handler
763 * @mEp: endpoint
764 *
765 * This function returns an error code
766 * Caller must hold lock
767 */
768static int isr_tr_complete_low(struct ci13xxx_ep *mEp)
769__releases(mEp->lock)
770__acquires(mEp->lock)
771{
0e6ca199 772 struct ci13xxx_req *mReq, *mReqTemp;
76cd9cfb 773 struct ci13xxx_ep *mEpTemp = mEp;
986b11b8 774 int uninitialized_var(retval);
aa69a809 775
ca9cfea0 776 if (list_empty(&mEp->qh.queue))
aa69a809
DL
777 return -EINVAL;
778
0e6ca199
PK
779 list_for_each_entry_safe(mReq, mReqTemp, &mEp->qh.queue,
780 queue) {
781 retval = _hardware_dequeue(mEp, mReq);
782 if (retval < 0)
783 break;
784 list_del_init(&mReq->queue);
785 dbg_done(_usb_addr(mEp), mReq->ptr->token, retval);
786 if (mReq->req.complete != NULL) {
787 spin_unlock(mEp->lock);
76cd9cfb
PK
788 if ((mEp->type == USB_ENDPOINT_XFER_CONTROL) &&
789 mReq->req.length)
26c696c6 790 mEpTemp = mEp->ci->ep0in;
76cd9cfb 791 mReq->req.complete(&mEpTemp->ep, &mReq->req);
0e6ca199
PK
792 spin_lock(mEp->lock);
793 }
d9bb9c18
AL
794 }
795
ef907482 796 if (retval == -EBUSY)
0e6ca199
PK
797 retval = 0;
798 if (retval < 0)
799 dbg_event(_usb_addr(mEp), "DONE", retval);
aa69a809 800
aa69a809
DL
801 return retval;
802}
803
804/**
805 * isr_tr_complete_handler: transaction complete interrupt handler
26c696c6 806 * @ci: UDC descriptor
aa69a809
DL
807 *
808 * This function handles traffic events
809 */
26c696c6
RZ
810static void isr_tr_complete_handler(struct ci13xxx *ci)
811__releases(ci->lock)
812__acquires(ci->lock)
aa69a809
DL
813{
814 unsigned i;
541cace8 815 u8 tmode = 0;
aa69a809 816
26c696c6
RZ
817 for (i = 0; i < ci->hw_ep_max; i++) {
818 struct ci13xxx_ep *mEp = &ci->ci13xxx_ep[i];
4c5212b7 819 int type, num, dir, err = -EINVAL;
aa69a809
DL
820 struct usb_ctrlrequest req;
821
31fb6014 822 if (mEp->ep.desc == NULL)
aa69a809
DL
823 continue; /* not configured */
824
26c696c6 825 if (hw_test_and_clear_complete(ci, i)) {
aa69a809
DL
826 err = isr_tr_complete_low(mEp);
827 if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
828 if (err > 0) /* needs status phase */
26c696c6 829 err = isr_setup_status_phase(ci);
aa69a809
DL
830 if (err < 0) {
831 dbg_event(_usb_addr(mEp),
832 "ERROR", err);
26c696c6 833 spin_unlock(&ci->lock);
aa69a809 834 if (usb_ep_set_halt(&mEp->ep))
26c696c6 835 dev_err(ci->dev,
0917ba84 836 "error: ep_set_halt\n");
26c696c6 837 spin_lock(&ci->lock);
aa69a809
DL
838 }
839 }
840 }
841
842 if (mEp->type != USB_ENDPOINT_XFER_CONTROL ||
26c696c6 843 !hw_test_and_clear_setup_status(ci, i))
aa69a809
DL
844 continue;
845
846 if (i != 0) {
26c696c6 847 dev_warn(ci->dev, "ctrl traffic at endpoint %d\n", i);
aa69a809
DL
848 continue;
849 }
850
ca9cfea0
PK
851 /*
852 * Flush data and handshake transactions of previous
853 * setup packet.
854 */
26c696c6
RZ
855 _ep_nuke(ci->ep0out);
856 _ep_nuke(ci->ep0in);
ca9cfea0 857
aa69a809
DL
858 /* read_setup_packet */
859 do {
26c696c6 860 hw_test_and_set_setup_guard(ci);
ca9cfea0 861 memcpy(&req, &mEp->qh.ptr->setup, sizeof(req));
26c696c6 862 } while (!hw_test_and_clear_setup_guard(ci));
aa69a809
DL
863
864 type = req.bRequestType;
865
26c696c6 866 ci->ep0_dir = (type & USB_DIR_IN) ? TX : RX;
aa69a809
DL
867
868 dbg_setup(_usb_addr(mEp), &req);
869
870 switch (req.bRequest) {
871 case USB_REQ_CLEAR_FEATURE:
e2b61c1d
PK
872 if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
873 le16_to_cpu(req.wValue) ==
874 USB_ENDPOINT_HALT) {
875 if (req.wLength != 0)
876 break;
877 num = le16_to_cpu(req.wIndex);
4c5212b7 878 dir = num & USB_ENDPOINT_DIR_MASK;
e2b61c1d 879 num &= USB_ENDPOINT_NUMBER_MASK;
4c5212b7 880 if (dir) /* TX */
26c696c6
RZ
881 num += ci->hw_ep_max/2;
882 if (!ci->ci13xxx_ep[num].wedge) {
883 spin_unlock(&ci->lock);
e2b61c1d 884 err = usb_ep_clear_halt(
26c696c6
RZ
885 &ci->ci13xxx_ep[num].ep);
886 spin_lock(&ci->lock);
e2b61c1d
PK
887 if (err)
888 break;
889 }
26c696c6 890 err = isr_setup_status_phase(ci);
e2b61c1d
PK
891 } else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE) &&
892 le16_to_cpu(req.wValue) ==
893 USB_DEVICE_REMOTE_WAKEUP) {
894 if (req.wLength != 0)
aa69a809 895 break;
26c696c6
RZ
896 ci->remote_wakeup = 0;
897 err = isr_setup_status_phase(ci);
e2b61c1d
PK
898 } else {
899 goto delegate;
aa69a809 900 }
aa69a809
DL
901 break;
902 case USB_REQ_GET_STATUS:
903 if (type != (USB_DIR_IN|USB_RECIP_DEVICE) &&
904 type != (USB_DIR_IN|USB_RECIP_ENDPOINT) &&
905 type != (USB_DIR_IN|USB_RECIP_INTERFACE))
906 goto delegate;
907 if (le16_to_cpu(req.wLength) != 2 ||
908 le16_to_cpu(req.wValue) != 0)
909 break;
26c696c6 910 err = isr_get_status_response(ci, &req);
aa69a809
DL
911 break;
912 case USB_REQ_SET_ADDRESS:
913 if (type != (USB_DIR_OUT|USB_RECIP_DEVICE))
914 goto delegate;
915 if (le16_to_cpu(req.wLength) != 0 ||
916 le16_to_cpu(req.wIndex) != 0)
917 break;
26c696c6
RZ
918 ci->address = (u8)le16_to_cpu(req.wValue);
919 ci->setaddr = true;
920 err = isr_setup_status_phase(ci);
aa69a809
DL
921 break;
922 case USB_REQ_SET_FEATURE:
e2b61c1d
PK
923 if (type == (USB_DIR_OUT|USB_RECIP_ENDPOINT) &&
924 le16_to_cpu(req.wValue) ==
925 USB_ENDPOINT_HALT) {
926 if (req.wLength != 0)
927 break;
928 num = le16_to_cpu(req.wIndex);
4c5212b7 929 dir = num & USB_ENDPOINT_DIR_MASK;
e2b61c1d 930 num &= USB_ENDPOINT_NUMBER_MASK;
4c5212b7 931 if (dir) /* TX */
26c696c6 932 num += ci->hw_ep_max/2;
aa69a809 933
26c696c6
RZ
934 spin_unlock(&ci->lock);
935 err = usb_ep_set_halt(&ci->ci13xxx_ep[num].ep);
936 spin_lock(&ci->lock);
e2b61c1d 937 if (!err)
26c696c6 938 isr_setup_status_phase(ci);
541cace8 939 } else if (type == (USB_DIR_OUT|USB_RECIP_DEVICE)) {
e2b61c1d
PK
940 if (req.wLength != 0)
941 break;
541cace8
PK
942 switch (le16_to_cpu(req.wValue)) {
943 case USB_DEVICE_REMOTE_WAKEUP:
26c696c6
RZ
944 ci->remote_wakeup = 1;
945 err = isr_setup_status_phase(ci);
541cace8
PK
946 break;
947 case USB_DEVICE_TEST_MODE:
948 tmode = le16_to_cpu(req.wIndex) >> 8;
949 switch (tmode) {
950 case TEST_J:
951 case TEST_K:
952 case TEST_SE0_NAK:
953 case TEST_PACKET:
954 case TEST_FORCE_EN:
26c696c6 955 ci->test_mode = tmode;
541cace8 956 err = isr_setup_status_phase(
26c696c6 957 ci);
541cace8
PK
958 break;
959 default:
960 break;
961 }
962 default:
963 goto delegate;
964 }
e2b61c1d
PK
965 } else {
966 goto delegate;
967 }
aa69a809
DL
968 break;
969 default:
970delegate:
971 if (req.wLength == 0) /* no data phase */
26c696c6 972 ci->ep0_dir = TX;
aa69a809 973
26c696c6
RZ
974 spin_unlock(&ci->lock);
975 err = ci->driver->setup(&ci->gadget, &req);
976 spin_lock(&ci->lock);
aa69a809
DL
977 break;
978 }
979
980 if (err < 0) {
981 dbg_event(_usb_addr(mEp), "ERROR", err);
982
26c696c6 983 spin_unlock(&ci->lock);
aa69a809 984 if (usb_ep_set_halt(&mEp->ep))
26c696c6
RZ
985 dev_err(ci->dev, "error: ep_set_halt\n");
986 spin_lock(&ci->lock);
aa69a809
DL
987 }
988 }
989}
990
991/******************************************************************************
992 * ENDPT block
993 *****************************************************************************/
994/**
995 * ep_enable: configure endpoint, making it usable
996 *
997 * Check usb_ep_enable() at "usb_gadget.h" for details
998 */
999static int ep_enable(struct usb_ep *ep,
1000 const struct usb_endpoint_descriptor *desc)
1001{
1002 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
ca9cfea0 1003 int retval = 0;
aa69a809
DL
1004 unsigned long flags;
1005
aa69a809
DL
1006 if (ep == NULL || desc == NULL)
1007 return -EINVAL;
1008
1009 spin_lock_irqsave(mEp->lock, flags);
1010
1011 /* only internal SW should enable ctrl endpts */
1012
31fb6014 1013 mEp->ep.desc = desc;
aa69a809 1014
ca9cfea0 1015 if (!list_empty(&mEp->qh.queue))
26c696c6 1016 dev_warn(mEp->ci->dev, "enabling a non-empty endpoint!\n");
aa69a809 1017
15739bb5
MK
1018 mEp->dir = usb_endpoint_dir_in(desc) ? TX : RX;
1019 mEp->num = usb_endpoint_num(desc);
1020 mEp->type = usb_endpoint_type(desc);
aa69a809 1021
29cc8897 1022 mEp->ep.maxpacket = usb_endpoint_maxp(desc);
aa69a809 1023
ca9cfea0 1024 dbg_event(_usb_addr(mEp), "ENABLE", 0);
aa69a809 1025
ca9cfea0 1026 mEp->qh.ptr->cap = 0;
aa69a809 1027
ca9cfea0
PK
1028 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1029 mEp->qh.ptr->cap |= QH_IOS;
1030 else if (mEp->type == USB_ENDPOINT_XFER_ISOC)
1031 mEp->qh.ptr->cap &= ~QH_MULT;
1032 else
1033 mEp->qh.ptr->cap &= ~QH_ZLT;
aa69a809 1034
ca9cfea0
PK
1035 mEp->qh.ptr->cap |=
1036 (mEp->ep.maxpacket << ffs_nr(QH_MAX_PKT)) & QH_MAX_PKT;
1037 mEp->qh.ptr->td.next |= TD_TERMINATE; /* needed? */
aa69a809 1038
ac1aa6a2
A
1039 /*
1040 * Enable endpoints in the HW other than ep0 as ep0
1041 * is always enabled
1042 */
1043 if (mEp->num)
26c696c6 1044 retval |= hw_ep_enable(mEp->ci, mEp->num, mEp->dir, mEp->type);
aa69a809
DL
1045
1046 spin_unlock_irqrestore(mEp->lock, flags);
1047 return retval;
1048}
1049
1050/**
1051 * ep_disable: endpoint is no longer usable
1052 *
1053 * Check usb_ep_disable() at "usb_gadget.h" for details
1054 */
1055static int ep_disable(struct usb_ep *ep)
1056{
1057 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1058 int direction, retval = 0;
1059 unsigned long flags;
1060
aa69a809
DL
1061 if (ep == NULL)
1062 return -EINVAL;
31fb6014 1063 else if (mEp->ep.desc == NULL)
aa69a809
DL
1064 return -EBUSY;
1065
1066 spin_lock_irqsave(mEp->lock, flags);
1067
1068 /* only internal SW should disable ctrl endpts */
1069
1070 direction = mEp->dir;
1071 do {
1072 dbg_event(_usb_addr(mEp), "DISABLE", 0);
1073
1074 retval |= _ep_nuke(mEp);
26c696c6 1075 retval |= hw_ep_disable(mEp->ci, mEp->num, mEp->dir);
aa69a809
DL
1076
1077 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1078 mEp->dir = (mEp->dir == TX) ? RX : TX;
1079
1080 } while (mEp->dir != direction);
1081
f9c56cdd 1082 mEp->ep.desc = NULL;
aa69a809
DL
1083
1084 spin_unlock_irqrestore(mEp->lock, flags);
1085 return retval;
1086}
1087
1088/**
1089 * ep_alloc_request: allocate a request object to use with this endpoint
1090 *
1091 * Check usb_ep_alloc_request() at "usb_gadget.h" for details
1092 */
1093static struct usb_request *ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
1094{
1095 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1096 struct ci13xxx_req *mReq = NULL;
aa69a809 1097
0f089094 1098 if (ep == NULL)
aa69a809 1099 return NULL;
aa69a809 1100
aa69a809
DL
1101 mReq = kzalloc(sizeof(struct ci13xxx_req), gfp_flags);
1102 if (mReq != NULL) {
1103 INIT_LIST_HEAD(&mReq->queue);
1104
1105 mReq->ptr = dma_pool_alloc(mEp->td_pool, gfp_flags,
1106 &mReq->dma);
1107 if (mReq->ptr == NULL) {
1108 kfree(mReq);
1109 mReq = NULL;
1110 }
1111 }
1112
1113 dbg_event(_usb_addr(mEp), "ALLOC", mReq == NULL);
1114
aa69a809
DL
1115 return (mReq == NULL) ? NULL : &mReq->req;
1116}
1117
1118/**
1119 * ep_free_request: frees a request object
1120 *
1121 * Check usb_ep_free_request() at "usb_gadget.h" for details
1122 */
1123static void ep_free_request(struct usb_ep *ep, struct usb_request *req)
1124{
1125 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1126 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1127 unsigned long flags;
1128
aa69a809 1129 if (ep == NULL || req == NULL) {
aa69a809
DL
1130 return;
1131 } else if (!list_empty(&mReq->queue)) {
26c696c6 1132 dev_err(mEp->ci->dev, "freeing queued request\n");
aa69a809
DL
1133 return;
1134 }
1135
1136 spin_lock_irqsave(mEp->lock, flags);
1137
1138 if (mReq->ptr)
1139 dma_pool_free(mEp->td_pool, mReq->ptr, mReq->dma);
1140 kfree(mReq);
1141
1142 dbg_event(_usb_addr(mEp), "FREE", 0);
1143
1144 spin_unlock_irqrestore(mEp->lock, flags);
1145}
1146
1147/**
1148 * ep_queue: queues (submits) an I/O request to an endpoint
1149 *
1150 * Check usb_ep_queue()* at usb_gadget.h" for details
1151 */
1152static int ep_queue(struct usb_ep *ep, struct usb_request *req,
1153 gfp_t __maybe_unused gfp_flags)
1154{
1155 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1156 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
26c696c6 1157 struct ci13xxx *ci = mEp->ci;
aa69a809
DL
1158 int retval = 0;
1159 unsigned long flags;
1160
31fb6014 1161 if (ep == NULL || req == NULL || mEp->ep.desc == NULL)
aa69a809
DL
1162 return -EINVAL;
1163
1164 spin_lock_irqsave(mEp->lock, flags);
1165
76cd9cfb
PK
1166 if (mEp->type == USB_ENDPOINT_XFER_CONTROL) {
1167 if (req->length)
26c696c6
RZ
1168 mEp = (ci->ep0_dir == RX) ?
1169 ci->ep0out : ci->ep0in;
76cd9cfb
PK
1170 if (!list_empty(&mEp->qh.queue)) {
1171 _ep_nuke(mEp);
1172 retval = -EOVERFLOW;
26c696c6 1173 dev_warn(mEp->ci->dev, "endpoint ctrl %X nuked\n",
0f089094 1174 _usb_addr(mEp));
76cd9cfb 1175 }
aa69a809
DL
1176 }
1177
1178 /* first nuke then test link, e.g. previous status has not sent */
1179 if (!list_empty(&mReq->queue)) {
1180 retval = -EBUSY;
26c696c6 1181 dev_err(mEp->ci->dev, "request already in queue\n");
aa69a809
DL
1182 goto done;
1183 }
1184
1155a7b8
AS
1185 if (req->length > 4 * CI13XXX_PAGE_SIZE) {
1186 req->length = 4 * CI13XXX_PAGE_SIZE;
aa69a809 1187 retval = -EMSGSIZE;
26c696c6 1188 dev_warn(mEp->ci->dev, "request length truncated\n");
aa69a809
DL
1189 }
1190
1191 dbg_queue(_usb_addr(mEp), req, retval);
1192
1193 /* push request */
1194 mReq->req.status = -EINPROGRESS;
1195 mReq->req.actual = 0;
aa69a809 1196
0e6ca199 1197 retval = _hardware_enqueue(mEp, mReq);
d9bb9c18
AL
1198
1199 if (retval == -EALREADY) {
aa69a809
DL
1200 dbg_event(_usb_addr(mEp), "QUEUE", retval);
1201 retval = 0;
1202 }
0e6ca199
PK
1203 if (!retval)
1204 list_add_tail(&mReq->queue, &mEp->qh.queue);
aa69a809
DL
1205
1206 done:
1207 spin_unlock_irqrestore(mEp->lock, flags);
1208 return retval;
1209}
1210
1211/**
1212 * ep_dequeue: dequeues (cancels, unlinks) an I/O request from an endpoint
1213 *
1214 * Check usb_ep_dequeue() at "usb_gadget.h" for details
1215 */
1216static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)
1217{
1218 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1219 struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req);
1220 unsigned long flags;
1221
0e6ca199 1222 if (ep == NULL || req == NULL || mReq->req.status != -EALREADY ||
31fb6014 1223 mEp->ep.desc == NULL || list_empty(&mReq->queue) ||
0e6ca199 1224 list_empty(&mEp->qh.queue))
aa69a809
DL
1225 return -EINVAL;
1226
1227 spin_lock_irqsave(mEp->lock, flags);
1228
1229 dbg_event(_usb_addr(mEp), "DEQUEUE", 0);
1230
26c696c6 1231 hw_ep_flush(mEp->ci, mEp->num, mEp->dir);
aa69a809
DL
1232
1233 /* pop request */
1234 list_del_init(&mReq->queue);
5e0aa49e 1235
26c696c6 1236 usb_gadget_unmap_request(&mEp->ci->gadget, req, mEp->dir);
5e0aa49e 1237
aa69a809
DL
1238 req->status = -ECONNRESET;
1239
7c25a826 1240 if (mReq->req.complete != NULL) {
aa69a809
DL
1241 spin_unlock(mEp->lock);
1242 mReq->req.complete(&mEp->ep, &mReq->req);
1243 spin_lock(mEp->lock);
1244 }
1245
1246 spin_unlock_irqrestore(mEp->lock, flags);
1247 return 0;
1248}
1249
1250/**
1251 * ep_set_halt: sets the endpoint halt feature
1252 *
1253 * Check usb_ep_set_halt() at "usb_gadget.h" for details
1254 */
1255static int ep_set_halt(struct usb_ep *ep, int value)
1256{
1257 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1258 int direction, retval = 0;
1259 unsigned long flags;
1260
31fb6014 1261 if (ep == NULL || mEp->ep.desc == NULL)
aa69a809
DL
1262 return -EINVAL;
1263
1264 spin_lock_irqsave(mEp->lock, flags);
1265
1266#ifndef STALL_IN
1267 /* g_file_storage MS compliant but g_zero fails chapter 9 compliance */
1268 if (value && mEp->type == USB_ENDPOINT_XFER_BULK && mEp->dir == TX &&
ca9cfea0 1269 !list_empty(&mEp->qh.queue)) {
aa69a809
DL
1270 spin_unlock_irqrestore(mEp->lock, flags);
1271 return -EAGAIN;
1272 }
1273#endif
1274
1275 direction = mEp->dir;
1276 do {
1277 dbg_event(_usb_addr(mEp), "HALT", value);
26c696c6 1278 retval |= hw_ep_set_halt(mEp->ci, mEp->num, mEp->dir, value);
aa69a809
DL
1279
1280 if (!value)
1281 mEp->wedge = 0;
1282
1283 if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
1284 mEp->dir = (mEp->dir == TX) ? RX : TX;
1285
1286 } while (mEp->dir != direction);
1287
1288 spin_unlock_irqrestore(mEp->lock, flags);
1289 return retval;
1290}
1291
1292/**
1293 * ep_set_wedge: sets the halt feature and ignores clear requests
1294 *
1295 * Check usb_ep_set_wedge() at "usb_gadget.h" for details
1296 */
1297static int ep_set_wedge(struct usb_ep *ep)
1298{
1299 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1300 unsigned long flags;
1301
31fb6014 1302 if (ep == NULL || mEp->ep.desc == NULL)
aa69a809
DL
1303 return -EINVAL;
1304
1305 spin_lock_irqsave(mEp->lock, flags);
1306
1307 dbg_event(_usb_addr(mEp), "WEDGE", 0);
1308 mEp->wedge = 1;
1309
1310 spin_unlock_irqrestore(mEp->lock, flags);
1311
1312 return usb_ep_set_halt(ep);
1313}
1314
1315/**
1316 * ep_fifo_flush: flushes contents of a fifo
1317 *
1318 * Check usb_ep_fifo_flush() at "usb_gadget.h" for details
1319 */
1320static void ep_fifo_flush(struct usb_ep *ep)
1321{
1322 struct ci13xxx_ep *mEp = container_of(ep, struct ci13xxx_ep, ep);
1323 unsigned long flags;
1324
aa69a809 1325 if (ep == NULL) {
26c696c6 1326 dev_err(mEp->ci->dev, "%02X: -EINVAL\n", _usb_addr(mEp));
aa69a809
DL
1327 return;
1328 }
1329
1330 spin_lock_irqsave(mEp->lock, flags);
1331
1332 dbg_event(_usb_addr(mEp), "FFLUSH", 0);
26c696c6 1333 hw_ep_flush(mEp->ci, mEp->num, mEp->dir);
aa69a809
DL
1334
1335 spin_unlock_irqrestore(mEp->lock, flags);
1336}
1337
1338/**
1339 * Endpoint-specific part of the API to the USB controller hardware
1340 * Check "usb_gadget.h" for details
1341 */
1342static const struct usb_ep_ops usb_ep_ops = {
1343 .enable = ep_enable,
1344 .disable = ep_disable,
1345 .alloc_request = ep_alloc_request,
1346 .free_request = ep_free_request,
1347 .queue = ep_queue,
1348 .dequeue = ep_dequeue,
1349 .set_halt = ep_set_halt,
1350 .set_wedge = ep_set_wedge,
1351 .fifo_flush = ep_fifo_flush,
1352};
1353
1354/******************************************************************************
1355 * GADGET block
1356 *****************************************************************************/
f01ef574
PK
1357static int ci13xxx_vbus_session(struct usb_gadget *_gadget, int is_active)
1358{
26c696c6 1359 struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
f01ef574
PK
1360 unsigned long flags;
1361 int gadget_ready = 0;
1362
26c696c6 1363 if (!(ci->platdata->flags & CI13XXX_PULLUP_ON_VBUS))
f01ef574
PK
1364 return -EOPNOTSUPP;
1365
26c696c6
RZ
1366 spin_lock_irqsave(&ci->lock, flags);
1367 ci->vbus_active = is_active;
1368 if (ci->driver)
f01ef574 1369 gadget_ready = 1;
26c696c6 1370 spin_unlock_irqrestore(&ci->lock, flags);
f01ef574
PK
1371
1372 if (gadget_ready) {
1373 if (is_active) {
c036019e 1374 pm_runtime_get_sync(&_gadget->dev);
26c696c6
RZ
1375 hw_device_reset(ci, USBMODE_CM_DC);
1376 hw_device_state(ci, ci->ep0out->qh.dma);
f01ef574 1377 } else {
26c696c6
RZ
1378 hw_device_state(ci, 0);
1379 if (ci->platdata->notify_event)
1380 ci->platdata->notify_event(ci,
f01ef574 1381 CI13XXX_CONTROLLER_STOPPED_EVENT);
26c696c6 1382 _gadget_stop_activity(&ci->gadget);
c036019e 1383 pm_runtime_put_sync(&_gadget->dev);
f01ef574
PK
1384 }
1385 }
1386
1387 return 0;
1388}
1389
e2b61c1d
PK
1390static int ci13xxx_wakeup(struct usb_gadget *_gadget)
1391{
26c696c6 1392 struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
e2b61c1d
PK
1393 unsigned long flags;
1394 int ret = 0;
1395
26c696c6
RZ
1396 spin_lock_irqsave(&ci->lock, flags);
1397 if (!ci->remote_wakeup) {
e2b61c1d 1398 ret = -EOPNOTSUPP;
e2b61c1d
PK
1399 goto out;
1400 }
26c696c6 1401 if (!hw_read(ci, OP_PORTSC, PORTSC_SUSP)) {
e2b61c1d 1402 ret = -EINVAL;
e2b61c1d
PK
1403 goto out;
1404 }
26c696c6 1405 hw_write(ci, OP_PORTSC, PORTSC_FPR, PORTSC_FPR);
e2b61c1d 1406out:
26c696c6 1407 spin_unlock_irqrestore(&ci->lock, flags);
e2b61c1d
PK
1408 return ret;
1409}
1410
d860852e
PK
1411static int ci13xxx_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1412{
26c696c6 1413 struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
d860852e 1414
26c696c6
RZ
1415 if (ci->transceiver)
1416 return usb_phy_set_power(ci->transceiver, mA);
d860852e
PK
1417 return -ENOTSUPP;
1418}
1419
c0a48e6c
MG
1420/* Change Data+ pullup status
1421 * this func is used by usb_gadget_connect/disconnet
1422 */
1423static int ci13xxx_pullup(struct usb_gadget *_gadget, int is_on)
1424{
1425 struct ci13xxx *ci = container_of(_gadget, struct ci13xxx, gadget);
1426
1427 if (is_on)
1428 hw_write(ci, OP_USBCMD, USBCMD_RS, USBCMD_RS);
1429 else
1430 hw_write(ci, OP_USBCMD, USBCMD_RS, 0);
1431
1432 return 0;
1433}
1434
1f339d84
AS
1435static int ci13xxx_start(struct usb_gadget *gadget,
1436 struct usb_gadget_driver *driver);
1437static int ci13xxx_stop(struct usb_gadget *gadget,
1438 struct usb_gadget_driver *driver);
aa69a809
DL
1439/**
1440 * Device operations part of the API to the USB controller hardware,
1441 * which don't involve endpoints (or i/o)
1442 * Check "usb_gadget.h" for details
1443 */
f01ef574
PK
1444static const struct usb_gadget_ops usb_gadget_ops = {
1445 .vbus_session = ci13xxx_vbus_session,
e2b61c1d 1446 .wakeup = ci13xxx_wakeup,
c0a48e6c 1447 .pullup = ci13xxx_pullup,
d860852e 1448 .vbus_draw = ci13xxx_vbus_draw,
1f339d84
AS
1449 .udc_start = ci13xxx_start,
1450 .udc_stop = ci13xxx_stop,
f01ef574 1451};
aa69a809 1452
26c696c6 1453static int init_eps(struct ci13xxx *ci)
aa69a809 1454{
790c2d52 1455 int retval = 0, i, j;
aa69a809 1456
26c696c6 1457 for (i = 0; i < ci->hw_ep_max/2; i++)
ca9cfea0 1458 for (j = RX; j <= TX; j++) {
26c696c6
RZ
1459 int k = i + j * ci->hw_ep_max/2;
1460 struct ci13xxx_ep *mEp = &ci->ci13xxx_ep[k];
aa69a809 1461
ca9cfea0
PK
1462 scnprintf(mEp->name, sizeof(mEp->name), "ep%i%s", i,
1463 (j == TX) ? "in" : "out");
aa69a809 1464
26c696c6
RZ
1465 mEp->ci = ci;
1466 mEp->lock = &ci->lock;
1467 mEp->td_pool = ci->td_pool;
aa69a809 1468
ca9cfea0
PK
1469 mEp->ep.name = mEp->name;
1470 mEp->ep.ops = &usb_ep_ops;
7f67c38b
MG
1471 /*
1472 * for ep0: maxP defined in desc, for other
1473 * eps, maxP is set by epautoconfig() called
1474 * by gadget layer
1475 */
1476 mEp->ep.maxpacket = (unsigned short)~0;
aa69a809 1477
ca9cfea0 1478 INIT_LIST_HEAD(&mEp->qh.queue);
26c696c6 1479 mEp->qh.ptr = dma_pool_alloc(ci->qh_pool, GFP_KERNEL,
790c2d52 1480 &mEp->qh.dma);
ca9cfea0 1481 if (mEp->qh.ptr == NULL)
aa69a809
DL
1482 retval = -ENOMEM;
1483 else
ca9cfea0
PK
1484 memset(mEp->qh.ptr, 0, sizeof(*mEp->qh.ptr));
1485
d36ade60
AS
1486 /*
1487 * set up shorthands for ep0 out and in endpoints,
1488 * don't add to gadget's ep_list
1489 */
1490 if (i == 0) {
1491 if (j == RX)
26c696c6 1492 ci->ep0out = mEp;
d36ade60 1493 else
26c696c6 1494 ci->ep0in = mEp;
d36ade60 1495
7f67c38b 1496 mEp->ep.maxpacket = CTRL_PAYLOAD_MAX;
ca9cfea0 1497 continue;
d36ade60 1498 }
ca9cfea0 1499
26c696c6 1500 list_add_tail(&mEp->ep.ep_list, &ci->gadget.ep_list);
ca9cfea0 1501 }
790c2d52
AS
1502
1503 return retval;
1504}
1505
ad6b1b97
MKB
1506static void destroy_eps(struct ci13xxx *ci)
1507{
1508 int i;
1509
1510 for (i = 0; i < ci->hw_ep_max; i++) {
1511 struct ci13xxx_ep *mEp = &ci->ci13xxx_ep[i];
1512
1513 dma_pool_free(ci->qh_pool, mEp->qh.ptr, mEp->qh.dma);
1514 }
1515}
1516
790c2d52
AS
1517/**
1518 * ci13xxx_start: register a gadget driver
1f339d84 1519 * @gadget: our gadget
790c2d52 1520 * @driver: the driver being registered
790c2d52 1521 *
790c2d52
AS
1522 * Interrupts are enabled here.
1523 */
1f339d84
AS
1524static int ci13xxx_start(struct usb_gadget *gadget,
1525 struct usb_gadget_driver *driver)
790c2d52 1526{
26c696c6 1527 struct ci13xxx *ci = container_of(gadget, struct ci13xxx, gadget);
790c2d52 1528 unsigned long flags;
790c2d52
AS
1529 int retval = -ENOMEM;
1530
1f339d84 1531 if (driver->disconnect == NULL)
790c2d52 1532 return -EINVAL;
790c2d52 1533
790c2d52 1534
26c696c6
RZ
1535 ci->ep0out->ep.desc = &ctrl_endpt_out_desc;
1536 retval = usb_ep_enable(&ci->ep0out->ep);
ac1aa6a2
A
1537 if (retval)
1538 return retval;
877c1f54 1539
26c696c6
RZ
1540 ci->ep0in->ep.desc = &ctrl_endpt_in_desc;
1541 retval = usb_ep_enable(&ci->ep0in->ep);
ac1aa6a2
A
1542 if (retval)
1543 return retval;
26c696c6
RZ
1544 spin_lock_irqsave(&ci->lock, flags);
1545
1546 ci->driver = driver;
1547 pm_runtime_get_sync(&ci->gadget.dev);
1548 if (ci->platdata->flags & CI13XXX_PULLUP_ON_VBUS) {
1549 if (ci->vbus_active) {
1550 if (ci->platdata->flags & CI13XXX_REGS_SHARED)
1551 hw_device_reset(ci, USBMODE_CM_DC);
f01ef574 1552 } else {
26c696c6 1553 pm_runtime_put_sync(&ci->gadget.dev);
f01ef574
PK
1554 goto done;
1555 }
1556 }
1557
26c696c6 1558 retval = hw_device_state(ci, ci->ep0out->qh.dma);
c036019e 1559 if (retval)
26c696c6 1560 pm_runtime_put_sync(&ci->gadget.dev);
aa69a809
DL
1561
1562 done:
26c696c6 1563 spin_unlock_irqrestore(&ci->lock, flags);
aa69a809
DL
1564 return retval;
1565}
aa69a809
DL
1566
1567/**
0f91349b 1568 * ci13xxx_stop: unregister a gadget driver
aa69a809 1569 */
1f339d84
AS
1570static int ci13xxx_stop(struct usb_gadget *gadget,
1571 struct usb_gadget_driver *driver)
aa69a809 1572{
26c696c6 1573 struct ci13xxx *ci = container_of(gadget, struct ci13xxx, gadget);
1f339d84 1574 unsigned long flags;
aa69a809 1575
26c696c6 1576 spin_lock_irqsave(&ci->lock, flags);
aa69a809 1577
26c696c6
RZ
1578 if (!(ci->platdata->flags & CI13XXX_PULLUP_ON_VBUS) ||
1579 ci->vbus_active) {
1580 hw_device_state(ci, 0);
1581 if (ci->platdata->notify_event)
1582 ci->platdata->notify_event(ci,
f01ef574 1583 CI13XXX_CONTROLLER_STOPPED_EVENT);
26c696c6
RZ
1584 ci->driver = NULL;
1585 spin_unlock_irqrestore(&ci->lock, flags);
1586 _gadget_stop_activity(&ci->gadget);
1587 spin_lock_irqsave(&ci->lock, flags);
1588 pm_runtime_put(&ci->gadget.dev);
f01ef574 1589 }
aa69a809 1590
26c696c6 1591 spin_unlock_irqrestore(&ci->lock, flags);
aa69a809 1592
aa69a809
DL
1593 return 0;
1594}
aa69a809
DL
1595
1596/******************************************************************************
1597 * BUS block
1598 *****************************************************************************/
1599/**
26c696c6 1600 * udc_irq: ci interrupt handler
aa69a809
DL
1601 *
1602 * This function returns IRQ_HANDLED if the IRQ has been handled
1603 * It locks access to registers
1604 */
26c696c6 1605static irqreturn_t udc_irq(struct ci13xxx *ci)
aa69a809 1606{
aa69a809
DL
1607 irqreturn_t retval;
1608 u32 intr;
1609
26c696c6 1610 if (ci == NULL)
aa69a809 1611 return IRQ_HANDLED;
aa69a809 1612
26c696c6 1613 spin_lock(&ci->lock);
f01ef574 1614
26c696c6
RZ
1615 if (ci->platdata->flags & CI13XXX_REGS_SHARED) {
1616 if (hw_read(ci, OP_USBMODE, USBMODE_CM) !=
758fc986 1617 USBMODE_CM_DC) {
26c696c6 1618 spin_unlock(&ci->lock);
f01ef574
PK
1619 return IRQ_NONE;
1620 }
1621 }
26c696c6 1622 intr = hw_test_and_clear_intr_active(ci);
e443b333 1623 dbg_interrupt(intr);
aa69a809 1624
e443b333 1625 if (intr) {
aa69a809 1626 /* order defines priority - do NOT change it */
e443b333 1627 if (USBi_URI & intr)
26c696c6 1628 isr_reset_handler(ci);
e443b333 1629
aa69a809 1630 if (USBi_PCI & intr) {
26c696c6 1631 ci->gadget.speed = hw_port_is_high_speed(ci) ?
aa69a809 1632 USB_SPEED_HIGH : USB_SPEED_FULL;
26c696c6
RZ
1633 if (ci->suspended && ci->driver->resume) {
1634 spin_unlock(&ci->lock);
1635 ci->driver->resume(&ci->gadget);
1636 spin_lock(&ci->lock);
1637 ci->suspended = 0;
e2b61c1d 1638 }
aa69a809 1639 }
e443b333
AS
1640
1641 if (USBi_UI & intr)
26c696c6 1642 isr_tr_complete_handler(ci);
e443b333 1643
e2b61c1d 1644 if (USBi_SLI & intr) {
26c696c6
RZ
1645 if (ci->gadget.speed != USB_SPEED_UNKNOWN &&
1646 ci->driver->suspend) {
1647 ci->suspended = 1;
1648 spin_unlock(&ci->lock);
1649 ci->driver->suspend(&ci->gadget);
1650 spin_lock(&ci->lock);
e2b61c1d 1651 }
e2b61c1d 1652 }
aa69a809
DL
1653 retval = IRQ_HANDLED;
1654 } else {
aa69a809
DL
1655 retval = IRQ_NONE;
1656 }
26c696c6 1657 spin_unlock(&ci->lock);
aa69a809
DL
1658
1659 return retval;
1660}
1661
1662/**
1663 * udc_release: driver release function
1664 * @dev: device
1665 *
1666 * Currently does nothing
1667 */
1668static void udc_release(struct device *dev)
1669{
aa69a809
DL
1670}
1671
1672/**
5f36e231 1673 * udc_start: initialize gadget role
26c696c6 1674 * @ci: chipidea controller
aa69a809 1675 */
26c696c6 1676static int udc_start(struct ci13xxx *ci)
aa69a809 1677{
26c696c6 1678 struct device *dev = ci->dev;
aa69a809
DL
1679 int retval = 0;
1680
26c696c6 1681 spin_lock_init(&ci->lock);
aa69a809 1682
26c696c6
RZ
1683 ci->gadget.ops = &usb_gadget_ops;
1684 ci->gadget.speed = USB_SPEED_UNKNOWN;
1685 ci->gadget.max_speed = USB_SPEED_HIGH;
1686 ci->gadget.is_otg = 0;
1687 ci->gadget.name = ci->platdata->name;
aa69a809 1688
26c696c6 1689 INIT_LIST_HEAD(&ci->gadget.ep_list);
aa69a809 1690
26c696c6
RZ
1691 dev_set_name(&ci->gadget.dev, "gadget");
1692 ci->gadget.dev.dma_mask = dev->dma_mask;
1693 ci->gadget.dev.coherent_dma_mask = dev->coherent_dma_mask;
1694 ci->gadget.dev.parent = dev;
1695 ci->gadget.dev.release = udc_release;
aa69a809 1696
790c2d52 1697 /* alloc resources */
26c696c6 1698 ci->qh_pool = dma_pool_create("ci13xxx_qh", dev,
790c2d52
AS
1699 sizeof(struct ci13xxx_qh),
1700 64, CI13XXX_PAGE_SIZE);
26c696c6 1701 if (ci->qh_pool == NULL)
5f36e231 1702 return -ENOMEM;
790c2d52 1703
26c696c6 1704 ci->td_pool = dma_pool_create("ci13xxx_td", dev,
790c2d52
AS
1705 sizeof(struct ci13xxx_td),
1706 64, CI13XXX_PAGE_SIZE);
26c696c6 1707 if (ci->td_pool == NULL) {
790c2d52
AS
1708 retval = -ENOMEM;
1709 goto free_qh_pool;
1710 }
1711
26c696c6 1712 retval = init_eps(ci);
790c2d52
AS
1713 if (retval)
1714 goto free_pools;
1715
26c696c6 1716 ci->gadget.ep0 = &ci->ep0in->ep;
f01ef574 1717
a2c3d690
RZ
1718 if (ci->global_phy)
1719 ci->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
f01ef574 1720
26c696c6
RZ
1721 if (ci->platdata->flags & CI13XXX_REQUIRE_TRANSCEIVER) {
1722 if (ci->transceiver == NULL) {
f01ef574 1723 retval = -ENODEV;
ad6b1b97 1724 goto destroy_eps;
f01ef574
PK
1725 }
1726 }
1727
26c696c6
RZ
1728 if (!(ci->platdata->flags & CI13XXX_REGS_SHARED)) {
1729 retval = hw_device_reset(ci, USBMODE_CM_DC);
f01ef574
PK
1730 if (retval)
1731 goto put_transceiver;
1732 }
1733
26c696c6 1734 retval = device_register(&ci->gadget.dev);
f01ef574 1735 if (retval) {
26c696c6 1736 put_device(&ci->gadget.dev);
f01ef574
PK
1737 goto put_transceiver;
1738 }
aa69a809 1739
26c696c6 1740 retval = dbg_create_files(&ci->gadget.dev);
f01ef574
PK
1741 if (retval)
1742 goto unreg_device;
1743
26c696c6
RZ
1744 if (!IS_ERR_OR_NULL(ci->transceiver)) {
1745 retval = otg_set_peripheral(ci->transceiver->otg,
1746 &ci->gadget);
f01ef574
PK
1747 if (retval)
1748 goto remove_dbg;
aa69a809 1749 }
0f91349b 1750
26c696c6 1751 retval = usb_add_gadget_udc(dev, &ci->gadget);
0f91349b
SAS
1752 if (retval)
1753 goto remove_trans;
1754
26c696c6
RZ
1755 pm_runtime_no_callbacks(&ci->gadget.dev);
1756 pm_runtime_enable(&ci->gadget.dev);
aa69a809 1757
aa69a809
DL
1758 return retval;
1759
0f91349b 1760remove_trans:
26c696c6 1761 if (!IS_ERR_OR_NULL(ci->transceiver)) {
c9d1f947 1762 otg_set_peripheral(ci->transceiver->otg, NULL);
a2c3d690
RZ
1763 if (ci->global_phy)
1764 usb_put_phy(ci->transceiver);
0f91349b
SAS
1765 }
1766
0917ba84 1767 dev_err(dev, "error = %i\n", retval);
f01ef574 1768remove_dbg:
26c696c6 1769 dbg_remove_files(&ci->gadget.dev);
f01ef574 1770unreg_device:
26c696c6 1771 device_unregister(&ci->gadget.dev);
f01ef574 1772put_transceiver:
a2c3d690 1773 if (!IS_ERR_OR_NULL(ci->transceiver) && ci->global_phy)
26c696c6 1774 usb_put_phy(ci->transceiver);
ad6b1b97
MKB
1775destroy_eps:
1776 destroy_eps(ci);
790c2d52 1777free_pools:
26c696c6 1778 dma_pool_destroy(ci->td_pool);
790c2d52 1779free_qh_pool:
26c696c6 1780 dma_pool_destroy(ci->qh_pool);
aa69a809
DL
1781 return retval;
1782}
1783
1784/**
1785 * udc_remove: parent remove must call this to remove UDC
1786 *
1787 * No interrupts active, the IRQ has been released
1788 */
26c696c6 1789static void udc_stop(struct ci13xxx *ci)
aa69a809 1790{
26c696c6 1791 if (ci == NULL)
aa69a809 1792 return;
0f089094 1793
26c696c6 1794 usb_del_gadget_udc(&ci->gadget);
aa69a809 1795
ad6b1b97 1796 destroy_eps(ci);
790c2d52 1797
26c696c6
RZ
1798 dma_pool_destroy(ci->td_pool);
1799 dma_pool_destroy(ci->qh_pool);
790c2d52 1800
26c696c6
RZ
1801 if (!IS_ERR_OR_NULL(ci->transceiver)) {
1802 otg_set_peripheral(ci->transceiver->otg, NULL);
a2c3d690
RZ
1803 if (ci->global_phy)
1804 usb_put_phy(ci->transceiver);
f01ef574 1805 }
26c696c6
RZ
1806 dbg_remove_files(&ci->gadget.dev);
1807 device_unregister(&ci->gadget.dev);
5f36e231 1808 /* my kobject is dynamic, I swear! */
26c696c6 1809 memset(&ci->gadget, 0, sizeof(ci->gadget));
5f36e231
AS
1810}
1811
1812/**
1813 * ci_hdrc_gadget_init - initialize device related bits
1814 * ci: the controller
1815 *
1816 * This function enables the gadget role, if the device is "device capable".
1817 */
1818int ci_hdrc_gadget_init(struct ci13xxx *ci)
1819{
1820 struct ci_role_driver *rdrv;
1821
1822 if (!hw_read(ci, CAP_DCCPARAMS, DCCPARAMS_DC))
1823 return -ENXIO;
1824
1825 rdrv = devm_kzalloc(ci->dev, sizeof(struct ci_role_driver), GFP_KERNEL);
1826 if (!rdrv)
1827 return -ENOMEM;
1828
1829 rdrv->start = udc_start;
1830 rdrv->stop = udc_stop;
1831 rdrv->irq = udc_irq;
1832 rdrv->name = "gadget";
1833 ci->roles[CI_ROLE_GADGET] = rdrv;
aa69a809 1834
5f36e231 1835 return 0;
aa69a809 1836}