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