Merge branch 'x86-debug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[deliverable/linux.git] / drivers / usb / gadget / lpc32xx_udc.c
CommitLineData
24a28e42
RS
1/*
2 * USB Gadget driver for LPC32xx
3 *
4 * Authors:
5 * Kevin Wells <kevin.wells@nxp.com>
6 * Mike James
7 * Roland Stigge <stigge@antcom.de>
8 *
9 * Copyright (C) 2006 Philips Semiconductors
10 * Copyright (C) 2009 NXP Semiconductors
11 * Copyright (C) 2012 Roland Stigge
12 *
13 * Note: This driver is based on original work done by Mike James for
14 * the LPC3180.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
20 *
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 *
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 */
30
31#include <linux/kernel.h>
32#include <linux/module.h>
33#include <linux/platform_device.h>
34#include <linux/delay.h>
35#include <linux/ioport.h>
36#include <linux/slab.h>
37#include <linux/errno.h>
38#include <linux/init.h>
39#include <linux/list.h>
40#include <linux/interrupt.h>
41#include <linux/proc_fs.h>
42#include <linux/clk.h>
43#include <linux/usb/ch9.h>
44#include <linux/usb/gadget.h>
45#include <linux/i2c.h>
46#include <linux/kthread.h>
47#include <linux/freezer.h>
48#include <linux/dma-mapping.h>
49#include <linux/dmapool.h>
50#include <linux/workqueue.h>
51#include <linux/of.h>
52#include <linux/usb/isp1301.h>
53
54#include <asm/byteorder.h>
55#include <mach/hardware.h>
56#include <linux/io.h>
57#include <asm/irq.h>
58#include <asm/system.h>
59
60#include <mach/platform.h>
61#include <mach/irqs.h>
62#include <mach/board.h>
63#ifdef CONFIG_USB_GADGET_DEBUG_FILES
d7dbdb5e 64#include <linux/debugfs.h>
24a28e42
RS
65#include <linux/seq_file.h>
66#endif
67
68/*
69 * USB device configuration structure
70 */
71typedef void (*usc_chg_event)(int);
72struct lpc32xx_usbd_cfg {
73 int vbus_drv_pol; /* 0=active low drive for VBUS via ISP1301 */
74 usc_chg_event conn_chgb; /* Connection change event (optional) */
75 usc_chg_event susp_chgb; /* Suspend/resume event (optional) */
76 usc_chg_event rmwk_chgb; /* Enable/disable remote wakeup */
77};
78
79/*
80 * controller driver data structures
81 */
82
83/* 16 endpoints (not to be confused with 32 hardware endpoints) */
84#define NUM_ENDPOINTS 16
85
86/*
87 * IRQ indices make reading the code a little easier
88 */
89#define IRQ_USB_LP 0
90#define IRQ_USB_HP 1
91#define IRQ_USB_DEVDMA 2
92#define IRQ_USB_ATX 3
93
94#define EP_OUT 0 /* RX (from host) */
95#define EP_IN 1 /* TX (to host) */
96
97/* Returns the interrupt mask for the selected hardware endpoint */
98#define EP_MASK_SEL(ep, dir) (1 << (((ep) * 2) + dir))
99
100#define EP_INT_TYPE 0
101#define EP_ISO_TYPE 1
102#define EP_BLK_TYPE 2
103#define EP_CTL_TYPE 3
104
105/* EP0 states */
106#define WAIT_FOR_SETUP 0 /* Wait for setup packet */
107#define DATA_IN 1 /* Expect dev->host transfer */
108#define DATA_OUT 2 /* Expect host->dev transfer */
109
110/* DD (DMA Descriptor) structure, requires word alignment, this is already
111 * defined in the LPC32XX USB device header file, but this version is slightly
112 * modified to tag some work data with each DMA descriptor. */
113struct lpc32xx_usbd_dd_gad {
114 u32 dd_next_phy;
115 u32 dd_setup;
116 u32 dd_buffer_addr;
117 u32 dd_status;
118 u32 dd_iso_ps_mem_addr;
119 u32 this_dma;
120 u32 iso_status[6]; /* 5 spare */
121 u32 dd_next_v;
122};
123
124/*
125 * Logical endpoint structure
126 */
127struct lpc32xx_ep {
128 struct usb_ep ep;
129 struct list_head queue;
130 struct lpc32xx_udc *udc;
131
132 u32 hwep_num_base; /* Physical hardware EP */
133 u32 hwep_num; /* Maps to hardware endpoint */
134 u32 maxpacket;
135 u32 lep;
136
137 bool is_in;
138 bool req_pending;
139 u32 eptype;
140
141 u32 totalints;
142
143 bool wedge;
144
145 const struct usb_endpoint_descriptor *desc;
146};
147
148/*
149 * Common UDC structure
150 */
151struct lpc32xx_udc {
152 struct usb_gadget gadget;
153 struct usb_gadget_driver *driver;
154 struct platform_device *pdev;
155 struct device *dev;
156 struct dentry *pde;
157 spinlock_t lock;
158 struct i2c_client *isp1301_i2c_client;
159
160 /* Board and device specific */
161 struct lpc32xx_usbd_cfg *board;
162 u32 io_p_start;
163 u32 io_p_size;
164 void __iomem *udp_baseaddr;
165 int udp_irq[4];
166 struct clk *usb_pll_clk;
167 struct clk *usb_slv_clk;
168
169 /* DMA support */
170 u32 *udca_v_base;
171 u32 udca_p_base;
172 struct dma_pool *dd_cache;
173
174 /* Common EP and control data */
175 u32 enabled_devints;
176 u32 enabled_hwepints;
177 u32 dev_status;
178 u32 realized_eps;
179
180 /* VBUS detection, pullup, and power flags */
181 u8 vbus;
182 u8 last_vbus;
183 int pullup;
184 int poweron;
185
186 /* Work queues related to I2C support */
187 struct work_struct pullup_job;
188 struct work_struct vbus_job;
189 struct work_struct power_job;
190
191 /* USB device peripheral - various */
192 struct lpc32xx_ep ep[NUM_ENDPOINTS];
193 bool enabled;
194 bool clocked;
195 bool suspended;
196 bool selfpowered;
197 int ep0state;
198 atomic_t enabled_ep_cnt;
199 wait_queue_head_t ep_disable_wait_queue;
200};
201
202/*
203 * Endpoint request
204 */
205struct lpc32xx_request {
206 struct usb_request req;
207 struct list_head queue;
208 struct lpc32xx_usbd_dd_gad *dd_desc_ptr;
209 bool mapped;
210 bool send_zlp;
211};
212
213static inline struct lpc32xx_udc *to_udc(struct usb_gadget *g)
214{
215 return container_of(g, struct lpc32xx_udc, gadget);
216}
217
218#define ep_dbg(epp, fmt, arg...) \
219 dev_dbg(epp->udc->dev, "%s: " fmt, __func__, ## arg)
220#define ep_err(epp, fmt, arg...) \
221 dev_err(epp->udc->dev, "%s: " fmt, __func__, ## arg)
222#define ep_info(epp, fmt, arg...) \
223 dev_info(epp->udc->dev, "%s: " fmt, __func__, ## arg)
224#define ep_warn(epp, fmt, arg...) \
225 dev_warn(epp->udc->dev, "%s:" fmt, __func__, ## arg)
226
227#define UDCA_BUFF_SIZE (128)
228
229/* TODO: When the clock framework is introduced in LPC32xx, IO_ADDRESS will
230 * be replaced with an inremap()ed pointer, see USB_OTG_CLK_CTRL()
231 * */
232#define USB_CTRL IO_ADDRESS(LPC32XX_CLK_PM_BASE + 0x64)
233#define USB_CLOCK_MASK (AHB_M_CLOCK_ON | OTG_CLOCK_ON | \
234 DEV_CLOCK_ON | I2C_CLOCK_ON)
235
236/* USB_CTRL bit defines */
237#define USB_SLAVE_HCLK_EN (1 << 24)
238#define USB_HOST_NEED_CLK_EN (1 << 21)
239#define USB_DEV_NEED_CLK_EN (1 << 22)
240
241#define USB_OTG_CLK_CTRL(udc) ((udc)->udp_baseaddr + 0xFF4)
242#define USB_OTG_CLK_STAT(udc) ((udc)->udp_baseaddr + 0xFF8)
243
244/* USB_OTG_CLK_CTRL bit defines */
245#define AHB_M_CLOCK_ON (1 << 4)
246#define OTG_CLOCK_ON (1 << 3)
247#define I2C_CLOCK_ON (1 << 2)
248#define DEV_CLOCK_ON (1 << 1)
249#define HOST_CLOCK_ON (1 << 0)
250
251#define USB_OTG_STAT_CONTROL(udc) (udc->udp_baseaddr + 0x110)
252
253/* USB_OTG_STAT_CONTROL bit defines */
254#define TRANSPARENT_I2C_EN (1 << 7)
255#define HOST_EN (1 << 0)
256
257/**********************************************************************
258 * USB device controller register offsets
259 **********************************************************************/
260
261#define USBD_DEVINTST(x) ((x) + 0x200)
262#define USBD_DEVINTEN(x) ((x) + 0x204)
263#define USBD_DEVINTCLR(x) ((x) + 0x208)
264#define USBD_DEVINTSET(x) ((x) + 0x20C)
265#define USBD_CMDCODE(x) ((x) + 0x210)
266#define USBD_CMDDATA(x) ((x) + 0x214)
267#define USBD_RXDATA(x) ((x) + 0x218)
268#define USBD_TXDATA(x) ((x) + 0x21C)
269#define USBD_RXPLEN(x) ((x) + 0x220)
270#define USBD_TXPLEN(x) ((x) + 0x224)
271#define USBD_CTRL(x) ((x) + 0x228)
272#define USBD_DEVINTPRI(x) ((x) + 0x22C)
273#define USBD_EPINTST(x) ((x) + 0x230)
274#define USBD_EPINTEN(x) ((x) + 0x234)
275#define USBD_EPINTCLR(x) ((x) + 0x238)
276#define USBD_EPINTSET(x) ((x) + 0x23C)
277#define USBD_EPINTPRI(x) ((x) + 0x240)
278#define USBD_REEP(x) ((x) + 0x244)
279#define USBD_EPIND(x) ((x) + 0x248)
280#define USBD_EPMAXPSIZE(x) ((x) + 0x24C)
281/* DMA support registers only below */
282/* Set, clear, or get enabled state of the DMA request status. If
283 * enabled, an IN or OUT token will start a DMA transfer for the EP */
284#define USBD_DMARST(x) ((x) + 0x250)
285#define USBD_DMARCLR(x) ((x) + 0x254)
286#define USBD_DMARSET(x) ((x) + 0x258)
287/* DMA UDCA head pointer */
288#define USBD_UDCAH(x) ((x) + 0x280)
289/* EP DMA status, enable, and disable. This is used to specifically
290 * enabled or disable DMA for a specific EP */
291#define USBD_EPDMAST(x) ((x) + 0x284)
292#define USBD_EPDMAEN(x) ((x) + 0x288)
293#define USBD_EPDMADIS(x) ((x) + 0x28C)
294/* DMA master interrupts enable and pending interrupts */
295#define USBD_DMAINTST(x) ((x) + 0x290)
296#define USBD_DMAINTEN(x) ((x) + 0x294)
297/* DMA end of transfer interrupt enable, disable, status */
298#define USBD_EOTINTST(x) ((x) + 0x2A0)
299#define USBD_EOTINTCLR(x) ((x) + 0x2A4)
300#define USBD_EOTINTSET(x) ((x) + 0x2A8)
301/* New DD request interrupt enable, disable, status */
302#define USBD_NDDRTINTST(x) ((x) + 0x2AC)
303#define USBD_NDDRTINTCLR(x) ((x) + 0x2B0)
304#define USBD_NDDRTINTSET(x) ((x) + 0x2B4)
305/* DMA error interrupt enable, disable, status */
306#define USBD_SYSERRTINTST(x) ((x) + 0x2B8)
307#define USBD_SYSERRTINTCLR(x) ((x) + 0x2BC)
308#define USBD_SYSERRTINTSET(x) ((x) + 0x2C0)
309
310/**********************************************************************
311 * USBD_DEVINTST/USBD_DEVINTEN/USBD_DEVINTCLR/USBD_DEVINTSET/
312 * USBD_DEVINTPRI register definitions
313 **********************************************************************/
314#define USBD_ERR_INT (1 << 9)
315#define USBD_EP_RLZED (1 << 8)
316#define USBD_TXENDPKT (1 << 7)
317#define USBD_RXENDPKT (1 << 6)
318#define USBD_CDFULL (1 << 5)
319#define USBD_CCEMPTY (1 << 4)
320#define USBD_DEV_STAT (1 << 3)
321#define USBD_EP_SLOW (1 << 2)
322#define USBD_EP_FAST (1 << 1)
323#define USBD_FRAME (1 << 0)
324
325/**********************************************************************
326 * USBD_EPINTST/USBD_EPINTEN/USBD_EPINTCLR/USBD_EPINTSET/
327 * USBD_EPINTPRI register definitions
328 **********************************************************************/
329/* End point selection macro (RX) */
330#define USBD_RX_EP_SEL(e) (1 << ((e) << 1))
331
332/* End point selection macro (TX) */
333#define USBD_TX_EP_SEL(e) (1 << (((e) << 1) + 1))
334
335/**********************************************************************
336 * USBD_REEP/USBD_DMARST/USBD_DMARCLR/USBD_DMARSET/USBD_EPDMAST/
337 * USBD_EPDMAEN/USBD_EPDMADIS/
338 * USBD_NDDRTINTST/USBD_NDDRTINTCLR/USBD_NDDRTINTSET/
339 * USBD_EOTINTST/USBD_EOTINTCLR/USBD_EOTINTSET/
340 * USBD_SYSERRTINTST/USBD_SYSERRTINTCLR/USBD_SYSERRTINTSET
341 * register definitions
342 **********************************************************************/
343/* Endpoint selection macro */
344#define USBD_EP_SEL(e) (1 << (e))
345
346/**********************************************************************
347 * SBD_DMAINTST/USBD_DMAINTEN
348 **********************************************************************/
349#define USBD_SYS_ERR_INT (1 << 2)
350#define USBD_NEW_DD_INT (1 << 1)
351#define USBD_EOT_INT (1 << 0)
352
353/**********************************************************************
354 * USBD_RXPLEN register definitions
355 **********************************************************************/
356#define USBD_PKT_RDY (1 << 11)
357#define USBD_DV (1 << 10)
358#define USBD_PK_LEN_MASK 0x3FF
359
360/**********************************************************************
361 * USBD_CTRL register definitions
362 **********************************************************************/
363#define USBD_LOG_ENDPOINT(e) ((e) << 2)
364#define USBD_WR_EN (1 << 1)
365#define USBD_RD_EN (1 << 0)
366
367/**********************************************************************
368 * USBD_CMDCODE register definitions
369 **********************************************************************/
370#define USBD_CMD_CODE(c) ((c) << 16)
371#define USBD_CMD_PHASE(p) ((p) << 8)
372
373/**********************************************************************
374 * USBD_DMARST/USBD_DMARCLR/USBD_DMARSET register definitions
375 **********************************************************************/
376#define USBD_DMAEP(e) (1 << (e))
377
378/* DD (DMA Descriptor) structure, requires word alignment */
379struct lpc32xx_usbd_dd {
380 u32 *dd_next;
381 u32 dd_setup;
382 u32 dd_buffer_addr;
383 u32 dd_status;
384 u32 dd_iso_ps_mem_addr;
385};
386
387/* dd_setup bit defines */
388#define DD_SETUP_ATLE_DMA_MODE 0x01
389#define DD_SETUP_NEXT_DD_VALID 0x04
390#define DD_SETUP_ISO_EP 0x10
391#define DD_SETUP_PACKETLEN(n) (((n) & 0x7FF) << 5)
392#define DD_SETUP_DMALENBYTES(n) (((n) & 0xFFFF) << 16)
393
394/* dd_status bit defines */
395#define DD_STATUS_DD_RETIRED 0x01
396#define DD_STATUS_STS_MASK 0x1E
397#define DD_STATUS_STS_NS 0x00 /* Not serviced */
398#define DD_STATUS_STS_BS 0x02 /* Being serviced */
399#define DD_STATUS_STS_NC 0x04 /* Normal completion */
400#define DD_STATUS_STS_DUR 0x06 /* Data underrun (short packet) */
401#define DD_STATUS_STS_DOR 0x08 /* Data overrun */
402#define DD_STATUS_STS_SE 0x12 /* System error */
403#define DD_STATUS_PKT_VAL 0x20 /* Packet valid */
404#define DD_STATUS_LSB_EX 0x40 /* LS byte extracted (ATLE) */
405#define DD_STATUS_MSB_EX 0x80 /* MS byte extracted (ATLE) */
406#define DD_STATUS_MLEN(n) (((n) >> 8) & 0x3F)
407#define DD_STATUS_CURDMACNT(n) (((n) >> 16) & 0xFFFF)
408
409/*
410 *
411 * Protocol engine bits below
412 *
413 */
414/* Device Interrupt Bit Definitions */
415#define FRAME_INT 0x00000001
416#define EP_FAST_INT 0x00000002
417#define EP_SLOW_INT 0x00000004
418#define DEV_STAT_INT 0x00000008
419#define CCEMTY_INT 0x00000010
420#define CDFULL_INT 0x00000020
421#define RxENDPKT_INT 0x00000040
422#define TxENDPKT_INT 0x00000080
423#define EP_RLZED_INT 0x00000100
424#define ERR_INT 0x00000200
425
426/* Rx & Tx Packet Length Definitions */
427#define PKT_LNGTH_MASK 0x000003FF
428#define PKT_DV 0x00000400
429#define PKT_RDY 0x00000800
430
431/* USB Control Definitions */
432#define CTRL_RD_EN 0x00000001
433#define CTRL_WR_EN 0x00000002
434
435/* Command Codes */
436#define CMD_SET_ADDR 0x00D00500
437#define CMD_CFG_DEV 0x00D80500
438#define CMD_SET_MODE 0x00F30500
439#define CMD_RD_FRAME 0x00F50500
440#define DAT_RD_FRAME 0x00F50200
441#define CMD_RD_TEST 0x00FD0500
442#define DAT_RD_TEST 0x00FD0200
443#define CMD_SET_DEV_STAT 0x00FE0500
444#define CMD_GET_DEV_STAT 0x00FE0500
445#define DAT_GET_DEV_STAT 0x00FE0200
446#define CMD_GET_ERR_CODE 0x00FF0500
447#define DAT_GET_ERR_CODE 0x00FF0200
448#define CMD_RD_ERR_STAT 0x00FB0500
449#define DAT_RD_ERR_STAT 0x00FB0200
450#define DAT_WR_BYTE(x) (0x00000100 | ((x) << 16))
451#define CMD_SEL_EP(x) (0x00000500 | ((x) << 16))
452#define DAT_SEL_EP(x) (0x00000200 | ((x) << 16))
453#define CMD_SEL_EP_CLRI(x) (0x00400500 | ((x) << 16))
454#define DAT_SEL_EP_CLRI(x) (0x00400200 | ((x) << 16))
455#define CMD_SET_EP_STAT(x) (0x00400500 | ((x) << 16))
456#define CMD_CLR_BUF 0x00F20500
457#define DAT_CLR_BUF 0x00F20200
458#define CMD_VALID_BUF 0x00FA0500
459
460/* Device Address Register Definitions */
461#define DEV_ADDR_MASK 0x7F
462#define DEV_EN 0x80
463
464/* Device Configure Register Definitions */
465#define CONF_DVICE 0x01
466
467/* Device Mode Register Definitions */
468#define AP_CLK 0x01
469#define INAK_CI 0x02
470#define INAK_CO 0x04
471#define INAK_II 0x08
472#define INAK_IO 0x10
473#define INAK_BI 0x20
474#define INAK_BO 0x40
475
476/* Device Status Register Definitions */
477#define DEV_CON 0x01
478#define DEV_CON_CH 0x02
479#define DEV_SUS 0x04
480#define DEV_SUS_CH 0x08
481#define DEV_RST 0x10
482
483/* Error Code Register Definitions */
484#define ERR_EC_MASK 0x0F
485#define ERR_EA 0x10
486
487/* Error Status Register Definitions */
488#define ERR_PID 0x01
489#define ERR_UEPKT 0x02
490#define ERR_DCRC 0x04
491#define ERR_TIMOUT 0x08
492#define ERR_EOP 0x10
493#define ERR_B_OVRN 0x20
494#define ERR_BTSTF 0x40
495#define ERR_TGL 0x80
496
497/* Endpoint Select Register Definitions */
498#define EP_SEL_F 0x01
499#define EP_SEL_ST 0x02
500#define EP_SEL_STP 0x04
501#define EP_SEL_PO 0x08
502#define EP_SEL_EPN 0x10
503#define EP_SEL_B_1_FULL 0x20
504#define EP_SEL_B_2_FULL 0x40
505
506/* Endpoint Status Register Definitions */
507#define EP_STAT_ST 0x01
508#define EP_STAT_DA 0x20
509#define EP_STAT_RF_MO 0x40
510#define EP_STAT_CND_ST 0x80
511
512/* Clear Buffer Register Definitions */
513#define CLR_BUF_PO 0x01
514
515/* DMA Interrupt Bit Definitions */
516#define EOT_INT 0x01
517#define NDD_REQ_INT 0x02
518#define SYS_ERR_INT 0x04
519
520#define DRIVER_VERSION "1.03"
521static const char driver_name[] = "lpc32xx_udc";
522
523/*
524 *
525 * proc interface support
526 *
527 */
528#ifdef CONFIG_USB_GADGET_DEBUG_FILES
529static char *epnames[] = {"INT", "ISO", "BULK", "CTRL"};
530static const char debug_filename[] = "driver/udc";
531
532static void proc_ep_show(struct seq_file *s, struct lpc32xx_ep *ep)
533{
534 struct lpc32xx_request *req;
535
536 seq_printf(s, "\n");
537 seq_printf(s, "%12s, maxpacket %4d %3s",
538 ep->ep.name, ep->ep.maxpacket,
539 ep->is_in ? "in" : "out");
540 seq_printf(s, " type %4s", epnames[ep->eptype]);
541 seq_printf(s, " ints: %12d", ep->totalints);
542
543 if (list_empty(&ep->queue))
544 seq_printf(s, "\t(queue empty)\n");
545 else {
546 list_for_each_entry(req, &ep->queue, queue) {
547 u32 length = req->req.actual;
548
549 seq_printf(s, "\treq %p len %d/%d buf %p\n",
550 &req->req, length,
551 req->req.length, req->req.buf);
552 }
553 }
554}
555
556static int proc_udc_show(struct seq_file *s, void *unused)
557{
558 struct lpc32xx_udc *udc = s->private;
559 struct lpc32xx_ep *ep;
560 unsigned long flags;
561
562 seq_printf(s, "%s: version %s\n", driver_name, DRIVER_VERSION);
563
564 spin_lock_irqsave(&udc->lock, flags);
565
566 seq_printf(s, "vbus %s, pullup %s, %s powered%s, gadget %s\n\n",
567 udc->vbus ? "present" : "off",
568 udc->enabled ? (udc->vbus ? "active" : "enabled") :
569 "disabled",
570 udc->selfpowered ? "self" : "VBUS",
571 udc->suspended ? ", suspended" : "",
572 udc->driver ? udc->driver->driver.name : "(none)");
573
574 if (udc->enabled && udc->vbus) {
575 proc_ep_show(s, &udc->ep[0]);
576 list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
577 if (ep->desc)
578 proc_ep_show(s, ep);
579 }
580 }
581
582 spin_unlock_irqrestore(&udc->lock, flags);
583
584 return 0;
585}
586
587static int proc_udc_open(struct inode *inode, struct file *file)
588{
589 return single_open(file, proc_udc_show, PDE(inode)->data);
590}
591
592static const struct file_operations proc_ops = {
593 .owner = THIS_MODULE,
594 .open = proc_udc_open,
595 .read = seq_read,
596 .llseek = seq_lseek,
597 .release = single_release,
598};
599
600static void create_debug_file(struct lpc32xx_udc *udc)
601{
602 udc->pde = debugfs_create_file(debug_filename, 0, NULL, udc, &proc_ops);
603}
604
605static void remove_debug_file(struct lpc32xx_udc *udc)
606{
607 if (udc->pde)
608 debugfs_remove(udc->pde);
609}
610
611#else
612static inline void create_debug_file(struct lpc32xx_udc *udc) {}
613static inline void remove_debug_file(struct lpc32xx_udc *udc) {}
614#endif
615
616/* Primary initialization sequence for the ISP1301 transceiver */
617static void isp1301_udc_configure(struct lpc32xx_udc *udc)
618{
619 /* LPC32XX only supports DAT_SE0 USB mode */
620 /* This sequence is important */
621
622 /* Disable transparent UART mode first */
623 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
624 (ISP1301_I2C_MODE_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR),
625 MC1_UART_EN);
626
627 /* Set full speed and SE0 mode */
628 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
629 (ISP1301_I2C_MODE_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR), ~0);
630 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
631 ISP1301_I2C_MODE_CONTROL_1, (MC1_SPEED_REG | MC1_DAT_SE0));
632
633 /*
634 * The PSW_OE enable bit state is reversed in the ISP1301 User's Guide
635 */
636 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
637 (ISP1301_I2C_MODE_CONTROL_2 | ISP1301_I2C_REG_CLEAR_ADDR), ~0);
638 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
639 ISP1301_I2C_MODE_CONTROL_2, (MC2_BI_DI | MC2_SPD_SUSP_CTRL));
640
641 /* Driver VBUS_DRV high or low depending on board setup */
642 if (udc->board->vbus_drv_pol != 0)
643 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
644 ISP1301_I2C_OTG_CONTROL_1, OTG1_VBUS_DRV);
645 else
646 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
647 ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR,
648 OTG1_VBUS_DRV);
649
650 /* Bi-directional mode with suspend control
651 * Enable both pulldowns for now - the pullup will be enable when VBUS
652 * is detected */
653 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
654 (ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR), ~0);
655 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
656 ISP1301_I2C_OTG_CONTROL_1,
657 (0 | OTG1_DM_PULLDOWN | OTG1_DP_PULLDOWN));
658
659 /* Discharge VBUS (just in case) */
660 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
661 ISP1301_I2C_OTG_CONTROL_1, OTG1_VBUS_DISCHRG);
662 msleep(1);
663 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
664 (ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR),
665 OTG1_VBUS_DISCHRG);
666
667 /* Clear and enable VBUS high edge interrupt */
668 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
669 ISP1301_I2C_INTERRUPT_LATCH | ISP1301_I2C_REG_CLEAR_ADDR, ~0);
670 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
671 ISP1301_I2C_INTERRUPT_FALLING | ISP1301_I2C_REG_CLEAR_ADDR, ~0);
672 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
673 ISP1301_I2C_INTERRUPT_FALLING, INT_VBUS_VLD);
674 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
675 ISP1301_I2C_INTERRUPT_RISING | ISP1301_I2C_REG_CLEAR_ADDR, ~0);
676 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
677 ISP1301_I2C_INTERRUPT_RISING, INT_VBUS_VLD);
678
679 /* Enable usb_need_clk clock after transceiver is initialized */
680 writel((readl(USB_CTRL) | (1 << 22)), USB_CTRL);
681
682 dev_info(udc->dev, "ISP1301 Vendor ID : 0x%04x\n",
683 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x00));
684 dev_info(udc->dev, "ISP1301 Product ID : 0x%04x\n",
685 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x02));
686 dev_info(udc->dev, "ISP1301 Version ID : 0x%04x\n",
687 i2c_smbus_read_word_data(udc->isp1301_i2c_client, 0x14));
688}
689
690/* Enables or disables the USB device pullup via the ISP1301 transceiver */
691static void isp1301_pullup_set(struct lpc32xx_udc *udc)
692{
693 if (udc->pullup)
694 /* Enable pullup for bus signalling */
695 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
696 ISP1301_I2C_OTG_CONTROL_1, OTG1_DP_PULLUP);
697 else
698 /* Enable pullup for bus signalling */
699 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
700 ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR,
701 OTG1_DP_PULLUP);
702}
703
704static void pullup_work(struct work_struct *work)
705{
706 struct lpc32xx_udc *udc =
707 container_of(work, struct lpc32xx_udc, pullup_job);
708
709 isp1301_pullup_set(udc);
710}
711
712static void isp1301_pullup_enable(struct lpc32xx_udc *udc, int en_pullup,
713 int block)
714{
715 if (en_pullup == udc->pullup)
716 return;
717
718 udc->pullup = en_pullup;
719 if (block)
720 isp1301_pullup_set(udc);
721 else
722 /* defer slow i2c pull up setting */
723 schedule_work(&udc->pullup_job);
724}
725
726#ifdef CONFIG_PM
727/* Powers up or down the ISP1301 transceiver */
728static void isp1301_set_powerstate(struct lpc32xx_udc *udc, int enable)
729{
730 if (enable != 0)
731 /* Power up ISP1301 - this ISP1301 will automatically wakeup
732 when VBUS is detected */
733 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
734 ISP1301_I2C_MODE_CONTROL_2 | ISP1301_I2C_REG_CLEAR_ADDR,
735 MC2_GLOBAL_PWR_DN);
736 else
737 /* Power down ISP1301 */
738 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
739 ISP1301_I2C_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN);
740}
741
742static void power_work(struct work_struct *work)
743{
744 struct lpc32xx_udc *udc =
745 container_of(work, struct lpc32xx_udc, power_job);
746
747 isp1301_set_powerstate(udc, udc->poweron);
748}
749#endif
750
751/*
752 *
753 * USB protocol engine command/data read/write helper functions
754 *
755 */
756/* Issues a single command to the USB device state machine */
757static void udc_protocol_cmd_w(struct lpc32xx_udc *udc, u32 cmd)
758{
759 u32 pass = 0;
760 int to;
761
762 /* EP may lock on CLRI if this read isn't done */
763 u32 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr));
764 (void) tmp;
765
766 while (pass == 0) {
767 writel(USBD_CCEMPTY, USBD_DEVINTCLR(udc->udp_baseaddr));
768
769 /* Write command code */
770 writel(cmd, USBD_CMDCODE(udc->udp_baseaddr));
771 to = 10000;
772 while (((readl(USBD_DEVINTST(udc->udp_baseaddr)) &
773 USBD_CCEMPTY) == 0) && (to > 0)) {
774 to--;
775 }
776
777 if (to > 0)
778 pass = 1;
779
780 cpu_relax();
781 }
782}
783
784/* Issues 2 commands (or command and data) to the USB device state machine */
785static inline void udc_protocol_cmd_data_w(struct lpc32xx_udc *udc, u32 cmd,
786 u32 data)
787{
788 udc_protocol_cmd_w(udc, cmd);
789 udc_protocol_cmd_w(udc, data);
790}
791
792/* Issues a single command to the USB device state machine and reads
793 * response data */
794static u32 udc_protocol_cmd_r(struct lpc32xx_udc *udc, u32 cmd)
795{
796 u32 tmp;
797 int to = 1000;
798
799 /* Write a command and read data from the protocol engine */
800 writel((USBD_CDFULL | USBD_CCEMPTY),
801 USBD_DEVINTCLR(udc->udp_baseaddr));
802
803 /* Write command code */
804 udc_protocol_cmd_w(udc, cmd);
805
806 tmp = readl(USBD_DEVINTST(udc->udp_baseaddr));
807 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) & USBD_CDFULL))
808 && (to > 0))
809 to--;
810 if (!to)
811 dev_dbg(udc->dev,
812 "Protocol engine didn't receive response (CDFULL)\n");
813
814 return readl(USBD_CMDDATA(udc->udp_baseaddr));
815}
816
817/*
818 *
819 * USB device interrupt mask support functions
820 *
821 */
822/* Enable one or more USB device interrupts */
823static inline void uda_enable_devint(struct lpc32xx_udc *udc, u32 devmask)
824{
825 udc->enabled_devints |= devmask;
826 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
827}
828
829/* Disable one or more USB device interrupts */
830static inline void uda_disable_devint(struct lpc32xx_udc *udc, u32 mask)
831{
832 udc->enabled_devints &= ~mask;
833 writel(udc->enabled_devints, USBD_DEVINTEN(udc->udp_baseaddr));
834}
835
836/* Clear one or more USB device interrupts */
837static inline void uda_clear_devint(struct lpc32xx_udc *udc, u32 mask)
838{
839 writel(mask, USBD_DEVINTCLR(udc->udp_baseaddr));
840}
841
842/*
843 *
844 * Endpoint interrupt disable/enable functions
845 *
846 */
847/* Enable one or more USB endpoint interrupts */
848static void uda_enable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
849{
850 udc->enabled_hwepints |= (1 << hwep);
851 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
852}
853
854/* Disable one or more USB endpoint interrupts */
855static void uda_disable_hwepint(struct lpc32xx_udc *udc, u32 hwep)
856{
857 udc->enabled_hwepints &= ~(1 << hwep);
858 writel(udc->enabled_hwepints, USBD_EPINTEN(udc->udp_baseaddr));
859}
860
861/* Clear one or more USB endpoint interrupts */
862static inline void uda_clear_hwepint(struct lpc32xx_udc *udc, u32 hwep)
863{
864 writel((1 << hwep), USBD_EPINTCLR(udc->udp_baseaddr));
865}
866
867/* Enable DMA for the HW channel */
868static inline void udc_ep_dma_enable(struct lpc32xx_udc *udc, u32 hwep)
869{
870 writel((1 << hwep), USBD_EPDMAEN(udc->udp_baseaddr));
871}
872
873/* Disable DMA for the HW channel */
874static inline void udc_ep_dma_disable(struct lpc32xx_udc *udc, u32 hwep)
875{
876 writel((1 << hwep), USBD_EPDMADIS(udc->udp_baseaddr));
877}
878
879/*
880 *
881 * Endpoint realize/unrealize functions
882 *
883 */
884/* Before an endpoint can be used, it needs to be realized
885 * in the USB protocol engine - this realizes the endpoint.
886 * The interrupt (FIFO or DMA) is not enabled with this function */
887static void udc_realize_hwep(struct lpc32xx_udc *udc, u32 hwep,
888 u32 maxpacket)
889{
890 int to = 1000;
891
892 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
893 writel(hwep, USBD_EPIND(udc->udp_baseaddr));
894 udc->realized_eps |= (1 << hwep);
895 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
896 writel(maxpacket, USBD_EPMAXPSIZE(udc->udp_baseaddr));
897
898 /* Wait until endpoint is realized in hardware */
899 while ((!(readl(USBD_DEVINTST(udc->udp_baseaddr)) &
900 USBD_EP_RLZED)) && (to > 0))
901 to--;
902 if (!to)
903 dev_dbg(udc->dev, "EP not correctly realized in hardware\n");
904
905 writel(USBD_EP_RLZED, USBD_DEVINTCLR(udc->udp_baseaddr));
906}
907
908/* Unrealize an EP */
909static void udc_unrealize_hwep(struct lpc32xx_udc *udc, u32 hwep)
910{
911 udc->realized_eps &= ~(1 << hwep);
912 writel(udc->realized_eps, USBD_REEP(udc->udp_baseaddr));
913}
914
915/*
916 *
917 * Endpoint support functions
918 *
919 */
920/* Select and clear endpoint interrupt */
921static u32 udc_selep_clrint(struct lpc32xx_udc *udc, u32 hwep)
922{
923 udc_protocol_cmd_w(udc, CMD_SEL_EP_CLRI(hwep));
924 return udc_protocol_cmd_r(udc, DAT_SEL_EP_CLRI(hwep));
925}
926
927/* Disables the endpoint in the USB protocol engine */
928static void udc_disable_hwep(struct lpc32xx_udc *udc, u32 hwep)
929{
930 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
931 DAT_WR_BYTE(EP_STAT_DA));
932}
933
934/* Stalls the endpoint - endpoint will return STALL */
935static void udc_stall_hwep(struct lpc32xx_udc *udc, u32 hwep)
936{
937 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
938 DAT_WR_BYTE(EP_STAT_ST));
939}
940
941/* Clear stall or reset endpoint */
942static void udc_clrstall_hwep(struct lpc32xx_udc *udc, u32 hwep)
943{
944 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(hwep),
945 DAT_WR_BYTE(0));
946}
947
948/* Select an endpoint for endpoint status, clear, validate */
949static void udc_select_hwep(struct lpc32xx_udc *udc, u32 hwep)
950{
951 udc_protocol_cmd_w(udc, CMD_SEL_EP(hwep));
952}
953
954/*
955 *
956 * Endpoint buffer management functions
957 *
958 */
959/* Clear the current endpoint's buffer */
960static void udc_clr_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
961{
962 udc_select_hwep(udc, hwep);
963 udc_protocol_cmd_w(udc, CMD_CLR_BUF);
964}
965
966/* Validate the current endpoint's buffer */
967static void udc_val_buffer_hwep(struct lpc32xx_udc *udc, u32 hwep)
968{
969 udc_select_hwep(udc, hwep);
970 udc_protocol_cmd_w(udc, CMD_VALID_BUF);
971}
972
973static inline u32 udc_clearep_getsts(struct lpc32xx_udc *udc, u32 hwep)
974{
975 /* Clear EP interrupt */
976 uda_clear_hwepint(udc, hwep);
977 return udc_selep_clrint(udc, hwep);
978}
979
980/*
981 *
982 * USB EP DMA support
983 *
984 */
985/* Allocate a DMA Descriptor */
986static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc)
987{
988 dma_addr_t dma;
989 struct lpc32xx_usbd_dd_gad *dd;
990
991 dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc(
992 udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma);
993 if (dd)
994 dd->this_dma = dma;
995
996 return dd;
997}
998
999/* Free a DMA Descriptor */
1000static void udc_dd_free(struct lpc32xx_udc *udc, struct lpc32xx_usbd_dd_gad *dd)
1001{
1002 dma_pool_free(udc->dd_cache, dd, dd->this_dma);
1003}
1004
1005/*
1006 *
1007 * USB setup and shutdown functions
1008 *
1009 */
1010/* Enables or disables most of the USB system clocks when low power mode is
1011 * needed. Clocks are typically started on a connection event, and disabled
1012 * when a cable is disconnected */
1013#define OTGOFF_CLK_MASK (AHB_M_CLOCK_ON | I2C_CLOCK_ON)
1014static void udc_clk_set(struct lpc32xx_udc *udc, int enable)
1015{
1016 int to = 1000;
1017
1018 if (enable != 0) {
1019 if (udc->clocked)
1020 return;
1021
1022 udc->clocked = 1;
1023
1024 /* 48MHz PLL up */
1025 clk_enable(udc->usb_pll_clk);
1026
1027 /* Enable the USB device clock */
1028 writel(readl(USB_CTRL) | USB_DEV_NEED_CLK_EN,
1029 USB_CTRL);
1030
1031 /* Set to enable all needed USB OTG clocks */
1032 writel(USB_CLOCK_MASK, USB_OTG_CLK_CTRL(udc));
1033
1034 while (((readl(USB_OTG_CLK_STAT(udc)) & USB_CLOCK_MASK) !=
1035 USB_CLOCK_MASK) && (to > 0))
1036 to--;
1037 if (!to)
1038 dev_dbg(udc->dev, "Cannot enable USB OTG clocking\n");
1039 } else {
1040 if (!udc->clocked)
1041 return;
1042
1043 udc->clocked = 0;
1044
1045 /* Never disable the USB_HCLK during normal operation */
1046
1047 /* 48MHz PLL dpwn */
1048 clk_disable(udc->usb_pll_clk);
1049
1050 /* Enable the USB device clock */
1051 writel(readl(USB_CTRL) & ~USB_DEV_NEED_CLK_EN,
1052 USB_CTRL);
1053
1054 /* Set to enable all needed USB OTG clocks */
1055 writel(OTGOFF_CLK_MASK, USB_OTG_CLK_CTRL(udc));
1056
1057 while (((readl(USB_OTG_CLK_STAT(udc)) &
1058 OTGOFF_CLK_MASK) !=
1059 OTGOFF_CLK_MASK) && (to > 0))
1060 to--;
1061 if (!to)
1062 dev_dbg(udc->dev, "Cannot disable USB OTG clocking\n");
1063 }
1064}
1065
1066/* Set/reset USB device address */
1067static void udc_set_address(struct lpc32xx_udc *udc, u32 addr)
1068{
1069 /* Address will be latched at the end of the status phase, or
1070 latched immediately if function is called twice */
1071 udc_protocol_cmd_data_w(udc, CMD_SET_ADDR,
1072 DAT_WR_BYTE(DEV_EN | addr));
1073}
1074
1075/* Setup up a IN request for DMA transfer - this consists of determining the
1076 * list of DMA addresses for the transfer, allocating DMA Descriptors,
1077 * installing the DD into the UDCA, and then enabling the DMA for that EP */
1078static int udc_ep_in_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1079{
1080 struct lpc32xx_request *req;
1081 u32 hwep = ep->hwep_num;
1082
1083 ep->req_pending = 1;
1084
1085 /* There will always be a request waiting here */
1086 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
1087
1088 /* Place the DD Descriptor into the UDCA */
1089 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
1090
1091 /* Enable DMA and interrupt for the HW EP */
1092 udc_ep_dma_enable(udc, hwep);
1093
1094 /* Clear ZLP if last packet is not of MAXP size */
1095 if (req->req.length % ep->ep.maxpacket)
1096 req->send_zlp = 0;
1097
1098 return 0;
1099}
1100
1101/* Setup up a OUT request for DMA transfer - this consists of determining the
1102 * list of DMA addresses for the transfer, allocating DMA Descriptors,
1103 * installing the DD into the UDCA, and then enabling the DMA for that EP */
1104static int udc_ep_out_req_dma(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
1105{
1106 struct lpc32xx_request *req;
1107 u32 hwep = ep->hwep_num;
1108
1109 ep->req_pending = 1;
1110
1111 /* There will always be a request waiting here */
1112 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
1113
1114 /* Place the DD Descriptor into the UDCA */
1115 udc->udca_v_base[hwep] = req->dd_desc_ptr->this_dma;
1116
1117 /* Enable DMA and interrupt for the HW EP */
1118 udc_ep_dma_enable(udc, hwep);
1119 return 0;
1120}
1121
1122static void udc_disable(struct lpc32xx_udc *udc)
1123{
1124 u32 i;
1125
1126 /* Disable device */
1127 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1128 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(0));
1129
1130 /* Disable all device interrupts (including EP0) */
1131 uda_disable_devint(udc, 0x3FF);
1132
1133 /* Disable and reset all endpoint interrupts */
1134 for (i = 0; i < 32; i++) {
1135 uda_disable_hwepint(udc, i);
1136 uda_clear_hwepint(udc, i);
1137 udc_disable_hwep(udc, i);
1138 udc_unrealize_hwep(udc, i);
1139 udc->udca_v_base[i] = 0;
1140
1141 /* Disable and clear all interrupts and DMA */
1142 udc_ep_dma_disable(udc, i);
1143 writel((1 << i), USBD_EOTINTCLR(udc->udp_baseaddr));
1144 writel((1 << i), USBD_NDDRTINTCLR(udc->udp_baseaddr));
1145 writel((1 << i), USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1146 writel((1 << i), USBD_DMARCLR(udc->udp_baseaddr));
1147 }
1148
1149 /* Disable DMA interrupts */
1150 writel(0, USBD_DMAINTEN(udc->udp_baseaddr));
1151
1152 writel(0, USBD_UDCAH(udc->udp_baseaddr));
1153}
1154
1155static void udc_enable(struct lpc32xx_udc *udc)
1156{
1157 u32 i;
1158 struct lpc32xx_ep *ep = &udc->ep[0];
1159
1160 /* Start with known state */
1161 udc_disable(udc);
1162
1163 /* Enable device */
1164 udc_protocol_cmd_data_w(udc, CMD_SET_DEV_STAT, DAT_WR_BYTE(DEV_CON));
1165
1166 /* EP interrupts on high priority, FRAME interrupt on low priority */
1167 writel(USBD_EP_FAST, USBD_DEVINTPRI(udc->udp_baseaddr));
1168 writel(0xFFFF, USBD_EPINTPRI(udc->udp_baseaddr));
1169
1170 /* Clear any pending device interrupts */
1171 writel(0x3FF, USBD_DEVINTCLR(udc->udp_baseaddr));
1172
1173 /* Setup UDCA - not yet used (DMA) */
1174 writel(udc->udca_p_base, USBD_UDCAH(udc->udp_baseaddr));
1175
1176 /* Only enable EP0 in and out for now, EP0 only works in FIFO mode */
1177 for (i = 0; i <= 1; i++) {
1178 udc_realize_hwep(udc, i, ep->ep.maxpacket);
1179 uda_enable_hwepint(udc, i);
1180 udc_select_hwep(udc, i);
1181 udc_clrstall_hwep(udc, i);
1182 udc_clr_buffer_hwep(udc, i);
1183 }
1184
1185 /* Device interrupt setup */
1186 uda_clear_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1187 USBD_EP_FAST));
1188 uda_enable_devint(udc, (USBD_ERR_INT | USBD_DEV_STAT | USBD_EP_SLOW |
1189 USBD_EP_FAST));
1190
1191 /* Set device address to 0 - called twice to force a latch in the USB
1192 engine without the need of a setup packet status closure */
1193 udc_set_address(udc, 0);
1194 udc_set_address(udc, 0);
1195
1196 /* Enable master DMA interrupts */
1197 writel((USBD_SYS_ERR_INT | USBD_EOT_INT),
1198 USBD_DMAINTEN(udc->udp_baseaddr));
1199
1200 udc->dev_status = 0;
1201}
1202
1203/*
1204 *
1205 * USB device board specific events handled via callbacks
1206 *
1207 */
1208/* Connection change event - notify board function of change */
1209static void uda_power_event(struct lpc32xx_udc *udc, u32 conn)
1210{
1211 /* Just notify of a connection change event (optional) */
1212 if (udc->board->conn_chgb != NULL)
1213 udc->board->conn_chgb(conn);
1214}
1215
1216/* Suspend/resume event - notify board function of change */
1217static void uda_resm_susp_event(struct lpc32xx_udc *udc, u32 conn)
1218{
1219 /* Just notify of a Suspend/resume change event (optional) */
1220 if (udc->board->susp_chgb != NULL)
1221 udc->board->susp_chgb(conn);
1222
1223 if (conn)
1224 udc->suspended = 0;
1225 else
1226 udc->suspended = 1;
1227}
1228
1229/* Remote wakeup enable/disable - notify board function of change */
1230static void uda_remwkp_cgh(struct lpc32xx_udc *udc)
1231{
1232 if (udc->board->rmwk_chgb != NULL)
1233 udc->board->rmwk_chgb(udc->dev_status &
1234 (1 << USB_DEVICE_REMOTE_WAKEUP));
1235}
1236
1237/* Reads data from FIFO, adjusts for alignment and data size */
1238static void udc_pop_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1239{
1240 int n, i, bl;
1241 u16 *p16;
1242 u32 *p32, tmp, cbytes;
1243
1244 /* Use optimal data transfer method based on source address and size */
1245 switch (((u32) data) & 0x3) {
1246 case 0: /* 32-bit aligned */
1247 p32 = (u32 *) data;
1248 cbytes = (bytes & ~0x3);
1249
1250 /* Copy 32-bit aligned data first */
1251 for (n = 0; n < cbytes; n += 4)
1252 *p32++ = readl(USBD_RXDATA(udc->udp_baseaddr));
1253
1254 /* Handle any remaining bytes */
1255 bl = bytes - cbytes;
1256 if (bl) {
1257 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1258 for (n = 0; n < bl; n++)
1259 data[cbytes + n] = ((tmp >> (n * 8)) & 0xFF);
1260
1261 }
1262 break;
1263
1264 case 1: /* 8-bit aligned */
1265 case 3:
1266 /* Each byte has to be handled independently */
1267 for (n = 0; n < bytes; n += 4) {
1268 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1269
1270 bl = bytes - n;
1271 if (bl > 3)
1272 bl = 3;
1273
1274 for (i = 0; i < bl; i++)
1275 data[n + i] = (u8) ((tmp >> (n * 8)) & 0xFF);
1276 }
1277 break;
1278
1279 case 2: /* 16-bit aligned */
1280 p16 = (u16 *) data;
1281 cbytes = (bytes & ~0x3);
1282
1283 /* Copy 32-bit sized objects first with 16-bit alignment */
1284 for (n = 0; n < cbytes; n += 4) {
1285 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1286 *p16++ = (u16)(tmp & 0xFFFF);
1287 *p16++ = (u16)((tmp >> 16) & 0xFFFF);
1288 }
1289
1290 /* Handle any remaining bytes */
1291 bl = bytes - cbytes;
1292 if (bl) {
1293 tmp = readl(USBD_RXDATA(udc->udp_baseaddr));
1294 for (n = 0; n < bl; n++)
1295 data[cbytes + n] = ((tmp >> (n * 8)) & 0xFF);
1296 }
1297 break;
1298 }
1299}
1300
1301/* Read data from the FIFO for an endpoint. This function is for endpoints (such
1302 * as EP0) that don't use DMA. This function should only be called if a packet
1303 * is known to be ready to read for the endpoint. Note that the endpoint must
1304 * be selected in the protocol engine prior to this call. */
1305static u32 udc_read_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1306 u32 bytes)
1307{
1308 u32 tmpv;
1309 int to = 1000;
1310 u32 tmp, hwrep = ((hwep & 0x1E) << 1) | CTRL_RD_EN;
1311
1312 /* Setup read of endpoint */
1313 writel(hwrep, USBD_CTRL(udc->udp_baseaddr));
1314
1315 /* Wait until packet is ready */
1316 while ((((tmpv = readl(USBD_RXPLEN(udc->udp_baseaddr))) &
1317 PKT_RDY) == 0) && (to > 0))
1318 to--;
1319 if (!to)
1320 dev_dbg(udc->dev, "No packet ready on FIFO EP read\n");
1321
1322 /* Mask out count */
1323 tmp = tmpv & PKT_LNGTH_MASK;
1324 if (bytes < tmp)
1325 tmp = bytes;
1326
1327 if ((tmp > 0) && (data != NULL))
1328 udc_pop_fifo(udc, (u8 *) data, tmp);
1329
1330 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1331
1332 /* Clear the buffer */
1333 udc_clr_buffer_hwep(udc, hwep);
1334
1335 return tmp;
1336}
1337
1338/* Stuffs data into the FIFO, adjusts for alignment and data size */
1339static void udc_stuff_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes)
1340{
1341 int n, i, bl;
1342 u16 *p16;
1343 u32 *p32, tmp, cbytes;
1344
1345 /* Use optimal data transfer method based on source address and size */
1346 switch (((u32) data) & 0x3) {
1347 case 0: /* 32-bit aligned */
1348 p32 = (u32 *) data;
1349 cbytes = (bytes & ~0x3);
1350
1351 /* Copy 32-bit aligned data first */
1352 for (n = 0; n < cbytes; n += 4)
1353 writel(*p32++, USBD_TXDATA(udc->udp_baseaddr));
1354
1355 /* Handle any remaining bytes */
1356 bl = bytes - cbytes;
1357 if (bl) {
1358 tmp = 0;
1359 for (n = 0; n < bl; n++)
1360 tmp |= data[cbytes + n] << (n * 8);
1361
1362 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1363 }
1364 break;
1365
1366 case 1: /* 8-bit aligned */
1367 case 3:
1368 /* Each byte has to be handled independently */
1369 for (n = 0; n < bytes; n += 4) {
1370 bl = bytes - n;
1371 if (bl > 4)
1372 bl = 4;
1373
1374 tmp = 0;
1375 for (i = 0; i < bl; i++)
1376 tmp |= data[n + i] << (i * 8);
1377
1378 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1379 }
1380 break;
1381
1382 case 2: /* 16-bit aligned */
1383 p16 = (u16 *) data;
1384 cbytes = (bytes & ~0x3);
1385
1386 /* Copy 32-bit aligned data first */
1387 for (n = 0; n < cbytes; n += 4) {
1388 tmp = *p16++ & 0xFFFF;
1389 tmp |= (*p16++ & 0xFFFF) << 16;
1390 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1391 }
1392
1393 /* Handle any remaining bytes */
1394 bl = bytes - cbytes;
1395 if (bl) {
1396 tmp = 0;
1397 for (n = 0; n < bl; n++)
1398 tmp |= data[cbytes + n] << (n * 8);
1399
1400 writel(tmp, USBD_TXDATA(udc->udp_baseaddr));
1401 }
1402 break;
1403 }
1404}
1405
1406/* Write data to the FIFO for an endpoint. This function is for endpoints (such
1407 * as EP0) that don't use DMA. Note that the endpoint must be selected in the
1408 * protocol engine prior to this call. */
1409static void udc_write_hwep(struct lpc32xx_udc *udc, u32 hwep, u32 *data,
1410 u32 bytes)
1411{
1412 u32 hwwep = ((hwep & 0x1E) << 1) | CTRL_WR_EN;
1413
1414 if ((bytes > 0) && (data == NULL))
1415 return;
1416
1417 /* Setup write of endpoint */
1418 writel(hwwep, USBD_CTRL(udc->udp_baseaddr));
1419
1420 writel(bytes, USBD_TXPLEN(udc->udp_baseaddr));
1421
1422 /* Need at least 1 byte to trigger TX */
1423 if (bytes == 0)
1424 writel(0, USBD_TXDATA(udc->udp_baseaddr));
1425 else
1426 udc_stuff_fifo(udc, (u8 *) data, bytes);
1427
1428 writel(((hwep & 0x1E) << 1), USBD_CTRL(udc->udp_baseaddr));
1429
1430 udc_val_buffer_hwep(udc, hwep);
1431}
1432
1433/* USB device reset - resets USB to a default state with just EP0
1434 enabled */
1435static void uda_usb_reset(struct lpc32xx_udc *udc)
1436{
1437 u32 i = 0;
1438 /* Re-init device controller and EP0 */
1439 udc_enable(udc);
1440 udc->gadget.speed = USB_SPEED_FULL;
1441
1442 for (i = 1; i < NUM_ENDPOINTS; i++) {
1443 struct lpc32xx_ep *ep = &udc->ep[i];
1444 ep->req_pending = 0;
1445 }
1446}
1447
1448/* Send a ZLP on EP0 */
1449static void udc_ep0_send_zlp(struct lpc32xx_udc *udc)
1450{
1451 udc_write_hwep(udc, EP_IN, NULL, 0);
1452}
1453
1454/* Get current frame number */
1455static u16 udc_get_current_frame(struct lpc32xx_udc *udc)
1456{
1457 u16 flo, fhi;
1458
1459 udc_protocol_cmd_w(udc, CMD_RD_FRAME);
1460 flo = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1461 fhi = (u16) udc_protocol_cmd_r(udc, DAT_RD_FRAME);
1462
1463 return (fhi << 8) | flo;
1464}
1465
1466/* Set the device as configured - enables all endpoints */
1467static inline void udc_set_device_configured(struct lpc32xx_udc *udc)
1468{
1469 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(CONF_DVICE));
1470}
1471
1472/* Set the device as unconfigured - disables all endpoints */
1473static inline void udc_set_device_unconfigured(struct lpc32xx_udc *udc)
1474{
1475 udc_protocol_cmd_data_w(udc, CMD_CFG_DEV, DAT_WR_BYTE(0));
1476}
1477
1478/* reinit == restore initial software state */
1479static void udc_reinit(struct lpc32xx_udc *udc)
1480{
1481 u32 i;
1482
1483 INIT_LIST_HEAD(&udc->gadget.ep_list);
1484 INIT_LIST_HEAD(&udc->gadget.ep0->ep_list);
1485
1486 for (i = 0; i < NUM_ENDPOINTS; i++) {
1487 struct lpc32xx_ep *ep = &udc->ep[i];
1488
1489 if (i != 0)
1490 list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
1491 ep->desc = NULL;
1492 ep->ep.maxpacket = ep->maxpacket;
1493 INIT_LIST_HEAD(&ep->queue);
1494 ep->req_pending = 0;
1495 }
1496
1497 udc->ep0state = WAIT_FOR_SETUP;
1498}
1499
1500/* Must be called with lock */
1501static void done(struct lpc32xx_ep *ep, struct lpc32xx_request *req, int status)
1502{
1503 struct lpc32xx_udc *udc = ep->udc;
1504
1505 list_del_init(&req->queue);
1506 if (req->req.status == -EINPROGRESS)
1507 req->req.status = status;
1508 else
1509 status = req->req.status;
1510
1511 if (ep->lep) {
1512 enum dma_data_direction direction;
1513
1514 if (ep->is_in)
1515 direction = DMA_TO_DEVICE;
1516 else
1517 direction = DMA_FROM_DEVICE;
1518
1519 if (req->mapped) {
1520 dma_unmap_single(ep->udc->gadget.dev.parent,
1521 req->req.dma, req->req.length,
1522 direction);
1523 req->req.dma = 0;
1524 req->mapped = 0;
1525 } else
1526 dma_sync_single_for_cpu(ep->udc->gadget.dev.parent,
1527 req->req.dma, req->req.length,
1528 direction);
1529
1530 /* Free DDs */
1531 udc_dd_free(udc, req->dd_desc_ptr);
1532 }
1533
1534 if (status && status != -ESHUTDOWN)
1535 ep_dbg(ep, "%s done %p, status %d\n", ep->ep.name, req, status);
1536
1537 ep->req_pending = 0;
1538 spin_unlock(&udc->lock);
1539 req->req.complete(&ep->ep, &req->req);
1540 spin_lock(&udc->lock);
1541}
1542
1543/* Must be called with lock */
1544static void nuke(struct lpc32xx_ep *ep, int status)
1545{
1546 struct lpc32xx_request *req;
1547
1548 while (!list_empty(&ep->queue)) {
1549 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
1550 done(ep, req, status);
1551 }
1552
1553 if (ep->desc && status == -ESHUTDOWN) {
1554 uda_disable_hwepint(ep->udc, ep->hwep_num);
1555 udc_disable_hwep(ep->udc, ep->hwep_num);
1556 }
1557}
1558
1559/* IN endpoint 0 transfer */
1560static int udc_ep0_in_req(struct lpc32xx_udc *udc)
1561{
1562 struct lpc32xx_request *req;
1563 struct lpc32xx_ep *ep0 = &udc->ep[0];
1564 u32 tsend, ts = 0;
1565
1566 if (list_empty(&ep0->queue))
1567 /* Nothing to send */
1568 return 0;
1569 else
1570 req = list_entry(ep0->queue.next, struct lpc32xx_request,
1571 queue);
1572
1573 tsend = ts = req->req.length - req->req.actual;
1574 if (ts == 0) {
1575 /* Send a ZLP */
1576 udc_ep0_send_zlp(udc);
1577 done(ep0, req, 0);
1578 return 1;
1579 } else if (ts > ep0->ep.maxpacket)
1580 ts = ep0->ep.maxpacket; /* Just send what we can */
1581
1582 /* Write data to the EP0 FIFO and start transfer */
1583 udc_write_hwep(udc, EP_IN, (req->req.buf + req->req.actual), ts);
1584
1585 /* Increment data pointer */
1586 req->req.actual += ts;
1587
1588 if (tsend >= ep0->ep.maxpacket)
1589 return 0; /* Stay in data transfer state */
1590
1591 /* Transfer request is complete */
1592 udc->ep0state = WAIT_FOR_SETUP;
1593 done(ep0, req, 0);
1594 return 1;
1595}
1596
1597/* OUT endpoint 0 transfer */
1598static int udc_ep0_out_req(struct lpc32xx_udc *udc)
1599{
1600 struct lpc32xx_request *req;
1601 struct lpc32xx_ep *ep0 = &udc->ep[0];
1602 u32 tr, bufferspace;
1603
1604 if (list_empty(&ep0->queue))
1605 return 0;
1606 else
1607 req = list_entry(ep0->queue.next, struct lpc32xx_request,
1608 queue);
1609
1610 if (req) {
1611 if (req->req.length == 0) {
1612 /* Just dequeue request */
1613 done(ep0, req, 0);
1614 udc->ep0state = WAIT_FOR_SETUP;
1615 return 1;
1616 }
1617
1618 /* Get data from FIFO */
1619 bufferspace = req->req.length - req->req.actual;
1620 if (bufferspace > ep0->ep.maxpacket)
1621 bufferspace = ep0->ep.maxpacket;
1622
1623 /* Copy data to buffer */
1624 prefetchw(req->req.buf + req->req.actual);
1625 tr = udc_read_hwep(udc, EP_OUT, req->req.buf + req->req.actual,
1626 bufferspace);
1627 req->req.actual += bufferspace;
1628
1629 if (tr < ep0->ep.maxpacket) {
1630 /* This is the last packet */
1631 done(ep0, req, 0);
1632 udc->ep0state = WAIT_FOR_SETUP;
1633 return 1;
1634 }
1635 }
1636
1637 return 0;
1638}
1639
1640/* Must be called with lock */
1641static void stop_activity(struct lpc32xx_udc *udc)
1642{
1643 struct usb_gadget_driver *driver = udc->driver;
1644 int i;
1645
1646 if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1647 driver = NULL;
1648
1649 udc->gadget.speed = USB_SPEED_UNKNOWN;
1650 udc->suspended = 0;
1651
1652 for (i = 0; i < NUM_ENDPOINTS; i++) {
1653 struct lpc32xx_ep *ep = &udc->ep[i];
1654 nuke(ep, -ESHUTDOWN);
1655 }
1656 if (driver) {
1657 spin_unlock(&udc->lock);
1658 driver->disconnect(&udc->gadget);
1659 spin_lock(&udc->lock);
1660 }
1661
1662 isp1301_pullup_enable(udc, 0, 0);
1663 udc_disable(udc);
1664 udc_reinit(udc);
1665}
1666
1667/*
1668 * Activate or kill host pullup
1669 * Can be called with or without lock
1670 */
1671static void pullup(struct lpc32xx_udc *udc, int is_on)
1672{
1673 if (!udc->clocked)
1674 return;
1675
1676 if (!udc->enabled || !udc->vbus)
1677 is_on = 0;
1678
1679 if (is_on != udc->pullup)
1680 isp1301_pullup_enable(udc, is_on, 0);
1681}
1682
1683/* Must be called without lock */
1684static int lpc32xx_ep_disable(struct usb_ep *_ep)
1685{
1686 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
1687 struct lpc32xx_udc *udc = ep->udc;
1688 unsigned long flags;
1689
1690 if ((ep->hwep_num_base == 0) || (ep->hwep_num == 0))
1691 return -EINVAL;
1692 spin_lock_irqsave(&udc->lock, flags);
1693
1694 nuke(ep, -ESHUTDOWN);
1695
1696 /* restore the endpoint's pristine config */
1697 ep->desc = NULL;
1698
1699 /* Clear all DMA statuses for this EP */
1700 udc_ep_dma_disable(udc, ep->hwep_num);
1701 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1702 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1703 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1704 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1705
1706 /* Remove the DD pointer in the UDCA */
1707 udc->udca_v_base[ep->hwep_num] = 0;
1708
1709 /* Disable and reset endpoint and interrupt */
1710 uda_clear_hwepint(udc, ep->hwep_num);
1711 udc_unrealize_hwep(udc, ep->hwep_num);
1712
1713 ep->hwep_num = 0;
1714
1715 spin_unlock_irqrestore(&udc->lock, flags);
1716
1717 atomic_dec(&udc->enabled_ep_cnt);
1718 wake_up(&udc->ep_disable_wait_queue);
1719
1720 return 0;
1721}
1722
1723/* Must be called without lock */
1724static int lpc32xx_ep_enable(struct usb_ep *_ep,
1725 const struct usb_endpoint_descriptor *desc)
1726{
1727 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
1728 struct lpc32xx_udc *udc = ep->udc;
1729 u16 maxpacket;
1730 u32 tmp;
1731 unsigned long flags;
1732
1733 /* Verify EP data */
1734 if ((!_ep) || (!ep) || (!desc) || (ep->desc) ||
1735 (desc->bDescriptorType != USB_DT_ENDPOINT)) {
1736 dev_dbg(udc->dev, "bad ep or descriptor\n");
1737 return -EINVAL;
1738 }
1739 maxpacket = usb_endpoint_maxp(desc);
1740 if ((maxpacket == 0) || (maxpacket > ep->maxpacket)) {
1741 dev_dbg(udc->dev, "bad ep descriptor's packet size\n");
1742 return -EINVAL;
1743 }
1744
1745 /* Don't touch EP0 */
1746 if (ep->hwep_num_base == 0) {
1747 dev_dbg(udc->dev, "Can't re-enable EP0!!!\n");
1748 return -EINVAL;
1749 }
1750
1751 /* Is driver ready? */
1752 if ((!udc->driver) || (udc->gadget.speed == USB_SPEED_UNKNOWN)) {
1753 dev_dbg(udc->dev, "bogus device state\n");
1754 return -ESHUTDOWN;
1755 }
1756
1757 tmp = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
1758 switch (tmp) {
1759 case USB_ENDPOINT_XFER_CONTROL:
1760 return -EINVAL;
1761
1762 case USB_ENDPOINT_XFER_INT:
1763 if (maxpacket > ep->maxpacket) {
1764 dev_dbg(udc->dev,
1765 "Bad INT endpoint maxpacket %d\n", maxpacket);
1766 return -EINVAL;
1767 }
1768 break;
1769
1770 case USB_ENDPOINT_XFER_BULK:
1771 switch (maxpacket) {
1772 case 8:
1773 case 16:
1774 case 32:
1775 case 64:
1776 break;
1777
1778 default:
1779 dev_dbg(udc->dev,
1780 "Bad BULK endpoint maxpacket %d\n", maxpacket);
1781 return -EINVAL;
1782 }
1783 break;
1784
1785 case USB_ENDPOINT_XFER_ISOC:
1786 break;
1787 }
1788 spin_lock_irqsave(&udc->lock, flags);
1789
1790 /* Initialize endpoint to match the selected descriptor */
1791 ep->is_in = (desc->bEndpointAddress & USB_DIR_IN) != 0;
1792 ep->desc = desc;
1793 ep->ep.maxpacket = maxpacket;
1794
1795 /* Map hardware endpoint from base and direction */
1796 if (ep->is_in)
1797 /* IN endpoints are offset 1 from the OUT endpoint */
1798 ep->hwep_num = ep->hwep_num_base + EP_IN;
1799 else
1800 ep->hwep_num = ep->hwep_num_base;
1801
1802 ep_dbg(ep, "EP enabled: %s, HW:%d, MP:%d IN:%d\n", ep->ep.name,
1803 ep->hwep_num, maxpacket, (ep->is_in == 1));
1804
1805 /* Realize the endpoint, interrupt is enabled later when
1806 * buffers are queued, IN EPs will NAK until buffers are ready */
1807 udc_realize_hwep(udc, ep->hwep_num, ep->ep.maxpacket);
1808 udc_clr_buffer_hwep(udc, ep->hwep_num);
1809 uda_disable_hwepint(udc, ep->hwep_num);
1810 udc_clrstall_hwep(udc, ep->hwep_num);
1811
1812 /* Clear all DMA statuses for this EP */
1813 udc_ep_dma_disable(udc, ep->hwep_num);
1814 writel(1 << ep->hwep_num, USBD_EOTINTCLR(udc->udp_baseaddr));
1815 writel(1 << ep->hwep_num, USBD_NDDRTINTCLR(udc->udp_baseaddr));
1816 writel(1 << ep->hwep_num, USBD_SYSERRTINTCLR(udc->udp_baseaddr));
1817 writel(1 << ep->hwep_num, USBD_DMARCLR(udc->udp_baseaddr));
1818
1819 spin_unlock_irqrestore(&udc->lock, flags);
1820
1821 atomic_inc(&udc->enabled_ep_cnt);
1822 return 0;
1823}
1824
1825/*
1826 * Allocate a USB request list
1827 * Can be called with or without lock
1828 */
1829static struct usb_request *lpc32xx_ep_alloc_request(struct usb_ep *_ep,
1830 gfp_t gfp_flags)
1831{
1832 struct lpc32xx_request *req;
1833
1834 req = kzalloc(sizeof(struct lpc32xx_request), gfp_flags);
1835 if (!req)
1836 return NULL;
1837
1838 INIT_LIST_HEAD(&req->queue);
1839 return &req->req;
1840}
1841
1842/*
1843 * De-allocate a USB request list
1844 * Can be called with or without lock
1845 */
1846static void lpc32xx_ep_free_request(struct usb_ep *_ep,
1847 struct usb_request *_req)
1848{
1849 struct lpc32xx_request *req;
1850
1851 req = container_of(_req, struct lpc32xx_request, req);
1852 BUG_ON(!list_empty(&req->queue));
1853 kfree(req);
1854}
1855
1856/* Must be called without lock */
1857static int lpc32xx_ep_queue(struct usb_ep *_ep,
1858 struct usb_request *_req, gfp_t gfp_flags)
1859{
1860 struct lpc32xx_request *req;
1861 struct lpc32xx_ep *ep;
1862 struct lpc32xx_udc *udc;
1863 unsigned long flags;
1864 int status = 0;
1865
1866 req = container_of(_req, struct lpc32xx_request, req);
1867 ep = container_of(_ep, struct lpc32xx_ep, ep);
1868
1869 if (!_req || !_req->complete || !_req->buf ||
1870 !list_empty(&req->queue))
1871 return -EINVAL;
1872
1873 udc = ep->udc;
1874
1875 if (!_ep || (!ep->desc && ep->hwep_num_base != 0)) {
1876 dev_dbg(udc->dev, "invalid ep\n");
1877 return -EINVAL;
1878 }
1879
1880
1881 if ((!udc) || (!udc->driver) ||
1882 (udc->gadget.speed == USB_SPEED_UNKNOWN)) {
1883 dev_dbg(udc->dev, "invalid device\n");
1884 return -EINVAL;
1885 }
1886
1887 if (ep->lep) {
1888 enum dma_data_direction direction;
1889 struct lpc32xx_usbd_dd_gad *dd;
1890
1891 /* Map DMA pointer */
1892 if (ep->is_in)
1893 direction = DMA_TO_DEVICE;
1894 else
1895 direction = DMA_FROM_DEVICE;
1896
1897 if (req->req.dma == 0) {
1898 req->req.dma = dma_map_single(
1899 ep->udc->gadget.dev.parent,
1900 req->req.buf, req->req.length, direction);
1901 req->mapped = 1;
1902 } else {
1903 dma_sync_single_for_device(
1904 ep->udc->gadget.dev.parent, req->req.dma,
1905 req->req.length, direction);
1906 req->mapped = 0;
1907 }
1908
1909 /* For the request, build a list of DDs */
1910 dd = udc_dd_alloc(udc);
1911 if (!dd) {
1912 /* Error allocating DD */
1913 return -ENOMEM;
1914 }
1915 req->dd_desc_ptr = dd;
1916
1917 /* Setup the DMA descriptor */
1918 dd->dd_next_phy = dd->dd_next_v = 0;
1919 dd->dd_buffer_addr = req->req.dma;
1920 dd->dd_status = 0;
1921
1922 /* Special handling for ISO EPs */
1923 if (ep->eptype == EP_ISO_TYPE) {
1924 dd->dd_setup = DD_SETUP_ISO_EP |
1925 DD_SETUP_PACKETLEN(0) |
1926 DD_SETUP_DMALENBYTES(1);
1927 dd->dd_iso_ps_mem_addr = dd->this_dma + 24;
1928 if (ep->is_in)
1929 dd->iso_status[0] = req->req.length;
1930 else
1931 dd->iso_status[0] = 0;
1932 } else
1933 dd->dd_setup = DD_SETUP_PACKETLEN(ep->ep.maxpacket) |
1934 DD_SETUP_DMALENBYTES(req->req.length);
1935 }
1936
1937 ep_dbg(ep, "%s queue req %p len %d buf %p (in=%d) z=%d\n", _ep->name,
1938 _req, _req->length, _req->buf, ep->is_in, _req->zero);
1939
1940 spin_lock_irqsave(&udc->lock, flags);
1941
1942 _req->status = -EINPROGRESS;
1943 _req->actual = 0;
1944 req->send_zlp = _req->zero;
1945
1946 /* Kickstart empty queues */
1947 if (list_empty(&ep->queue)) {
1948 list_add_tail(&req->queue, &ep->queue);
1949
1950 if (ep->hwep_num_base == 0) {
1951 /* Handle expected data direction */
1952 if (ep->is_in) {
1953 /* IN packet to host */
1954 udc->ep0state = DATA_IN;
1955 status = udc_ep0_in_req(udc);
1956 } else {
1957 /* OUT packet from host */
1958 udc->ep0state = DATA_OUT;
1959 status = udc_ep0_out_req(udc);
1960 }
1961 } else if (ep->is_in) {
1962 /* IN packet to host and kick off transfer */
1963 if (!ep->req_pending)
1964 udc_ep_in_req_dma(udc, ep);
1965 } else
1966 /* OUT packet from host and kick off list */
1967 if (!ep->req_pending)
1968 udc_ep_out_req_dma(udc, ep);
1969 } else
1970 list_add_tail(&req->queue, &ep->queue);
1971
1972 spin_unlock_irqrestore(&udc->lock, flags);
1973
1974 return (status < 0) ? status : 0;
1975}
1976
1977/* Must be called without lock */
1978static int lpc32xx_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
1979{
1980 struct lpc32xx_ep *ep;
1981 struct lpc32xx_request *req;
1982 unsigned long flags;
1983
1984 ep = container_of(_ep, struct lpc32xx_ep, ep);
1985 if (!_ep || ep->hwep_num_base == 0)
1986 return -EINVAL;
1987
1988 spin_lock_irqsave(&ep->udc->lock, flags);
1989
1990 /* make sure it's actually queued on this endpoint */
1991 list_for_each_entry(req, &ep->queue, queue) {
1992 if (&req->req == _req)
1993 break;
1994 }
1995 if (&req->req != _req) {
1996 spin_unlock_irqrestore(&ep->udc->lock, flags);
1997 return -EINVAL;
1998 }
1999
2000 done(ep, req, -ECONNRESET);
2001
2002 spin_unlock_irqrestore(&ep->udc->lock, flags);
2003
2004 return 0;
2005}
2006
2007/* Must be called without lock */
2008static int lpc32xx_ep_set_halt(struct usb_ep *_ep, int value)
2009{
2010 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
2011 struct lpc32xx_udc *udc = ep->udc;
2012 unsigned long flags;
2013
2014 if ((!ep) || (ep->desc == NULL) || (ep->hwep_num <= 1))
2015 return -EINVAL;
2016
2017 /* Don't halt an IN EP */
2018 if (ep->is_in)
2019 return -EAGAIN;
2020
2021 spin_lock_irqsave(&udc->lock, flags);
2022
2023 if (value == 1) {
2024 /* stall */
2025 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
2026 DAT_WR_BYTE(EP_STAT_ST));
2027 } else {
2028 /* End stall */
2029 ep->wedge = 0;
2030 udc_protocol_cmd_data_w(udc, CMD_SET_EP_STAT(ep->hwep_num),
2031 DAT_WR_BYTE(0));
2032 }
2033
2034 spin_unlock_irqrestore(&udc->lock, flags);
2035
2036 return 0;
2037}
2038
2039/* set the halt feature and ignores clear requests */
2040static int lpc32xx_ep_set_wedge(struct usb_ep *_ep)
2041{
2042 struct lpc32xx_ep *ep = container_of(_ep, struct lpc32xx_ep, ep);
2043
2044 if (!_ep || !ep->udc)
2045 return -EINVAL;
2046
2047 ep->wedge = 1;
2048
2049 return usb_ep_set_halt(_ep);
2050}
2051
2052static const struct usb_ep_ops lpc32xx_ep_ops = {
2053 .enable = lpc32xx_ep_enable,
2054 .disable = lpc32xx_ep_disable,
2055 .alloc_request = lpc32xx_ep_alloc_request,
2056 .free_request = lpc32xx_ep_free_request,
2057 .queue = lpc32xx_ep_queue,
2058 .dequeue = lpc32xx_ep_dequeue,
2059 .set_halt = lpc32xx_ep_set_halt,
2060 .set_wedge = lpc32xx_ep_set_wedge,
2061};
2062
2063/* Send a ZLP on a non-0 IN EP */
2064void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2065{
2066 /* Clear EP status */
2067 udc_clearep_getsts(udc, ep->hwep_num);
2068
2069 /* Send ZLP via FIFO mechanism */
2070 udc_write_hwep(udc, ep->hwep_num, NULL, 0);
2071}
2072
2073/*
2074 * Handle EP completion for ZLP
2075 * This function will only be called when a delayed ZLP needs to be sent out
2076 * after a DMA transfer has filled both buffers.
2077 */
2078void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2079{
2080 u32 epstatus;
2081 struct lpc32xx_request *req;
2082
2083 if (ep->hwep_num <= 0)
2084 return;
2085
2086 uda_clear_hwepint(udc, ep->hwep_num);
2087
2088 /* If this interrupt isn't enabled, return now */
2089 if (!(udc->enabled_hwepints & (1 << ep->hwep_num)))
2090 return;
2091
2092 /* Get endpoint status */
2093 epstatus = udc_clearep_getsts(udc, ep->hwep_num);
2094
2095 /*
2096 * This should never happen, but protect against writing to the
2097 * buffer when full.
2098 */
2099 if (epstatus & EP_SEL_F)
2100 return;
2101
2102 if (ep->is_in) {
2103 udc_send_in_zlp(udc, ep);
2104 uda_disable_hwepint(udc, ep->hwep_num);
2105 } else
2106 return;
2107
2108 /* If there isn't a request waiting, something went wrong */
2109 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
2110 if (req) {
2111 done(ep, req, 0);
2112
2113 /* Start another request if ready */
2114 if (!list_empty(&ep->queue)) {
2115 if (ep->is_in)
2116 udc_ep_in_req_dma(udc, ep);
2117 else
2118 udc_ep_out_req_dma(udc, ep);
2119 } else
2120 ep->req_pending = 0;
2121 }
2122}
2123
2124
2125/* DMA end of transfer completion */
2126static void udc_handle_dma_ep(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
2127{
2128 u32 status, epstatus;
2129 struct lpc32xx_request *req;
2130 struct lpc32xx_usbd_dd_gad *dd;
2131
2132#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2133 ep->totalints++;
2134#endif
2135
2136 req = list_entry(ep->queue.next, struct lpc32xx_request, queue);
2137 if (!req) {
2138 ep_err(ep, "DMA interrupt on no req!\n");
2139 return;
2140 }
2141 dd = req->dd_desc_ptr;
2142
2143 /* DMA descriptor should always be retired for this call */
2144 if (!(dd->dd_status & DD_STATUS_DD_RETIRED))
2145 ep_warn(ep, "DMA descriptor did not retire\n");
2146
2147 /* Disable DMA */
2148 udc_ep_dma_disable(udc, ep->hwep_num);
2149 writel((1 << ep->hwep_num), USBD_EOTINTCLR(udc->udp_baseaddr));
2150 writel((1 << ep->hwep_num), USBD_NDDRTINTCLR(udc->udp_baseaddr));
2151
2152 /* System error? */
2153 if (readl(USBD_SYSERRTINTST(udc->udp_baseaddr)) &
2154 (1 << ep->hwep_num)) {
2155 writel((1 << ep->hwep_num),
2156 USBD_SYSERRTINTCLR(udc->udp_baseaddr));
2157 ep_err(ep, "AHB critical error!\n");
2158 ep->req_pending = 0;
2159
2160 /* The error could have occurred on a packet of a multipacket
2161 * transfer, so recovering the transfer is not possible. Close
2162 * the request with an error */
2163 done(ep, req, -ECONNABORTED);
2164 return;
2165 }
2166
2167 /* Handle the current DD's status */
2168 status = dd->dd_status;
2169 switch (status & DD_STATUS_STS_MASK) {
2170 case DD_STATUS_STS_NS:
2171 /* DD not serviced? This shouldn't happen! */
2172 ep->req_pending = 0;
2173 ep_err(ep, "DMA critical EP error: DD not serviced (0x%x)!\n",
2174 status);
2175
2176 done(ep, req, -ECONNABORTED);
2177 return;
2178
2179 case DD_STATUS_STS_BS:
2180 /* Interrupt only fires on EOT - This shouldn't happen! */
2181 ep->req_pending = 0;
2182 ep_err(ep, "DMA critical EP error: EOT prior to service completion (0x%x)!\n",
2183 status);
2184 done(ep, req, -ECONNABORTED);
2185 return;
2186
2187 case DD_STATUS_STS_NC:
2188 case DD_STATUS_STS_DUR:
2189 /* Really just a short packet, not an underrun */
2190 /* This is a good status and what we expect */
2191 break;
2192
2193 default:
2194 /* Data overrun, system error, or unknown */
2195 ep->req_pending = 0;
2196 ep_err(ep, "DMA critical EP error: System error (0x%x)!\n",
2197 status);
2198 done(ep, req, -ECONNABORTED);
2199 return;
2200 }
2201
2202 /* ISO endpoints are handled differently */
2203 if (ep->eptype == EP_ISO_TYPE) {
2204 if (ep->is_in)
2205 req->req.actual = req->req.length;
2206 else
2207 req->req.actual = dd->iso_status[0] & 0xFFFF;
2208 } else
2209 req->req.actual += DD_STATUS_CURDMACNT(status);
2210
2211 /* Send a ZLP if necessary. This will be done for non-int
2212 * packets which have a size that is a divisor of MAXP */
2213 if (req->send_zlp) {
2214 /*
2215 * If at least 1 buffer is available, send the ZLP now.
2216 * Otherwise, the ZLP send needs to be deferred until a
2217 * buffer is available.
2218 */
2219 if (udc_clearep_getsts(udc, ep->hwep_num) & EP_SEL_F) {
2220 udc_clearep_getsts(udc, ep->hwep_num);
2221 uda_enable_hwepint(udc, ep->hwep_num);
2222 epstatus = udc_clearep_getsts(udc, ep->hwep_num);
2223
2224 /* Let the EP interrupt handle the ZLP */
2225 return;
2226 } else
2227 udc_send_in_zlp(udc, ep);
2228 }
2229
2230 /* Transfer request is complete */
2231 done(ep, req, 0);
2232
2233 /* Start another request if ready */
2234 udc_clearep_getsts(udc, ep->hwep_num);
2235 if (!list_empty((&ep->queue))) {
2236 if (ep->is_in)
2237 udc_ep_in_req_dma(udc, ep);
2238 else
2239 udc_ep_out_req_dma(udc, ep);
2240 } else
2241 ep->req_pending = 0;
2242
2243}
2244
2245/*
2246 *
2247 * Endpoint 0 functions
2248 *
2249 */
2250static void udc_handle_dev(struct lpc32xx_udc *udc)
2251{
2252 u32 tmp;
2253
2254 udc_protocol_cmd_w(udc, CMD_GET_DEV_STAT);
2255 tmp = udc_protocol_cmd_r(udc, DAT_GET_DEV_STAT);
2256
2257 if (tmp & DEV_RST)
2258 uda_usb_reset(udc);
2259 else if (tmp & DEV_CON_CH)
2260 uda_power_event(udc, (tmp & DEV_CON));
2261 else if (tmp & DEV_SUS_CH) {
2262 if (tmp & DEV_SUS) {
2263 if (udc->vbus == 0)
2264 stop_activity(udc);
2265 else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2266 udc->driver) {
2267 /* Power down transceiver */
2268 udc->poweron = 0;
2269 schedule_work(&udc->pullup_job);
2270 uda_resm_susp_event(udc, 1);
2271 }
2272 } else if ((udc->gadget.speed != USB_SPEED_UNKNOWN) &&
2273 udc->driver && udc->vbus) {
2274 uda_resm_susp_event(udc, 0);
2275 /* Power up transceiver */
2276 udc->poweron = 1;
2277 schedule_work(&udc->pullup_job);
2278 }
2279 }
2280}
2281
2282static int udc_get_status(struct lpc32xx_udc *udc, u16 reqtype, u16 wIndex)
2283{
2284 struct lpc32xx_ep *ep;
2285 u32 ep0buff = 0, tmp;
2286
2287 switch (reqtype & USB_RECIP_MASK) {
2288 case USB_RECIP_INTERFACE:
2289 break; /* Not supported */
2290
2291 case USB_RECIP_DEVICE:
2292 ep0buff = (udc->selfpowered << USB_DEVICE_SELF_POWERED);
2293 if (udc->dev_status & (1 << USB_DEVICE_REMOTE_WAKEUP))
2294 ep0buff |= (1 << USB_DEVICE_REMOTE_WAKEUP);
2295 break;
2296
2297 case USB_RECIP_ENDPOINT:
2298 tmp = wIndex & USB_ENDPOINT_NUMBER_MASK;
2299 ep = &udc->ep[tmp];
2300 if ((tmp == 0) || (tmp >= NUM_ENDPOINTS) || (tmp && !ep->desc))
2301 return -EOPNOTSUPP;
2302
2303 if (wIndex & USB_DIR_IN) {
2304 if (!ep->is_in)
2305 return -EOPNOTSUPP; /* Something's wrong */
2306 } else if (ep->is_in)
2307 return -EOPNOTSUPP; /* Not an IN endpoint */
2308
2309 /* Get status of the endpoint */
2310 udc_protocol_cmd_w(udc, CMD_SEL_EP(ep->hwep_num));
2311 tmp = udc_protocol_cmd_r(udc, DAT_SEL_EP(ep->hwep_num));
2312
2313 if (tmp & EP_SEL_ST)
2314 ep0buff = (1 << USB_ENDPOINT_HALT);
2315 else
2316 ep0buff = 0;
2317 break;
2318
2319 default:
2320 break;
2321 }
2322
2323 /* Return data */
2324 udc_write_hwep(udc, EP_IN, &ep0buff, 2);
2325
2326 return 0;
2327}
2328
2329static void udc_handle_ep0_setup(struct lpc32xx_udc *udc)
2330{
2331 struct lpc32xx_ep *ep, *ep0 = &udc->ep[0];
2332 struct usb_ctrlrequest ctrlpkt;
2333 int i, bytes;
2334 u16 wIndex, wValue, wLength, reqtype, req, tmp;
2335
2336 /* Nuke previous transfers */
2337 nuke(ep0, -EPROTO);
2338
2339 /* Get setup packet */
2340 bytes = udc_read_hwep(udc, EP_OUT, (u32 *) &ctrlpkt, 8);
2341 if (bytes != 8) {
2342 ep_warn(ep0, "Incorrectly sized setup packet (s/b 8, is %d)!\n",
2343 bytes);
2344 return;
2345 }
2346
2347 /* Native endianness */
2348 wIndex = le16_to_cpu(ctrlpkt.wIndex);
2349 wValue = le16_to_cpu(ctrlpkt.wValue);
2350 wLength = le16_to_cpu(ctrlpkt.wLength);
2351 reqtype = le16_to_cpu(ctrlpkt.bRequestType);
2352
2353 /* Set direction of EP0 */
2354 if (likely(reqtype & USB_DIR_IN))
2355 ep0->is_in = 1;
2356 else
2357 ep0->is_in = 0;
2358
2359 /* Handle SETUP packet */
2360 req = le16_to_cpu(ctrlpkt.bRequest);
2361 switch (req) {
2362 case USB_REQ_CLEAR_FEATURE:
2363 case USB_REQ_SET_FEATURE:
2364 switch (reqtype) {
2365 case (USB_TYPE_STANDARD | USB_RECIP_DEVICE):
2366 if (wValue != USB_DEVICE_REMOTE_WAKEUP)
2367 goto stall; /* Nothing else handled */
2368
2369 /* Tell board about event */
2370 if (req == USB_REQ_CLEAR_FEATURE)
2371 udc->dev_status &=
2372 ~(1 << USB_DEVICE_REMOTE_WAKEUP);
2373 else
2374 udc->dev_status |=
2375 (1 << USB_DEVICE_REMOTE_WAKEUP);
2376 uda_remwkp_cgh(udc);
2377 goto zlp_send;
2378
2379 case (USB_TYPE_STANDARD | USB_RECIP_ENDPOINT):
2380 tmp = wIndex & USB_ENDPOINT_NUMBER_MASK;
2381 if ((wValue != USB_ENDPOINT_HALT) ||
2382 (tmp >= NUM_ENDPOINTS))
2383 break;
2384
2385 /* Find hardware endpoint from logical endpoint */
2386 ep = &udc->ep[tmp];
2387 tmp = ep->hwep_num;
2388 if (tmp == 0)
2389 break;
2390
2391 if (req == USB_REQ_SET_FEATURE)
2392 udc_stall_hwep(udc, tmp);
2393 else if (!ep->wedge)
2394 udc_clrstall_hwep(udc, tmp);
2395
2396 goto zlp_send;
2397
2398 default:
2399 break;
2400 }
2401
2402
2403 case USB_REQ_SET_ADDRESS:
2404 if (reqtype == (USB_TYPE_STANDARD | USB_RECIP_DEVICE)) {
2405 udc_set_address(udc, wValue);
2406 goto zlp_send;
2407 }
2408 break;
2409
2410 case USB_REQ_GET_STATUS:
2411 udc_get_status(udc, reqtype, wIndex);
2412 return;
2413
2414 default:
2415 break; /* Let GadgetFS handle the descriptor instead */
2416 }
2417
2418 if (likely(udc->driver)) {
2419 /* device-2-host (IN) or no data setup command, process
2420 * immediately */
2421 spin_unlock(&udc->lock);
2422 i = udc->driver->setup(&udc->gadget, &ctrlpkt);
2423
2424 spin_lock(&udc->lock);
2425 if (req == USB_REQ_SET_CONFIGURATION) {
2426 /* Configuration is set after endpoints are realized */
2427 if (wValue) {
2428 /* Set configuration */
2429 udc_set_device_configured(udc);
2430
2431 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2432 DAT_WR_BYTE(AP_CLK |
2433 INAK_BI | INAK_II));
2434 } else {
2435 /* Clear configuration */
2436 udc_set_device_unconfigured(udc);
2437
2438 /* Disable NAK interrupts */
2439 udc_protocol_cmd_data_w(udc, CMD_SET_MODE,
2440 DAT_WR_BYTE(AP_CLK));
2441 }
2442 }
2443
2444 if (i < 0) {
2445 /* setup processing failed, force stall */
2446 dev_err(udc->dev,
2447 "req %02x.%02x protocol STALL; stat %d\n",
2448 reqtype, req, i);
2449 udc->ep0state = WAIT_FOR_SETUP;
2450 goto stall;
2451 }
2452 }
2453
2454 if (!ep0->is_in)
2455 udc_ep0_send_zlp(udc); /* ZLP IN packet on data phase */
2456
2457 return;
2458
2459stall:
2460 udc_stall_hwep(udc, EP_IN);
2461 return;
2462
2463zlp_send:
2464 udc_ep0_send_zlp(udc);
2465 return;
2466}
2467
2468/* IN endpoint 0 transfer */
2469static void udc_handle_ep0_in(struct lpc32xx_udc *udc)
2470{
2471 struct lpc32xx_ep *ep0 = &udc->ep[0];
2472 u32 epstatus;
2473
2474 /* Clear EP interrupt */
2475 epstatus = udc_clearep_getsts(udc, EP_IN);
2476
2477#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2478 ep0->totalints++;
2479#endif
2480
2481 /* Stalled? Clear stall and reset buffers */
2482 if (epstatus & EP_SEL_ST) {
2483 udc_clrstall_hwep(udc, EP_IN);
2484 nuke(ep0, -ECONNABORTED);
2485 udc->ep0state = WAIT_FOR_SETUP;
2486 return;
2487 }
2488
2489 /* Is a buffer available? */
2490 if (!(epstatus & EP_SEL_F)) {
2491 /* Handle based on current state */
2492 if (udc->ep0state == DATA_IN)
2493 udc_ep0_in_req(udc);
2494 else {
2495 /* Unknown state for EP0 oe end of DATA IN phase */
2496 nuke(ep0, -ECONNABORTED);
2497 udc->ep0state = WAIT_FOR_SETUP;
2498 }
2499 }
2500}
2501
2502/* OUT endpoint 0 transfer */
2503static void udc_handle_ep0_out(struct lpc32xx_udc *udc)
2504{
2505 struct lpc32xx_ep *ep0 = &udc->ep[0];
2506 u32 epstatus;
2507
2508 /* Clear EP interrupt */
2509 epstatus = udc_clearep_getsts(udc, EP_OUT);
2510
2511
2512#ifdef CONFIG_USB_GADGET_DEBUG_FILES
2513 ep0->totalints++;
2514#endif
2515
2516 /* Stalled? */
2517 if (epstatus & EP_SEL_ST) {
2518 udc_clrstall_hwep(udc, EP_OUT);
2519 nuke(ep0, -ECONNABORTED);
2520 udc->ep0state = WAIT_FOR_SETUP;
2521 return;
2522 }
2523
2524 /* A NAK may occur if a packet couldn't be received yet */
2525 if (epstatus & EP_SEL_EPN)
2526 return;
2527 /* Setup packet incoming? */
2528 if (epstatus & EP_SEL_STP) {
2529 nuke(ep0, 0);
2530 udc->ep0state = WAIT_FOR_SETUP;
2531 }
2532
2533 /* Data available? */
2534 if (epstatus & EP_SEL_F)
2535 /* Handle based on current state */
2536 switch (udc->ep0state) {
2537 case WAIT_FOR_SETUP:
2538 udc_handle_ep0_setup(udc);
2539 break;
2540
2541 case DATA_OUT:
2542 udc_ep0_out_req(udc);
2543 break;
2544
2545 default:
2546 /* Unknown state for EP0 */
2547 nuke(ep0, -ECONNABORTED);
2548 udc->ep0state = WAIT_FOR_SETUP;
2549 }
2550}
2551
2552/* Must be called without lock */
2553static int lpc32xx_get_frame(struct usb_gadget *gadget)
2554{
2555 int frame;
2556 unsigned long flags;
2557 struct lpc32xx_udc *udc = to_udc(gadget);
2558
2559 if (!udc->clocked)
2560 return -EINVAL;
2561
2562 spin_lock_irqsave(&udc->lock, flags);
2563
2564 frame = (int) udc_get_current_frame(udc);
2565
2566 spin_unlock_irqrestore(&udc->lock, flags);
2567
2568 return frame;
2569}
2570
2571static int lpc32xx_wakeup(struct usb_gadget *gadget)
2572{
2573 return -ENOTSUPP;
2574}
2575
2576static int lpc32xx_set_selfpowered(struct usb_gadget *gadget, int is_on)
2577{
2578 struct lpc32xx_udc *udc = to_udc(gadget);
2579
2580 /* Always self-powered */
2581 udc->selfpowered = (is_on != 0);
2582
2583 return 0;
2584}
2585
2586/*
2587 * vbus is here! turn everything on that's ready
2588 * Must be called without lock
2589 */
2590static int lpc32xx_vbus_session(struct usb_gadget *gadget, int is_active)
2591{
2592 unsigned long flags;
2593 struct lpc32xx_udc *udc = to_udc(gadget);
2594
2595 spin_lock_irqsave(&udc->lock, flags);
2596
2597 /* Doesn't need lock */
2598 if (udc->driver) {
2599 udc_clk_set(udc, 1);
2600 udc_enable(udc);
2601 pullup(udc, is_active);
2602 } else {
2603 stop_activity(udc);
2604 pullup(udc, 0);
2605
2606 spin_unlock_irqrestore(&udc->lock, flags);
2607 /*
2608 * Wait for all the endpoints to disable,
2609 * before disabling clocks. Don't wait if
2610 * endpoints are not enabled.
2611 */
2612 if (atomic_read(&udc->enabled_ep_cnt))
2613 wait_event_interruptible(udc->ep_disable_wait_queue,
2614 (atomic_read(&udc->enabled_ep_cnt) == 0));
2615
2616 spin_lock_irqsave(&udc->lock, flags);
2617
2618 udc_clk_set(udc, 0);
2619 }
2620
2621 spin_unlock_irqrestore(&udc->lock, flags);
2622
2623 return 0;
2624}
2625
2626/* Can be called with or without lock */
2627static int lpc32xx_pullup(struct usb_gadget *gadget, int is_on)
2628{
2629 struct lpc32xx_udc *udc = to_udc(gadget);
2630
2631 /* Doesn't need lock */
2632 pullup(udc, is_on);
2633
2634 return 0;
2635}
2636
2637static int lpc32xx_start(struct usb_gadget_driver *driver,
2638 int (*bind)(struct usb_gadget *));
2639static int lpc32xx_stop(struct usb_gadget_driver *driver);
2640
2641static const struct usb_gadget_ops lpc32xx_udc_ops = {
2642 .get_frame = lpc32xx_get_frame,
2643 .wakeup = lpc32xx_wakeup,
2644 .set_selfpowered = lpc32xx_set_selfpowered,
2645 .vbus_session = lpc32xx_vbus_session,
2646 .pullup = lpc32xx_pullup,
2647 .start = lpc32xx_start,
2648 .stop = lpc32xx_stop,
2649};
2650
2651static void nop_release(struct device *dev)
2652{
2653 /* nothing to free */
2654}
2655
2656static struct lpc32xx_udc controller = {
2657 .gadget = {
2658 .ops = &lpc32xx_udc_ops,
2659 .ep0 = &controller.ep[0].ep,
2660 .name = driver_name,
2661 .dev = {
2662 .init_name = "gadget",
2663 .release = nop_release,
2664 }
2665 },
2666 .ep[0] = {
2667 .ep = {
2668 .name = "ep0",
2669 .ops = &lpc32xx_ep_ops,
2670 },
2671 .udc = &controller,
2672 .maxpacket = 64,
2673 .hwep_num_base = 0,
2674 .hwep_num = 0, /* Can be 0 or 1, has special handling */
2675 .lep = 0,
2676 .eptype = EP_CTL_TYPE,
2677 },
2678 .ep[1] = {
2679 .ep = {
2680 .name = "ep1-int",
2681 .ops = &lpc32xx_ep_ops,
2682 },
2683 .udc = &controller,
2684 .maxpacket = 64,
2685 .hwep_num_base = 2,
2686 .hwep_num = 0, /* 2 or 3, will be set later */
2687 .lep = 1,
2688 .eptype = EP_INT_TYPE,
2689 },
2690 .ep[2] = {
2691 .ep = {
2692 .name = "ep2-bulk",
2693 .ops = &lpc32xx_ep_ops,
2694 },
2695 .udc = &controller,
2696 .maxpacket = 64,
2697 .hwep_num_base = 4,
2698 .hwep_num = 0, /* 4 or 5, will be set later */
2699 .lep = 2,
2700 .eptype = EP_BLK_TYPE,
2701 },
2702 .ep[3] = {
2703 .ep = {
2704 .name = "ep3-iso",
2705 .ops = &lpc32xx_ep_ops,
2706 },
2707 .udc = &controller,
2708 .maxpacket = 1023,
2709 .hwep_num_base = 6,
2710 .hwep_num = 0, /* 6 or 7, will be set later */
2711 .lep = 3,
2712 .eptype = EP_ISO_TYPE,
2713 },
2714 .ep[4] = {
2715 .ep = {
2716 .name = "ep4-int",
2717 .ops = &lpc32xx_ep_ops,
2718 },
2719 .udc = &controller,
2720 .maxpacket = 64,
2721 .hwep_num_base = 8,
2722 .hwep_num = 0, /* 8 or 9, will be set later */
2723 .lep = 4,
2724 .eptype = EP_INT_TYPE,
2725 },
2726 .ep[5] = {
2727 .ep = {
2728 .name = "ep5-bulk",
2729 .ops = &lpc32xx_ep_ops,
2730 },
2731 .udc = &controller,
2732 .maxpacket = 64,
2733 .hwep_num_base = 10,
2734 .hwep_num = 0, /* 10 or 11, will be set later */
2735 .lep = 5,
2736 .eptype = EP_BLK_TYPE,
2737 },
2738 .ep[6] = {
2739 .ep = {
2740 .name = "ep6-iso",
2741 .ops = &lpc32xx_ep_ops,
2742 },
2743 .udc = &controller,
2744 .maxpacket = 1023,
2745 .hwep_num_base = 12,
2746 .hwep_num = 0, /* 12 or 13, will be set later */
2747 .lep = 6,
2748 .eptype = EP_ISO_TYPE,
2749 },
2750 .ep[7] = {
2751 .ep = {
2752 .name = "ep7-int",
2753 .ops = &lpc32xx_ep_ops,
2754 },
2755 .udc = &controller,
2756 .maxpacket = 64,
2757 .hwep_num_base = 14,
2758 .hwep_num = 0,
2759 .lep = 7,
2760 .eptype = EP_INT_TYPE,
2761 },
2762 .ep[8] = {
2763 .ep = {
2764 .name = "ep8-bulk",
2765 .ops = &lpc32xx_ep_ops,
2766 },
2767 .udc = &controller,
2768 .maxpacket = 64,
2769 .hwep_num_base = 16,
2770 .hwep_num = 0,
2771 .lep = 8,
2772 .eptype = EP_BLK_TYPE,
2773 },
2774 .ep[9] = {
2775 .ep = {
2776 .name = "ep9-iso",
2777 .ops = &lpc32xx_ep_ops,
2778 },
2779 .udc = &controller,
2780 .maxpacket = 1023,
2781 .hwep_num_base = 18,
2782 .hwep_num = 0,
2783 .lep = 9,
2784 .eptype = EP_ISO_TYPE,
2785 },
2786 .ep[10] = {
2787 .ep = {
2788 .name = "ep10-int",
2789 .ops = &lpc32xx_ep_ops,
2790 },
2791 .udc = &controller,
2792 .maxpacket = 64,
2793 .hwep_num_base = 20,
2794 .hwep_num = 0,
2795 .lep = 10,
2796 .eptype = EP_INT_TYPE,
2797 },
2798 .ep[11] = {
2799 .ep = {
2800 .name = "ep11-bulk",
2801 .ops = &lpc32xx_ep_ops,
2802 },
2803 .udc = &controller,
2804 .maxpacket = 64,
2805 .hwep_num_base = 22,
2806 .hwep_num = 0,
2807 .lep = 11,
2808 .eptype = EP_BLK_TYPE,
2809 },
2810 .ep[12] = {
2811 .ep = {
2812 .name = "ep12-iso",
2813 .ops = &lpc32xx_ep_ops,
2814 },
2815 .udc = &controller,
2816 .maxpacket = 1023,
2817 .hwep_num_base = 24,
2818 .hwep_num = 0,
2819 .lep = 12,
2820 .eptype = EP_ISO_TYPE,
2821 },
2822 .ep[13] = {
2823 .ep = {
2824 .name = "ep13-int",
2825 .ops = &lpc32xx_ep_ops,
2826 },
2827 .udc = &controller,
2828 .maxpacket = 64,
2829 .hwep_num_base = 26,
2830 .hwep_num = 0,
2831 .lep = 13,
2832 .eptype = EP_INT_TYPE,
2833 },
2834 .ep[14] = {
2835 .ep = {
2836 .name = "ep14-bulk",
2837 .ops = &lpc32xx_ep_ops,
2838 },
2839 .udc = &controller,
2840 .maxpacket = 64,
2841 .hwep_num_base = 28,
2842 .hwep_num = 0,
2843 .lep = 14,
2844 .eptype = EP_BLK_TYPE,
2845 },
2846 .ep[15] = {
2847 .ep = {
2848 .name = "ep15-bulk",
2849 .ops = &lpc32xx_ep_ops,
2850 },
2851 .udc = &controller,
2852 .maxpacket = 1023,
2853 .hwep_num_base = 30,
2854 .hwep_num = 0,
2855 .lep = 15,
2856 .eptype = EP_BLK_TYPE,
2857 },
2858};
2859
2860/* ISO and status interrupts */
2861static irqreturn_t lpc32xx_usb_lp_irq(int irq, void *_udc)
2862{
2863 u32 tmp, devstat;
2864 struct lpc32xx_udc *udc = _udc;
2865
2866 spin_lock(&udc->lock);
2867
2868 /* Read the device status register */
2869 devstat = readl(USBD_DEVINTST(udc->udp_baseaddr));
2870
2871 devstat &= ~USBD_EP_FAST;
2872 writel(devstat, USBD_DEVINTCLR(udc->udp_baseaddr));
2873 devstat = devstat & udc->enabled_devints;
2874
2875 /* Device specific handling needed? */
2876 if (devstat & USBD_DEV_STAT)
2877 udc_handle_dev(udc);
2878
2879 /* Start of frame? (devstat & FRAME_INT):
2880 * The frame interrupt isn't really needed for ISO support,
2881 * as the driver will queue the necessary packets */
2882
2883 /* Error? */
2884 if (devstat & ERR_INT) {
2885 /* All types of errors, from cable removal during transfer to
2886 * misc protocol and bit errors. These are mostly for just info,
2887 * as the USB hardware will work around these. If these errors
2888 * happen alot, something is wrong. */
2889 udc_protocol_cmd_w(udc, CMD_RD_ERR_STAT);
2890 tmp = udc_protocol_cmd_r(udc, DAT_RD_ERR_STAT);
2891 dev_dbg(udc->dev, "Device error (0x%x)!\n", tmp);
2892 }
2893
2894 spin_unlock(&udc->lock);
2895
2896 return IRQ_HANDLED;
2897}
2898
2899/* EP interrupts */
2900static irqreturn_t lpc32xx_usb_hp_irq(int irq, void *_udc)
2901{
2902 u32 tmp;
2903 struct lpc32xx_udc *udc = _udc;
2904
2905 spin_lock(&udc->lock);
2906
2907 /* Read the device status register */
2908 writel(USBD_EP_FAST, USBD_DEVINTCLR(udc->udp_baseaddr));
2909
2910 /* Endpoints */
2911 tmp = readl(USBD_EPINTST(udc->udp_baseaddr));
2912
2913 /* Special handling for EP0 */
2914 if (tmp & (EP_MASK_SEL(0, EP_OUT) | EP_MASK_SEL(0, EP_IN))) {
2915 /* Handle EP0 IN */
2916 if (tmp & (EP_MASK_SEL(0, EP_IN)))
2917 udc_handle_ep0_in(udc);
2918
2919 /* Handle EP0 OUT */
2920 if (tmp & (EP_MASK_SEL(0, EP_OUT)))
2921 udc_handle_ep0_out(udc);
2922 }
2923
2924 /* All other EPs */
2925 if (tmp & ~(EP_MASK_SEL(0, EP_OUT) | EP_MASK_SEL(0, EP_IN))) {
2926 int i;
2927
2928 /* Handle other EP interrupts */
2929 for (i = 1; i < NUM_ENDPOINTS; i++) {
2930 if (tmp & (1 << udc->ep[i].hwep_num))
2931 udc_handle_eps(udc, &udc->ep[i]);
2932 }
2933 }
2934
2935 spin_unlock(&udc->lock);
2936
2937 return IRQ_HANDLED;
2938}
2939
2940static irqreturn_t lpc32xx_usb_devdma_irq(int irq, void *_udc)
2941{
2942 struct lpc32xx_udc *udc = _udc;
2943
2944 int i;
2945 u32 tmp;
2946
2947 spin_lock(&udc->lock);
2948
2949 /* Handle EP DMA EOT interrupts */
2950 tmp = readl(USBD_EOTINTST(udc->udp_baseaddr)) |
2951 (readl(USBD_EPDMAST(udc->udp_baseaddr)) &
2952 readl(USBD_NDDRTINTST(udc->udp_baseaddr))) |
2953 readl(USBD_SYSERRTINTST(udc->udp_baseaddr));
2954 for (i = 1; i < NUM_ENDPOINTS; i++) {
2955 if (tmp & (1 << udc->ep[i].hwep_num))
2956 udc_handle_dma_ep(udc, &udc->ep[i]);
2957 }
2958
2959 spin_unlock(&udc->lock);
2960
2961 return IRQ_HANDLED;
2962}
2963
2964/*
2965 *
2966 * VBUS detection, pullup handler, and Gadget cable state notification
2967 *
2968 */
2969static void vbus_work(struct work_struct *work)
2970{
2971 u8 value;
2972 struct lpc32xx_udc *udc = container_of(work, struct lpc32xx_udc,
2973 vbus_job);
2974
2975 if (udc->enabled != 0) {
2976 /* Discharge VBUS real quick */
2977 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2978 ISP1301_I2C_OTG_CONTROL_1, OTG1_VBUS_DISCHRG);
2979
2980 /* Give VBUS some time (100mS) to discharge */
2981 msleep(100);
2982
2983 /* Disable VBUS discharge resistor */
2984 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2985 ISP1301_I2C_OTG_CONTROL_1 | ISP1301_I2C_REG_CLEAR_ADDR,
2986 OTG1_VBUS_DISCHRG);
2987
2988 /* Clear interrupt */
2989 i2c_smbus_write_byte_data(udc->isp1301_i2c_client,
2990 ISP1301_I2C_INTERRUPT_LATCH |
2991 ISP1301_I2C_REG_CLEAR_ADDR, ~0);
2992
2993 /* Get the VBUS status from the transceiver */
2994 value = i2c_smbus_read_byte_data(udc->isp1301_i2c_client,
2995 ISP1301_I2C_OTG_CONTROL_2);
2996
2997 /* VBUS on or off? */
2998 if (value & OTG_B_SESS_VLD)
2999 udc->vbus = 1;
3000 else
3001 udc->vbus = 0;
3002
3003 /* VBUS changed? */
3004 if (udc->last_vbus != udc->vbus) {
3005 udc->last_vbus = udc->vbus;
3006 lpc32xx_vbus_session(&udc->gadget, udc->vbus);
3007 }
3008 }
3009
3010 /* Re-enable after completion */
3011 enable_irq(udc->udp_irq[IRQ_USB_ATX]);
3012}
3013
3014static irqreturn_t lpc32xx_usb_vbus_irq(int irq, void *_udc)
3015{
3016 struct lpc32xx_udc *udc = _udc;
3017
3018 /* Defer handling of VBUS IRQ to work queue */
3019 disable_irq_nosync(udc->udp_irq[IRQ_USB_ATX]);
3020 schedule_work(&udc->vbus_job);
3021
3022 return IRQ_HANDLED;
3023}
3024
3025static int lpc32xx_start(struct usb_gadget_driver *driver,
3026 int (*bind)(struct usb_gadget *))
3027{
3028 struct lpc32xx_udc *udc = &controller;
3029 int retval, i;
3030
3031 if (!driver || driver->max_speed < USB_SPEED_FULL ||
3032 !bind || !driver->setup) {
3033 dev_err(udc->dev, "bad parameter.\n");
3034 return -EINVAL;
3035 }
3036
3037 if (udc->driver) {
3038 dev_err(udc->dev, "UDC already has a gadget driver\n");
3039 return -EBUSY;
3040 }
3041
3042 udc->driver = driver;
3043 udc->gadget.dev.driver = &driver->driver;
3044 udc->enabled = 1;
3045 udc->selfpowered = 1;
3046 udc->vbus = 0;
3047
3048 retval = bind(&udc->gadget);
3049 if (retval) {
3050 dev_err(udc->dev, "bind() returned %d\n", retval);
3051 udc->enabled = 0;
3052 udc->selfpowered = 0;
3053 udc->driver = NULL;
3054 udc->gadget.dev.driver = NULL;
3055 return retval;
3056 }
3057
3058 dev_dbg(udc->dev, "bound to %s\n", driver->driver.name);
3059
3060 /* Force VBUS process once to check for cable insertion */
3061 udc->last_vbus = udc->vbus = 0;
3062 schedule_work(&udc->vbus_job);
3063
3064 /* Do not re-enable ATX IRQ (3) */
3065 for (i = IRQ_USB_LP; i < IRQ_USB_ATX; i++)
3066 enable_irq(udc->udp_irq[i]);
3067
3068 return 0;
3069}
3070
3071static int lpc32xx_stop(struct usb_gadget_driver *driver)
3072{
3073 int i;
3074 struct lpc32xx_udc *udc = &controller;
3075
3076 if (!driver || driver != udc->driver || !driver->unbind)
3077 return -EINVAL;
3078
3079 /* Disable USB pullup */
3080 isp1301_pullup_enable(udc, 0, 1);
3081
3082 for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++)
3083 disable_irq(udc->udp_irq[i]);
3084
3085 if (udc->clocked) {
3086
3087 spin_lock(&udc->lock);
3088 stop_activity(udc);
3089 spin_unlock(&udc->lock);
3090
3091 /*
3092 * Wait for all the endpoints to disable,
3093 * before disabling clocks. Don't wait if
3094 * endpoints are not enabled.
3095 */
3096 if (atomic_read(&udc->enabled_ep_cnt))
3097 wait_event_interruptible(udc->ep_disable_wait_queue,
3098 (atomic_read(&udc->enabled_ep_cnt) == 0));
3099
3100 spin_lock(&udc->lock);
3101 udc_clk_set(udc, 0);
3102 spin_unlock(&udc->lock);
3103 }
3104
3105 udc->enabled = 0;
3106 pullup(udc, 0);
3107
3108 driver->unbind(&udc->gadget);
3109 udc->gadget.dev.driver = NULL;
3110 udc->driver = NULL;
3111
3112 dev_dbg(udc->dev, "unbound from %s\n", driver->driver.name);
3113 return 0;
3114}
3115
3116static void lpc32xx_udc_shutdown(struct platform_device *dev)
3117{
3118 /* Force disconnect on reboot */
3119 struct lpc32xx_udc *udc = &controller;
3120
3121 pullup(udc, 0);
3122}
3123
3124/*
3125 * Callbacks to be overridden by options passed via OF (TODO)
3126 */
3127
3128static void lpc32xx_usbd_conn_chg(int conn)
3129{
3130 /* Do nothing, it might be nice to enable an LED
3131 * based on conn state being !0 */
3132}
3133
3134static void lpc32xx_usbd_susp_chg(int susp)
3135{
3136 /* Device suspend if susp != 0 */
3137}
3138
3139static void lpc32xx_rmwkup_chg(int remote_wakup_enable)
3140{
3141 /* Enable or disable USB remote wakeup */
3142}
3143
3144struct lpc32xx_usbd_cfg lpc32xx_usbddata = {
3145 .vbus_drv_pol = 0,
3146 .conn_chgb = &lpc32xx_usbd_conn_chg,
3147 .susp_chgb = &lpc32xx_usbd_susp_chg,
3148 .rmwk_chgb = &lpc32xx_rmwkup_chg,
3149};
3150
3151
3152static u64 lpc32xx_usbd_dmamask = ~(u32) 0x7F;
3153
3154static int __init lpc32xx_udc_probe(struct platform_device *pdev)
3155{
3156 struct device *dev = &pdev->dev;
3157 struct lpc32xx_udc *udc = &controller;
3158 int retval, i;
3159 struct resource *res;
3160 dma_addr_t dma_handle;
3161 struct device_node *isp1301_node;
3162
3163 /* init software state */
3164 udc->gadget.dev.parent = dev;
3165 udc->pdev = pdev;
3166 udc->dev = &pdev->dev;
3167 udc->enabled = 0;
3168
3169 if (pdev->dev.of_node) {
3170 isp1301_node = of_parse_phandle(pdev->dev.of_node,
3171 "transceiver", 0);
3172 } else {
3173 isp1301_node = NULL;
3174 }
3175
3176 udc->isp1301_i2c_client = isp1301_get_client(isp1301_node);
3177 if (!udc->isp1301_i2c_client)
3178 return -EPROBE_DEFER;
3179
3180 dev_info(udc->dev, "ISP1301 I2C device at address 0x%x\n",
3181 udc->isp1301_i2c_client->addr);
3182
3183 pdev->dev.dma_mask = &lpc32xx_usbd_dmamask;
3184 pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
3185
3186 udc->board = &lpc32xx_usbddata;
3187
3188 /*
3189 * Resources are mapped as follows:
3190 * IORESOURCE_MEM, base address and size of USB space
3191 * IORESOURCE_IRQ, USB device low priority interrupt number
3192 * IORESOURCE_IRQ, USB device high priority interrupt number
3193 * IORESOURCE_IRQ, USB device interrupt number
3194 * IORESOURCE_IRQ, USB transceiver interrupt number
3195 */
3196 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3197 if (!res)
3198 return -ENXIO;
3199
3200 spin_lock_init(&udc->lock);
3201
3202 /* Get IRQs */
3203 for (i = 0; i < 4; i++) {
3204 udc->udp_irq[i] = platform_get_irq(pdev, i);
3205 if (udc->udp_irq[i] < 0) {
3206 dev_err(udc->dev,
3207 "irq resource %d not available!\n", i);
3208 return udc->udp_irq[i];
3209 }
3210 }
3211
3212 udc->io_p_start = res->start;
3213 udc->io_p_size = resource_size(res);
3214 if (!request_mem_region(udc->io_p_start, udc->io_p_size, driver_name)) {
3215 dev_err(udc->dev, "someone's using UDC memory\n");
3216 return -EBUSY;
3217 }
3218
3219 udc->udp_baseaddr = ioremap(udc->io_p_start, udc->io_p_size);
3220 if (!udc->udp_baseaddr) {
3221 retval = -ENOMEM;
3222 dev_err(udc->dev, "IO map failure\n");
3223 goto io_map_fail;
3224 }
3225
3226 /* Enable AHB slave USB clock, needed for further USB clock control */
3227 writel(USB_SLAVE_HCLK_EN | (1 << 19), USB_CTRL);
3228
3229 /* Get required clocks */
3230 udc->usb_pll_clk = clk_get(&pdev->dev, "ck_pll5");
3231 if (IS_ERR(udc->usb_pll_clk)) {
3232 dev_err(udc->dev, "failed to acquire USB PLL\n");
3233 retval = PTR_ERR(udc->usb_pll_clk);
3234 goto pll_get_fail;
3235 }
3236 udc->usb_slv_clk = clk_get(&pdev->dev, "ck_usbd");
3237 if (IS_ERR(udc->usb_slv_clk)) {
3238 dev_err(udc->dev, "failed to acquire USB device clock\n");
3239 retval = PTR_ERR(udc->usb_slv_clk);
3240 goto usb_clk_get_fail;
3241 }
3242
3243 /* Setup PLL clock to 48MHz */
3244 retval = clk_enable(udc->usb_pll_clk);
3245 if (retval < 0) {
3246 dev_err(udc->dev, "failed to start USB PLL\n");
3247 goto pll_enable_fail;
3248 }
3249
3250 retval = clk_set_rate(udc->usb_pll_clk, 48000);
3251 if (retval < 0) {
3252 dev_err(udc->dev, "failed to set USB clock rate\n");
3253 goto pll_set_fail;
3254 }
3255
3256 writel(readl(USB_CTRL) | USB_DEV_NEED_CLK_EN, USB_CTRL);
3257
3258 /* Enable USB device clock */
3259 retval = clk_enable(udc->usb_slv_clk);
3260 if (retval < 0) {
3261 dev_err(udc->dev, "failed to start USB device clock\n");
3262 goto usb_clk_enable_fail;
3263 }
3264
3265 /* Set to enable all needed USB OTG clocks */
3266 writel(USB_CLOCK_MASK, USB_OTG_CLK_CTRL(udc));
3267
3268 i = 1000;
3269 while (((readl(USB_OTG_CLK_STAT(udc)) & USB_CLOCK_MASK) !=
3270 USB_CLOCK_MASK) && (i > 0))
3271 i--;
3272 if (!i)
3273 dev_dbg(udc->dev, "USB OTG clocks not correctly enabled\n");
3274
3275 /* Setup deferred workqueue data */
3276 udc->poweron = udc->pullup = 0;
3277 INIT_WORK(&udc->pullup_job, pullup_work);
3278 INIT_WORK(&udc->vbus_job, vbus_work);
3279#ifdef CONFIG_PM
3280 INIT_WORK(&udc->power_job, power_work);
3281#endif
3282
3283 /* All clocks are now on */
3284 udc->clocked = 1;
3285
3286 isp1301_udc_configure(udc);
3287 /* Allocate memory for the UDCA */
3288 udc->udca_v_base = dma_alloc_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3289 &dma_handle,
3290 (GFP_KERNEL | GFP_DMA));
3291 if (!udc->udca_v_base) {
3292 dev_err(udc->dev, "error getting UDCA region\n");
3293 retval = -ENOMEM;
3294 goto i2c_fail;
3295 }
3296 udc->udca_p_base = dma_handle;
3297 dev_dbg(udc->dev, "DMA buffer(0x%x bytes), P:0x%08x, V:0x%p\n",
3298 UDCA_BUFF_SIZE, udc->udca_p_base, udc->udca_v_base);
3299
3300 /* Setup the DD DMA memory pool */
3301 udc->dd_cache = dma_pool_create("udc_dd", udc->dev,
3302 sizeof(struct lpc32xx_usbd_dd_gad),
3303 sizeof(u32), 0);
3304 if (!udc->dd_cache) {
3305 dev_err(udc->dev, "error getting DD DMA region\n");
3306 retval = -ENOMEM;
3307 goto dma_alloc_fail;
3308 }
3309
3310 /* Clear USB peripheral and initialize gadget endpoints */
3311 udc_disable(udc);
3312 udc_reinit(udc);
3313
3314 retval = device_register(&udc->gadget.dev);
3315 if (retval < 0) {
3316 dev_err(udc->dev, "Device registration failure\n");
3317 goto dev_register_fail;
3318 }
3319
3320 /* Request IRQs - low and high priority USB device IRQs are routed to
3321 * the same handler, while the DMA interrupt is routed elsewhere */
3322 retval = request_irq(udc->udp_irq[IRQ_USB_LP], lpc32xx_usb_lp_irq,
3323 0, "udc_lp", udc);
3324 if (retval < 0) {
3325 dev_err(udc->dev, "LP request irq %d failed\n",
3326 udc->udp_irq[IRQ_USB_LP]);
3327 goto irq_lp_fail;
3328 }
3329 retval = request_irq(udc->udp_irq[IRQ_USB_HP], lpc32xx_usb_hp_irq,
3330 0, "udc_hp", udc);
3331 if (retval < 0) {
3332 dev_err(udc->dev, "HP request irq %d failed\n",
3333 udc->udp_irq[IRQ_USB_HP]);
3334 goto irq_hp_fail;
3335 }
3336
3337 retval = request_irq(udc->udp_irq[IRQ_USB_DEVDMA],
3338 lpc32xx_usb_devdma_irq, 0, "udc_dma", udc);
3339 if (retval < 0) {
3340 dev_err(udc->dev, "DEV request irq %d failed\n",
3341 udc->udp_irq[IRQ_USB_DEVDMA]);
3342 goto irq_dev_fail;
3343 }
3344
3345 /* The transceiver interrupt is used for VBUS detection and will
3346 kick off the VBUS handler function */
3347 retval = request_irq(udc->udp_irq[IRQ_USB_ATX], lpc32xx_usb_vbus_irq,
3348 0, "udc_otg", udc);
3349 if (retval < 0) {
3350 dev_err(udc->dev, "VBUS request irq %d failed\n",
3351 udc->udp_irq[IRQ_USB_ATX]);
3352 goto irq_xcvr_fail;
3353 }
3354
3355 /* Initialize wait queue */
3356 init_waitqueue_head(&udc->ep_disable_wait_queue);
3357 atomic_set(&udc->enabled_ep_cnt, 0);
3358
3359 /* Keep all IRQs disabled until GadgetFS starts up */
3360 for (i = IRQ_USB_LP; i <= IRQ_USB_ATX; i++)
3361 disable_irq(udc->udp_irq[i]);
3362
3363 retval = usb_add_gadget_udc(dev, &udc->gadget);
3364 if (retval < 0)
3365 goto add_gadget_fail;
3366
3367 dev_set_drvdata(dev, udc);
3368 device_init_wakeup(dev, 1);
3369 create_debug_file(udc);
3370
3371 /* Disable clocks for now */
3372 udc_clk_set(udc, 0);
3373
3374 dev_info(udc->dev, "%s version %s\n", driver_name, DRIVER_VERSION);
3375 return 0;
3376
3377add_gadget_fail:
3378 free_irq(udc->udp_irq[IRQ_USB_ATX], udc);
3379irq_xcvr_fail:
3380 free_irq(udc->udp_irq[IRQ_USB_DEVDMA], udc);
3381irq_dev_fail:
3382 free_irq(udc->udp_irq[IRQ_USB_HP], udc);
3383irq_hp_fail:
3384 free_irq(udc->udp_irq[IRQ_USB_LP], udc);
3385irq_lp_fail:
3386 device_unregister(&udc->gadget.dev);
3387dev_register_fail:
3388 dma_pool_destroy(udc->dd_cache);
3389dma_alloc_fail:
3390 dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3391 udc->udca_v_base, udc->udca_p_base);
3392i2c_fail:
3393 clk_disable(udc->usb_slv_clk);
3394usb_clk_enable_fail:
3395pll_set_fail:
3396 clk_disable(udc->usb_pll_clk);
3397pll_enable_fail:
3398 clk_put(udc->usb_slv_clk);
3399usb_clk_get_fail:
3400 clk_put(udc->usb_pll_clk);
3401pll_get_fail:
3402 iounmap(udc->udp_baseaddr);
3403io_map_fail:
3404 release_mem_region(udc->io_p_start, udc->io_p_size);
3405 dev_err(udc->dev, "%s probe failed, %d\n", driver_name, retval);
3406
3407 return retval;
3408}
3409
3410static int __devexit lpc32xx_udc_remove(struct platform_device *pdev)
3411{
3412 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3413
3414 usb_del_gadget_udc(&udc->gadget);
3415 if (udc->driver)
3416 return -EBUSY;
3417
3418 udc_clk_set(udc, 1);
3419 udc_disable(udc);
3420 pullup(udc, 0);
3421
3422 free_irq(udc->udp_irq[IRQ_USB_ATX], udc);
3423
3424 device_init_wakeup(&pdev->dev, 0);
3425 remove_debug_file(udc);
3426
3427 dma_pool_destroy(udc->dd_cache);
3428 dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE,
3429 udc->udca_v_base, udc->udca_p_base);
3430 free_irq(udc->udp_irq[IRQ_USB_DEVDMA], udc);
3431 free_irq(udc->udp_irq[IRQ_USB_HP], udc);
3432 free_irq(udc->udp_irq[IRQ_USB_LP], udc);
3433
3434 device_unregister(&udc->gadget.dev);
3435
3436 clk_disable(udc->usb_slv_clk);
3437 clk_put(udc->usb_slv_clk);
3438 clk_disable(udc->usb_pll_clk);
3439 clk_put(udc->usb_pll_clk);
3440 iounmap(udc->udp_baseaddr);
3441 release_mem_region(udc->io_p_start, udc->io_p_size);
3442
3443 return 0;
3444}
3445
3446#ifdef CONFIG_PM
3447static int lpc32xx_udc_suspend(struct platform_device *pdev, pm_message_t mesg)
3448{
3449 int to = 1000;
3450 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3451
3452 if (udc->clocked) {
3453 /* Power down ISP */
3454 udc->poweron = 0;
3455 isp1301_set_powerstate(udc, 0);
3456
3457 /* Disable clocking */
3458 udc_clk_set(udc, 0);
3459
3460 /* Keep clock flag on, so we know to re-enable clocks
3461 on resume */
3462 udc->clocked = 1;
3463
3464 /* Kill OTG and I2C clocks */
3465 writel(0, USB_OTG_CLK_CTRL(udc));
3466 while (((readl(USB_OTG_CLK_STAT(udc)) & OTGOFF_CLK_MASK) !=
3467 OTGOFF_CLK_MASK) && (to > 0))
3468 to--;
3469 if (!to)
3470 dev_dbg(udc->dev,
3471 "USB OTG clocks not correctly enabled\n");
3472
3473 /* Kill global USB clock */
3474 clk_disable(udc->usb_slv_clk);
3475 }
3476
3477 return 0;
3478}
3479
3480static int lpc32xx_udc_resume(struct platform_device *pdev)
3481{
3482 struct lpc32xx_udc *udc = platform_get_drvdata(pdev);
3483
3484 if (udc->clocked) {
3485 /* Enable global USB clock */
3486 clk_enable(udc->usb_slv_clk);
3487
3488 /* Enable clocking */
3489 udc_clk_set(udc, 1);
3490
3491 /* ISP back to normal power mode */
3492 udc->poweron = 1;
3493 isp1301_set_powerstate(udc, 1);
3494 }
3495
3496 return 0;
3497}
3498#else
3499#define lpc32xx_udc_suspend NULL
3500#define lpc32xx_udc_resume NULL
3501#endif
3502
3503#ifdef CONFIG_OF
3504static struct of_device_id lpc32xx_udc_of_match[] = {
3505 { .compatible = "nxp,lpc3220-udc", },
3506 { },
3507};
3508MODULE_DEVICE_TABLE(of, lpc32xx_udc_of_match);
3509#endif
3510
3511static struct platform_driver lpc32xx_udc_driver = {
3512 .remove = __devexit_p(lpc32xx_udc_remove),
3513 .shutdown = lpc32xx_udc_shutdown,
3514 .suspend = lpc32xx_udc_suspend,
3515 .resume = lpc32xx_udc_resume,
3516 .driver = {
3517 .name = (char *) driver_name,
3518 .owner = THIS_MODULE,
3519 .of_match_table = of_match_ptr(lpc32xx_udc_of_match),
3520 },
3521};
3522
3523static int __init udc_init_module(void)
3524{
3525 return platform_driver_probe(&lpc32xx_udc_driver, lpc32xx_udc_probe);
3526}
3527module_init(udc_init_module);
3528
3529static void __exit udc_exit_module(void)
3530{
3531 platform_driver_unregister(&lpc32xx_udc_driver);
3532}
3533module_exit(udc_exit_module);
3534
3535MODULE_DESCRIPTION("LPC32XX udc driver");
3536MODULE_AUTHOR("Kevin Wells <kevin.wells@nxp.com>");
3537MODULE_AUTHOR("Roland Stigge <stigge@antcom.de>");
3538MODULE_LICENSE("GPL");
3539MODULE_ALIAS("platform:lpc32xx_udc");
This page took 0.174924 seconds and 5 git commands to generate.