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