xref: /openbmc/linux/drivers/usb/gadget/udc/pch_udc.c (revision 75020f2d)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2011 LAPIS Semiconductor Co., Ltd.
4  */
5 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
6 #include <linux/kernel.h>
7 #include <linux/module.h>
8 #include <linux/pci.h>
9 #include <linux/delay.h>
10 #include <linux/errno.h>
11 #include <linux/gpio/consumer.h>
12 #include <linux/gpio/machine.h>
13 #include <linux/list.h>
14 #include <linux/interrupt.h>
15 #include <linux/usb/ch9.h>
16 #include <linux/usb/gadget.h>
17 #include <linux/irq.h>
18 
19 #define PCH_VBUS_PERIOD		3000	/* VBUS polling period (msec) */
20 #define PCH_VBUS_INTERVAL	10	/* VBUS polling interval (msec) */
21 
22 /* Address offset of Registers */
23 #define UDC_EP_REG_SHIFT	0x20	/* Offset to next EP */
24 
25 #define UDC_EPCTL_ADDR		0x00	/* Endpoint control */
26 #define UDC_EPSTS_ADDR		0x04	/* Endpoint status */
27 #define UDC_BUFIN_FRAMENUM_ADDR	0x08	/* buffer size in / frame number out */
28 #define UDC_BUFOUT_MAXPKT_ADDR	0x0C	/* buffer size out / maxpkt in */
29 #define UDC_SUBPTR_ADDR		0x10	/* setup buffer pointer */
30 #define UDC_DESPTR_ADDR		0x14	/* Data descriptor pointer */
31 #define UDC_CONFIRM_ADDR	0x18	/* Write/Read confirmation */
32 
33 #define UDC_DEVCFG_ADDR		0x400	/* Device configuration */
34 #define UDC_DEVCTL_ADDR		0x404	/* Device control */
35 #define UDC_DEVSTS_ADDR		0x408	/* Device status */
36 #define UDC_DEVIRQSTS_ADDR	0x40C	/* Device irq status */
37 #define UDC_DEVIRQMSK_ADDR	0x410	/* Device irq mask */
38 #define UDC_EPIRQSTS_ADDR	0x414	/* Endpoint irq status */
39 #define UDC_EPIRQMSK_ADDR	0x418	/* Endpoint irq mask */
40 #define UDC_DEVLPM_ADDR		0x41C	/* LPM control / status */
41 #define UDC_CSR_BUSY_ADDR	0x4f0	/* UDC_CSR_BUSY Status register */
42 #define UDC_SRST_ADDR		0x4fc	/* SOFT RESET register */
43 #define UDC_CSR_ADDR		0x500	/* USB_DEVICE endpoint register */
44 
45 /* Endpoint control register */
46 /* Bit position */
47 #define UDC_EPCTL_MRXFLUSH		(1 << 12)
48 #define UDC_EPCTL_RRDY			(1 << 9)
49 #define UDC_EPCTL_CNAK			(1 << 8)
50 #define UDC_EPCTL_SNAK			(1 << 7)
51 #define UDC_EPCTL_NAK			(1 << 6)
52 #define UDC_EPCTL_P			(1 << 3)
53 #define UDC_EPCTL_F			(1 << 1)
54 #define UDC_EPCTL_S			(1 << 0)
55 #define UDC_EPCTL_ET_SHIFT		4
56 /* Mask patern */
57 #define UDC_EPCTL_ET_MASK		0x00000030
58 /* Value for ET field */
59 #define UDC_EPCTL_ET_CONTROL		0
60 #define UDC_EPCTL_ET_ISO		1
61 #define UDC_EPCTL_ET_BULK		2
62 #define UDC_EPCTL_ET_INTERRUPT		3
63 
64 /* Endpoint status register */
65 /* Bit position */
66 #define UDC_EPSTS_XFERDONE		(1 << 27)
67 #define UDC_EPSTS_RSS			(1 << 26)
68 #define UDC_EPSTS_RCS			(1 << 25)
69 #define UDC_EPSTS_TXEMPTY		(1 << 24)
70 #define UDC_EPSTS_TDC			(1 << 10)
71 #define UDC_EPSTS_HE			(1 << 9)
72 #define UDC_EPSTS_MRXFIFO_EMP		(1 << 8)
73 #define UDC_EPSTS_BNA			(1 << 7)
74 #define UDC_EPSTS_IN			(1 << 6)
75 #define UDC_EPSTS_OUT_SHIFT		4
76 /* Mask patern */
77 #define UDC_EPSTS_OUT_MASK		0x00000030
78 #define UDC_EPSTS_ALL_CLR_MASK		0x1F0006F0
79 /* Value for OUT field */
80 #define UDC_EPSTS_OUT_SETUP		2
81 #define UDC_EPSTS_OUT_DATA		1
82 
83 /* Device configuration register */
84 /* Bit position */
85 #define UDC_DEVCFG_CSR_PRG		(1 << 17)
86 #define UDC_DEVCFG_SP			(1 << 3)
87 /* SPD Valee */
88 #define UDC_DEVCFG_SPD_HS		0x0
89 #define UDC_DEVCFG_SPD_FS		0x1
90 #define UDC_DEVCFG_SPD_LS		0x2
91 
92 /* Device control register */
93 /* Bit position */
94 #define UDC_DEVCTL_THLEN_SHIFT		24
95 #define UDC_DEVCTL_BRLEN_SHIFT		16
96 #define UDC_DEVCTL_CSR_DONE		(1 << 13)
97 #define UDC_DEVCTL_SD			(1 << 10)
98 #define UDC_DEVCTL_MODE			(1 << 9)
99 #define UDC_DEVCTL_BREN			(1 << 8)
100 #define UDC_DEVCTL_THE			(1 << 7)
101 #define UDC_DEVCTL_DU			(1 << 4)
102 #define UDC_DEVCTL_TDE			(1 << 3)
103 #define UDC_DEVCTL_RDE			(1 << 2)
104 #define UDC_DEVCTL_RES			(1 << 0)
105 
106 /* Device status register */
107 /* Bit position */
108 #define UDC_DEVSTS_TS_SHIFT		18
109 #define UDC_DEVSTS_ENUM_SPEED_SHIFT	13
110 #define UDC_DEVSTS_ALT_SHIFT		8
111 #define UDC_DEVSTS_INTF_SHIFT		4
112 #define UDC_DEVSTS_CFG_SHIFT		0
113 /* Mask patern */
114 #define UDC_DEVSTS_TS_MASK		0xfffc0000
115 #define UDC_DEVSTS_ENUM_SPEED_MASK	0x00006000
116 #define UDC_DEVSTS_ALT_MASK		0x00000f00
117 #define UDC_DEVSTS_INTF_MASK		0x000000f0
118 #define UDC_DEVSTS_CFG_MASK		0x0000000f
119 /* value for maximum speed for SPEED field */
120 #define UDC_DEVSTS_ENUM_SPEED_FULL	1
121 #define UDC_DEVSTS_ENUM_SPEED_HIGH	0
122 #define UDC_DEVSTS_ENUM_SPEED_LOW	2
123 #define UDC_DEVSTS_ENUM_SPEED_FULLX	3
124 
125 /* Device irq register */
126 /* Bit position */
127 #define UDC_DEVINT_RWKP			(1 << 7)
128 #define UDC_DEVINT_ENUM			(1 << 6)
129 #define UDC_DEVINT_SOF			(1 << 5)
130 #define UDC_DEVINT_US			(1 << 4)
131 #define UDC_DEVINT_UR			(1 << 3)
132 #define UDC_DEVINT_ES			(1 << 2)
133 #define UDC_DEVINT_SI			(1 << 1)
134 #define UDC_DEVINT_SC			(1 << 0)
135 /* Mask patern */
136 #define UDC_DEVINT_MSK			0x7f
137 
138 /* Endpoint irq register */
139 /* Bit position */
140 #define UDC_EPINT_IN_SHIFT		0
141 #define UDC_EPINT_OUT_SHIFT		16
142 #define UDC_EPINT_IN_EP0		(1 << 0)
143 #define UDC_EPINT_OUT_EP0		(1 << 16)
144 /* Mask patern */
145 #define UDC_EPINT_MSK_DISABLE_ALL	0xffffffff
146 
147 /* UDC_CSR_BUSY Status register */
148 /* Bit position */
149 #define UDC_CSR_BUSY			(1 << 0)
150 
151 /* SOFT RESET register */
152 /* Bit position */
153 #define UDC_PSRST			(1 << 1)
154 #define UDC_SRST			(1 << 0)
155 
156 /* USB_DEVICE endpoint register */
157 /* Bit position */
158 #define UDC_CSR_NE_NUM_SHIFT		0
159 #define UDC_CSR_NE_DIR_SHIFT		4
160 #define UDC_CSR_NE_TYPE_SHIFT		5
161 #define UDC_CSR_NE_CFG_SHIFT		7
162 #define UDC_CSR_NE_INTF_SHIFT		11
163 #define UDC_CSR_NE_ALT_SHIFT		15
164 #define UDC_CSR_NE_MAX_PKT_SHIFT	19
165 /* Mask patern */
166 #define UDC_CSR_NE_NUM_MASK		0x0000000f
167 #define UDC_CSR_NE_DIR_MASK		0x00000010
168 #define UDC_CSR_NE_TYPE_MASK		0x00000060
169 #define UDC_CSR_NE_CFG_MASK		0x00000780
170 #define UDC_CSR_NE_INTF_MASK		0x00007800
171 #define UDC_CSR_NE_ALT_MASK		0x00078000
172 #define UDC_CSR_NE_MAX_PKT_MASK		0x3ff80000
173 
174 #define PCH_UDC_CSR(ep)	(UDC_CSR_ADDR + ep*4)
175 #define PCH_UDC_EPINT(in, num)\
176 		(1 << (num + (in ? UDC_EPINT_IN_SHIFT : UDC_EPINT_OUT_SHIFT)))
177 
178 /* Index of endpoint */
179 #define UDC_EP0IN_IDX		0
180 #define UDC_EP0OUT_IDX		1
181 #define UDC_EPIN_IDX(ep)	(ep * 2)
182 #define UDC_EPOUT_IDX(ep)	(ep * 2 + 1)
183 #define PCH_UDC_EP0		0
184 #define PCH_UDC_EP1		1
185 #define PCH_UDC_EP2		2
186 #define PCH_UDC_EP3		3
187 
188 /* Number of endpoint */
189 #define PCH_UDC_EP_NUM		32	/* Total number of EPs (16 IN,16 OUT) */
190 #define PCH_UDC_USED_EP_NUM	4	/* EP number of EP's really used */
191 /* Length Value */
192 #define PCH_UDC_BRLEN		0x0F	/* Burst length */
193 #define PCH_UDC_THLEN		0x1F	/* Threshold length */
194 /* Value of EP Buffer Size */
195 #define UDC_EP0IN_BUFF_SIZE	16
196 #define UDC_EPIN_BUFF_SIZE	256
197 #define UDC_EP0OUT_BUFF_SIZE	16
198 #define UDC_EPOUT_BUFF_SIZE	256
199 /* Value of EP maximum packet size */
200 #define UDC_EP0IN_MAX_PKT_SIZE	64
201 #define UDC_EP0OUT_MAX_PKT_SIZE	64
202 #define UDC_BULK_MAX_PKT_SIZE	512
203 
204 /* DMA */
205 #define DMA_DIR_RX		1	/* DMA for data receive */
206 #define DMA_DIR_TX		2	/* DMA for data transmit */
207 #define DMA_ADDR_INVALID	(~(dma_addr_t)0)
208 #define UDC_DMA_MAXPACKET	65536	/* maximum packet size for DMA */
209 
210 /**
211  * struct pch_udc_data_dma_desc - Structure to hold DMA descriptor information
212  *				  for data
213  * @status:		Status quadlet
214  * @reserved:		Reserved
215  * @dataptr:		Buffer descriptor
216  * @next:		Next descriptor
217  */
218 struct pch_udc_data_dma_desc {
219 	u32 status;
220 	u32 reserved;
221 	u32 dataptr;
222 	u32 next;
223 };
224 
225 /**
226  * struct pch_udc_stp_dma_desc - Structure to hold DMA descriptor information
227  *				 for control data
228  * @status:	Status
229  * @reserved:	Reserved
230  * @request:	Control Request
231  */
232 struct pch_udc_stp_dma_desc {
233 	u32 status;
234 	u32 reserved;
235 	struct usb_ctrlrequest request;
236 } __attribute((packed));
237 
238 /* DMA status definitions */
239 /* Buffer status */
240 #define PCH_UDC_BUFF_STS	0xC0000000
241 #define PCH_UDC_BS_HST_RDY	0x00000000
242 #define PCH_UDC_BS_DMA_BSY	0x40000000
243 #define PCH_UDC_BS_DMA_DONE	0x80000000
244 #define PCH_UDC_BS_HST_BSY	0xC0000000
245 /*  Rx/Tx Status */
246 #define PCH_UDC_RXTX_STS	0x30000000
247 #define PCH_UDC_RTS_SUCC	0x00000000
248 #define PCH_UDC_RTS_DESERR	0x10000000
249 #define PCH_UDC_RTS_BUFERR	0x30000000
250 /* Last Descriptor Indication */
251 #define PCH_UDC_DMA_LAST	0x08000000
252 /* Number of Rx/Tx Bytes Mask */
253 #define PCH_UDC_RXTX_BYTES	0x0000ffff
254 
255 /**
256  * struct pch_udc_cfg_data - Structure to hold current configuration
257  *			     and interface information
258  * @cur_cfg:	current configuration in use
259  * @cur_intf:	current interface in use
260  * @cur_alt:	current alt interface in use
261  */
262 struct pch_udc_cfg_data {
263 	u16 cur_cfg;
264 	u16 cur_intf;
265 	u16 cur_alt;
266 };
267 
268 /**
269  * struct pch_udc_ep - Structure holding a PCH USB device Endpoint information
270  * @ep:			embedded ep request
271  * @td_stp_phys:	for setup request
272  * @td_data_phys:	for data request
273  * @td_stp:		for setup request
274  * @td_data:		for data request
275  * @dev:		reference to device struct
276  * @offset_addr:	offset address of ep register
277  * @desc:		for this ep
278  * @queue:		queue for requests
279  * @num:		endpoint number
280  * @in:			endpoint is IN
281  * @halted:		endpoint halted?
282  * @epsts:		Endpoint status
283  */
284 struct pch_udc_ep {
285 	struct usb_ep			ep;
286 	dma_addr_t			td_stp_phys;
287 	dma_addr_t			td_data_phys;
288 	struct pch_udc_stp_dma_desc	*td_stp;
289 	struct pch_udc_data_dma_desc	*td_data;
290 	struct pch_udc_dev		*dev;
291 	unsigned long			offset_addr;
292 	struct list_head		queue;
293 	unsigned			num:5,
294 					in:1,
295 					halted:1;
296 	unsigned long			epsts;
297 };
298 
299 /**
300  * struct pch_vbus_gpio_data - Structure holding GPIO informaton
301  *					for detecting VBUS
302  * @port:		gpio descriptor for the VBUS GPIO
303  * @intr:		gpio interrupt number
304  * @irq_work_fall:	Structure for WorkQueue
305  * @irq_work_rise:	Structure for WorkQueue
306  */
307 struct pch_vbus_gpio_data {
308 	struct gpio_desc	*port;
309 	int			intr;
310 	struct work_struct	irq_work_fall;
311 	struct work_struct	irq_work_rise;
312 };
313 
314 /**
315  * struct pch_udc_dev - Structure holding complete information
316  *			of the PCH USB device
317  * @gadget:		gadget driver data
318  * @driver:		reference to gadget driver bound
319  * @pdev:		reference to the PCI device
320  * @ep:			array of endpoints
321  * @lock:		protects all state
322  * @stall:		stall requested
323  * @prot_stall:		protcol stall requested
324  * @registered:		driver registered with system
325  * @suspended:		driver in suspended state
326  * @connected:		gadget driver associated
327  * @vbus_session:	required vbus_session state
328  * @set_cfg_not_acked:	pending acknowledgement 4 setup
329  * @waiting_zlp_ack:	pending acknowledgement 4 ZLP
330  * @data_requests:	DMA pool for data requests
331  * @stp_requests:	DMA pool for setup requests
332  * @dma_addr:		DMA pool for received
333  * @setup_data:		Received setup data
334  * @base_addr:		for mapped device memory
335  * @bar:		PCI BAR used for mapped device memory
336  * @cfg_data:		current cfg, intf, and alt in use
337  * @vbus_gpio:		GPIO informaton for detecting VBUS
338  */
339 struct pch_udc_dev {
340 	struct usb_gadget		gadget;
341 	struct usb_gadget_driver	*driver;
342 	struct pci_dev			*pdev;
343 	struct pch_udc_ep		ep[PCH_UDC_EP_NUM];
344 	spinlock_t			lock; /* protects all state */
345 	unsigned
346 			stall:1,
347 			prot_stall:1,
348 			suspended:1,
349 			connected:1,
350 			vbus_session:1,
351 			set_cfg_not_acked:1,
352 			waiting_zlp_ack:1;
353 	struct dma_pool		*data_requests;
354 	struct dma_pool		*stp_requests;
355 	dma_addr_t			dma_addr;
356 	struct usb_ctrlrequest		setup_data;
357 	void __iomem			*base_addr;
358 	unsigned short			bar;
359 	struct pch_udc_cfg_data		cfg_data;
360 	struct pch_vbus_gpio_data	vbus_gpio;
361 };
362 #define to_pch_udc(g)	(container_of((g), struct pch_udc_dev, gadget))
363 
364 #define PCH_UDC_PCI_BAR_QUARK_X1000	0
365 #define PCH_UDC_PCI_BAR			1
366 
367 #define PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC	0x0939
368 #define PCI_DEVICE_ID_INTEL_EG20T_UDC		0x8808
369 
370 #define PCI_DEVICE_ID_ML7213_IOH_UDC	0x801D
371 #define PCI_DEVICE_ID_ML7831_IOH_UDC	0x8808
372 
373 static const char	ep0_string[] = "ep0in";
374 static DEFINE_SPINLOCK(udc_stall_spinlock);	/* stall spin lock */
375 static bool speed_fs;
376 module_param_named(speed_fs, speed_fs, bool, S_IRUGO);
377 MODULE_PARM_DESC(speed_fs, "true for Full speed operation");
378 
379 /**
380  * struct pch_udc_request - Structure holding a PCH USB device request packet
381  * @req:		embedded ep request
382  * @td_data_phys:	phys. address
383  * @td_data:		first dma desc. of chain
384  * @td_data_last:	last dma desc. of chain
385  * @queue:		associated queue
386  * @dma_going:		DMA in progress for request
387  * @dma_done:		DMA completed for request
388  * @chain_len:		chain length
389  */
390 struct pch_udc_request {
391 	struct usb_request		req;
392 	dma_addr_t			td_data_phys;
393 	struct pch_udc_data_dma_desc	*td_data;
394 	struct pch_udc_data_dma_desc	*td_data_last;
395 	struct list_head		queue;
396 	unsigned			dma_going:1,
397 					dma_done:1;
398 	unsigned			chain_len;
399 };
400 
401 static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
402 {
403 	return ioread32(dev->base_addr + reg);
404 }
405 
406 static inline void pch_udc_writel(struct pch_udc_dev *dev,
407 				    unsigned long val, unsigned long reg)
408 {
409 	iowrite32(val, dev->base_addr + reg);
410 }
411 
412 static inline void pch_udc_bit_set(struct pch_udc_dev *dev,
413 				     unsigned long reg,
414 				     unsigned long bitmask)
415 {
416 	pch_udc_writel(dev, pch_udc_readl(dev, reg) | bitmask, reg);
417 }
418 
419 static inline void pch_udc_bit_clr(struct pch_udc_dev *dev,
420 				     unsigned long reg,
421 				     unsigned long bitmask)
422 {
423 	pch_udc_writel(dev, pch_udc_readl(dev, reg) & ~(bitmask), reg);
424 }
425 
426 static inline u32 pch_udc_ep_readl(struct pch_udc_ep *ep, unsigned long reg)
427 {
428 	return ioread32(ep->dev->base_addr + ep->offset_addr + reg);
429 }
430 
431 static inline void pch_udc_ep_writel(struct pch_udc_ep *ep,
432 				    unsigned long val, unsigned long reg)
433 {
434 	iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg);
435 }
436 
437 static inline void pch_udc_ep_bit_set(struct pch_udc_ep *ep,
438 				     unsigned long reg,
439 				     unsigned long bitmask)
440 {
441 	pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) | bitmask, reg);
442 }
443 
444 static inline void pch_udc_ep_bit_clr(struct pch_udc_ep *ep,
445 				     unsigned long reg,
446 				     unsigned long bitmask)
447 {
448 	pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) & ~(bitmask), reg);
449 }
450 
451 /**
452  * pch_udc_csr_busy() - Wait till idle.
453  * @dev:	Reference to pch_udc_dev structure
454  */
455 static void pch_udc_csr_busy(struct pch_udc_dev *dev)
456 {
457 	unsigned int count = 200;
458 
459 	/* Wait till idle */
460 	while ((pch_udc_readl(dev, UDC_CSR_BUSY_ADDR) & UDC_CSR_BUSY)
461 		&& --count)
462 		cpu_relax();
463 	if (!count)
464 		dev_err(&dev->pdev->dev, "%s: wait error\n", __func__);
465 }
466 
467 /**
468  * pch_udc_write_csr() - Write the command and status registers.
469  * @dev:	Reference to pch_udc_dev structure
470  * @val:	value to be written to CSR register
471  * @ep:		end-point number
472  */
473 static void pch_udc_write_csr(struct pch_udc_dev *dev, unsigned long val,
474 			       unsigned int ep)
475 {
476 	unsigned long reg = PCH_UDC_CSR(ep);
477 
478 	pch_udc_csr_busy(dev);		/* Wait till idle */
479 	pch_udc_writel(dev, val, reg);
480 	pch_udc_csr_busy(dev);		/* Wait till idle */
481 }
482 
483 /**
484  * pch_udc_read_csr() - Read the command and status registers.
485  * @dev:	Reference to pch_udc_dev structure
486  * @ep:		end-point number
487  *
488  * Return codes:	content of CSR register
489  */
490 static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep)
491 {
492 	unsigned long reg = PCH_UDC_CSR(ep);
493 
494 	pch_udc_csr_busy(dev);		/* Wait till idle */
495 	pch_udc_readl(dev, reg);	/* Dummy read */
496 	pch_udc_csr_busy(dev);		/* Wait till idle */
497 	return pch_udc_readl(dev, reg);
498 }
499 
500 /**
501  * pch_udc_rmt_wakeup() - Initiate for remote wakeup
502  * @dev:	Reference to pch_udc_dev structure
503  */
504 static inline void pch_udc_rmt_wakeup(struct pch_udc_dev *dev)
505 {
506 	pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
507 	mdelay(1);
508 	pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
509 }
510 
511 /**
512  * pch_udc_get_frame() - Get the current frame from device status register
513  * @dev:	Reference to pch_udc_dev structure
514  * Retern	current frame
515  */
516 static inline int pch_udc_get_frame(struct pch_udc_dev *dev)
517 {
518 	u32 frame = pch_udc_readl(dev, UDC_DEVSTS_ADDR);
519 	return (frame & UDC_DEVSTS_TS_MASK) >> UDC_DEVSTS_TS_SHIFT;
520 }
521 
522 /**
523  * pch_udc_clear_selfpowered() - Clear the self power control
524  * @dev:	Reference to pch_udc_regs structure
525  */
526 static inline void pch_udc_clear_selfpowered(struct pch_udc_dev *dev)
527 {
528 	pch_udc_bit_clr(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
529 }
530 
531 /**
532  * pch_udc_set_selfpowered() - Set the self power control
533  * @dev:	Reference to pch_udc_regs structure
534  */
535 static inline void pch_udc_set_selfpowered(struct pch_udc_dev *dev)
536 {
537 	pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
538 }
539 
540 /**
541  * pch_udc_set_disconnect() - Set the disconnect status.
542  * @dev:	Reference to pch_udc_regs structure
543  */
544 static inline void pch_udc_set_disconnect(struct pch_udc_dev *dev)
545 {
546 	pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
547 }
548 
549 /**
550  * pch_udc_clear_disconnect() - Clear the disconnect status.
551  * @dev:	Reference to pch_udc_regs structure
552  */
553 static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
554 {
555 	/* Clear the disconnect */
556 	pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
557 	pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
558 	mdelay(1);
559 	/* Resume USB signalling */
560 	pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
561 }
562 
563 static void pch_udc_init(struct pch_udc_dev *dev);
564 
565 /**
566  * pch_udc_reconnect() - This API initializes usb device controller,
567  *						and clear the disconnect status.
568  * @dev:		Reference to pch_udc_regs structure
569  */
570 static void pch_udc_reconnect(struct pch_udc_dev *dev)
571 {
572 	pch_udc_init(dev);
573 
574 	/* enable device interrupts */
575 	/* pch_udc_enable_interrupts() */
576 	pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR,
577 			UDC_DEVINT_UR | UDC_DEVINT_ENUM);
578 
579 	/* Clear the disconnect */
580 	pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
581 	pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
582 	mdelay(1);
583 	/* Resume USB signalling */
584 	pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
585 }
586 
587 /**
588  * pch_udc_vbus_session() - set or clearr the disconnect status.
589  * @dev:	Reference to pch_udc_regs structure
590  * @is_active:	Parameter specifying the action
591  *		  0:   indicating VBUS power is ending
592  *		  !0:  indicating VBUS power is starting
593  */
594 static inline void pch_udc_vbus_session(struct pch_udc_dev *dev,
595 					  int is_active)
596 {
597 	unsigned long		iflags;
598 
599 	spin_lock_irqsave(&dev->lock, iflags);
600 	if (is_active) {
601 		pch_udc_reconnect(dev);
602 		dev->vbus_session = 1;
603 	} else {
604 		if (dev->driver && dev->driver->disconnect) {
605 			spin_unlock_irqrestore(&dev->lock, iflags);
606 			dev->driver->disconnect(&dev->gadget);
607 			spin_lock_irqsave(&dev->lock, iflags);
608 		}
609 		pch_udc_set_disconnect(dev);
610 		dev->vbus_session = 0;
611 	}
612 	spin_unlock_irqrestore(&dev->lock, iflags);
613 }
614 
615 /**
616  * pch_udc_ep_set_stall() - Set the stall of endpoint
617  * @ep:		Reference to structure of type pch_udc_ep_regs
618  */
619 static void pch_udc_ep_set_stall(struct pch_udc_ep *ep)
620 {
621 	if (ep->in) {
622 		pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
623 		pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
624 	} else {
625 		pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
626 	}
627 }
628 
629 /**
630  * pch_udc_ep_clear_stall() - Clear the stall of endpoint
631  * @ep:		Reference to structure of type pch_udc_ep_regs
632  */
633 static inline void pch_udc_ep_clear_stall(struct pch_udc_ep *ep)
634 {
635 	/* Clear the stall */
636 	pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
637 	/* Clear NAK by writing CNAK */
638 	pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
639 }
640 
641 /**
642  * pch_udc_ep_set_trfr_type() - Set the transfer type of endpoint
643  * @ep:		Reference to structure of type pch_udc_ep_regs
644  * @type:	Type of endpoint
645  */
646 static inline void pch_udc_ep_set_trfr_type(struct pch_udc_ep *ep,
647 					u8 type)
648 {
649 	pch_udc_ep_writel(ep, ((type << UDC_EPCTL_ET_SHIFT) &
650 				UDC_EPCTL_ET_MASK), UDC_EPCTL_ADDR);
651 }
652 
653 /**
654  * pch_udc_ep_set_bufsz() - Set the maximum packet size for the endpoint
655  * @ep:		Reference to structure of type pch_udc_ep_regs
656  * @buf_size:	The buffer word size
657  * @ep_in:	EP is IN
658  */
659 static void pch_udc_ep_set_bufsz(struct pch_udc_ep *ep,
660 						 u32 buf_size, u32 ep_in)
661 {
662 	u32 data;
663 	if (ep_in) {
664 		data = pch_udc_ep_readl(ep, UDC_BUFIN_FRAMENUM_ADDR);
665 		data = (data & 0xffff0000) | (buf_size & 0xffff);
666 		pch_udc_ep_writel(ep, data, UDC_BUFIN_FRAMENUM_ADDR);
667 	} else {
668 		data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
669 		data = (buf_size << 16) | (data & 0xffff);
670 		pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
671 	}
672 }
673 
674 /**
675  * pch_udc_ep_set_maxpkt() - Set the Max packet size for the endpoint
676  * @ep:		Reference to structure of type pch_udc_ep_regs
677  * @pkt_size:	The packet byte size
678  */
679 static void pch_udc_ep_set_maxpkt(struct pch_udc_ep *ep, u32 pkt_size)
680 {
681 	u32 data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
682 	data = (data & 0xffff0000) | (pkt_size & 0xffff);
683 	pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
684 }
685 
686 /**
687  * pch_udc_ep_set_subptr() - Set the Setup buffer pointer for the endpoint
688  * @ep:		Reference to structure of type pch_udc_ep_regs
689  * @addr:	Address of the register
690  */
691 static inline void pch_udc_ep_set_subptr(struct pch_udc_ep *ep, u32 addr)
692 {
693 	pch_udc_ep_writel(ep, addr, UDC_SUBPTR_ADDR);
694 }
695 
696 /**
697  * pch_udc_ep_set_ddptr() - Set the Data descriptor pointer for the endpoint
698  * @ep:		Reference to structure of type pch_udc_ep_regs
699  * @addr:	Address of the register
700  */
701 static inline void pch_udc_ep_set_ddptr(struct pch_udc_ep *ep, u32 addr)
702 {
703 	pch_udc_ep_writel(ep, addr, UDC_DESPTR_ADDR);
704 }
705 
706 /**
707  * pch_udc_ep_set_pd() - Set the poll demand bit for the endpoint
708  * @ep:		Reference to structure of type pch_udc_ep_regs
709  */
710 static inline void pch_udc_ep_set_pd(struct pch_udc_ep *ep)
711 {
712 	pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_P);
713 }
714 
715 /**
716  * pch_udc_ep_set_rrdy() - Set the receive ready bit for the endpoint
717  * @ep:		Reference to structure of type pch_udc_ep_regs
718  */
719 static inline void pch_udc_ep_set_rrdy(struct pch_udc_ep *ep)
720 {
721 	pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
722 }
723 
724 /**
725  * pch_udc_ep_clear_rrdy() - Clear the receive ready bit for the endpoint
726  * @ep:		Reference to structure of type pch_udc_ep_regs
727  */
728 static inline void pch_udc_ep_clear_rrdy(struct pch_udc_ep *ep)
729 {
730 	pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
731 }
732 
733 /**
734  * pch_udc_set_dma() - Set the 'TDE' or RDE bit of device control
735  *			register depending on the direction specified
736  * @dev:	Reference to structure of type pch_udc_regs
737  * @dir:	whether Tx or Rx
738  *		  DMA_DIR_RX: Receive
739  *		  DMA_DIR_TX: Transmit
740  */
741 static inline void pch_udc_set_dma(struct pch_udc_dev *dev, int dir)
742 {
743 	if (dir == DMA_DIR_RX)
744 		pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
745 	else if (dir == DMA_DIR_TX)
746 		pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
747 }
748 
749 /**
750  * pch_udc_clear_dma() - Clear the 'TDE' or RDE bit of device control
751  *				 register depending on the direction specified
752  * @dev:	Reference to structure of type pch_udc_regs
753  * @dir:	Whether Tx or Rx
754  *		  DMA_DIR_RX: Receive
755  *		  DMA_DIR_TX: Transmit
756  */
757 static inline void pch_udc_clear_dma(struct pch_udc_dev *dev, int dir)
758 {
759 	if (dir == DMA_DIR_RX)
760 		pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
761 	else if (dir == DMA_DIR_TX)
762 		pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
763 }
764 
765 /**
766  * pch_udc_set_csr_done() - Set the device control register
767  *				CSR done field (bit 13)
768  * @dev:	reference to structure of type pch_udc_regs
769  */
770 static inline void pch_udc_set_csr_done(struct pch_udc_dev *dev)
771 {
772 	pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_CSR_DONE);
773 }
774 
775 /**
776  * pch_udc_disable_interrupts() - Disables the specified interrupts
777  * @dev:	Reference to structure of type pch_udc_regs
778  * @mask:	Mask to disable interrupts
779  */
780 static inline void pch_udc_disable_interrupts(struct pch_udc_dev *dev,
781 					    u32 mask)
782 {
783 	pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, mask);
784 }
785 
786 /**
787  * pch_udc_enable_interrupts() - Enable the specified interrupts
788  * @dev:	Reference to structure of type pch_udc_regs
789  * @mask:	Mask to enable interrupts
790  */
791 static inline void pch_udc_enable_interrupts(struct pch_udc_dev *dev,
792 					   u32 mask)
793 {
794 	pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, mask);
795 }
796 
797 /**
798  * pch_udc_disable_ep_interrupts() - Disable endpoint interrupts
799  * @dev:	Reference to structure of type pch_udc_regs
800  * @mask:	Mask to disable interrupts
801  */
802 static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev *dev,
803 						u32 mask)
804 {
805 	pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, mask);
806 }
807 
808 /**
809  * pch_udc_enable_ep_interrupts() - Enable endpoint interrupts
810  * @dev:	Reference to structure of type pch_udc_regs
811  * @mask:	Mask to enable interrupts
812  */
813 static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev *dev,
814 					      u32 mask)
815 {
816 	pch_udc_bit_clr(dev, UDC_EPIRQMSK_ADDR, mask);
817 }
818 
819 /**
820  * pch_udc_read_device_interrupts() - Read the device interrupts
821  * @dev:	Reference to structure of type pch_udc_regs
822  * Retern	The device interrupts
823  */
824 static inline u32 pch_udc_read_device_interrupts(struct pch_udc_dev *dev)
825 {
826 	return pch_udc_readl(dev, UDC_DEVIRQSTS_ADDR);
827 }
828 
829 /**
830  * pch_udc_write_device_interrupts() - Write device interrupts
831  * @dev:	Reference to structure of type pch_udc_regs
832  * @val:	The value to be written to interrupt register
833  */
834 static inline void pch_udc_write_device_interrupts(struct pch_udc_dev *dev,
835 						     u32 val)
836 {
837 	pch_udc_writel(dev, val, UDC_DEVIRQSTS_ADDR);
838 }
839 
840 /**
841  * pch_udc_read_ep_interrupts() - Read the endpoint interrupts
842  * @dev:	Reference to structure of type pch_udc_regs
843  * Retern	The endpoint interrupt
844  */
845 static inline u32 pch_udc_read_ep_interrupts(struct pch_udc_dev *dev)
846 {
847 	return pch_udc_readl(dev, UDC_EPIRQSTS_ADDR);
848 }
849 
850 /**
851  * pch_udc_write_ep_interrupts() - Clear endpoint interupts
852  * @dev:	Reference to structure of type pch_udc_regs
853  * @val:	The value to be written to interrupt register
854  */
855 static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev *dev,
856 					     u32 val)
857 {
858 	pch_udc_writel(dev, val, UDC_EPIRQSTS_ADDR);
859 }
860 
861 /**
862  * pch_udc_read_device_status() - Read the device status
863  * @dev:	Reference to structure of type pch_udc_regs
864  * Retern	The device status
865  */
866 static inline u32 pch_udc_read_device_status(struct pch_udc_dev *dev)
867 {
868 	return pch_udc_readl(dev, UDC_DEVSTS_ADDR);
869 }
870 
871 /**
872  * pch_udc_read_ep_control() - Read the endpoint control
873  * @ep:		Reference to structure of type pch_udc_ep_regs
874  * Retern	The endpoint control register value
875  */
876 static inline u32 pch_udc_read_ep_control(struct pch_udc_ep *ep)
877 {
878 	return pch_udc_ep_readl(ep, UDC_EPCTL_ADDR);
879 }
880 
881 /**
882  * pch_udc_clear_ep_control() - Clear the endpoint control register
883  * @ep:		Reference to structure of type pch_udc_ep_regs
884  * Retern	The endpoint control register value
885  */
886 static inline void pch_udc_clear_ep_control(struct pch_udc_ep *ep)
887 {
888 	return pch_udc_ep_writel(ep, 0, UDC_EPCTL_ADDR);
889 }
890 
891 /**
892  * pch_udc_read_ep_status() - Read the endpoint status
893  * @ep:		Reference to structure of type pch_udc_ep_regs
894  * Retern	The endpoint status
895  */
896 static inline u32 pch_udc_read_ep_status(struct pch_udc_ep *ep)
897 {
898 	return pch_udc_ep_readl(ep, UDC_EPSTS_ADDR);
899 }
900 
901 /**
902  * pch_udc_clear_ep_status() - Clear the endpoint status
903  * @ep:		Reference to structure of type pch_udc_ep_regs
904  * @stat:	Endpoint status
905  */
906 static inline void pch_udc_clear_ep_status(struct pch_udc_ep *ep,
907 					 u32 stat)
908 {
909 	return pch_udc_ep_writel(ep, stat, UDC_EPSTS_ADDR);
910 }
911 
912 /**
913  * pch_udc_ep_set_nak() - Set the bit 7 (SNAK field)
914  *				of the endpoint control register
915  * @ep:		Reference to structure of type pch_udc_ep_regs
916  */
917 static inline void pch_udc_ep_set_nak(struct pch_udc_ep *ep)
918 {
919 	pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_SNAK);
920 }
921 
922 /**
923  * pch_udc_ep_clear_nak() - Set the bit 8 (CNAK field)
924  *				of the endpoint control register
925  * @ep:		reference to structure of type pch_udc_ep_regs
926  */
927 static void pch_udc_ep_clear_nak(struct pch_udc_ep *ep)
928 {
929 	unsigned int loopcnt = 0;
930 	struct pch_udc_dev *dev = ep->dev;
931 
932 	if (!(pch_udc_ep_readl(ep, UDC_EPCTL_ADDR) & UDC_EPCTL_NAK))
933 		return;
934 	if (!ep->in) {
935 		loopcnt = 10000;
936 		while (!(pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP) &&
937 			--loopcnt)
938 			udelay(5);
939 		if (!loopcnt)
940 			dev_err(&dev->pdev->dev, "%s: RxFIFO not Empty\n",
941 				__func__);
942 	}
943 	loopcnt = 10000;
944 	while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_NAK) && --loopcnt) {
945 		pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
946 		udelay(5);
947 	}
948 	if (!loopcnt)
949 		dev_err(&dev->pdev->dev, "%s: Clear NAK not set for ep%d%s\n",
950 			__func__, ep->num, (ep->in ? "in" : "out"));
951 }
952 
953 /**
954  * pch_udc_ep_fifo_flush() - Flush the endpoint fifo
955  * @ep:	reference to structure of type pch_udc_ep_regs
956  * @dir:	direction of endpoint
957  *		  0:  endpoint is OUT
958  *		  !0: endpoint is IN
959  */
960 static void pch_udc_ep_fifo_flush(struct pch_udc_ep *ep, int dir)
961 {
962 	if (dir) {	/* IN ep */
963 		pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
964 		return;
965 	}
966 }
967 
968 /**
969  * pch_udc_ep_enable() - This api enables endpoint
970  * @ep:		reference to structure of type pch_udc_ep_regs
971  * @cfg:	current configuration information
972  * @desc:	endpoint descriptor
973  */
974 static void pch_udc_ep_enable(struct pch_udc_ep *ep,
975 			       struct pch_udc_cfg_data *cfg,
976 			       const struct usb_endpoint_descriptor *desc)
977 {
978 	u32 val = 0;
979 	u32 buff_size = 0;
980 
981 	pch_udc_ep_set_trfr_type(ep, desc->bmAttributes);
982 	if (ep->in)
983 		buff_size = UDC_EPIN_BUFF_SIZE;
984 	else
985 		buff_size = UDC_EPOUT_BUFF_SIZE;
986 	pch_udc_ep_set_bufsz(ep, buff_size, ep->in);
987 	pch_udc_ep_set_maxpkt(ep, usb_endpoint_maxp(desc));
988 	pch_udc_ep_set_nak(ep);
989 	pch_udc_ep_fifo_flush(ep, ep->in);
990 	/* Configure the endpoint */
991 	val = ep->num << UDC_CSR_NE_NUM_SHIFT | ep->in << UDC_CSR_NE_DIR_SHIFT |
992 	      ((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) <<
993 		UDC_CSR_NE_TYPE_SHIFT) |
994 	      (cfg->cur_cfg << UDC_CSR_NE_CFG_SHIFT) |
995 	      (cfg->cur_intf << UDC_CSR_NE_INTF_SHIFT) |
996 	      (cfg->cur_alt << UDC_CSR_NE_ALT_SHIFT) |
997 	      usb_endpoint_maxp(desc) << UDC_CSR_NE_MAX_PKT_SHIFT;
998 
999 	if (ep->in)
1000 		pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num));
1001 	else
1002 		pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num));
1003 }
1004 
1005 /**
1006  * pch_udc_ep_disable() - This api disables endpoint
1007  * @ep:		reference to structure of type pch_udc_ep_regs
1008  */
1009 static void pch_udc_ep_disable(struct pch_udc_ep *ep)
1010 {
1011 	if (ep->in) {
1012 		/* flush the fifo */
1013 		pch_udc_ep_writel(ep, UDC_EPCTL_F, UDC_EPCTL_ADDR);
1014 		/* set NAK */
1015 		pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
1016 		pch_udc_ep_bit_set(ep, UDC_EPSTS_ADDR, UDC_EPSTS_IN);
1017 	} else {
1018 		/* set NAK */
1019 		pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
1020 	}
1021 	/* reset desc pointer */
1022 	pch_udc_ep_writel(ep, 0, UDC_DESPTR_ADDR);
1023 }
1024 
1025 /**
1026  * pch_udc_wait_ep_stall() - Wait EP stall.
1027  * @ep:		reference to structure of type pch_udc_ep_regs
1028  */
1029 static void pch_udc_wait_ep_stall(struct pch_udc_ep *ep)
1030 {
1031 	unsigned int count = 10000;
1032 
1033 	/* Wait till idle */
1034 	while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_S) && --count)
1035 		udelay(5);
1036 	if (!count)
1037 		dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__);
1038 }
1039 
1040 /**
1041  * pch_udc_init() - This API initializes usb device controller
1042  * @dev:	Rreference to pch_udc_regs structure
1043  */
1044 static void pch_udc_init(struct pch_udc_dev *dev)
1045 {
1046 	if (NULL == dev) {
1047 		pr_err("%s: Invalid address\n", __func__);
1048 		return;
1049 	}
1050 	/* Soft Reset and Reset PHY */
1051 	pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1052 	pch_udc_writel(dev, UDC_SRST | UDC_PSRST, UDC_SRST_ADDR);
1053 	mdelay(1);
1054 	pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1055 	pch_udc_writel(dev, 0x00, UDC_SRST_ADDR);
1056 	mdelay(1);
1057 	/* mask and clear all device interrupts */
1058 	pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1059 	pch_udc_bit_set(dev, UDC_DEVIRQSTS_ADDR, UDC_DEVINT_MSK);
1060 
1061 	/* mask and clear all ep interrupts */
1062 	pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1063 	pch_udc_bit_set(dev, UDC_EPIRQSTS_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1064 
1065 	/* enable dynamic CSR programmingi, self powered and device speed */
1066 	if (speed_fs)
1067 		pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1068 				UDC_DEVCFG_SP | UDC_DEVCFG_SPD_FS);
1069 	else /* defaul high speed */
1070 		pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1071 				UDC_DEVCFG_SP | UDC_DEVCFG_SPD_HS);
1072 	pch_udc_bit_set(dev, UDC_DEVCTL_ADDR,
1073 			(PCH_UDC_THLEN << UDC_DEVCTL_THLEN_SHIFT) |
1074 			(PCH_UDC_BRLEN << UDC_DEVCTL_BRLEN_SHIFT) |
1075 			UDC_DEVCTL_MODE | UDC_DEVCTL_BREN |
1076 			UDC_DEVCTL_THE);
1077 }
1078 
1079 /**
1080  * pch_udc_exit() - This API exit usb device controller
1081  * @dev:	Reference to pch_udc_regs structure
1082  */
1083 static void pch_udc_exit(struct pch_udc_dev *dev)
1084 {
1085 	/* mask all device interrupts */
1086 	pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1087 	/* mask all ep interrupts */
1088 	pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1089 	/* put device in disconnected state */
1090 	pch_udc_set_disconnect(dev);
1091 }
1092 
1093 /**
1094  * pch_udc_pcd_get_frame() - This API is invoked to get the current frame number
1095  * @gadget:	Reference to the gadget driver
1096  *
1097  * Return codes:
1098  *	0:		Success
1099  *	-EINVAL:	If the gadget passed is NULL
1100  */
1101 static int pch_udc_pcd_get_frame(struct usb_gadget *gadget)
1102 {
1103 	struct pch_udc_dev	*dev;
1104 
1105 	if (!gadget)
1106 		return -EINVAL;
1107 	dev = container_of(gadget, struct pch_udc_dev, gadget);
1108 	return pch_udc_get_frame(dev);
1109 }
1110 
1111 /**
1112  * pch_udc_pcd_wakeup() - This API is invoked to initiate a remote wakeup
1113  * @gadget:	Reference to the gadget driver
1114  *
1115  * Return codes:
1116  *	0:		Success
1117  *	-EINVAL:	If the gadget passed is NULL
1118  */
1119 static int pch_udc_pcd_wakeup(struct usb_gadget *gadget)
1120 {
1121 	struct pch_udc_dev	*dev;
1122 	unsigned long		flags;
1123 
1124 	if (!gadget)
1125 		return -EINVAL;
1126 	dev = container_of(gadget, struct pch_udc_dev, gadget);
1127 	spin_lock_irqsave(&dev->lock, flags);
1128 	pch_udc_rmt_wakeup(dev);
1129 	spin_unlock_irqrestore(&dev->lock, flags);
1130 	return 0;
1131 }
1132 
1133 /**
1134  * pch_udc_pcd_selfpowered() - This API is invoked to specify whether the device
1135  *				is self powered or not
1136  * @gadget:	Reference to the gadget driver
1137  * @value:	Specifies self powered or not
1138  *
1139  * Return codes:
1140  *	0:		Success
1141  *	-EINVAL:	If the gadget passed is NULL
1142  */
1143 static int pch_udc_pcd_selfpowered(struct usb_gadget *gadget, int value)
1144 {
1145 	struct pch_udc_dev	*dev;
1146 
1147 	if (!gadget)
1148 		return -EINVAL;
1149 	gadget->is_selfpowered = (value != 0);
1150 	dev = container_of(gadget, struct pch_udc_dev, gadget);
1151 	if (value)
1152 		pch_udc_set_selfpowered(dev);
1153 	else
1154 		pch_udc_clear_selfpowered(dev);
1155 	return 0;
1156 }
1157 
1158 /**
1159  * pch_udc_pcd_pullup() - This API is invoked to make the device
1160  *				visible/invisible to the host
1161  * @gadget:	Reference to the gadget driver
1162  * @is_on:	Specifies whether the pull up is made active or inactive
1163  *
1164  * Return codes:
1165  *	0:		Success
1166  *	-EINVAL:	If the gadget passed is NULL
1167  */
1168 static int pch_udc_pcd_pullup(struct usb_gadget *gadget, int is_on)
1169 {
1170 	struct pch_udc_dev	*dev;
1171 	unsigned long		iflags;
1172 
1173 	if (!gadget)
1174 		return -EINVAL;
1175 
1176 	dev = container_of(gadget, struct pch_udc_dev, gadget);
1177 
1178 	spin_lock_irqsave(&dev->lock, iflags);
1179 	if (is_on) {
1180 		pch_udc_reconnect(dev);
1181 	} else {
1182 		if (dev->driver && dev->driver->disconnect) {
1183 			spin_unlock_irqrestore(&dev->lock, iflags);
1184 			dev->driver->disconnect(&dev->gadget);
1185 			spin_lock_irqsave(&dev->lock, iflags);
1186 		}
1187 		pch_udc_set_disconnect(dev);
1188 	}
1189 	spin_unlock_irqrestore(&dev->lock, iflags);
1190 
1191 	return 0;
1192 }
1193 
1194 /**
1195  * pch_udc_pcd_vbus_session() - This API is used by a driver for an external
1196  *				transceiver (or GPIO) that
1197  *				detects a VBUS power session starting/ending
1198  * @gadget:	Reference to the gadget driver
1199  * @is_active:	specifies whether the session is starting or ending
1200  *
1201  * Return codes:
1202  *	0:		Success
1203  *	-EINVAL:	If the gadget passed is NULL
1204  */
1205 static int pch_udc_pcd_vbus_session(struct usb_gadget *gadget, int is_active)
1206 {
1207 	struct pch_udc_dev	*dev;
1208 
1209 	if (!gadget)
1210 		return -EINVAL;
1211 	dev = container_of(gadget, struct pch_udc_dev, gadget);
1212 	pch_udc_vbus_session(dev, is_active);
1213 	return 0;
1214 }
1215 
1216 /**
1217  * pch_udc_pcd_vbus_draw() - This API is used by gadget drivers during
1218  *				SET_CONFIGURATION calls to
1219  *				specify how much power the device can consume
1220  * @gadget:	Reference to the gadget driver
1221  * @mA:		specifies the current limit in 2mA unit
1222  *
1223  * Return codes:
1224  *	-EINVAL:	If the gadget passed is NULL
1225  *	-EOPNOTSUPP:
1226  */
1227 static int pch_udc_pcd_vbus_draw(struct usb_gadget *gadget, unsigned int mA)
1228 {
1229 	return -EOPNOTSUPP;
1230 }
1231 
1232 static int pch_udc_start(struct usb_gadget *g,
1233 		struct usb_gadget_driver *driver);
1234 static int pch_udc_stop(struct usb_gadget *g);
1235 
1236 static const struct usb_gadget_ops pch_udc_ops = {
1237 	.get_frame = pch_udc_pcd_get_frame,
1238 	.wakeup = pch_udc_pcd_wakeup,
1239 	.set_selfpowered = pch_udc_pcd_selfpowered,
1240 	.pullup = pch_udc_pcd_pullup,
1241 	.vbus_session = pch_udc_pcd_vbus_session,
1242 	.vbus_draw = pch_udc_pcd_vbus_draw,
1243 	.udc_start = pch_udc_start,
1244 	.udc_stop = pch_udc_stop,
1245 };
1246 
1247 /**
1248  * pch_vbus_gpio_get_value() - This API gets value of GPIO port as VBUS status.
1249  * @dev:	Reference to the driver structure
1250  *
1251  * Return value:
1252  *	1: VBUS is high
1253  *	0: VBUS is low
1254  *     -1: It is not enable to detect VBUS using GPIO
1255  */
1256 static int pch_vbus_gpio_get_value(struct pch_udc_dev *dev)
1257 {
1258 	int vbus = 0;
1259 
1260 	if (dev->vbus_gpio.port)
1261 		vbus = gpiod_get_value(dev->vbus_gpio.port) ? 1 : 0;
1262 	else
1263 		vbus = -1;
1264 
1265 	return vbus;
1266 }
1267 
1268 /**
1269  * pch_vbus_gpio_work_fall() - This API keeps watch on VBUS becoming Low.
1270  *                             If VBUS is Low, disconnect is processed
1271  * @irq_work:	Structure for WorkQueue
1272  *
1273  */
1274 static void pch_vbus_gpio_work_fall(struct work_struct *irq_work)
1275 {
1276 	struct pch_vbus_gpio_data *vbus_gpio = container_of(irq_work,
1277 		struct pch_vbus_gpio_data, irq_work_fall);
1278 	struct pch_udc_dev *dev =
1279 		container_of(vbus_gpio, struct pch_udc_dev, vbus_gpio);
1280 	int vbus_saved = -1;
1281 	int vbus;
1282 	int count;
1283 
1284 	if (!dev->vbus_gpio.port)
1285 		return;
1286 
1287 	for (count = 0; count < (PCH_VBUS_PERIOD / PCH_VBUS_INTERVAL);
1288 		count++) {
1289 		vbus = pch_vbus_gpio_get_value(dev);
1290 
1291 		if ((vbus_saved == vbus) && (vbus == 0)) {
1292 			dev_dbg(&dev->pdev->dev, "VBUS fell");
1293 			if (dev->driver
1294 				&& dev->driver->disconnect) {
1295 				dev->driver->disconnect(
1296 					&dev->gadget);
1297 			}
1298 			if (dev->vbus_gpio.intr)
1299 				pch_udc_init(dev);
1300 			else
1301 				pch_udc_reconnect(dev);
1302 			return;
1303 		}
1304 		vbus_saved = vbus;
1305 		mdelay(PCH_VBUS_INTERVAL);
1306 	}
1307 }
1308 
1309 /**
1310  * pch_vbus_gpio_work_rise() - This API checks VBUS is High.
1311  *                             If VBUS is High, connect is processed
1312  * @irq_work:	Structure for WorkQueue
1313  *
1314  */
1315 static void pch_vbus_gpio_work_rise(struct work_struct *irq_work)
1316 {
1317 	struct pch_vbus_gpio_data *vbus_gpio = container_of(irq_work,
1318 		struct pch_vbus_gpio_data, irq_work_rise);
1319 	struct pch_udc_dev *dev =
1320 		container_of(vbus_gpio, struct pch_udc_dev, vbus_gpio);
1321 	int vbus;
1322 
1323 	if (!dev->vbus_gpio.port)
1324 		return;
1325 
1326 	mdelay(PCH_VBUS_INTERVAL);
1327 	vbus = pch_vbus_gpio_get_value(dev);
1328 
1329 	if (vbus == 1) {
1330 		dev_dbg(&dev->pdev->dev, "VBUS rose");
1331 		pch_udc_reconnect(dev);
1332 		return;
1333 	}
1334 }
1335 
1336 /**
1337  * pch_vbus_gpio_irq() - IRQ handler for GPIO interrupt for changing VBUS
1338  * @irq:	Interrupt request number
1339  * @data:	Reference to the device structure
1340  *
1341  * Return codes:
1342  *	0: Success
1343  *	-EINVAL: GPIO port is invalid or can't be initialized.
1344  */
1345 static irqreturn_t pch_vbus_gpio_irq(int irq, void *data)
1346 {
1347 	struct pch_udc_dev *dev = (struct pch_udc_dev *)data;
1348 
1349 	if (!dev->vbus_gpio.port || !dev->vbus_gpio.intr)
1350 		return IRQ_NONE;
1351 
1352 	if (pch_vbus_gpio_get_value(dev))
1353 		schedule_work(&dev->vbus_gpio.irq_work_rise);
1354 	else
1355 		schedule_work(&dev->vbus_gpio.irq_work_fall);
1356 
1357 	return IRQ_HANDLED;
1358 }
1359 
1360 /**
1361  * pch_vbus_gpio_init() - This API initializes GPIO port detecting VBUS.
1362  * @dev:		Reference to the driver structure
1363  *
1364  * Return codes:
1365  *	0: Success
1366  *	-EINVAL: GPIO port is invalid or can't be initialized.
1367  */
1368 static int pch_vbus_gpio_init(struct pch_udc_dev *dev)
1369 {
1370 	struct device *d = &dev->pdev->dev;
1371 	int err;
1372 	int irq_num = 0;
1373 	struct gpio_desc *gpiod;
1374 
1375 	dev->vbus_gpio.port = NULL;
1376 	dev->vbus_gpio.intr = 0;
1377 
1378 	/* Retrieve the GPIO line from the USB gadget device */
1379 	gpiod = devm_gpiod_get_optional(d, NULL, GPIOD_IN);
1380 	if (IS_ERR(gpiod))
1381 		return PTR_ERR(gpiod);
1382 	gpiod_set_consumer_name(gpiod, "pch_vbus");
1383 
1384 	dev->vbus_gpio.port = gpiod;
1385 	INIT_WORK(&dev->vbus_gpio.irq_work_fall, pch_vbus_gpio_work_fall);
1386 
1387 	irq_num = gpiod_to_irq(gpiod);
1388 	if (irq_num > 0) {
1389 		irq_set_irq_type(irq_num, IRQ_TYPE_EDGE_BOTH);
1390 		err = request_irq(irq_num, pch_vbus_gpio_irq, 0,
1391 			"vbus_detect", dev);
1392 		if (!err) {
1393 			dev->vbus_gpio.intr = irq_num;
1394 			INIT_WORK(&dev->vbus_gpio.irq_work_rise,
1395 				pch_vbus_gpio_work_rise);
1396 		} else {
1397 			pr_err("%s: can't request irq %d, err: %d\n",
1398 				__func__, irq_num, err);
1399 		}
1400 	}
1401 
1402 	return 0;
1403 }
1404 
1405 /**
1406  * pch_vbus_gpio_free() - This API frees resources of GPIO port
1407  * @dev:	Reference to the driver structure
1408  */
1409 static void pch_vbus_gpio_free(struct pch_udc_dev *dev)
1410 {
1411 	if (dev->vbus_gpio.intr)
1412 		free_irq(dev->vbus_gpio.intr, dev);
1413 }
1414 
1415 /**
1416  * complete_req() - This API is invoked from the driver when processing
1417  *			of a request is complete
1418  * @ep:		Reference to the endpoint structure
1419  * @req:	Reference to the request structure
1420  * @status:	Indicates the success/failure of completion
1421  */
1422 static void complete_req(struct pch_udc_ep *ep, struct pch_udc_request *req,
1423 								 int status)
1424 	__releases(&dev->lock)
1425 	__acquires(&dev->lock)
1426 {
1427 	struct pch_udc_dev	*dev;
1428 	unsigned halted = ep->halted;
1429 
1430 	list_del_init(&req->queue);
1431 
1432 	/* set new status if pending */
1433 	if (req->req.status == -EINPROGRESS)
1434 		req->req.status = status;
1435 	else
1436 		status = req->req.status;
1437 
1438 	dev = ep->dev;
1439 	usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in);
1440 	ep->halted = 1;
1441 	spin_unlock(&dev->lock);
1442 	if (!ep->in)
1443 		pch_udc_ep_clear_rrdy(ep);
1444 	usb_gadget_giveback_request(&ep->ep, &req->req);
1445 	spin_lock(&dev->lock);
1446 	ep->halted = halted;
1447 }
1448 
1449 /**
1450  * empty_req_queue() - This API empties the request queue of an endpoint
1451  * @ep:		Reference to the endpoint structure
1452  */
1453 static void empty_req_queue(struct pch_udc_ep *ep)
1454 {
1455 	struct pch_udc_request	*req;
1456 
1457 	ep->halted = 1;
1458 	while (!list_empty(&ep->queue)) {
1459 		req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1460 		complete_req(ep, req, -ESHUTDOWN);	/* Remove from list */
1461 	}
1462 }
1463 
1464 /**
1465  * pch_udc_free_dma_chain() - This function frees the DMA chain created
1466  *				for the request
1467  * @dev:	Reference to the driver structure
1468  * @req:	Reference to the request to be freed
1469  *
1470  * Return codes:
1471  *	0: Success
1472  */
1473 static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
1474 				   struct pch_udc_request *req)
1475 {
1476 	struct pch_udc_data_dma_desc *td = req->td_data;
1477 	unsigned i = req->chain_len;
1478 
1479 	dma_addr_t addr2;
1480 	dma_addr_t addr = (dma_addr_t)td->next;
1481 	td->next = 0x00;
1482 	for (; i > 1; --i) {
1483 		/* do not free first desc., will be done by free for request */
1484 		td = phys_to_virt(addr);
1485 		addr2 = (dma_addr_t)td->next;
1486 		dma_pool_free(dev->data_requests, td, addr);
1487 		addr = addr2;
1488 	}
1489 	req->chain_len = 1;
1490 }
1491 
1492 /**
1493  * pch_udc_create_dma_chain() - This function creates or reinitializes
1494  *				a DMA chain
1495  * @ep:		Reference to the endpoint structure
1496  * @req:	Reference to the request
1497  * @buf_len:	The buffer length
1498  * @gfp_flags:	Flags to be used while mapping the data buffer
1499  *
1500  * Return codes:
1501  *	0:		success,
1502  *	-ENOMEM:	dma_pool_alloc invocation fails
1503  */
1504 static int pch_udc_create_dma_chain(struct pch_udc_ep *ep,
1505 				    struct pch_udc_request *req,
1506 				    unsigned long buf_len,
1507 				    gfp_t gfp_flags)
1508 {
1509 	struct pch_udc_data_dma_desc *td = req->td_data, *last;
1510 	unsigned long bytes = req->req.length, i = 0;
1511 	dma_addr_t dma_addr;
1512 	unsigned len = 1;
1513 
1514 	if (req->chain_len > 1)
1515 		pch_udc_free_dma_chain(ep->dev, req);
1516 
1517 	td->dataptr = req->req.dma;
1518 	td->status = PCH_UDC_BS_HST_BSY;
1519 
1520 	for (; ; bytes -= buf_len, ++len) {
1521 		td->status = PCH_UDC_BS_HST_BSY | min(buf_len, bytes);
1522 		if (bytes <= buf_len)
1523 			break;
1524 		last = td;
1525 		td = dma_pool_alloc(ep->dev->data_requests, gfp_flags,
1526 				    &dma_addr);
1527 		if (!td)
1528 			goto nomem;
1529 		i += buf_len;
1530 		td->dataptr = req->td_data->dataptr + i;
1531 		last->next = dma_addr;
1532 	}
1533 
1534 	req->td_data_last = td;
1535 	td->status |= PCH_UDC_DMA_LAST;
1536 	td->next = req->td_data_phys;
1537 	req->chain_len = len;
1538 	return 0;
1539 
1540 nomem:
1541 	if (len > 1) {
1542 		req->chain_len = len;
1543 		pch_udc_free_dma_chain(ep->dev, req);
1544 	}
1545 	req->chain_len = 1;
1546 	return -ENOMEM;
1547 }
1548 
1549 /**
1550  * prepare_dma() - This function creates and initializes the DMA chain
1551  *			for the request
1552  * @ep:		Reference to the endpoint structure
1553  * @req:	Reference to the request
1554  * @gfp:	Flag to be used while mapping the data buffer
1555  *
1556  * Return codes:
1557  *	0:		Success
1558  *	Other 0:	linux error number on failure
1559  */
1560 static int prepare_dma(struct pch_udc_ep *ep, struct pch_udc_request *req,
1561 			  gfp_t gfp)
1562 {
1563 	int	retval;
1564 
1565 	/* Allocate and create a DMA chain */
1566 	retval = pch_udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp);
1567 	if (retval) {
1568 		pr_err("%s: could not create DMA chain:%d\n", __func__, retval);
1569 		return retval;
1570 	}
1571 	if (ep->in)
1572 		req->td_data->status = (req->td_data->status &
1573 				~PCH_UDC_BUFF_STS) | PCH_UDC_BS_HST_RDY;
1574 	return 0;
1575 }
1576 
1577 /**
1578  * process_zlp() - This function process zero length packets
1579  *			from the gadget driver
1580  * @ep:		Reference to the endpoint structure
1581  * @req:	Reference to the request
1582  */
1583 static void process_zlp(struct pch_udc_ep *ep, struct pch_udc_request *req)
1584 {
1585 	struct pch_udc_dev	*dev = ep->dev;
1586 
1587 	/* IN zlp's are handled by hardware */
1588 	complete_req(ep, req, 0);
1589 
1590 	/* if set_config or set_intf is waiting for ack by zlp
1591 	 * then set CSR_DONE
1592 	 */
1593 	if (dev->set_cfg_not_acked) {
1594 		pch_udc_set_csr_done(dev);
1595 		dev->set_cfg_not_acked = 0;
1596 	}
1597 	/* setup command is ACK'ed now by zlp */
1598 	if (!dev->stall && dev->waiting_zlp_ack) {
1599 		pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
1600 		dev->waiting_zlp_ack = 0;
1601 	}
1602 }
1603 
1604 /**
1605  * pch_udc_start_rxrequest() - This function starts the receive requirement.
1606  * @ep:		Reference to the endpoint structure
1607  * @req:	Reference to the request structure
1608  */
1609 static void pch_udc_start_rxrequest(struct pch_udc_ep *ep,
1610 					 struct pch_udc_request *req)
1611 {
1612 	struct pch_udc_data_dma_desc *td_data;
1613 
1614 	pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
1615 	td_data = req->td_data;
1616 	/* Set the status bits for all descriptors */
1617 	while (1) {
1618 		td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
1619 				    PCH_UDC_BS_HST_RDY;
1620 		if ((td_data->status & PCH_UDC_DMA_LAST) ==  PCH_UDC_DMA_LAST)
1621 			break;
1622 		td_data = phys_to_virt(td_data->next);
1623 	}
1624 	/* Write the descriptor pointer */
1625 	pch_udc_ep_set_ddptr(ep, req->td_data_phys);
1626 	req->dma_going = 1;
1627 	pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num);
1628 	pch_udc_set_dma(ep->dev, DMA_DIR_RX);
1629 	pch_udc_ep_clear_nak(ep);
1630 	pch_udc_ep_set_rrdy(ep);
1631 }
1632 
1633 /**
1634  * pch_udc_pcd_ep_enable() - This API enables the endpoint. It is called
1635  *				from gadget driver
1636  * @usbep:	Reference to the USB endpoint structure
1637  * @desc:	Reference to the USB endpoint descriptor structure
1638  *
1639  * Return codes:
1640  *	0:		Success
1641  *	-EINVAL:
1642  *	-ESHUTDOWN:
1643  */
1644 static int pch_udc_pcd_ep_enable(struct usb_ep *usbep,
1645 				    const struct usb_endpoint_descriptor *desc)
1646 {
1647 	struct pch_udc_ep	*ep;
1648 	struct pch_udc_dev	*dev;
1649 	unsigned long		iflags;
1650 
1651 	if (!usbep || (usbep->name == ep0_string) || !desc ||
1652 	    (desc->bDescriptorType != USB_DT_ENDPOINT) || !desc->wMaxPacketSize)
1653 		return -EINVAL;
1654 
1655 	ep = container_of(usbep, struct pch_udc_ep, ep);
1656 	dev = ep->dev;
1657 	if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1658 		return -ESHUTDOWN;
1659 	spin_lock_irqsave(&dev->lock, iflags);
1660 	ep->ep.desc = desc;
1661 	ep->halted = 0;
1662 	pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc);
1663 	ep->ep.maxpacket = usb_endpoint_maxp(desc);
1664 	pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1665 	spin_unlock_irqrestore(&dev->lock, iflags);
1666 	return 0;
1667 }
1668 
1669 /**
1670  * pch_udc_pcd_ep_disable() - This API disables endpoint and is called
1671  *				from gadget driver
1672  * @usbep:	Reference to the USB endpoint structure
1673  *
1674  * Return codes:
1675  *	0:		Success
1676  *	-EINVAL:
1677  */
1678 static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
1679 {
1680 	struct pch_udc_ep	*ep;
1681 	unsigned long	iflags;
1682 
1683 	if (!usbep)
1684 		return -EINVAL;
1685 
1686 	ep = container_of(usbep, struct pch_udc_ep, ep);
1687 	if ((usbep->name == ep0_string) || !ep->ep.desc)
1688 		return -EINVAL;
1689 
1690 	spin_lock_irqsave(&ep->dev->lock, iflags);
1691 	empty_req_queue(ep);
1692 	ep->halted = 1;
1693 	pch_udc_ep_disable(ep);
1694 	pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1695 	ep->ep.desc = NULL;
1696 	INIT_LIST_HEAD(&ep->queue);
1697 	spin_unlock_irqrestore(&ep->dev->lock, iflags);
1698 	return 0;
1699 }
1700 
1701 /**
1702  * pch_udc_alloc_request() - This function allocates request structure.
1703  *				It is called by gadget driver
1704  * @usbep:	Reference to the USB endpoint structure
1705  * @gfp:	Flag to be used while allocating memory
1706  *
1707  * Return codes:
1708  *	NULL:			Failure
1709  *	Allocated address:	Success
1710  */
1711 static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
1712 						  gfp_t gfp)
1713 {
1714 	struct pch_udc_request		*req;
1715 	struct pch_udc_ep		*ep;
1716 	struct pch_udc_data_dma_desc	*dma_desc;
1717 
1718 	if (!usbep)
1719 		return NULL;
1720 	ep = container_of(usbep, struct pch_udc_ep, ep);
1721 	req = kzalloc(sizeof *req, gfp);
1722 	if (!req)
1723 		return NULL;
1724 	req->req.dma = DMA_ADDR_INVALID;
1725 	INIT_LIST_HEAD(&req->queue);
1726 	if (!ep->dev->dma_addr)
1727 		return &req->req;
1728 	/* ep0 in requests are allocated from data pool here */
1729 	dma_desc = dma_pool_alloc(ep->dev->data_requests, gfp,
1730 				  &req->td_data_phys);
1731 	if (NULL == dma_desc) {
1732 		kfree(req);
1733 		return NULL;
1734 	}
1735 	/* prevent from using desc. - set HOST BUSY */
1736 	dma_desc->status |= PCH_UDC_BS_HST_BSY;
1737 	dma_desc->dataptr = lower_32_bits(DMA_ADDR_INVALID);
1738 	req->td_data = dma_desc;
1739 	req->td_data_last = dma_desc;
1740 	req->chain_len = 1;
1741 	return &req->req;
1742 }
1743 
1744 /**
1745  * pch_udc_free_request() - This function frees request structure.
1746  *				It is called by gadget driver
1747  * @usbep:	Reference to the USB endpoint structure
1748  * @usbreq:	Reference to the USB request
1749  */
1750 static void pch_udc_free_request(struct usb_ep *usbep,
1751 				  struct usb_request *usbreq)
1752 {
1753 	struct pch_udc_ep	*ep;
1754 	struct pch_udc_request	*req;
1755 	struct pch_udc_dev	*dev;
1756 
1757 	if (!usbep || !usbreq)
1758 		return;
1759 	ep = container_of(usbep, struct pch_udc_ep, ep);
1760 	req = container_of(usbreq, struct pch_udc_request, req);
1761 	dev = ep->dev;
1762 	if (!list_empty(&req->queue))
1763 		dev_err(&dev->pdev->dev, "%s: %s req=0x%p queue not empty\n",
1764 			__func__, usbep->name, req);
1765 	if (req->td_data != NULL) {
1766 		if (req->chain_len > 1)
1767 			pch_udc_free_dma_chain(ep->dev, req);
1768 		dma_pool_free(ep->dev->data_requests, req->td_data,
1769 			      req->td_data_phys);
1770 	}
1771 	kfree(req);
1772 }
1773 
1774 /**
1775  * pch_udc_pcd_queue() - This function queues a request packet. It is called
1776  *			by gadget driver
1777  * @usbep:	Reference to the USB endpoint structure
1778  * @usbreq:	Reference to the USB request
1779  * @gfp:	Flag to be used while mapping the data buffer
1780  *
1781  * Return codes:
1782  *	0:			Success
1783  *	linux error number:	Failure
1784  */
1785 static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
1786 								 gfp_t gfp)
1787 {
1788 	int retval = 0;
1789 	struct pch_udc_ep	*ep;
1790 	struct pch_udc_dev	*dev;
1791 	struct pch_udc_request	*req;
1792 	unsigned long	iflags;
1793 
1794 	if (!usbep || !usbreq || !usbreq->complete || !usbreq->buf)
1795 		return -EINVAL;
1796 	ep = container_of(usbep, struct pch_udc_ep, ep);
1797 	dev = ep->dev;
1798 	if (!ep->ep.desc && ep->num)
1799 		return -EINVAL;
1800 	req = container_of(usbreq, struct pch_udc_request, req);
1801 	if (!list_empty(&req->queue))
1802 		return -EINVAL;
1803 	if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1804 		return -ESHUTDOWN;
1805 	spin_lock_irqsave(&dev->lock, iflags);
1806 	/* map the buffer for dma */
1807 	retval = usb_gadget_map_request(&dev->gadget, usbreq, ep->in);
1808 	if (retval)
1809 		goto probe_end;
1810 	if (usbreq->length > 0) {
1811 		retval = prepare_dma(ep, req, GFP_ATOMIC);
1812 		if (retval)
1813 			goto probe_end;
1814 	}
1815 	usbreq->actual = 0;
1816 	usbreq->status = -EINPROGRESS;
1817 	req->dma_done = 0;
1818 	if (list_empty(&ep->queue) && !ep->halted) {
1819 		/* no pending transfer, so start this req */
1820 		if (!usbreq->length) {
1821 			process_zlp(ep, req);
1822 			retval = 0;
1823 			goto probe_end;
1824 		}
1825 		if (!ep->in) {
1826 			pch_udc_start_rxrequest(ep, req);
1827 		} else {
1828 			/*
1829 			* For IN trfr the descriptors will be programmed and
1830 			* P bit will be set when
1831 			* we get an IN token
1832 			*/
1833 			pch_udc_wait_ep_stall(ep);
1834 			pch_udc_ep_clear_nak(ep);
1835 			pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num));
1836 		}
1837 	}
1838 	/* Now add this request to the ep's pending requests */
1839 	if (req != NULL)
1840 		list_add_tail(&req->queue, &ep->queue);
1841 
1842 probe_end:
1843 	spin_unlock_irqrestore(&dev->lock, iflags);
1844 	return retval;
1845 }
1846 
1847 /**
1848  * pch_udc_pcd_dequeue() - This function de-queues a request packet.
1849  *				It is called by gadget driver
1850  * @usbep:	Reference to the USB endpoint structure
1851  * @usbreq:	Reference to the USB request
1852  *
1853  * Return codes:
1854  *	0:			Success
1855  *	linux error number:	Failure
1856  */
1857 static int pch_udc_pcd_dequeue(struct usb_ep *usbep,
1858 				struct usb_request *usbreq)
1859 {
1860 	struct pch_udc_ep	*ep;
1861 	struct pch_udc_request	*req;
1862 	unsigned long		flags;
1863 	int ret = -EINVAL;
1864 
1865 	ep = container_of(usbep, struct pch_udc_ep, ep);
1866 	if (!usbep || !usbreq || (!ep->ep.desc && ep->num))
1867 		return ret;
1868 	req = container_of(usbreq, struct pch_udc_request, req);
1869 	spin_lock_irqsave(&ep->dev->lock, flags);
1870 	/* make sure it's still queued on this endpoint */
1871 	list_for_each_entry(req, &ep->queue, queue) {
1872 		if (&req->req == usbreq) {
1873 			pch_udc_ep_set_nak(ep);
1874 			if (!list_empty(&req->queue))
1875 				complete_req(ep, req, -ECONNRESET);
1876 			ret = 0;
1877 			break;
1878 		}
1879 	}
1880 	spin_unlock_irqrestore(&ep->dev->lock, flags);
1881 	return ret;
1882 }
1883 
1884 /**
1885  * pch_udc_pcd_set_halt() - This function Sets or clear the endpoint halt
1886  *			    feature
1887  * @usbep:	Reference to the USB endpoint structure
1888  * @halt:	Specifies whether to set or clear the feature
1889  *
1890  * Return codes:
1891  *	0:			Success
1892  *	linux error number:	Failure
1893  */
1894 static int pch_udc_pcd_set_halt(struct usb_ep *usbep, int halt)
1895 {
1896 	struct pch_udc_ep	*ep;
1897 	unsigned long iflags;
1898 	int ret;
1899 
1900 	if (!usbep)
1901 		return -EINVAL;
1902 	ep = container_of(usbep, struct pch_udc_ep, ep);
1903 	if (!ep->ep.desc && !ep->num)
1904 		return -EINVAL;
1905 	if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1906 		return -ESHUTDOWN;
1907 	spin_lock_irqsave(&udc_stall_spinlock, iflags);
1908 	if (list_empty(&ep->queue)) {
1909 		if (halt) {
1910 			if (ep->num == PCH_UDC_EP0)
1911 				ep->dev->stall = 1;
1912 			pch_udc_ep_set_stall(ep);
1913 			pch_udc_enable_ep_interrupts(
1914 				ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1915 		} else {
1916 			pch_udc_ep_clear_stall(ep);
1917 		}
1918 		ret = 0;
1919 	} else {
1920 		ret = -EAGAIN;
1921 	}
1922 	spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1923 	return ret;
1924 }
1925 
1926 /**
1927  * pch_udc_pcd_set_wedge() - This function Sets or clear the endpoint
1928  *				halt feature
1929  * @usbep:	Reference to the USB endpoint structure
1930  *
1931  * Return codes:
1932  *	0:			Success
1933  *	linux error number:	Failure
1934  */
1935 static int pch_udc_pcd_set_wedge(struct usb_ep *usbep)
1936 {
1937 	struct pch_udc_ep	*ep;
1938 	unsigned long iflags;
1939 	int ret;
1940 
1941 	if (!usbep)
1942 		return -EINVAL;
1943 	ep = container_of(usbep, struct pch_udc_ep, ep);
1944 	if (!ep->ep.desc && !ep->num)
1945 		return -EINVAL;
1946 	if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1947 		return -ESHUTDOWN;
1948 	spin_lock_irqsave(&udc_stall_spinlock, iflags);
1949 	if (!list_empty(&ep->queue)) {
1950 		ret = -EAGAIN;
1951 	} else {
1952 		if (ep->num == PCH_UDC_EP0)
1953 			ep->dev->stall = 1;
1954 		pch_udc_ep_set_stall(ep);
1955 		pch_udc_enable_ep_interrupts(ep->dev,
1956 					     PCH_UDC_EPINT(ep->in, ep->num));
1957 		ep->dev->prot_stall = 1;
1958 		ret = 0;
1959 	}
1960 	spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1961 	return ret;
1962 }
1963 
1964 /**
1965  * pch_udc_pcd_fifo_flush() - This function Flush the FIFO of specified endpoint
1966  * @usbep:	Reference to the USB endpoint structure
1967  */
1968 static void pch_udc_pcd_fifo_flush(struct usb_ep *usbep)
1969 {
1970 	struct pch_udc_ep  *ep;
1971 
1972 	if (!usbep)
1973 		return;
1974 
1975 	ep = container_of(usbep, struct pch_udc_ep, ep);
1976 	if (ep->ep.desc || !ep->num)
1977 		pch_udc_ep_fifo_flush(ep, ep->in);
1978 }
1979 
1980 static const struct usb_ep_ops pch_udc_ep_ops = {
1981 	.enable		= pch_udc_pcd_ep_enable,
1982 	.disable	= pch_udc_pcd_ep_disable,
1983 	.alloc_request	= pch_udc_alloc_request,
1984 	.free_request	= pch_udc_free_request,
1985 	.queue		= pch_udc_pcd_queue,
1986 	.dequeue	= pch_udc_pcd_dequeue,
1987 	.set_halt	= pch_udc_pcd_set_halt,
1988 	.set_wedge	= pch_udc_pcd_set_wedge,
1989 	.fifo_status	= NULL,
1990 	.fifo_flush	= pch_udc_pcd_fifo_flush,
1991 };
1992 
1993 /**
1994  * pch_udc_init_setup_buff() - This function initializes the SETUP buffer
1995  * @td_stp:	Reference to the SETP buffer structure
1996  */
1997 static void pch_udc_init_setup_buff(struct pch_udc_stp_dma_desc *td_stp)
1998 {
1999 	static u32	pky_marker;
2000 
2001 	if (!td_stp)
2002 		return;
2003 	td_stp->reserved = ++pky_marker;
2004 	memset(&td_stp->request, 0xFF, sizeof td_stp->request);
2005 	td_stp->status = PCH_UDC_BS_HST_RDY;
2006 }
2007 
2008 /**
2009  * pch_udc_start_next_txrequest() - This function starts
2010  *					the next transmission requirement
2011  * @ep:	Reference to the endpoint structure
2012  */
2013 static void pch_udc_start_next_txrequest(struct pch_udc_ep *ep)
2014 {
2015 	struct pch_udc_request *req;
2016 	struct pch_udc_data_dma_desc *td_data;
2017 
2018 	if (pch_udc_read_ep_control(ep) & UDC_EPCTL_P)
2019 		return;
2020 
2021 	if (list_empty(&ep->queue))
2022 		return;
2023 
2024 	/* next request */
2025 	req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2026 	if (req->dma_going)
2027 		return;
2028 	if (!req->td_data)
2029 		return;
2030 	pch_udc_wait_ep_stall(ep);
2031 	req->dma_going = 1;
2032 	pch_udc_ep_set_ddptr(ep, 0);
2033 	td_data = req->td_data;
2034 	while (1) {
2035 		td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
2036 				   PCH_UDC_BS_HST_RDY;
2037 		if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
2038 			break;
2039 		td_data = phys_to_virt(td_data->next);
2040 	}
2041 	pch_udc_ep_set_ddptr(ep, req->td_data_phys);
2042 	pch_udc_set_dma(ep->dev, DMA_DIR_TX);
2043 	pch_udc_ep_set_pd(ep);
2044 	pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
2045 	pch_udc_ep_clear_nak(ep);
2046 }
2047 
2048 /**
2049  * pch_udc_complete_transfer() - This function completes a transfer
2050  * @ep:		Reference to the endpoint structure
2051  */
2052 static void pch_udc_complete_transfer(struct pch_udc_ep *ep)
2053 {
2054 	struct pch_udc_request *req;
2055 	struct pch_udc_dev *dev = ep->dev;
2056 
2057 	if (list_empty(&ep->queue))
2058 		return;
2059 	req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2060 	if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
2061 	    PCH_UDC_BS_DMA_DONE)
2062 		return;
2063 	if ((req->td_data_last->status & PCH_UDC_RXTX_STS) !=
2064 	     PCH_UDC_RTS_SUCC) {
2065 		dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) "
2066 			"epstatus=0x%08x\n",
2067 		       (req->td_data_last->status & PCH_UDC_RXTX_STS),
2068 		       (int)(ep->epsts));
2069 		return;
2070 	}
2071 
2072 	req->req.actual = req->req.length;
2073 	req->td_data_last->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
2074 	req->td_data->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
2075 	complete_req(ep, req, 0);
2076 	req->dma_going = 0;
2077 	if (!list_empty(&ep->queue)) {
2078 		pch_udc_wait_ep_stall(ep);
2079 		pch_udc_ep_clear_nak(ep);
2080 		pch_udc_enable_ep_interrupts(ep->dev,
2081 					     PCH_UDC_EPINT(ep->in, ep->num));
2082 	} else {
2083 		pch_udc_disable_ep_interrupts(ep->dev,
2084 					      PCH_UDC_EPINT(ep->in, ep->num));
2085 	}
2086 }
2087 
2088 /**
2089  * pch_udc_complete_receiver() - This function completes a receiver
2090  * @ep:		Reference to the endpoint structure
2091  */
2092 static void pch_udc_complete_receiver(struct pch_udc_ep *ep)
2093 {
2094 	struct pch_udc_request *req;
2095 	struct pch_udc_dev *dev = ep->dev;
2096 	unsigned int count;
2097 	struct pch_udc_data_dma_desc *td;
2098 	dma_addr_t addr;
2099 
2100 	if (list_empty(&ep->queue))
2101 		return;
2102 	/* next request */
2103 	req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2104 	pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
2105 	pch_udc_ep_set_ddptr(ep, 0);
2106 	if ((req->td_data_last->status & PCH_UDC_BUFF_STS) ==
2107 	    PCH_UDC_BS_DMA_DONE)
2108 		td = req->td_data_last;
2109 	else
2110 		td = req->td_data;
2111 
2112 	while (1) {
2113 		if ((td->status & PCH_UDC_RXTX_STS) != PCH_UDC_RTS_SUCC) {
2114 			dev_err(&dev->pdev->dev, "Invalid RXTX status=0x%08x "
2115 				"epstatus=0x%08x\n",
2116 				(req->td_data->status & PCH_UDC_RXTX_STS),
2117 				(int)(ep->epsts));
2118 			return;
2119 		}
2120 		if ((td->status & PCH_UDC_BUFF_STS) == PCH_UDC_BS_DMA_DONE)
2121 			if (td->status & PCH_UDC_DMA_LAST) {
2122 				count = td->status & PCH_UDC_RXTX_BYTES;
2123 				break;
2124 			}
2125 		if (td == req->td_data_last) {
2126 			dev_err(&dev->pdev->dev, "Not complete RX descriptor");
2127 			return;
2128 		}
2129 		addr = (dma_addr_t)td->next;
2130 		td = phys_to_virt(addr);
2131 	}
2132 	/* on 64k packets the RXBYTES field is zero */
2133 	if (!count && (req->req.length == UDC_DMA_MAXPACKET))
2134 		count = UDC_DMA_MAXPACKET;
2135 	req->td_data->status |= PCH_UDC_DMA_LAST;
2136 	td->status |= PCH_UDC_BS_HST_BSY;
2137 
2138 	req->dma_going = 0;
2139 	req->req.actual = count;
2140 	complete_req(ep, req, 0);
2141 	/* If there is a new/failed requests try that now */
2142 	if (!list_empty(&ep->queue)) {
2143 		req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2144 		pch_udc_start_rxrequest(ep, req);
2145 	}
2146 }
2147 
2148 /**
2149  * pch_udc_svc_data_in() - This function process endpoint interrupts
2150  *				for IN endpoints
2151  * @dev:	Reference to the device structure
2152  * @ep_num:	Endpoint that generated the interrupt
2153  */
2154 static void pch_udc_svc_data_in(struct pch_udc_dev *dev, int ep_num)
2155 {
2156 	u32	epsts;
2157 	struct pch_udc_ep	*ep;
2158 
2159 	ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2160 	epsts = ep->epsts;
2161 	ep->epsts = 0;
2162 
2163 	if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA  | UDC_EPSTS_HE |
2164 		       UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
2165 		       UDC_EPSTS_RSS | UDC_EPSTS_XFERDONE)))
2166 		return;
2167 	if ((epsts & UDC_EPSTS_BNA))
2168 		return;
2169 	if (epsts & UDC_EPSTS_HE)
2170 		return;
2171 	if (epsts & UDC_EPSTS_RSS) {
2172 		pch_udc_ep_set_stall(ep);
2173 		pch_udc_enable_ep_interrupts(ep->dev,
2174 					     PCH_UDC_EPINT(ep->in, ep->num));
2175 	}
2176 	if (epsts & UDC_EPSTS_RCS) {
2177 		if (!dev->prot_stall) {
2178 			pch_udc_ep_clear_stall(ep);
2179 		} else {
2180 			pch_udc_ep_set_stall(ep);
2181 			pch_udc_enable_ep_interrupts(ep->dev,
2182 						PCH_UDC_EPINT(ep->in, ep->num));
2183 		}
2184 	}
2185 	if (epsts & UDC_EPSTS_TDC)
2186 		pch_udc_complete_transfer(ep);
2187 	/* On IN interrupt, provide data if we have any */
2188 	if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_RSS) &&
2189 	    !(epsts & UDC_EPSTS_TDC) && !(epsts & UDC_EPSTS_TXEMPTY))
2190 		pch_udc_start_next_txrequest(ep);
2191 }
2192 
2193 /**
2194  * pch_udc_svc_data_out() - Handles interrupts from OUT endpoint
2195  * @dev:	Reference to the device structure
2196  * @ep_num:	Endpoint that generated the interrupt
2197  */
2198 static void pch_udc_svc_data_out(struct pch_udc_dev *dev, int ep_num)
2199 {
2200 	u32			epsts;
2201 	struct pch_udc_ep		*ep;
2202 	struct pch_udc_request		*req = NULL;
2203 
2204 	ep = &dev->ep[UDC_EPOUT_IDX(ep_num)];
2205 	epsts = ep->epsts;
2206 	ep->epsts = 0;
2207 
2208 	if ((epsts & UDC_EPSTS_BNA) && (!list_empty(&ep->queue))) {
2209 		/* next request */
2210 		req = list_entry(ep->queue.next, struct pch_udc_request,
2211 				 queue);
2212 		if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
2213 		     PCH_UDC_BS_DMA_DONE) {
2214 			if (!req->dma_going)
2215 				pch_udc_start_rxrequest(ep, req);
2216 			return;
2217 		}
2218 	}
2219 	if (epsts & UDC_EPSTS_HE)
2220 		return;
2221 	if (epsts & UDC_EPSTS_RSS) {
2222 		pch_udc_ep_set_stall(ep);
2223 		pch_udc_enable_ep_interrupts(ep->dev,
2224 					     PCH_UDC_EPINT(ep->in, ep->num));
2225 	}
2226 	if (epsts & UDC_EPSTS_RCS) {
2227 		if (!dev->prot_stall) {
2228 			pch_udc_ep_clear_stall(ep);
2229 		} else {
2230 			pch_udc_ep_set_stall(ep);
2231 			pch_udc_enable_ep_interrupts(ep->dev,
2232 						PCH_UDC_EPINT(ep->in, ep->num));
2233 		}
2234 	}
2235 	if (((epsts & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2236 	    UDC_EPSTS_OUT_DATA) {
2237 		if (ep->dev->prot_stall == 1) {
2238 			pch_udc_ep_set_stall(ep);
2239 			pch_udc_enable_ep_interrupts(ep->dev,
2240 						PCH_UDC_EPINT(ep->in, ep->num));
2241 		} else {
2242 			pch_udc_complete_receiver(ep);
2243 		}
2244 	}
2245 	if (list_empty(&ep->queue))
2246 		pch_udc_set_dma(dev, DMA_DIR_RX);
2247 }
2248 
2249 static int pch_udc_gadget_setup(struct pch_udc_dev *dev)
2250 	__must_hold(&dev->lock)
2251 {
2252 	int rc;
2253 
2254 	/* In some cases we can get an interrupt before driver gets setup */
2255 	if (!dev->driver)
2256 		return -ESHUTDOWN;
2257 
2258 	spin_unlock(&dev->lock);
2259 	rc = dev->driver->setup(&dev->gadget, &dev->setup_data);
2260 	spin_lock(&dev->lock);
2261 	return rc;
2262 }
2263 
2264 /**
2265  * pch_udc_svc_control_in() - Handle Control IN endpoint interrupts
2266  * @dev:	Reference to the device structure
2267  */
2268 static void pch_udc_svc_control_in(struct pch_udc_dev *dev)
2269 {
2270 	u32	epsts;
2271 	struct pch_udc_ep	*ep;
2272 	struct pch_udc_ep	*ep_out;
2273 
2274 	ep = &dev->ep[UDC_EP0IN_IDX];
2275 	ep_out = &dev->ep[UDC_EP0OUT_IDX];
2276 	epsts = ep->epsts;
2277 	ep->epsts = 0;
2278 
2279 	if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
2280 		       UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
2281 		       UDC_EPSTS_XFERDONE)))
2282 		return;
2283 	if ((epsts & UDC_EPSTS_BNA))
2284 		return;
2285 	if (epsts & UDC_EPSTS_HE)
2286 		return;
2287 	if ((epsts & UDC_EPSTS_TDC) && (!dev->stall)) {
2288 		pch_udc_complete_transfer(ep);
2289 		pch_udc_clear_dma(dev, DMA_DIR_RX);
2290 		ep_out->td_data->status = (ep_out->td_data->status &
2291 					~PCH_UDC_BUFF_STS) |
2292 					PCH_UDC_BS_HST_RDY;
2293 		pch_udc_ep_clear_nak(ep_out);
2294 		pch_udc_set_dma(dev, DMA_DIR_RX);
2295 		pch_udc_ep_set_rrdy(ep_out);
2296 	}
2297 	/* On IN interrupt, provide data if we have any */
2298 	if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_TDC) &&
2299 	     !(epsts & UDC_EPSTS_TXEMPTY))
2300 		pch_udc_start_next_txrequest(ep);
2301 }
2302 
2303 /**
2304  * pch_udc_svc_control_out() - Routine that handle Control
2305  *					OUT endpoint interrupts
2306  * @dev:	Reference to the device structure
2307  */
2308 static void pch_udc_svc_control_out(struct pch_udc_dev *dev)
2309 	__releases(&dev->lock)
2310 	__acquires(&dev->lock)
2311 {
2312 	u32	stat;
2313 	int setup_supported;
2314 	struct pch_udc_ep	*ep;
2315 
2316 	ep = &dev->ep[UDC_EP0OUT_IDX];
2317 	stat = ep->epsts;
2318 	ep->epsts = 0;
2319 
2320 	/* If setup data */
2321 	if (((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2322 	    UDC_EPSTS_OUT_SETUP) {
2323 		dev->stall = 0;
2324 		dev->ep[UDC_EP0IN_IDX].halted = 0;
2325 		dev->ep[UDC_EP0OUT_IDX].halted = 0;
2326 		dev->setup_data = ep->td_stp->request;
2327 		pch_udc_init_setup_buff(ep->td_stp);
2328 		pch_udc_clear_dma(dev, DMA_DIR_RX);
2329 		pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]),
2330 				      dev->ep[UDC_EP0IN_IDX].in);
2331 		if ((dev->setup_data.bRequestType & USB_DIR_IN))
2332 			dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2333 		else /* OUT */
2334 			dev->gadget.ep0 = &ep->ep;
2335 		/* If Mass storage Reset */
2336 		if ((dev->setup_data.bRequestType == 0x21) &&
2337 		    (dev->setup_data.bRequest == 0xFF))
2338 			dev->prot_stall = 0;
2339 		/* call gadget with setup data received */
2340 		setup_supported = pch_udc_gadget_setup(dev);
2341 
2342 		if (dev->setup_data.bRequestType & USB_DIR_IN) {
2343 			ep->td_data->status = (ep->td_data->status &
2344 						~PCH_UDC_BUFF_STS) |
2345 						PCH_UDC_BS_HST_RDY;
2346 			pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2347 		}
2348 		/* ep0 in returns data on IN phase */
2349 		if (setup_supported >= 0 && setup_supported <
2350 					    UDC_EP0IN_MAX_PKT_SIZE) {
2351 			pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
2352 			/* Gadget would have queued a request when
2353 			 * we called the setup */
2354 			if (!(dev->setup_data.bRequestType & USB_DIR_IN)) {
2355 				pch_udc_set_dma(dev, DMA_DIR_RX);
2356 				pch_udc_ep_clear_nak(ep);
2357 			}
2358 		} else if (setup_supported < 0) {
2359 			/* if unsupported request, then stall */
2360 			pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX]));
2361 			pch_udc_enable_ep_interrupts(ep->dev,
2362 						PCH_UDC_EPINT(ep->in, ep->num));
2363 			dev->stall = 0;
2364 			pch_udc_set_dma(dev, DMA_DIR_RX);
2365 		} else {
2366 			dev->waiting_zlp_ack = 1;
2367 		}
2368 	} else if ((((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2369 		     UDC_EPSTS_OUT_DATA) && !dev->stall) {
2370 		pch_udc_clear_dma(dev, DMA_DIR_RX);
2371 		pch_udc_ep_set_ddptr(ep, 0);
2372 		if (!list_empty(&ep->queue)) {
2373 			ep->epsts = stat;
2374 			pch_udc_svc_data_out(dev, PCH_UDC_EP0);
2375 		}
2376 		pch_udc_set_dma(dev, DMA_DIR_RX);
2377 	}
2378 	pch_udc_ep_set_rrdy(ep);
2379 }
2380 
2381 
2382 /**
2383  * pch_udc_postsvc_epinters() - This function enables end point interrupts
2384  *				and clears NAK status
2385  * @dev:	Reference to the device structure
2386  * @ep_num:	End point number
2387  */
2388 static void pch_udc_postsvc_epinters(struct pch_udc_dev *dev, int ep_num)
2389 {
2390 	struct pch_udc_ep	*ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2391 	if (list_empty(&ep->queue))
2392 		return;
2393 	pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
2394 	pch_udc_ep_clear_nak(ep);
2395 }
2396 
2397 /**
2398  * pch_udc_read_all_epstatus() - This function read all endpoint status
2399  * @dev:	Reference to the device structure
2400  * @ep_intr:	Status of endpoint interrupt
2401  */
2402 static void pch_udc_read_all_epstatus(struct pch_udc_dev *dev, u32 ep_intr)
2403 {
2404 	int i;
2405 	struct pch_udc_ep	*ep;
2406 
2407 	for (i = 0; i < PCH_UDC_USED_EP_NUM; i++) {
2408 		/* IN */
2409 		if (ep_intr & (0x1 << i)) {
2410 			ep = &dev->ep[UDC_EPIN_IDX(i)];
2411 			ep->epsts = pch_udc_read_ep_status(ep);
2412 			pch_udc_clear_ep_status(ep, ep->epsts);
2413 		}
2414 		/* OUT */
2415 		if (ep_intr & (0x10000 << i)) {
2416 			ep = &dev->ep[UDC_EPOUT_IDX(i)];
2417 			ep->epsts = pch_udc_read_ep_status(ep);
2418 			pch_udc_clear_ep_status(ep, ep->epsts);
2419 		}
2420 	}
2421 }
2422 
2423 /**
2424  * pch_udc_activate_control_ep() - This function enables the control endpoints
2425  *					for traffic after a reset
2426  * @dev:	Reference to the device structure
2427  */
2428 static void pch_udc_activate_control_ep(struct pch_udc_dev *dev)
2429 {
2430 	struct pch_udc_ep	*ep;
2431 	u32 val;
2432 
2433 	/* Setup the IN endpoint */
2434 	ep = &dev->ep[UDC_EP0IN_IDX];
2435 	pch_udc_clear_ep_control(ep);
2436 	pch_udc_ep_fifo_flush(ep, ep->in);
2437 	pch_udc_ep_set_bufsz(ep, UDC_EP0IN_BUFF_SIZE, ep->in);
2438 	pch_udc_ep_set_maxpkt(ep, UDC_EP0IN_MAX_PKT_SIZE);
2439 	/* Initialize the IN EP Descriptor */
2440 	ep->td_data      = NULL;
2441 	ep->td_stp       = NULL;
2442 	ep->td_data_phys = 0;
2443 	ep->td_stp_phys  = 0;
2444 
2445 	/* Setup the OUT endpoint */
2446 	ep = &dev->ep[UDC_EP0OUT_IDX];
2447 	pch_udc_clear_ep_control(ep);
2448 	pch_udc_ep_fifo_flush(ep, ep->in);
2449 	pch_udc_ep_set_bufsz(ep, UDC_EP0OUT_BUFF_SIZE, ep->in);
2450 	pch_udc_ep_set_maxpkt(ep, UDC_EP0OUT_MAX_PKT_SIZE);
2451 	val = UDC_EP0OUT_MAX_PKT_SIZE << UDC_CSR_NE_MAX_PKT_SHIFT;
2452 	pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX);
2453 
2454 	/* Initialize the SETUP buffer */
2455 	pch_udc_init_setup_buff(ep->td_stp);
2456 	/* Write the pointer address of dma descriptor */
2457 	pch_udc_ep_set_subptr(ep, ep->td_stp_phys);
2458 	/* Write the pointer address of Setup descriptor */
2459 	pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2460 
2461 	/* Initialize the dma descriptor */
2462 	ep->td_data->status  = PCH_UDC_DMA_LAST;
2463 	ep->td_data->dataptr = dev->dma_addr;
2464 	ep->td_data->next    = ep->td_data_phys;
2465 
2466 	pch_udc_ep_clear_nak(ep);
2467 }
2468 
2469 
2470 /**
2471  * pch_udc_svc_ur_interrupt() - This function handles a USB reset interrupt
2472  * @dev:	Reference to driver structure
2473  */
2474 static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
2475 {
2476 	struct pch_udc_ep	*ep;
2477 	int i;
2478 
2479 	pch_udc_clear_dma(dev, DMA_DIR_TX);
2480 	pch_udc_clear_dma(dev, DMA_DIR_RX);
2481 	/* Mask all endpoint interrupts */
2482 	pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2483 	/* clear all endpoint interrupts */
2484 	pch_udc_write_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2485 
2486 	for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2487 		ep = &dev->ep[i];
2488 		pch_udc_clear_ep_status(ep, UDC_EPSTS_ALL_CLR_MASK);
2489 		pch_udc_clear_ep_control(ep);
2490 		pch_udc_ep_set_ddptr(ep, 0);
2491 		pch_udc_write_csr(ep->dev, 0x00, i);
2492 	}
2493 	dev->stall = 0;
2494 	dev->prot_stall = 0;
2495 	dev->waiting_zlp_ack = 0;
2496 	dev->set_cfg_not_acked = 0;
2497 
2498 	/* disable ep to empty req queue. Skip the control EP's */
2499 	for (i = 0; i < (PCH_UDC_USED_EP_NUM*2); i++) {
2500 		ep = &dev->ep[i];
2501 		pch_udc_ep_set_nak(ep);
2502 		pch_udc_ep_fifo_flush(ep, ep->in);
2503 		/* Complete request queue */
2504 		empty_req_queue(ep);
2505 	}
2506 	if (dev->driver) {
2507 		spin_unlock(&dev->lock);
2508 		usb_gadget_udc_reset(&dev->gadget, dev->driver);
2509 		spin_lock(&dev->lock);
2510 	}
2511 }
2512 
2513 /**
2514  * pch_udc_svc_enum_interrupt() - This function handles a USB speed enumeration
2515  *				done interrupt
2516  * @dev:	Reference to driver structure
2517  */
2518 static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev)
2519 {
2520 	u32 dev_stat, dev_speed;
2521 	u32 speed = USB_SPEED_FULL;
2522 
2523 	dev_stat = pch_udc_read_device_status(dev);
2524 	dev_speed = (dev_stat & UDC_DEVSTS_ENUM_SPEED_MASK) >>
2525 						 UDC_DEVSTS_ENUM_SPEED_SHIFT;
2526 	switch (dev_speed) {
2527 	case UDC_DEVSTS_ENUM_SPEED_HIGH:
2528 		speed = USB_SPEED_HIGH;
2529 		break;
2530 	case  UDC_DEVSTS_ENUM_SPEED_FULL:
2531 		speed = USB_SPEED_FULL;
2532 		break;
2533 	case  UDC_DEVSTS_ENUM_SPEED_LOW:
2534 		speed = USB_SPEED_LOW;
2535 		break;
2536 	default:
2537 		BUG();
2538 	}
2539 	dev->gadget.speed = speed;
2540 	pch_udc_activate_control_ep(dev);
2541 	pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | UDC_EPINT_OUT_EP0);
2542 	pch_udc_set_dma(dev, DMA_DIR_TX);
2543 	pch_udc_set_dma(dev, DMA_DIR_RX);
2544 	pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX]));
2545 
2546 	/* enable device interrupts */
2547 	pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2548 					UDC_DEVINT_ES | UDC_DEVINT_ENUM |
2549 					UDC_DEVINT_SI | UDC_DEVINT_SC);
2550 }
2551 
2552 /**
2553  * pch_udc_svc_intf_interrupt() - This function handles a set interface
2554  *				  interrupt
2555  * @dev:	Reference to driver structure
2556  */
2557 static void pch_udc_svc_intf_interrupt(struct pch_udc_dev *dev)
2558 {
2559 	u32 reg, dev_stat = 0;
2560 	int i;
2561 
2562 	dev_stat = pch_udc_read_device_status(dev);
2563 	dev->cfg_data.cur_intf = (dev_stat & UDC_DEVSTS_INTF_MASK) >>
2564 							 UDC_DEVSTS_INTF_SHIFT;
2565 	dev->cfg_data.cur_alt = (dev_stat & UDC_DEVSTS_ALT_MASK) >>
2566 							 UDC_DEVSTS_ALT_SHIFT;
2567 	dev->set_cfg_not_acked = 1;
2568 	/* Construct the usb request for gadget driver and inform it */
2569 	memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2570 	dev->setup_data.bRequest = USB_REQ_SET_INTERFACE;
2571 	dev->setup_data.bRequestType = USB_RECIP_INTERFACE;
2572 	dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_alt);
2573 	dev->setup_data.wIndex = cpu_to_le16(dev->cfg_data.cur_intf);
2574 	/* programm the Endpoint Cfg registers */
2575 	/* Only one end point cfg register */
2576 	reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2577 	reg = (reg & ~UDC_CSR_NE_INTF_MASK) |
2578 	      (dev->cfg_data.cur_intf << UDC_CSR_NE_INTF_SHIFT);
2579 	reg = (reg & ~UDC_CSR_NE_ALT_MASK) |
2580 	      (dev->cfg_data.cur_alt << UDC_CSR_NE_ALT_SHIFT);
2581 	pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2582 	for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2583 		/* clear stall bits */
2584 		pch_udc_ep_clear_stall(&(dev->ep[i]));
2585 		dev->ep[i].halted = 0;
2586 	}
2587 	dev->stall = 0;
2588 	pch_udc_gadget_setup(dev);
2589 }
2590 
2591 /**
2592  * pch_udc_svc_cfg_interrupt() - This function handles a set configuration
2593  *				interrupt
2594  * @dev:	Reference to driver structure
2595  */
2596 static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev *dev)
2597 {
2598 	int i;
2599 	u32 reg, dev_stat = 0;
2600 
2601 	dev_stat = pch_udc_read_device_status(dev);
2602 	dev->set_cfg_not_acked = 1;
2603 	dev->cfg_data.cur_cfg = (dev_stat & UDC_DEVSTS_CFG_MASK) >>
2604 				UDC_DEVSTS_CFG_SHIFT;
2605 	/* make usb request for gadget driver */
2606 	memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2607 	dev->setup_data.bRequest = USB_REQ_SET_CONFIGURATION;
2608 	dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_cfg);
2609 	/* program the NE registers */
2610 	/* Only one end point cfg register */
2611 	reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2612 	reg = (reg & ~UDC_CSR_NE_CFG_MASK) |
2613 	      (dev->cfg_data.cur_cfg << UDC_CSR_NE_CFG_SHIFT);
2614 	pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2615 	for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2616 		/* clear stall bits */
2617 		pch_udc_ep_clear_stall(&(dev->ep[i]));
2618 		dev->ep[i].halted = 0;
2619 	}
2620 	dev->stall = 0;
2621 
2622 	/* call gadget zero with setup data received */
2623 	pch_udc_gadget_setup(dev);
2624 }
2625 
2626 /**
2627  * pch_udc_dev_isr() - This function services device interrupts
2628  *			by invoking appropriate routines.
2629  * @dev:	Reference to the device structure
2630  * @dev_intr:	The Device interrupt status.
2631  */
2632 static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr)
2633 {
2634 	int vbus;
2635 
2636 	/* USB Reset Interrupt */
2637 	if (dev_intr & UDC_DEVINT_UR) {
2638 		pch_udc_svc_ur_interrupt(dev);
2639 		dev_dbg(&dev->pdev->dev, "USB_RESET\n");
2640 	}
2641 	/* Enumeration Done Interrupt */
2642 	if (dev_intr & UDC_DEVINT_ENUM) {
2643 		pch_udc_svc_enum_interrupt(dev);
2644 		dev_dbg(&dev->pdev->dev, "USB_ENUM\n");
2645 	}
2646 	/* Set Interface Interrupt */
2647 	if (dev_intr & UDC_DEVINT_SI)
2648 		pch_udc_svc_intf_interrupt(dev);
2649 	/* Set Config Interrupt */
2650 	if (dev_intr & UDC_DEVINT_SC)
2651 		pch_udc_svc_cfg_interrupt(dev);
2652 	/* USB Suspend interrupt */
2653 	if (dev_intr & UDC_DEVINT_US) {
2654 		if (dev->driver
2655 			&& dev->driver->suspend) {
2656 			spin_unlock(&dev->lock);
2657 			dev->driver->suspend(&dev->gadget);
2658 			spin_lock(&dev->lock);
2659 		}
2660 
2661 		vbus = pch_vbus_gpio_get_value(dev);
2662 		if ((dev->vbus_session == 0)
2663 			&& (vbus != 1)) {
2664 			if (dev->driver && dev->driver->disconnect) {
2665 				spin_unlock(&dev->lock);
2666 				dev->driver->disconnect(&dev->gadget);
2667 				spin_lock(&dev->lock);
2668 			}
2669 			pch_udc_reconnect(dev);
2670 		} else if ((dev->vbus_session == 0)
2671 			&& (vbus == 1)
2672 			&& !dev->vbus_gpio.intr)
2673 			schedule_work(&dev->vbus_gpio.irq_work_fall);
2674 
2675 		dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n");
2676 	}
2677 	/* Clear the SOF interrupt, if enabled */
2678 	if (dev_intr & UDC_DEVINT_SOF)
2679 		dev_dbg(&dev->pdev->dev, "SOF\n");
2680 	/* ES interrupt, IDLE > 3ms on the USB */
2681 	if (dev_intr & UDC_DEVINT_ES)
2682 		dev_dbg(&dev->pdev->dev, "ES\n");
2683 	/* RWKP interrupt */
2684 	if (dev_intr & UDC_DEVINT_RWKP)
2685 		dev_dbg(&dev->pdev->dev, "RWKP\n");
2686 }
2687 
2688 /**
2689  * pch_udc_isr() - This function handles interrupts from the PCH USB Device
2690  * @irq:	Interrupt request number
2691  * @pdev:	Reference to the device structure
2692  */
2693 static irqreturn_t pch_udc_isr(int irq, void *pdev)
2694 {
2695 	struct pch_udc_dev *dev = (struct pch_udc_dev *) pdev;
2696 	u32 dev_intr, ep_intr;
2697 	int i;
2698 
2699 	dev_intr = pch_udc_read_device_interrupts(dev);
2700 	ep_intr = pch_udc_read_ep_interrupts(dev);
2701 
2702 	/* For a hot plug, this find that the controller is hung up. */
2703 	if (dev_intr == ep_intr)
2704 		if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) {
2705 			dev_dbg(&dev->pdev->dev, "UDC: Hung up\n");
2706 			/* The controller is reset */
2707 			pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
2708 			return IRQ_HANDLED;
2709 		}
2710 	if (dev_intr)
2711 		/* Clear device interrupts */
2712 		pch_udc_write_device_interrupts(dev, dev_intr);
2713 	if (ep_intr)
2714 		/* Clear ep interrupts */
2715 		pch_udc_write_ep_interrupts(dev, ep_intr);
2716 	if (!dev_intr && !ep_intr)
2717 		return IRQ_NONE;
2718 	spin_lock(&dev->lock);
2719 	if (dev_intr)
2720 		pch_udc_dev_isr(dev, dev_intr);
2721 	if (ep_intr) {
2722 		pch_udc_read_all_epstatus(dev, ep_intr);
2723 		/* Process Control In interrupts, if present */
2724 		if (ep_intr & UDC_EPINT_IN_EP0) {
2725 			pch_udc_svc_control_in(dev);
2726 			pch_udc_postsvc_epinters(dev, 0);
2727 		}
2728 		/* Process Control Out interrupts, if present */
2729 		if (ep_intr & UDC_EPINT_OUT_EP0)
2730 			pch_udc_svc_control_out(dev);
2731 		/* Process data in end point interrupts */
2732 		for (i = 1; i < PCH_UDC_USED_EP_NUM; i++) {
2733 			if (ep_intr & (1 <<  i)) {
2734 				pch_udc_svc_data_in(dev, i);
2735 				pch_udc_postsvc_epinters(dev, i);
2736 			}
2737 		}
2738 		/* Process data out end point interrupts */
2739 		for (i = UDC_EPINT_OUT_SHIFT + 1; i < (UDC_EPINT_OUT_SHIFT +
2740 						 PCH_UDC_USED_EP_NUM); i++)
2741 			if (ep_intr & (1 <<  i))
2742 				pch_udc_svc_data_out(dev, i -
2743 							 UDC_EPINT_OUT_SHIFT);
2744 	}
2745 	spin_unlock(&dev->lock);
2746 	return IRQ_HANDLED;
2747 }
2748 
2749 /**
2750  * pch_udc_setup_ep0() - This function enables control endpoint for traffic
2751  * @dev:	Reference to the device structure
2752  */
2753 static void pch_udc_setup_ep0(struct pch_udc_dev *dev)
2754 {
2755 	/* enable ep0 interrupts */
2756 	pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 |
2757 						UDC_EPINT_OUT_EP0);
2758 	/* enable device interrupts */
2759 	pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2760 				       UDC_DEVINT_ES | UDC_DEVINT_ENUM |
2761 				       UDC_DEVINT_SI | UDC_DEVINT_SC);
2762 }
2763 
2764 /**
2765  * pch_udc_pcd_reinit() - This API initializes the endpoint structures
2766  * @dev:	Reference to the driver structure
2767  */
2768 static void pch_udc_pcd_reinit(struct pch_udc_dev *dev)
2769 {
2770 	const char *const ep_string[] = {
2771 		ep0_string, "ep0out", "ep1in", "ep1out", "ep2in", "ep2out",
2772 		"ep3in", "ep3out", "ep4in", "ep4out", "ep5in", "ep5out",
2773 		"ep6in", "ep6out", "ep7in", "ep7out", "ep8in", "ep8out",
2774 		"ep9in", "ep9out", "ep10in", "ep10out", "ep11in", "ep11out",
2775 		"ep12in", "ep12out", "ep13in", "ep13out", "ep14in", "ep14out",
2776 		"ep15in", "ep15out",
2777 	};
2778 	int i;
2779 
2780 	dev->gadget.speed = USB_SPEED_UNKNOWN;
2781 	INIT_LIST_HEAD(&dev->gadget.ep_list);
2782 
2783 	/* Initialize the endpoints structures */
2784 	memset(dev->ep, 0, sizeof dev->ep);
2785 	for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2786 		struct pch_udc_ep *ep = &dev->ep[i];
2787 		ep->dev = dev;
2788 		ep->halted = 1;
2789 		ep->num = i / 2;
2790 		ep->in = ~i & 1;
2791 		ep->ep.name = ep_string[i];
2792 		ep->ep.ops = &pch_udc_ep_ops;
2793 		if (ep->in) {
2794 			ep->offset_addr = ep->num * UDC_EP_REG_SHIFT;
2795 			ep->ep.caps.dir_in = true;
2796 		} else {
2797 			ep->offset_addr = (UDC_EPINT_OUT_SHIFT + ep->num) *
2798 					  UDC_EP_REG_SHIFT;
2799 			ep->ep.caps.dir_out = true;
2800 		}
2801 		if (i == UDC_EP0IN_IDX || i == UDC_EP0OUT_IDX) {
2802 			ep->ep.caps.type_control = true;
2803 		} else {
2804 			ep->ep.caps.type_iso = true;
2805 			ep->ep.caps.type_bulk = true;
2806 			ep->ep.caps.type_int = true;
2807 		}
2808 		/* need to set ep->ep.maxpacket and set Default Configuration?*/
2809 		usb_ep_set_maxpacket_limit(&ep->ep, UDC_BULK_MAX_PKT_SIZE);
2810 		list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
2811 		INIT_LIST_HEAD(&ep->queue);
2812 	}
2813 	usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IDX].ep, UDC_EP0IN_MAX_PKT_SIZE);
2814 	usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IDX].ep, UDC_EP0OUT_MAX_PKT_SIZE);
2815 
2816 	/* remove ep0 in and out from the list.  They have own pointer */
2817 	list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list);
2818 	list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list);
2819 
2820 	dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2821 	INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
2822 }
2823 
2824 /**
2825  * pch_udc_pcd_init() - This API initializes the driver structure
2826  * @dev:	Reference to the driver structure
2827  *
2828  * Return codes:
2829  *	0:		Success
2830  *	-ERRNO:		All kind of errors when retrieving VBUS GPIO
2831  */
2832 static int pch_udc_pcd_init(struct pch_udc_dev *dev)
2833 {
2834 	int ret;
2835 
2836 	pch_udc_init(dev);
2837 	pch_udc_pcd_reinit(dev);
2838 
2839 	ret = pch_vbus_gpio_init(dev);
2840 	if (ret)
2841 		pch_udc_exit(dev);
2842 	return ret;
2843 }
2844 
2845 /**
2846  * init_dma_pools() - create dma pools during initialization
2847  * @dev:	reference to struct pci_dev
2848  */
2849 static int init_dma_pools(struct pch_udc_dev *dev)
2850 {
2851 	struct pch_udc_stp_dma_desc	*td_stp;
2852 	struct pch_udc_data_dma_desc	*td_data;
2853 	void				*ep0out_buf;
2854 
2855 	/* DMA setup */
2856 	dev->data_requests = dma_pool_create("data_requests", &dev->pdev->dev,
2857 		sizeof(struct pch_udc_data_dma_desc), 0, 0);
2858 	if (!dev->data_requests) {
2859 		dev_err(&dev->pdev->dev, "%s: can't get request data pool\n",
2860 			__func__);
2861 		return -ENOMEM;
2862 	}
2863 
2864 	/* dma desc for setup data */
2865 	dev->stp_requests = dma_pool_create("setup requests", &dev->pdev->dev,
2866 		sizeof(struct pch_udc_stp_dma_desc), 0, 0);
2867 	if (!dev->stp_requests) {
2868 		dev_err(&dev->pdev->dev, "%s: can't get setup request pool\n",
2869 			__func__);
2870 		return -ENOMEM;
2871 	}
2872 	/* setup */
2873 	td_stp = dma_pool_alloc(dev->stp_requests, GFP_KERNEL,
2874 				&dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
2875 	if (!td_stp) {
2876 		dev_err(&dev->pdev->dev,
2877 			"%s: can't allocate setup dma descriptor\n", __func__);
2878 		return -ENOMEM;
2879 	}
2880 	dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp;
2881 
2882 	/* data: 0 packets !? */
2883 	td_data = dma_pool_alloc(dev->data_requests, GFP_KERNEL,
2884 				&dev->ep[UDC_EP0OUT_IDX].td_data_phys);
2885 	if (!td_data) {
2886 		dev_err(&dev->pdev->dev,
2887 			"%s: can't allocate data dma descriptor\n", __func__);
2888 		return -ENOMEM;
2889 	}
2890 	dev->ep[UDC_EP0OUT_IDX].td_data = td_data;
2891 	dev->ep[UDC_EP0IN_IDX].td_stp = NULL;
2892 	dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0;
2893 	dev->ep[UDC_EP0IN_IDX].td_data = NULL;
2894 	dev->ep[UDC_EP0IN_IDX].td_data_phys = 0;
2895 
2896 	ep0out_buf = devm_kzalloc(&dev->pdev->dev, UDC_EP0OUT_BUFF_SIZE * 4,
2897 				  GFP_KERNEL);
2898 	if (!ep0out_buf)
2899 		return -ENOMEM;
2900 	dev->dma_addr = dma_map_single(&dev->pdev->dev, ep0out_buf,
2901 				       UDC_EP0OUT_BUFF_SIZE * 4,
2902 				       DMA_FROM_DEVICE);
2903 	return dma_mapping_error(&dev->pdev->dev, dev->dma_addr);
2904 }
2905 
2906 static int pch_udc_start(struct usb_gadget *g,
2907 		struct usb_gadget_driver *driver)
2908 {
2909 	struct pch_udc_dev	*dev = to_pch_udc(g);
2910 
2911 	driver->driver.bus = NULL;
2912 	dev->driver = driver;
2913 
2914 	/* get ready for ep0 traffic */
2915 	pch_udc_setup_ep0(dev);
2916 
2917 	/* clear SD */
2918 	if ((pch_vbus_gpio_get_value(dev) != 0) || !dev->vbus_gpio.intr)
2919 		pch_udc_clear_disconnect(dev);
2920 
2921 	dev->connected = 1;
2922 	return 0;
2923 }
2924 
2925 static int pch_udc_stop(struct usb_gadget *g)
2926 {
2927 	struct pch_udc_dev	*dev = to_pch_udc(g);
2928 
2929 	pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2930 
2931 	/* Assures that there are no pending requests with this driver */
2932 	dev->driver = NULL;
2933 	dev->connected = 0;
2934 
2935 	/* set SD */
2936 	pch_udc_set_disconnect(dev);
2937 
2938 	return 0;
2939 }
2940 
2941 static void pch_vbus_gpio_remove_table(void *table)
2942 {
2943 	gpiod_remove_lookup_table(table);
2944 }
2945 
2946 static int pch_vbus_gpio_add_table(struct device *d, void *table)
2947 {
2948 	gpiod_add_lookup_table(table);
2949 	return devm_add_action_or_reset(d, pch_vbus_gpio_remove_table, table);
2950 }
2951 
2952 static struct gpiod_lookup_table pch_udc_minnow_vbus_gpio_table = {
2953 	.dev_id		= "0000:02:02.4",
2954 	.table		= {
2955 		GPIO_LOOKUP("sch_gpio.33158", 12, NULL, GPIO_ACTIVE_HIGH),
2956 		{}
2957 	},
2958 };
2959 
2960 static int pch_udc_minnow_platform_init(struct device *d)
2961 {
2962 	return pch_vbus_gpio_add_table(d, &pch_udc_minnow_vbus_gpio_table);
2963 }
2964 
2965 static int pch_udc_quark_platform_init(struct device *d)
2966 {
2967 	struct pch_udc_dev *dev = dev_get_drvdata(d);
2968 
2969 	dev->bar = PCH_UDC_PCI_BAR_QUARK_X1000;
2970 	return 0;
2971 }
2972 
2973 static void pch_udc_shutdown(struct pci_dev *pdev)
2974 {
2975 	struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2976 
2977 	pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2978 	pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2979 
2980 	/* disable the pullup so the host will think we're gone */
2981 	pch_udc_set_disconnect(dev);
2982 }
2983 
2984 static void pch_udc_remove(struct pci_dev *pdev)
2985 {
2986 	struct pch_udc_dev	*dev = pci_get_drvdata(pdev);
2987 
2988 	usb_del_gadget_udc(&dev->gadget);
2989 
2990 	/* gadget driver must not be registered */
2991 	if (dev->driver)
2992 		dev_err(&pdev->dev,
2993 			"%s: gadget driver still bound!!!\n", __func__);
2994 	/* dma pool cleanup */
2995 	dma_pool_destroy(dev->data_requests);
2996 
2997 	if (dev->stp_requests) {
2998 		/* cleanup DMA desc's for ep0in */
2999 		if (dev->ep[UDC_EP0OUT_IDX].td_stp) {
3000 			dma_pool_free(dev->stp_requests,
3001 				dev->ep[UDC_EP0OUT_IDX].td_stp,
3002 				dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
3003 		}
3004 		if (dev->ep[UDC_EP0OUT_IDX].td_data) {
3005 			dma_pool_free(dev->stp_requests,
3006 				dev->ep[UDC_EP0OUT_IDX].td_data,
3007 				dev->ep[UDC_EP0OUT_IDX].td_data_phys);
3008 		}
3009 		dma_pool_destroy(dev->stp_requests);
3010 	}
3011 
3012 	if (dev->dma_addr)
3013 		dma_unmap_single(&dev->pdev->dev, dev->dma_addr,
3014 				 UDC_EP0OUT_BUFF_SIZE * 4, DMA_FROM_DEVICE);
3015 
3016 	pch_vbus_gpio_free(dev);
3017 
3018 	pch_udc_exit(dev);
3019 }
3020 
3021 static int __maybe_unused pch_udc_suspend(struct device *d)
3022 {
3023 	struct pch_udc_dev *dev = dev_get_drvdata(d);
3024 
3025 	pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
3026 	pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
3027 
3028 	return 0;
3029 }
3030 
3031 static int __maybe_unused pch_udc_resume(struct device *d)
3032 {
3033 	return 0;
3034 }
3035 
3036 static SIMPLE_DEV_PM_OPS(pch_udc_pm, pch_udc_suspend, pch_udc_resume);
3037 
3038 typedef int (*platform_init_fn)(struct device *);
3039 
3040 static int pch_udc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
3041 {
3042 	platform_init_fn platform_init = (platform_init_fn)id->driver_data;
3043 	int			retval;
3044 	struct pch_udc_dev	*dev;
3045 
3046 	/* init */
3047 	dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
3048 	if (!dev)
3049 		return -ENOMEM;
3050 
3051 	/* pci setup */
3052 	retval = pcim_enable_device(pdev);
3053 	if (retval)
3054 		return retval;
3055 
3056 	dev->bar = PCH_UDC_PCI_BAR;
3057 	dev->pdev = pdev;
3058 	pci_set_drvdata(pdev, dev);
3059 
3060 	/* Platform specific hook */
3061 	if (platform_init) {
3062 		retval = platform_init(&pdev->dev);
3063 		if (retval)
3064 			return retval;
3065 	}
3066 
3067 	/* PCI resource allocation */
3068 	retval = pcim_iomap_regions(pdev, BIT(dev->bar), pci_name(pdev));
3069 	if (retval)
3070 		return retval;
3071 
3072 	dev->base_addr = pcim_iomap_table(pdev)[dev->bar];
3073 
3074 	/* initialize the hardware */
3075 	retval = pch_udc_pcd_init(dev);
3076 	if (retval)
3077 		return retval;
3078 
3079 	pci_enable_msi(pdev);
3080 
3081 	retval = devm_request_irq(&pdev->dev, pdev->irq, pch_udc_isr,
3082 				  IRQF_SHARED, KBUILD_MODNAME, dev);
3083 	if (retval) {
3084 		dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__,
3085 			pdev->irq);
3086 		goto finished;
3087 	}
3088 
3089 	pci_set_master(pdev);
3090 	pci_try_set_mwi(pdev);
3091 
3092 	/* device struct setup */
3093 	spin_lock_init(&dev->lock);
3094 	dev->gadget.ops = &pch_udc_ops;
3095 
3096 	retval = init_dma_pools(dev);
3097 	if (retval)
3098 		goto finished;
3099 
3100 	dev->gadget.name = KBUILD_MODNAME;
3101 	dev->gadget.max_speed = USB_SPEED_HIGH;
3102 
3103 	/* Put the device in disconnected state till a driver is bound */
3104 	pch_udc_set_disconnect(dev);
3105 	retval = usb_add_gadget_udc(&pdev->dev, &dev->gadget);
3106 	if (retval)
3107 		goto finished;
3108 	return 0;
3109 
3110 finished:
3111 	pch_udc_remove(pdev);
3112 	return retval;
3113 }
3114 
3115 static const struct pci_device_id pch_udc_pcidev_id[] = {
3116 	{
3117 		PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC),
3118 		.class = PCI_CLASS_SERIAL_USB_DEVICE,
3119 		.class_mask = 0xffffffff,
3120 		.driver_data = (kernel_ulong_t)&pch_udc_quark_platform_init,
3121 	},
3122 	{
3123 		PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC,
3124 			       PCI_VENDOR_ID_CIRCUITCO, PCI_SUBSYSTEM_ID_CIRCUITCO_MINNOWBOARD),
3125 		.class = PCI_CLASS_SERIAL_USB_DEVICE,
3126 		.class_mask = 0xffffffff,
3127 		.driver_data = (kernel_ulong_t)&pch_udc_minnow_platform_init,
3128 	},
3129 	{
3130 		PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC),
3131 		.class = PCI_CLASS_SERIAL_USB_DEVICE,
3132 		.class_mask = 0xffffffff,
3133 	},
3134 	{
3135 		PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7213_IOH_UDC),
3136 		.class = PCI_CLASS_SERIAL_USB_DEVICE,
3137 		.class_mask = 0xffffffff,
3138 	},
3139 	{
3140 		PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7831_IOH_UDC),
3141 		.class = PCI_CLASS_SERIAL_USB_DEVICE,
3142 		.class_mask = 0xffffffff,
3143 	},
3144 	{ 0 },
3145 };
3146 
3147 MODULE_DEVICE_TABLE(pci, pch_udc_pcidev_id);
3148 
3149 static struct pci_driver pch_udc_driver = {
3150 	.name =	KBUILD_MODNAME,
3151 	.id_table =	pch_udc_pcidev_id,
3152 	.probe =	pch_udc_probe,
3153 	.remove =	pch_udc_remove,
3154 	.shutdown =	pch_udc_shutdown,
3155 	.driver = {
3156 		.pm = &pch_udc_pm,
3157 	},
3158 };
3159 
3160 module_pci_driver(pch_udc_driver);
3161 
3162 MODULE_DESCRIPTION("Intel EG20T USB Device Controller");
3163 MODULE_AUTHOR("LAPIS Semiconductor, <tomoya-linux@dsn.lapis-semi.com>");
3164 MODULE_LICENSE("GPL");
3165