2 * Copyright (C) 2010 OKI SEMICONDUCTOR CO., LTD.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18 #include <linux/kernel.h>
19 #include <linux/module.h>
20 #include <linux/pci.h>
21 #include <linux/delay.h>
22 #include <linux/errno.h>
23 #include <linux/list.h>
24 #include <linux/interrupt.h>
25 #include <linux/usb/ch9.h>
26 #include <linux/usb/gadget.h>
28 /* Address offset of Registers */
29 #define UDC_EP_REG_SHIFT 0x20 /* Offset to next EP */
31 #define UDC_EPCTL_ADDR 0x00 /* Endpoint control */
32 #define UDC_EPSTS_ADDR 0x04 /* Endpoint status */
33 #define UDC_BUFIN_FRAMENUM_ADDR 0x08 /* buffer size in / frame number out */
34 #define UDC_BUFOUT_MAXPKT_ADDR 0x0C /* buffer size out / maxpkt in */
35 #define UDC_SUBPTR_ADDR 0x10 /* setup buffer pointer */
36 #define UDC_DESPTR_ADDR 0x14 /* Data descriptor pointer */
37 #define UDC_CONFIRM_ADDR 0x18 /* Write/Read confirmation */
39 #define UDC_DEVCFG_ADDR 0x400 /* Device configuration */
40 #define UDC_DEVCTL_ADDR 0x404 /* Device control */
41 #define UDC_DEVSTS_ADDR 0x408 /* Device status */
42 #define UDC_DEVIRQSTS_ADDR 0x40C /* Device irq status */
43 #define UDC_DEVIRQMSK_ADDR 0x410 /* Device irq mask */
44 #define UDC_EPIRQSTS_ADDR 0x414 /* Endpoint irq status */
45 #define UDC_EPIRQMSK_ADDR 0x418 /* Endpoint irq mask */
46 #define UDC_DEVLPM_ADDR 0x41C /* LPM control / status */
47 #define UDC_CSR_BUSY_ADDR 0x4f0 /* UDC_CSR_BUSY Status register */
48 #define UDC_SRST_ADDR 0x4fc /* SOFT RESET register */
49 #define UDC_CSR_ADDR 0x500 /* USB_DEVICE endpoint register */
51 /* Endpoint control register */
53 #define UDC_EPCTL_MRXFLUSH (1 << 12)
54 #define UDC_EPCTL_RRDY (1 << 9)
55 #define UDC_EPCTL_CNAK (1 << 8)
56 #define UDC_EPCTL_SNAK (1 << 7)
57 #define UDC_EPCTL_NAK (1 << 6)
58 #define UDC_EPCTL_P (1 << 3)
59 #define UDC_EPCTL_F (1 << 1)
60 #define UDC_EPCTL_S (1 << 0)
61 #define UDC_EPCTL_ET_SHIFT 4
63 #define UDC_EPCTL_ET_MASK 0x00000030
64 /* Value for ET field */
65 #define UDC_EPCTL_ET_CONTROL 0
66 #define UDC_EPCTL_ET_ISO 1
67 #define UDC_EPCTL_ET_BULK 2
68 #define UDC_EPCTL_ET_INTERRUPT 3
70 /* Endpoint status register */
72 #define UDC_EPSTS_XFERDONE (1 << 27)
73 #define UDC_EPSTS_RSS (1 << 26)
74 #define UDC_EPSTS_RCS (1 << 25)
75 #define UDC_EPSTS_TXEMPTY (1 << 24)
76 #define UDC_EPSTS_TDC (1 << 10)
77 #define UDC_EPSTS_HE (1 << 9)
78 #define UDC_EPSTS_MRXFIFO_EMP (1 << 8)
79 #define UDC_EPSTS_BNA (1 << 7)
80 #define UDC_EPSTS_IN (1 << 6)
81 #define UDC_EPSTS_OUT_SHIFT 4
83 #define UDC_EPSTS_OUT_MASK 0x00000030
84 #define UDC_EPSTS_ALL_CLR_MASK 0x1F0006F0
85 /* Value for OUT field */
86 #define UDC_EPSTS_OUT_SETUP 2
87 #define UDC_EPSTS_OUT_DATA 1
89 /* Device configuration register */
91 #define UDC_DEVCFG_CSR_PRG (1 << 17)
92 #define UDC_DEVCFG_SP (1 << 3)
94 #define UDC_DEVCFG_SPD_HS 0x0
95 #define UDC_DEVCFG_SPD_FS 0x1
96 #define UDC_DEVCFG_SPD_LS 0x2
98 /* Device control register */
100 #define UDC_DEVCTL_THLEN_SHIFT 24
101 #define UDC_DEVCTL_BRLEN_SHIFT 16
102 #define UDC_DEVCTL_CSR_DONE (1 << 13)
103 #define UDC_DEVCTL_SD (1 << 10)
104 #define UDC_DEVCTL_MODE (1 << 9)
105 #define UDC_DEVCTL_BREN (1 << 8)
106 #define UDC_DEVCTL_THE (1 << 7)
107 #define UDC_DEVCTL_DU (1 << 4)
108 #define UDC_DEVCTL_TDE (1 << 3)
109 #define UDC_DEVCTL_RDE (1 << 2)
110 #define UDC_DEVCTL_RES (1 << 0)
112 /* Device status register */
114 #define UDC_DEVSTS_TS_SHIFT 18
115 #define UDC_DEVSTS_ENUM_SPEED_SHIFT 13
116 #define UDC_DEVSTS_ALT_SHIFT 8
117 #define UDC_DEVSTS_INTF_SHIFT 4
118 #define UDC_DEVSTS_CFG_SHIFT 0
120 #define UDC_DEVSTS_TS_MASK 0xfffc0000
121 #define UDC_DEVSTS_ENUM_SPEED_MASK 0x00006000
122 #define UDC_DEVSTS_ALT_MASK 0x00000f00
123 #define UDC_DEVSTS_INTF_MASK 0x000000f0
124 #define UDC_DEVSTS_CFG_MASK 0x0000000f
125 /* value for maximum speed for SPEED field */
126 #define UDC_DEVSTS_ENUM_SPEED_FULL 1
127 #define UDC_DEVSTS_ENUM_SPEED_HIGH 0
128 #define UDC_DEVSTS_ENUM_SPEED_LOW 2
129 #define UDC_DEVSTS_ENUM_SPEED_FULLX 3
131 /* Device irq register */
133 #define UDC_DEVINT_RWKP (1 << 7)
134 #define UDC_DEVINT_ENUM (1 << 6)
135 #define UDC_DEVINT_SOF (1 << 5)
136 #define UDC_DEVINT_US (1 << 4)
137 #define UDC_DEVINT_UR (1 << 3)
138 #define UDC_DEVINT_ES (1 << 2)
139 #define UDC_DEVINT_SI (1 << 1)
140 #define UDC_DEVINT_SC (1 << 0)
142 #define UDC_DEVINT_MSK 0x7f
144 /* Endpoint irq register */
146 #define UDC_EPINT_IN_SHIFT 0
147 #define UDC_EPINT_OUT_SHIFT 16
148 #define UDC_EPINT_IN_EP0 (1 << 0)
149 #define UDC_EPINT_OUT_EP0 (1 << 16)
151 #define UDC_EPINT_MSK_DISABLE_ALL 0xffffffff
153 /* UDC_CSR_BUSY Status register */
155 #define UDC_CSR_BUSY (1 << 0)
157 /* SOFT RESET register */
159 #define UDC_PSRST (1 << 1)
160 #define UDC_SRST (1 << 0)
162 /* USB_DEVICE endpoint register */
164 #define UDC_CSR_NE_NUM_SHIFT 0
165 #define UDC_CSR_NE_DIR_SHIFT 4
166 #define UDC_CSR_NE_TYPE_SHIFT 5
167 #define UDC_CSR_NE_CFG_SHIFT 7
168 #define UDC_CSR_NE_INTF_SHIFT 11
169 #define UDC_CSR_NE_ALT_SHIFT 15
170 #define UDC_CSR_NE_MAX_PKT_SHIFT 19
172 #define UDC_CSR_NE_NUM_MASK 0x0000000f
173 #define UDC_CSR_NE_DIR_MASK 0x00000010
174 #define UDC_CSR_NE_TYPE_MASK 0x00000060
175 #define UDC_CSR_NE_CFG_MASK 0x00000780
176 #define UDC_CSR_NE_INTF_MASK 0x00007800
177 #define UDC_CSR_NE_ALT_MASK 0x00078000
178 #define UDC_CSR_NE_MAX_PKT_MASK 0x3ff80000
180 #define PCH_UDC_CSR(ep) (UDC_CSR_ADDR + ep*4)
181 #define PCH_UDC_EPINT(in, num)\
182 (1 << (num + (in ? UDC_EPINT_IN_SHIFT : UDC_EPINT_OUT_SHIFT)))
184 /* Index of endpoint */
185 #define UDC_EP0IN_IDX 0
186 #define UDC_EP0OUT_IDX 1
187 #define UDC_EPIN_IDX(ep) (ep * 2)
188 #define UDC_EPOUT_IDX(ep) (ep * 2 + 1)
189 #define PCH_UDC_EP0 0
190 #define PCH_UDC_EP1 1
191 #define PCH_UDC_EP2 2
192 #define PCH_UDC_EP3 3
194 /* Number of endpoint */
195 #define PCH_UDC_EP_NUM 32 /* Total number of EPs (16 IN,16 OUT) */
196 #define PCH_UDC_USED_EP_NUM 4 /* EP number of EP's really used */
198 #define PCH_UDC_BRLEN 0x0F /* Burst length */
199 #define PCH_UDC_THLEN 0x1F /* Threshold length */
200 /* Value of EP Buffer Size */
201 #define UDC_EP0IN_BUFF_SIZE 64
202 #define UDC_EPIN_BUFF_SIZE 512
203 #define UDC_EP0OUT_BUFF_SIZE 64
204 #define UDC_EPOUT_BUFF_SIZE 512
205 /* Value of EP maximum packet size */
206 #define UDC_EP0IN_MAX_PKT_SIZE 64
207 #define UDC_EP0OUT_MAX_PKT_SIZE 64
208 #define UDC_BULK_MAX_PKT_SIZE 512
211 #define DMA_DIR_RX 1 /* DMA for data receive */
212 #define DMA_DIR_TX 2 /* DMA for data transmit */
213 #define DMA_ADDR_INVALID (~(dma_addr_t)0)
214 #define UDC_DMA_MAXPACKET 65536 /* maximum packet size for DMA */
217 * struct pch_udc_data_dma_desc - Structure to hold DMA descriptor information
219 * @status: Status quadlet
220 * @reserved: Reserved
221 * @dataptr: Buffer descriptor
222 * @next: Next descriptor
224 struct pch_udc_data_dma_desc
{
232 * struct pch_udc_stp_dma_desc - Structure to hold DMA descriptor information
235 * @reserved: Reserved
236 * @data12: First setup word
237 * @data34: Second setup word
239 struct pch_udc_stp_dma_desc
{
242 struct usb_ctrlrequest request
;
243 } __attribute((packed
));
245 /* DMA status definitions */
247 #define PCH_UDC_BUFF_STS 0xC0000000
248 #define PCH_UDC_BS_HST_RDY 0x00000000
249 #define PCH_UDC_BS_DMA_BSY 0x40000000
250 #define PCH_UDC_BS_DMA_DONE 0x80000000
251 #define PCH_UDC_BS_HST_BSY 0xC0000000
253 #define PCH_UDC_RXTX_STS 0x30000000
254 #define PCH_UDC_RTS_SUCC 0x00000000
255 #define PCH_UDC_RTS_DESERR 0x10000000
256 #define PCH_UDC_RTS_BUFERR 0x30000000
257 /* Last Descriptor Indication */
258 #define PCH_UDC_DMA_LAST 0x08000000
259 /* Number of Rx/Tx Bytes Mask */
260 #define PCH_UDC_RXTX_BYTES 0x0000ffff
263 * struct pch_udc_cfg_data - Structure to hold current configuration
264 * and interface information
265 * @cur_cfg: current configuration in use
266 * @cur_intf: current interface in use
267 * @cur_alt: current alt interface in use
269 struct pch_udc_cfg_data
{
276 * struct pch_udc_ep - Structure holding a PCH USB device Endpoint information
277 * @ep: embedded ep request
278 * @td_stp_phys: for setup request
279 * @td_data_phys: for data request
280 * @td_stp: for setup request
281 * @td_data: for data request
282 * @dev: reference to device struct
283 * @offset_addr: offset address of ep register
285 * @queue: queue for requests
286 * @num: endpoint number
287 * @in: endpoint is IN
288 * @halted: endpoint halted?
289 * @epsts: Endpoint status
293 dma_addr_t td_stp_phys
;
294 dma_addr_t td_data_phys
;
295 struct pch_udc_stp_dma_desc
*td_stp
;
296 struct pch_udc_data_dma_desc
*td_data
;
297 struct pch_udc_dev
*dev
;
298 unsigned long offset_addr
;
299 const struct usb_endpoint_descriptor
*desc
;
300 struct list_head queue
;
308 * struct pch_udc_dev - Structure holding complete information
309 * of the PCH USB device
310 * @gadget: gadget driver data
311 * @driver: reference to gadget driver bound
312 * @pdev: reference to the PCI device
313 * @ep: array of endpoints
314 * @lock: protects all state
315 * @active: enabled the PCI device
316 * @stall: stall requested
317 * @prot_stall: protcol stall requested
318 * @irq_registered: irq registered with system
319 * @mem_region: device memory mapped
320 * @registered: driver regsitered with system
321 * @suspended: driver in suspended state
322 * @connected: gadget driver associated
323 * @set_cfg_not_acked: pending acknowledgement 4 setup
324 * @waiting_zlp_ack: pending acknowledgement 4 ZLP
325 * @data_requests: DMA pool for data requests
326 * @stp_requests: DMA pool for setup requests
327 * @dma_addr: DMA pool for received
328 * @ep0out_buf: Buffer for DMA
329 * @setup_data: Received setup data
330 * @phys_addr: of device memory
331 * @base_addr: for mapped device memory
332 * @irq: IRQ line for the device
333 * @cfg_data: current cfg, intf, and alt in use
336 struct usb_gadget gadget
;
337 struct usb_gadget_driver
*driver
;
338 struct pci_dev
*pdev
;
339 struct pch_udc_ep ep
[PCH_UDC_EP_NUM
];
340 spinlock_t lock
; /* protects all state */
351 struct pci_pool
*data_requests
;
352 struct pci_pool
*stp_requests
;
354 unsigned long ep0out_buf
[64];
355 struct usb_ctrlrequest setup_data
;
356 unsigned long phys_addr
;
357 void __iomem
*base_addr
;
359 struct pch_udc_cfg_data cfg_data
;
362 #define PCH_UDC_PCI_BAR 1
363 #define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808
365 static const char ep0_string
[] = "ep0in";
366 static DEFINE_SPINLOCK(udc_stall_spinlock
); /* stall spin lock */
367 struct pch_udc_dev
*pch_udc
; /* pointer to device object */
370 module_param_named(speed_fs
, speed_fs
, bool, S_IRUGO
);
371 MODULE_PARM_DESC(speed_fs
, "true for Full speed operation");
374 * struct pch_udc_request - Structure holding a PCH USB device request packet
375 * @req: embedded ep request
376 * @td_data_phys: phys. address
377 * @td_data: first dma desc. of chain
378 * @td_data_last: last dma desc. of chain
379 * @queue: associated queue
380 * @dma_going: DMA in progress for request
381 * @dma_mapped: DMA memory mapped for request
382 * @dma_done: DMA completed for request
383 * @chain_len: chain length
385 struct pch_udc_request
{
386 struct usb_request req
;
387 dma_addr_t td_data_phys
;
388 struct pch_udc_data_dma_desc
*td_data
;
389 struct pch_udc_data_dma_desc
*td_data_last
;
390 struct list_head queue
;
391 unsigned dma_going
:1,
397 static inline u32
pch_udc_readl(struct pch_udc_dev
*dev
, unsigned long reg
)
399 return ioread32(dev
->base_addr
+ reg
);
402 static inline void pch_udc_writel(struct pch_udc_dev
*dev
,
403 unsigned long val
, unsigned long reg
)
405 iowrite32(val
, dev
->base_addr
+ reg
);
408 static inline void pch_udc_bit_set(struct pch_udc_dev
*dev
,
410 unsigned long bitmask
)
412 pch_udc_writel(dev
, pch_udc_readl(dev
, reg
) | bitmask
, reg
);
415 static inline void pch_udc_bit_clr(struct pch_udc_dev
*dev
,
417 unsigned long bitmask
)
419 pch_udc_writel(dev
, pch_udc_readl(dev
, reg
) & ~(bitmask
), reg
);
422 static inline u32
pch_udc_ep_readl(struct pch_udc_ep
*ep
, unsigned long reg
)
424 return ioread32(ep
->dev
->base_addr
+ ep
->offset_addr
+ reg
);
427 static inline void pch_udc_ep_writel(struct pch_udc_ep
*ep
,
428 unsigned long val
, unsigned long reg
)
430 iowrite32(val
, ep
->dev
->base_addr
+ ep
->offset_addr
+ reg
);
433 static inline void pch_udc_ep_bit_set(struct pch_udc_ep
*ep
,
435 unsigned long bitmask
)
437 pch_udc_ep_writel(ep
, pch_udc_ep_readl(ep
, reg
) | bitmask
, reg
);
440 static inline void pch_udc_ep_bit_clr(struct pch_udc_ep
*ep
,
442 unsigned long bitmask
)
444 pch_udc_ep_writel(ep
, pch_udc_ep_readl(ep
, reg
) & ~(bitmask
), reg
);
448 * pch_udc_csr_busy() - Wait till idle.
449 * @dev: Reference to pch_udc_dev structure
451 static void pch_udc_csr_busy(struct pch_udc_dev
*dev
)
453 unsigned int count
= 200;
456 while ((pch_udc_readl(dev
, UDC_CSR_BUSY_ADDR
) & UDC_CSR_BUSY
)
460 dev_err(&dev
->pdev
->dev
, "%s: wait error\n", __func__
);
464 * pch_udc_write_csr() - Write the command and status registers.
465 * @dev: Reference to pch_udc_dev structure
466 * @val: value to be written to CSR register
467 * @addr: address of CSR register
469 static void pch_udc_write_csr(struct pch_udc_dev
*dev
, unsigned long val
,
472 unsigned long reg
= PCH_UDC_CSR(ep
);
474 pch_udc_csr_busy(dev
); /* Wait till idle */
475 pch_udc_writel(dev
, val
, reg
);
476 pch_udc_csr_busy(dev
); /* Wait till idle */
480 * pch_udc_read_csr() - Read the command and status registers.
481 * @dev: Reference to pch_udc_dev structure
482 * @addr: address of CSR register
484 * Return codes: content of CSR register
486 static u32
pch_udc_read_csr(struct pch_udc_dev
*dev
, unsigned int ep
)
488 unsigned long reg
= PCH_UDC_CSR(ep
);
490 pch_udc_csr_busy(dev
); /* Wait till idle */
491 pch_udc_readl(dev
, reg
); /* Dummy read */
492 pch_udc_csr_busy(dev
); /* Wait till idle */
493 return pch_udc_readl(dev
, reg
);
497 * pch_udc_rmt_wakeup() - Initiate for remote wakeup
498 * @dev: Reference to pch_udc_dev structure
500 static inline void pch_udc_rmt_wakeup(struct pch_udc_dev
*dev
)
502 pch_udc_bit_set(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_RES
);
504 pch_udc_bit_clr(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_RES
);
508 * pch_udc_get_frame() - Get the current frame from device status register
509 * @dev: Reference to pch_udc_dev structure
510 * Retern current frame
512 static inline int pch_udc_get_frame(struct pch_udc_dev
*dev
)
514 u32 frame
= pch_udc_readl(dev
, UDC_DEVSTS_ADDR
);
515 return (frame
& UDC_DEVSTS_TS_MASK
) >> UDC_DEVSTS_TS_SHIFT
;
519 * pch_udc_clear_selfpowered() - Clear the self power control
520 * @dev: Reference to pch_udc_regs structure
522 static inline void pch_udc_clear_selfpowered(struct pch_udc_dev
*dev
)
524 pch_udc_bit_clr(dev
, UDC_DEVCFG_ADDR
, UDC_DEVCFG_SP
);
528 * pch_udc_set_selfpowered() - Set the self power control
529 * @dev: Reference to pch_udc_regs structure
531 static inline void pch_udc_set_selfpowered(struct pch_udc_dev
*dev
)
533 pch_udc_bit_set(dev
, UDC_DEVCFG_ADDR
, UDC_DEVCFG_SP
);
537 * pch_udc_set_disconnect() - Set the disconnect status.
538 * @dev: Reference to pch_udc_regs structure
540 static inline void pch_udc_set_disconnect(struct pch_udc_dev
*dev
)
542 pch_udc_bit_set(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_SD
);
546 * pch_udc_clear_disconnect() - Clear the disconnect status.
547 * @dev: Reference to pch_udc_regs structure
549 static void pch_udc_clear_disconnect(struct pch_udc_dev
*dev
)
551 /* Clear the disconnect */
552 pch_udc_bit_set(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_RES
);
553 pch_udc_bit_clr(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_SD
);
555 /* Resume USB signalling */
556 pch_udc_bit_clr(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_RES
);
560 * pch_udc_vbus_session() - set or clearr the disconnect status.
561 * @dev: Reference to pch_udc_regs structure
562 * @is_active: Parameter specifying the action
563 * 0: indicating VBUS power is ending
564 * !0: indicating VBUS power is starting
566 static inline void pch_udc_vbus_session(struct pch_udc_dev
*dev
,
570 pch_udc_clear_disconnect(dev
);
572 pch_udc_set_disconnect(dev
);
576 * pch_udc_ep_set_stall() - Set the stall of endpoint
577 * @ep: Reference to structure of type pch_udc_ep_regs
579 static void pch_udc_ep_set_stall(struct pch_udc_ep
*ep
)
582 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_F
);
583 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_S
);
585 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_S
);
590 * pch_udc_ep_clear_stall() - Clear the stall of endpoint
591 * @ep: Reference to structure of type pch_udc_ep_regs
593 static inline void pch_udc_ep_clear_stall(struct pch_udc_ep
*ep
)
595 /* Clear the stall */
596 pch_udc_ep_bit_clr(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_S
);
597 /* Clear NAK by writing CNAK */
598 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_CNAK
);
602 * pch_udc_ep_set_trfr_type() - Set the transfer type of endpoint
603 * @ep: Reference to structure of type pch_udc_ep_regs
604 * @type: Type of endpoint
606 static inline void pch_udc_ep_set_trfr_type(struct pch_udc_ep
*ep
,
609 pch_udc_ep_writel(ep
, ((type
<< UDC_EPCTL_ET_SHIFT
) &
610 UDC_EPCTL_ET_MASK
), UDC_EPCTL_ADDR
);
614 * pch_udc_ep_set_bufsz() - Set the maximum packet size for the endpoint
615 * @ep: Reference to structure of type pch_udc_ep_regs
616 * @buf_size: The buffer size
618 static void pch_udc_ep_set_bufsz(struct pch_udc_ep
*ep
,
619 u32 buf_size
, u32 ep_in
)
623 data
= pch_udc_ep_readl(ep
, UDC_BUFIN_FRAMENUM_ADDR
);
624 data
= (data
& 0xffff0000) | (buf_size
& 0xffff);
625 pch_udc_ep_writel(ep
, data
, UDC_BUFIN_FRAMENUM_ADDR
);
627 data
= pch_udc_ep_readl(ep
, UDC_BUFOUT_MAXPKT_ADDR
);
628 data
= (buf_size
<< 16) | (data
& 0xffff);
629 pch_udc_ep_writel(ep
, data
, UDC_BUFOUT_MAXPKT_ADDR
);
634 * pch_udc_ep_set_maxpkt() - Set the Max packet size for the endpoint
635 * @ep: Reference to structure of type pch_udc_ep_regs
636 * @pkt_size: The packet size
638 static void pch_udc_ep_set_maxpkt(struct pch_udc_ep
*ep
, u32 pkt_size
)
640 u32 data
= pch_udc_ep_readl(ep
, UDC_BUFOUT_MAXPKT_ADDR
);
641 data
= (data
& 0xffff0000) | (pkt_size
& 0xffff);
642 pch_udc_ep_writel(ep
, data
, UDC_BUFOUT_MAXPKT_ADDR
);
646 * pch_udc_ep_set_subptr() - Set the Setup buffer pointer for the endpoint
647 * @ep: Reference to structure of type pch_udc_ep_regs
648 * @addr: Address of the register
650 static inline void pch_udc_ep_set_subptr(struct pch_udc_ep
*ep
, u32 addr
)
652 pch_udc_ep_writel(ep
, addr
, UDC_SUBPTR_ADDR
);
656 * pch_udc_ep_set_ddptr() - Set the Data descriptor pointer for the endpoint
657 * @ep: Reference to structure of type pch_udc_ep_regs
658 * @addr: Address of the register
660 static inline void pch_udc_ep_set_ddptr(struct pch_udc_ep
*ep
, u32 addr
)
662 pch_udc_ep_writel(ep
, addr
, UDC_DESPTR_ADDR
);
666 * pch_udc_ep_set_pd() - Set the poll demand bit for the endpoint
667 * @ep: Reference to structure of type pch_udc_ep_regs
669 static inline void pch_udc_ep_set_pd(struct pch_udc_ep
*ep
)
671 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_P
);
675 * pch_udc_ep_set_rrdy() - Set the receive ready bit for the endpoint
676 * @ep: Reference to structure of type pch_udc_ep_regs
678 static inline void pch_udc_ep_set_rrdy(struct pch_udc_ep
*ep
)
680 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_RRDY
);
684 * pch_udc_ep_clear_rrdy() - Clear the receive ready bit for the endpoint
685 * @ep: Reference to structure of type pch_udc_ep_regs
687 static inline void pch_udc_ep_clear_rrdy(struct pch_udc_ep
*ep
)
689 pch_udc_ep_bit_clr(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_RRDY
);
693 * pch_udc_set_dma() - Set the 'TDE' or RDE bit of device control
694 * register depending on the direction specified
695 * @dev: Reference to structure of type pch_udc_regs
696 * @dir: whether Tx or Rx
697 * DMA_DIR_RX: Receive
698 * DMA_DIR_TX: Transmit
700 static inline void pch_udc_set_dma(struct pch_udc_dev
*dev
, int dir
)
702 if (dir
== DMA_DIR_RX
)
703 pch_udc_bit_set(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_RDE
);
704 else if (dir
== DMA_DIR_TX
)
705 pch_udc_bit_set(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_TDE
);
709 * pch_udc_clear_dma() - Clear the 'TDE' or RDE bit of device control
710 * register depending on the direction specified
711 * @dev: Reference to structure of type pch_udc_regs
712 * @dir: Whether Tx or Rx
713 * DMA_DIR_RX: Receive
714 * DMA_DIR_TX: Transmit
716 static inline void pch_udc_clear_dma(struct pch_udc_dev
*dev
, int dir
)
718 if (dir
== DMA_DIR_RX
)
719 pch_udc_bit_clr(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_RDE
);
720 else if (dir
== DMA_DIR_TX
)
721 pch_udc_bit_clr(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_TDE
);
725 * pch_udc_set_csr_done() - Set the device control register
726 * CSR done field (bit 13)
727 * @dev: reference to structure of type pch_udc_regs
729 static inline void pch_udc_set_csr_done(struct pch_udc_dev
*dev
)
731 pch_udc_bit_set(dev
, UDC_DEVCTL_ADDR
, UDC_DEVCTL_CSR_DONE
);
735 * pch_udc_disable_interrupts() - Disables the specified interrupts
736 * @dev: Reference to structure of type pch_udc_regs
737 * @mask: Mask to disable interrupts
739 static inline void pch_udc_disable_interrupts(struct pch_udc_dev
*dev
,
742 pch_udc_bit_set(dev
, UDC_DEVIRQMSK_ADDR
, mask
);
746 * pch_udc_enable_interrupts() - Enable the specified interrupts
747 * @dev: Reference to structure of type pch_udc_regs
748 * @mask: Mask to enable interrupts
750 static inline void pch_udc_enable_interrupts(struct pch_udc_dev
*dev
,
753 pch_udc_bit_clr(dev
, UDC_DEVIRQMSK_ADDR
, mask
);
757 * pch_udc_disable_ep_interrupts() - Disable endpoint interrupts
758 * @dev: Reference to structure of type pch_udc_regs
759 * @mask: Mask to disable interrupts
761 static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev
*dev
,
764 pch_udc_bit_set(dev
, UDC_EPIRQMSK_ADDR
, mask
);
768 * pch_udc_enable_ep_interrupts() - Enable endpoint interrupts
769 * @dev: Reference to structure of type pch_udc_regs
770 * @mask: Mask to enable interrupts
772 static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev
*dev
,
775 pch_udc_bit_clr(dev
, UDC_EPIRQMSK_ADDR
, mask
);
779 * pch_udc_read_device_interrupts() - Read the device interrupts
780 * @dev: Reference to structure of type pch_udc_regs
781 * Retern The device interrupts
783 static inline u32
pch_udc_read_device_interrupts(struct pch_udc_dev
*dev
)
785 return pch_udc_readl(dev
, UDC_DEVIRQSTS_ADDR
);
789 * pch_udc_write_device_interrupts() - Write device interrupts
790 * @dev: Reference to structure of type pch_udc_regs
791 * @val: The value to be written to interrupt register
793 static inline void pch_udc_write_device_interrupts(struct pch_udc_dev
*dev
,
796 pch_udc_writel(dev
, val
, UDC_DEVIRQSTS_ADDR
);
800 * pch_udc_read_ep_interrupts() - Read the endpoint interrupts
801 * @dev: Reference to structure of type pch_udc_regs
802 * Retern The endpoint interrupt
804 static inline u32
pch_udc_read_ep_interrupts(struct pch_udc_dev
*dev
)
806 return pch_udc_readl(dev
, UDC_EPIRQSTS_ADDR
);
810 * pch_udc_write_ep_interrupts() - Clear endpoint interupts
811 * @dev: Reference to structure of type pch_udc_regs
812 * @val: The value to be written to interrupt register
814 static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev
*dev
,
817 pch_udc_writel(dev
, val
, UDC_EPIRQSTS_ADDR
);
821 * pch_udc_read_device_status() - Read the device status
822 * @dev: Reference to structure of type pch_udc_regs
823 * Retern The device status
825 static inline u32
pch_udc_read_device_status(struct pch_udc_dev
*dev
)
827 return pch_udc_readl(dev
, UDC_DEVSTS_ADDR
);
831 * pch_udc_read_ep_control() - Read the endpoint control
832 * @ep: Reference to structure of type pch_udc_ep_regs
833 * Retern The endpoint control register value
835 static inline u32
pch_udc_read_ep_control(struct pch_udc_ep
*ep
)
837 return pch_udc_ep_readl(ep
, UDC_EPCTL_ADDR
);
841 * pch_udc_clear_ep_control() - Clear the endpoint control register
842 * @ep: Reference to structure of type pch_udc_ep_regs
843 * Retern The endpoint control register value
845 static inline void pch_udc_clear_ep_control(struct pch_udc_ep
*ep
)
847 return pch_udc_ep_writel(ep
, 0, UDC_EPCTL_ADDR
);
851 * pch_udc_read_ep_status() - Read the endpoint status
852 * @ep: Reference to structure of type pch_udc_ep_regs
853 * Retern The endpoint status
855 static inline u32
pch_udc_read_ep_status(struct pch_udc_ep
*ep
)
857 return pch_udc_ep_readl(ep
, UDC_EPSTS_ADDR
);
861 * pch_udc_clear_ep_status() - Clear the endpoint status
862 * @ep: Reference to structure of type pch_udc_ep_regs
863 * @stat: Endpoint status
865 static inline void pch_udc_clear_ep_status(struct pch_udc_ep
*ep
,
868 return pch_udc_ep_writel(ep
, stat
, UDC_EPSTS_ADDR
);
872 * pch_udc_ep_set_nak() - Set the bit 7 (SNAK field)
873 * of the endpoint control register
874 * @ep: Reference to structure of type pch_udc_ep_regs
876 static inline void pch_udc_ep_set_nak(struct pch_udc_ep
*ep
)
878 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_SNAK
);
882 * pch_udc_ep_clear_nak() - Set the bit 8 (CNAK field)
883 * of the endpoint control register
884 * @ep: reference to structure of type pch_udc_ep_regs
886 static void pch_udc_ep_clear_nak(struct pch_udc_ep
*ep
)
888 unsigned int loopcnt
= 0;
889 struct pch_udc_dev
*dev
= ep
->dev
;
891 if (!(pch_udc_ep_readl(ep
, UDC_EPCTL_ADDR
) & UDC_EPCTL_NAK
))
895 while (!(pch_udc_read_ep_status(ep
) & UDC_EPSTS_MRXFIFO_EMP
) &&
899 dev_err(&dev
->pdev
->dev
, "%s: RxFIFO not Empty\n",
903 while ((pch_udc_read_ep_control(ep
) & UDC_EPCTL_NAK
) && --loopcnt
) {
904 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_CNAK
);
908 dev_err(&dev
->pdev
->dev
, "%s: Clear NAK not set for ep%d%s\n",
909 __func__
, ep
->num
, (ep
->in
? "in" : "out"));
913 * pch_udc_ep_fifo_flush() - Flush the endpoint fifo
914 * @ep: reference to structure of type pch_udc_ep_regs
915 * @dir: direction of endpoint
919 static void pch_udc_ep_fifo_flush(struct pch_udc_ep
*ep
, int dir
)
921 unsigned int loopcnt
= 0;
922 struct pch_udc_dev
*dev
= ep
->dev
;
924 if (dir
) { /* IN ep */
925 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_F
);
929 if (pch_udc_read_ep_status(ep
) & UDC_EPSTS_MRXFIFO_EMP
)
931 pch_udc_ep_bit_set(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_MRXFLUSH
);
932 /* Wait for RxFIFO Empty */
934 while (!(pch_udc_read_ep_status(ep
) & UDC_EPSTS_MRXFIFO_EMP
) &&
938 dev_err(&dev
->pdev
->dev
, "RxFIFO not Empty\n");
939 pch_udc_ep_bit_clr(ep
, UDC_EPCTL_ADDR
, UDC_EPCTL_MRXFLUSH
);
943 * pch_udc_ep_enable() - This api enables endpoint
944 * @regs: Reference to structure pch_udc_ep_regs
945 * @desc: endpoint descriptor
947 static void pch_udc_ep_enable(struct pch_udc_ep
*ep
,
948 struct pch_udc_cfg_data
*cfg
,
949 const struct usb_endpoint_descriptor
*desc
)
954 pch_udc_ep_set_trfr_type(ep
, desc
->bmAttributes
);
956 buff_size
= UDC_EPIN_BUFF_SIZE
;
958 buff_size
= UDC_EPOUT_BUFF_SIZE
;
959 pch_udc_ep_set_bufsz(ep
, buff_size
, ep
->in
);
960 pch_udc_ep_set_maxpkt(ep
, le16_to_cpu(desc
->wMaxPacketSize
));
961 pch_udc_ep_set_nak(ep
);
962 pch_udc_ep_fifo_flush(ep
, ep
->in
);
963 /* Configure the endpoint */
964 val
= ep
->num
<< UDC_CSR_NE_NUM_SHIFT
| ep
->in
<< UDC_CSR_NE_DIR_SHIFT
|
965 ((desc
->bmAttributes
& USB_ENDPOINT_XFERTYPE_MASK
) <<
966 UDC_CSR_NE_TYPE_SHIFT
) |
967 (cfg
->cur_cfg
<< UDC_CSR_NE_CFG_SHIFT
) |
968 (cfg
->cur_intf
<< UDC_CSR_NE_INTF_SHIFT
) |
969 (cfg
->cur_alt
<< UDC_CSR_NE_ALT_SHIFT
) |
970 le16_to_cpu(desc
->wMaxPacketSize
) << UDC_CSR_NE_MAX_PKT_SHIFT
;
973 pch_udc_write_csr(ep
->dev
, val
, UDC_EPIN_IDX(ep
->num
));
975 pch_udc_write_csr(ep
->dev
, val
, UDC_EPOUT_IDX(ep
->num
));
979 * pch_udc_ep_disable() - This api disables endpoint
980 * @regs: Reference to structure pch_udc_ep_regs
982 static void pch_udc_ep_disable(struct pch_udc_ep
*ep
)
986 pch_udc_ep_writel(ep
, UDC_EPCTL_F
, UDC_EPCTL_ADDR
);
988 pch_udc_ep_writel(ep
, UDC_EPCTL_SNAK
, UDC_EPCTL_ADDR
);
989 pch_udc_ep_bit_set(ep
, UDC_EPSTS_ADDR
, UDC_EPSTS_IN
);
992 pch_udc_ep_writel(ep
, UDC_EPCTL_SNAK
, UDC_EPCTL_ADDR
);
994 /* reset desc pointer */
995 pch_udc_ep_writel(ep
, 0, UDC_DESPTR_ADDR
);
999 * pch_udc_wait_ep_stall() - Wait EP stall.
1000 * @dev: Reference to pch_udc_dev structure
1002 static void pch_udc_wait_ep_stall(struct pch_udc_ep
*ep
)
1004 unsigned int count
= 10000;
1006 /* Wait till idle */
1007 while ((pch_udc_read_ep_control(ep
) & UDC_EPCTL_S
) && --count
)
1010 dev_err(&ep
->dev
->pdev
->dev
, "%s: wait error\n", __func__
);
1014 * pch_udc_init() - This API initializes usb device controller
1015 * @dev: Rreference to pch_udc_regs structure
1017 static void pch_udc_init(struct pch_udc_dev
*dev
)
1020 pr_err("%s: Invalid address\n", __func__
);
1023 /* Soft Reset and Reset PHY */
1024 pch_udc_writel(dev
, UDC_SRST
, UDC_SRST_ADDR
);
1025 pch_udc_writel(dev
, UDC_SRST
| UDC_PSRST
, UDC_SRST_ADDR
);
1027 pch_udc_writel(dev
, UDC_SRST
, UDC_SRST_ADDR
);
1028 pch_udc_writel(dev
, 0x00, UDC_SRST_ADDR
);
1030 /* mask and clear all device interrupts */
1031 pch_udc_bit_set(dev
, UDC_DEVIRQMSK_ADDR
, UDC_DEVINT_MSK
);
1032 pch_udc_bit_set(dev
, UDC_DEVIRQSTS_ADDR
, UDC_DEVINT_MSK
);
1034 /* mask and clear all ep interrupts */
1035 pch_udc_bit_set(dev
, UDC_EPIRQMSK_ADDR
, UDC_EPINT_MSK_DISABLE_ALL
);
1036 pch_udc_bit_set(dev
, UDC_EPIRQSTS_ADDR
, UDC_EPINT_MSK_DISABLE_ALL
);
1038 /* enable dynamic CSR programmingi, self powered and device speed */
1040 pch_udc_bit_set(dev
, UDC_DEVCFG_ADDR
, UDC_DEVCFG_CSR_PRG
|
1041 UDC_DEVCFG_SP
| UDC_DEVCFG_SPD_FS
);
1042 else /* defaul high speed */
1043 pch_udc_bit_set(dev
, UDC_DEVCFG_ADDR
, UDC_DEVCFG_CSR_PRG
|
1044 UDC_DEVCFG_SP
| UDC_DEVCFG_SPD_HS
);
1045 pch_udc_bit_set(dev
, UDC_DEVCTL_ADDR
,
1046 (PCH_UDC_THLEN
<< UDC_DEVCTL_THLEN_SHIFT
) |
1047 (PCH_UDC_BRLEN
<< UDC_DEVCTL_BRLEN_SHIFT
) |
1048 UDC_DEVCTL_MODE
| UDC_DEVCTL_BREN
|
1053 * pch_udc_exit() - This API exit usb device controller
1054 * @dev: Reference to pch_udc_regs structure
1056 static void pch_udc_exit(struct pch_udc_dev
*dev
)
1058 /* mask all device interrupts */
1059 pch_udc_bit_set(dev
, UDC_DEVIRQMSK_ADDR
, UDC_DEVINT_MSK
);
1060 /* mask all ep interrupts */
1061 pch_udc_bit_set(dev
, UDC_EPIRQMSK_ADDR
, UDC_EPINT_MSK_DISABLE_ALL
);
1062 /* put device in disconnected state */
1063 pch_udc_set_disconnect(dev
);
1067 * pch_udc_pcd_get_frame() - This API is invoked to get the current frame number
1068 * @gadget: Reference to the gadget driver
1072 * -EINVAL: If the gadget passed is NULL
1074 static int pch_udc_pcd_get_frame(struct usb_gadget
*gadget
)
1076 struct pch_udc_dev
*dev
;
1080 dev
= container_of(gadget
, struct pch_udc_dev
, gadget
);
1081 return pch_udc_get_frame(dev
);
1085 * pch_udc_pcd_wakeup() - This API is invoked to initiate a remote wakeup
1086 * @gadget: Reference to the gadget driver
1090 * -EINVAL: If the gadget passed is NULL
1092 static int pch_udc_pcd_wakeup(struct usb_gadget
*gadget
)
1094 struct pch_udc_dev
*dev
;
1095 unsigned long flags
;
1099 dev
= container_of(gadget
, struct pch_udc_dev
, gadget
);
1100 spin_lock_irqsave(&dev
->lock
, flags
);
1101 pch_udc_rmt_wakeup(dev
);
1102 spin_unlock_irqrestore(&dev
->lock
, flags
);
1107 * pch_udc_pcd_selfpowered() - This API is invoked to specify whether the device
1108 * is self powered or not
1109 * @gadget: Reference to the gadget driver
1110 * @value: Specifies self powered or not
1114 * -EINVAL: If the gadget passed is NULL
1116 static int pch_udc_pcd_selfpowered(struct usb_gadget
*gadget
, int value
)
1118 struct pch_udc_dev
*dev
;
1122 dev
= container_of(gadget
, struct pch_udc_dev
, gadget
);
1124 pch_udc_set_selfpowered(dev
);
1126 pch_udc_clear_selfpowered(dev
);
1131 * pch_udc_pcd_pullup() - This API is invoked to make the device
1132 * visible/invisible to the host
1133 * @gadget: Reference to the gadget driver
1134 * @is_on: Specifies whether the pull up is made active or inactive
1138 * -EINVAL: If the gadget passed is NULL
1140 static int pch_udc_pcd_pullup(struct usb_gadget
*gadget
, int is_on
)
1142 struct pch_udc_dev
*dev
;
1146 dev
= container_of(gadget
, struct pch_udc_dev
, gadget
);
1147 pch_udc_vbus_session(dev
, is_on
);
1152 * pch_udc_pcd_vbus_session() - This API is used by a driver for an external
1153 * transceiver (or GPIO) that
1154 * detects a VBUS power session starting/ending
1155 * @gadget: Reference to the gadget driver
1156 * @is_active: specifies whether the session is starting or ending
1160 * -EINVAL: If the gadget passed is NULL
1162 static int pch_udc_pcd_vbus_session(struct usb_gadget
*gadget
, int is_active
)
1164 struct pch_udc_dev
*dev
;
1168 dev
= container_of(gadget
, struct pch_udc_dev
, gadget
);
1169 pch_udc_vbus_session(dev
, is_active
);
1174 * pch_udc_pcd_vbus_draw() - This API is used by gadget drivers during
1175 * SET_CONFIGURATION calls to
1176 * specify how much power the device can consume
1177 * @gadget: Reference to the gadget driver
1178 * @mA: specifies the current limit in 2mA unit
1181 * -EINVAL: If the gadget passed is NULL
1184 static int pch_udc_pcd_vbus_draw(struct usb_gadget
*gadget
, unsigned int mA
)
1189 static const struct usb_gadget_ops pch_udc_ops
= {
1190 .get_frame
= pch_udc_pcd_get_frame
,
1191 .wakeup
= pch_udc_pcd_wakeup
,
1192 .set_selfpowered
= pch_udc_pcd_selfpowered
,
1193 .pullup
= pch_udc_pcd_pullup
,
1194 .vbus_session
= pch_udc_pcd_vbus_session
,
1195 .vbus_draw
= pch_udc_pcd_vbus_draw
,
1199 * complete_req() - This API is invoked from the driver when processing
1200 * of a request is complete
1201 * @ep: Reference to the endpoint structure
1202 * @req: Reference to the request structure
1203 * @status: Indicates the success/failure of completion
1205 static void complete_req(struct pch_udc_ep
*ep
, struct pch_udc_request
*req
,
1208 struct pch_udc_dev
*dev
;
1209 unsigned halted
= ep
->halted
;
1211 list_del_init(&req
->queue
);
1213 /* set new status if pending */
1214 if (req
->req
.status
== -EINPROGRESS
)
1215 req
->req
.status
= status
;
1217 status
= req
->req
.status
;
1220 if (req
->dma_mapped
) {
1222 pci_unmap_single(dev
->pdev
, req
->req
.dma
,
1223 req
->req
.length
, PCI_DMA_TODEVICE
);
1225 pci_unmap_single(dev
->pdev
, req
->req
.dma
,
1226 req
->req
.length
, PCI_DMA_FROMDEVICE
);
1227 req
->dma_mapped
= 0;
1228 req
->req
.dma
= DMA_ADDR_INVALID
;
1231 spin_unlock(&dev
->lock
);
1233 pch_udc_ep_clear_rrdy(ep
);
1234 req
->req
.complete(&ep
->ep
, &req
->req
);
1235 spin_lock(&dev
->lock
);
1236 ep
->halted
= halted
;
1240 * empty_req_queue() - This API empties the request queue of an endpoint
1241 * @ep: Reference to the endpoint structure
1243 static void empty_req_queue(struct pch_udc_ep
*ep
)
1245 struct pch_udc_request
*req
;
1248 while (!list_empty(&ep
->queue
)) {
1249 req
= list_entry(ep
->queue
.next
, struct pch_udc_request
, queue
);
1250 complete_req(ep
, req
, -ESHUTDOWN
); /* Remove from list */
1255 * pch_udc_free_dma_chain() - This function frees the DMA chain created
1257 * @dev Reference to the driver structure
1258 * @req Reference to the request to be freed
1263 static void pch_udc_free_dma_chain(struct pch_udc_dev
*dev
,
1264 struct pch_udc_request
*req
)
1266 struct pch_udc_data_dma_desc
*td
= req
->td_data
;
1267 unsigned i
= req
->chain_len
;
1269 for (; i
> 1; --i
) {
1270 dma_addr_t addr
= (dma_addr_t
)td
->next
;
1271 /* do not free first desc., will be done by free for request */
1272 td
= phys_to_virt(addr
);
1273 pci_pool_free(dev
->data_requests
, td
, addr
);
1278 * pch_udc_create_dma_chain() - This function creates or reinitializes
1280 * @ep: Reference to the endpoint structure
1281 * @req: Reference to the request
1282 * @buf_len: The buffer length
1283 * @gfp_flags: Flags to be used while mapping the data buffer
1287 * -ENOMEM: pci_pool_alloc invocation fails
1289 static int pch_udc_create_dma_chain(struct pch_udc_ep
*ep
,
1290 struct pch_udc_request
*req
,
1291 unsigned long buf_len
,
1294 struct pch_udc_data_dma_desc
*td
= req
->td_data
, *last
;
1295 unsigned long bytes
= req
->req
.length
, i
= 0;
1296 dma_addr_t dma_addr
;
1299 if (req
->chain_len
> 1)
1300 pch_udc_free_dma_chain(ep
->dev
, req
);
1302 for (; ; bytes
-= buf_len
, ++len
) {
1304 td
->status
= PCH_UDC_BS_HST_BSY
| min(buf_len
, bytes
);
1306 td
->status
= PCH_UDC_BS_HST_BSY
;
1308 if (bytes
<= buf_len
)
1312 td
= pci_pool_alloc(ep
->dev
->data_requests
, gfp_flags
,
1318 td
->dataptr
= req
->req
.dma
+ i
;
1319 last
->next
= dma_addr
;
1322 req
->td_data_last
= td
;
1323 td
->status
|= PCH_UDC_DMA_LAST
;
1324 td
->next
= req
->td_data_phys
;
1325 req
->chain_len
= len
;
1330 req
->chain_len
= len
;
1331 pch_udc_free_dma_chain(ep
->dev
, req
);
1338 * prepare_dma() - This function creates and initializes the DMA chain
1340 * @ep: Reference to the endpoint structure
1341 * @req: Reference to the request
1342 * @gfp: Flag to be used while mapping the data buffer
1346 * Other 0: linux error number on failure
1348 static int prepare_dma(struct pch_udc_ep
*ep
, struct pch_udc_request
*req
,
1353 req
->td_data
->dataptr
= req
->req
.dma
;
1354 req
->td_data
->status
|= PCH_UDC_DMA_LAST
;
1355 /* Allocate and create a DMA chain */
1356 retval
= pch_udc_create_dma_chain(ep
, req
, ep
->ep
.maxpacket
, gfp
);
1358 pr_err("%s: could not create DMA chain: %d\n",
1364 if (req
->req
.length
<= ep
->ep
.maxpacket
)
1365 req
->td_data
->status
= PCH_UDC_DMA_LAST
| PCH_UDC_BS_HST_BSY
|
1367 /* if bytes < max packet then tx bytes must
1368 * be written in packet per buffer mode
1370 if ((req
->req
.length
< ep
->ep
.maxpacket
) || !ep
->num
)
1371 req
->td_data
->status
= (req
->td_data
->status
&
1372 ~PCH_UDC_RXTX_BYTES
) | req
->req
.length
;
1373 req
->td_data
->status
= (req
->td_data
->status
&
1374 ~PCH_UDC_BUFF_STS
) | PCH_UDC_BS_HST_BSY
;
1379 * process_zlp() - This function process zero length packets
1380 * from the gadget driver
1381 * @ep: Reference to the endpoint structure
1382 * @req: Reference to the request
1384 static void process_zlp(struct pch_udc_ep
*ep
, struct pch_udc_request
*req
)
1386 struct pch_udc_dev
*dev
= ep
->dev
;
1388 /* IN zlp's are handled by hardware */
1389 complete_req(ep
, req
, 0);
1391 /* if set_config or set_intf is waiting for ack by zlp
1394 if (dev
->set_cfg_not_acked
) {
1395 pch_udc_set_csr_done(dev
);
1396 dev
->set_cfg_not_acked
= 0;
1398 /* setup command is ACK'ed now by zlp */
1399 if (!dev
->stall
&& dev
->waiting_zlp_ack
) {
1400 pch_udc_ep_clear_nak(&(dev
->ep
[UDC_EP0IN_IDX
]));
1401 dev
->waiting_zlp_ack
= 0;
1406 * pch_udc_start_rxrequest() - This function starts the receive requirement.
1407 * @ep: Reference to the endpoint structure
1408 * @req: Reference to the request structure
1410 static void pch_udc_start_rxrequest(struct pch_udc_ep
*ep
,
1411 struct pch_udc_request
*req
)
1413 struct pch_udc_data_dma_desc
*td_data
;
1415 pch_udc_clear_dma(ep
->dev
, DMA_DIR_RX
);
1416 td_data
= req
->td_data
;
1417 ep
->td_data
= req
->td_data
;
1418 /* Set the status bits for all descriptors */
1420 td_data
->status
= (td_data
->status
& ~PCH_UDC_BUFF_STS
) |
1422 if ((td_data
->status
& PCH_UDC_DMA_LAST
) == PCH_UDC_DMA_LAST
)
1424 td_data
= phys_to_virt(td_data
->next
);
1426 /* Write the descriptor pointer */
1427 pch_udc_ep_set_ddptr(ep
, req
->td_data_phys
);
1429 pch_udc_enable_ep_interrupts(ep
->dev
, UDC_EPINT_OUT_EP0
<< ep
->num
);
1430 pch_udc_set_dma(ep
->dev
, DMA_DIR_RX
);
1431 pch_udc_ep_clear_nak(ep
);
1432 pch_udc_ep_set_rrdy(ep
);
1436 * pch_udc_pcd_ep_enable() - This API enables the endpoint. It is called
1437 * from gadget driver
1438 * @usbep: Reference to the USB endpoint structure
1439 * @desc: Reference to the USB endpoint descriptor structure
1446 static int pch_udc_pcd_ep_enable(struct usb_ep
*usbep
,
1447 const struct usb_endpoint_descriptor
*desc
)
1449 struct pch_udc_ep
*ep
;
1450 struct pch_udc_dev
*dev
;
1451 unsigned long iflags
;
1453 if (!usbep
|| (usbep
->name
== ep0_string
) || !desc
||
1454 (desc
->bDescriptorType
!= USB_DT_ENDPOINT
) || !desc
->wMaxPacketSize
)
1457 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1459 if (!dev
->driver
|| (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
))
1461 spin_lock_irqsave(&dev
->lock
, iflags
);
1464 pch_udc_ep_enable(ep
, &ep
->dev
->cfg_data
, desc
);
1465 ep
->ep
.maxpacket
= le16_to_cpu(desc
->wMaxPacketSize
);
1466 pch_udc_enable_ep_interrupts(ep
->dev
, PCH_UDC_EPINT(ep
->in
, ep
->num
));
1467 spin_unlock_irqrestore(&dev
->lock
, iflags
);
1472 * pch_udc_pcd_ep_disable() - This API disables endpoint and is called
1473 * from gadget driver
1474 * @usbep Reference to the USB endpoint structure
1480 static int pch_udc_pcd_ep_disable(struct usb_ep
*usbep
)
1482 struct pch_udc_ep
*ep
;
1483 struct pch_udc_dev
*dev
;
1484 unsigned long iflags
;
1489 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1491 if ((usbep
->name
== ep0_string
) || !ep
->desc
)
1494 spin_lock_irqsave(&ep
->dev
->lock
, iflags
);
1495 empty_req_queue(ep
);
1497 pch_udc_ep_disable(ep
);
1498 pch_udc_disable_ep_interrupts(ep
->dev
, PCH_UDC_EPINT(ep
->in
, ep
->num
));
1500 INIT_LIST_HEAD(&ep
->queue
);
1501 spin_unlock_irqrestore(&ep
->dev
->lock
, iflags
);
1506 * pch_udc_alloc_request() - This function allocates request structure.
1507 * It is called by gadget driver
1508 * @usbep: Reference to the USB endpoint structure
1509 * @gfp: Flag to be used while allocating memory
1513 * Allocated address: Success
1515 static struct usb_request
*pch_udc_alloc_request(struct usb_ep
*usbep
,
1518 struct pch_udc_request
*req
;
1519 struct pch_udc_ep
*ep
;
1520 struct pch_udc_data_dma_desc
*dma_desc
;
1521 struct pch_udc_dev
*dev
;
1525 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1527 req
= kzalloc(sizeof *req
, gfp
);
1530 req
->req
.dma
= DMA_ADDR_INVALID
;
1531 INIT_LIST_HEAD(&req
->queue
);
1532 if (!ep
->dev
->dma_addr
)
1534 /* ep0 in requests are allocated from data pool here */
1535 dma_desc
= pci_pool_alloc(ep
->dev
->data_requests
, gfp
,
1536 &req
->td_data_phys
);
1537 if (NULL
== dma_desc
) {
1541 /* prevent from using desc. - set HOST BUSY */
1542 dma_desc
->status
|= PCH_UDC_BS_HST_BSY
;
1543 dma_desc
->dataptr
= __constant_cpu_to_le32(DMA_ADDR_INVALID
);
1544 req
->td_data
= dma_desc
;
1545 req
->td_data_last
= dma_desc
;
1551 * pch_udc_free_request() - This function frees request structure.
1552 * It is called by gadget driver
1553 * @usbep: Reference to the USB endpoint structure
1554 * @usbreq: Reference to the USB request
1556 static void pch_udc_free_request(struct usb_ep
*usbep
,
1557 struct usb_request
*usbreq
)
1559 struct pch_udc_ep
*ep
;
1560 struct pch_udc_request
*req
;
1561 struct pch_udc_dev
*dev
;
1563 if (!usbep
|| !usbreq
)
1565 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1566 req
= container_of(usbreq
, struct pch_udc_request
, req
);
1568 if (!list_empty(&req
->queue
))
1569 dev_err(&dev
->pdev
->dev
, "%s: %s req=0x%p queue not empty\n",
1570 __func__
, usbep
->name
, req
);
1571 if (req
->td_data
!= NULL
) {
1572 if (req
->chain_len
> 1)
1573 pch_udc_free_dma_chain(ep
->dev
, req
);
1574 pci_pool_free(ep
->dev
->data_requests
, req
->td_data
,
1581 * pch_udc_pcd_queue() - This function queues a request packet. It is called
1583 * @usbep: Reference to the USB endpoint structure
1584 * @usbreq: Reference to the USB request
1585 * @gfp: Flag to be used while mapping the data buffer
1589 * linux error number: Failure
1591 static int pch_udc_pcd_queue(struct usb_ep
*usbep
, struct usb_request
*usbreq
,
1595 struct pch_udc_ep
*ep
;
1596 struct pch_udc_dev
*dev
;
1597 struct pch_udc_request
*req
;
1598 unsigned long iflags
;
1600 if (!usbep
|| !usbreq
|| !usbreq
->complete
|| !usbreq
->buf
)
1602 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1604 if (!ep
->desc
&& ep
->num
)
1606 req
= container_of(usbreq
, struct pch_udc_request
, req
);
1607 if (!list_empty(&req
->queue
))
1609 if (!dev
->driver
|| (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
))
1611 spin_lock_irqsave(&ep
->dev
->lock
, iflags
);
1612 /* map the buffer for dma */
1613 if (usbreq
->length
&&
1614 ((usbreq
->dma
== DMA_ADDR_INVALID
) || !usbreq
->dma
)) {
1616 usbreq
->dma
= pci_map_single(dev
->pdev
, usbreq
->buf
,
1617 usbreq
->length
, PCI_DMA_TODEVICE
);
1619 usbreq
->dma
= pci_map_single(dev
->pdev
, usbreq
->buf
,
1620 usbreq
->length
, PCI_DMA_FROMDEVICE
);
1621 req
->dma_mapped
= 1;
1623 if (usbreq
->length
> 0) {
1624 retval
= prepare_dma(ep
, req
, gfp
);
1629 usbreq
->status
= -EINPROGRESS
;
1631 if (list_empty(&ep
->queue
) && !ep
->halted
) {
1632 /* no pending transfer, so start this req */
1633 if (!usbreq
->length
) {
1634 process_zlp(ep
, req
);
1639 pch_udc_start_rxrequest(ep
, req
);
1642 * For IN trfr the descriptors will be programmed and
1643 * P bit will be set when
1644 * we get an IN token
1646 pch_udc_wait_ep_stall(ep
);
1647 pch_udc_ep_clear_nak(ep
);
1648 pch_udc_enable_ep_interrupts(ep
->dev
, (1 << ep
->num
));
1649 pch_udc_set_dma(dev
, DMA_DIR_TX
);
1652 /* Now add this request to the ep's pending requests */
1654 list_add_tail(&req
->queue
, &ep
->queue
);
1657 spin_unlock_irqrestore(&dev
->lock
, iflags
);
1662 * pch_udc_pcd_dequeue() - This function de-queues a request packet.
1663 * It is called by gadget driver
1664 * @usbep: Reference to the USB endpoint structure
1665 * @usbreq: Reference to the USB request
1669 * linux error number: Failure
1671 static int pch_udc_pcd_dequeue(struct usb_ep
*usbep
,
1672 struct usb_request
*usbreq
)
1674 struct pch_udc_ep
*ep
;
1675 struct pch_udc_request
*req
;
1676 struct pch_udc_dev
*dev
;
1677 unsigned long flags
;
1680 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1682 if (!usbep
|| !usbreq
|| (!ep
->desc
&& ep
->num
))
1684 req
= container_of(usbreq
, struct pch_udc_request
, req
);
1685 spin_lock_irqsave(&ep
->dev
->lock
, flags
);
1686 /* make sure it's still queued on this endpoint */
1687 list_for_each_entry(req
, &ep
->queue
, queue
) {
1688 if (&req
->req
== usbreq
) {
1689 pch_udc_ep_set_nak(ep
);
1690 if (!list_empty(&req
->queue
))
1691 complete_req(ep
, req
, -ECONNRESET
);
1696 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
1701 * pch_udc_pcd_set_halt() - This function Sets or clear the endpoint halt
1703 * @usbep: Reference to the USB endpoint structure
1704 * @halt: Specifies whether to set or clear the feature
1708 * linux error number: Failure
1710 static int pch_udc_pcd_set_halt(struct usb_ep
*usbep
, int halt
)
1712 struct pch_udc_ep
*ep
;
1713 struct pch_udc_dev
*dev
;
1714 unsigned long iflags
;
1719 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1721 if (!ep
->desc
&& !ep
->num
)
1723 if (!ep
->dev
->driver
|| (ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
))
1725 spin_lock_irqsave(&udc_stall_spinlock
, iflags
);
1726 if (list_empty(&ep
->queue
)) {
1728 if (ep
->num
== PCH_UDC_EP0
)
1730 pch_udc_ep_set_stall(ep
);
1731 pch_udc_enable_ep_interrupts(ep
->dev
,
1732 PCH_UDC_EPINT(ep
->in
,
1735 pch_udc_ep_clear_stall(ep
);
1741 spin_unlock_irqrestore(&udc_stall_spinlock
, iflags
);
1746 * pch_udc_pcd_set_wedge() - This function Sets or clear the endpoint
1748 * @usbep: Reference to the USB endpoint structure
1749 * @halt: Specifies whether to set or clear the feature
1753 * linux error number: Failure
1755 static int pch_udc_pcd_set_wedge(struct usb_ep
*usbep
)
1757 struct pch_udc_ep
*ep
;
1758 struct pch_udc_dev
*dev
;
1759 unsigned long iflags
;
1764 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1766 if (!ep
->desc
&& !ep
->num
)
1768 if (!ep
->dev
->driver
|| (ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
))
1770 spin_lock_irqsave(&udc_stall_spinlock
, iflags
);
1771 if (!list_empty(&ep
->queue
)) {
1774 if (ep
->num
== PCH_UDC_EP0
)
1776 pch_udc_ep_set_stall(ep
);
1777 pch_udc_enable_ep_interrupts(ep
->dev
,
1778 PCH_UDC_EPINT(ep
->in
, ep
->num
));
1779 ep
->dev
->prot_stall
= 1;
1782 spin_unlock_irqrestore(&udc_stall_spinlock
, iflags
);
1787 * pch_udc_pcd_fifo_flush() - This function Flush the FIFO of specified endpoint
1788 * @usbep: Reference to the USB endpoint structure
1790 static void pch_udc_pcd_fifo_flush(struct usb_ep
*usbep
)
1792 struct pch_udc_ep
*ep
;
1797 ep
= container_of(usbep
, struct pch_udc_ep
, ep
);
1798 if (ep
->desc
|| !ep
->num
)
1799 pch_udc_ep_fifo_flush(ep
, ep
->in
);
1802 static const struct usb_ep_ops pch_udc_ep_ops
= {
1803 .enable
= pch_udc_pcd_ep_enable
,
1804 .disable
= pch_udc_pcd_ep_disable
,
1805 .alloc_request
= pch_udc_alloc_request
,
1806 .free_request
= pch_udc_free_request
,
1807 .queue
= pch_udc_pcd_queue
,
1808 .dequeue
= pch_udc_pcd_dequeue
,
1809 .set_halt
= pch_udc_pcd_set_halt
,
1810 .set_wedge
= pch_udc_pcd_set_wedge
,
1811 .fifo_status
= NULL
,
1812 .fifo_flush
= pch_udc_pcd_fifo_flush
,
1816 * pch_udc_init_setup_buff() - This function initializes the SETUP buffer
1817 * @td_stp: Reference to the SETP buffer structure
1819 static void pch_udc_init_setup_buff(struct pch_udc_stp_dma_desc
*td_stp
)
1821 static u32 pky_marker
;
1825 td_stp
->reserved
= ++pky_marker
;
1826 memset(&td_stp
->request
, 0xFF, sizeof td_stp
->request
);
1827 td_stp
->status
= PCH_UDC_BS_HST_RDY
;
1831 * pch_udc_start_next_txrequest() - This function starts
1832 * the next transmission requirement
1833 * @ep: Reference to the endpoint structure
1835 static void pch_udc_start_next_txrequest(struct pch_udc_ep
*ep
)
1837 struct pch_udc_request
*req
;
1838 struct pch_udc_data_dma_desc
*td_data
;
1840 if (pch_udc_read_ep_control(ep
) & UDC_EPCTL_P
)
1843 if (list_empty(&ep
->queue
))
1847 req
= list_entry(ep
->queue
.next
, struct pch_udc_request
, queue
);
1852 pch_udc_wait_ep_stall(ep
);
1854 pch_udc_ep_set_ddptr(ep
, 0);
1855 td_data
= req
->td_data
;
1857 td_data
->status
= (td_data
->status
& ~PCH_UDC_BUFF_STS
) |
1859 if ((td_data
->status
& PCH_UDC_DMA_LAST
) == PCH_UDC_DMA_LAST
)
1861 td_data
= phys_to_virt(td_data
->next
);
1863 pch_udc_ep_set_ddptr(ep
, req
->td_data_phys
);
1864 pch_udc_set_dma(ep
->dev
, DMA_DIR_TX
);
1865 pch_udc_ep_set_pd(ep
);
1866 pch_udc_enable_ep_interrupts(ep
->dev
, PCH_UDC_EPINT(ep
->in
, ep
->num
));
1867 pch_udc_ep_clear_nak(ep
);
1871 * pch_udc_complete_transfer() - This function completes a transfer
1872 * @ep: Reference to the endpoint structure
1874 static void pch_udc_complete_transfer(struct pch_udc_ep
*ep
)
1876 struct pch_udc_request
*req
;
1877 struct pch_udc_dev
*dev
= ep
->dev
;
1879 if (list_empty(&ep
->queue
))
1881 req
= list_entry(ep
->queue
.next
, struct pch_udc_request
, queue
);
1882 if ((req
->td_data_last
->status
& PCH_UDC_BUFF_STS
) !=
1883 PCH_UDC_BS_DMA_DONE
)
1885 if ((req
->td_data_last
->status
& PCH_UDC_RXTX_STS
) !=
1887 dev_err(&dev
->pdev
->dev
, "Invalid RXTX status (0x%08x) "
1888 "epstatus=0x%08x\n",
1889 (req
->td_data_last
->status
& PCH_UDC_RXTX_STS
),
1894 req
->req
.actual
= req
->req
.length
;
1895 req
->td_data_last
->status
= PCH_UDC_BS_HST_BSY
| PCH_UDC_DMA_LAST
;
1896 req
->td_data
->status
= PCH_UDC_BS_HST_BSY
| PCH_UDC_DMA_LAST
;
1897 complete_req(ep
, req
, 0);
1899 if (!list_empty(&ep
->queue
)) {
1900 pch_udc_wait_ep_stall(ep
);
1901 pch_udc_ep_clear_nak(ep
);
1902 pch_udc_enable_ep_interrupts(ep
->dev
,
1903 PCH_UDC_EPINT(ep
->in
, ep
->num
));
1905 pch_udc_disable_ep_interrupts(ep
->dev
,
1906 PCH_UDC_EPINT(ep
->in
, ep
->num
));
1911 * pch_udc_complete_receiver() - This function completes a receiver
1912 * @ep: Reference to the endpoint structure
1914 static void pch_udc_complete_receiver(struct pch_udc_ep
*ep
)
1916 struct pch_udc_request
*req
;
1917 struct pch_udc_dev
*dev
= ep
->dev
;
1920 if (list_empty(&ep
->queue
))
1924 req
= list_entry(ep
->queue
.next
, struct pch_udc_request
, queue
);
1925 if ((req
->td_data_last
->status
& PCH_UDC_BUFF_STS
) !=
1926 PCH_UDC_BS_DMA_DONE
)
1928 pch_udc_clear_dma(ep
->dev
, DMA_DIR_RX
);
1929 if ((req
->td_data_last
->status
& PCH_UDC_RXTX_STS
) !=
1931 dev_err(&dev
->pdev
->dev
, "Invalid RXTX status (0x%08x) "
1932 "epstatus=0x%08x\n",
1933 (req
->td_data_last
->status
& PCH_UDC_RXTX_STS
),
1937 count
= req
->td_data_last
->status
& PCH_UDC_RXTX_BYTES
;
1939 /* on 64k packets the RXBYTES field is zero */
1940 if (!count
&& (req
->req
.length
== UDC_DMA_MAXPACKET
))
1941 count
= UDC_DMA_MAXPACKET
;
1942 req
->td_data
->status
|= PCH_UDC_DMA_LAST
;
1943 req
->td_data_last
->status
|= PCH_UDC_BS_HST_BSY
;
1946 req
->req
.actual
= count
;
1947 complete_req(ep
, req
, 0);
1948 /* If there is a new/failed requests try that now */
1949 if (!list_empty(&ep
->queue
)) {
1950 req
= list_entry(ep
->queue
.next
, struct pch_udc_request
, queue
);
1951 pch_udc_start_rxrequest(ep
, req
);
1956 * pch_udc_svc_data_in() - This function process endpoint interrupts
1958 * @dev: Reference to the device structure
1959 * @ep_num: Endpoint that generated the interrupt
1961 static void pch_udc_svc_data_in(struct pch_udc_dev
*dev
, int ep_num
)
1964 struct pch_udc_ep
*ep
;
1966 ep
= &dev
->ep
[2*ep_num
];
1970 if (!(epsts
& (UDC_EPSTS_IN
| UDC_EPSTS_BNA
| UDC_EPSTS_HE
|
1971 UDC_EPSTS_TDC
| UDC_EPSTS_RCS
| UDC_EPSTS_TXEMPTY
|
1972 UDC_EPSTS_RSS
| UDC_EPSTS_XFERDONE
)))
1974 if ((epsts
& UDC_EPSTS_BNA
))
1976 if (epsts
& UDC_EPSTS_HE
)
1978 if (epsts
& UDC_EPSTS_RSS
) {
1979 pch_udc_ep_set_stall(ep
);
1980 pch_udc_enable_ep_interrupts(ep
->dev
,
1981 PCH_UDC_EPINT(ep
->in
, ep
->num
));
1983 if (epsts
& UDC_EPSTS_RCS
) {
1984 if (!dev
->prot_stall
) {
1985 pch_udc_ep_clear_stall(ep
);
1987 pch_udc_ep_set_stall(ep
);
1988 pch_udc_enable_ep_interrupts(ep
->dev
,
1989 PCH_UDC_EPINT(ep
->in
, ep
->num
));
1992 if (epsts
& UDC_EPSTS_TDC
)
1993 pch_udc_complete_transfer(ep
);
1994 /* On IN interrupt, provide data if we have any */
1995 if ((epsts
& UDC_EPSTS_IN
) && !(epsts
& UDC_EPSTS_RSS
) &&
1996 !(epsts
& UDC_EPSTS_TDC
) && !(epsts
& UDC_EPSTS_TXEMPTY
))
1997 pch_udc_start_next_txrequest(ep
);
2001 * pch_udc_svc_data_out() - Handles interrupts from OUT endpoint
2002 * @dev: Reference to the device structure
2003 * @ep_num: Endpoint that generated the interrupt
2005 static void pch_udc_svc_data_out(struct pch_udc_dev
*dev
, int ep_num
)
2008 struct pch_udc_ep
*ep
;
2009 struct pch_udc_request
*req
= NULL
;
2011 ep
= &dev
->ep
[2*ep_num
+ 1];
2015 if ((epsts
& UDC_EPSTS_BNA
) && (!list_empty(&ep
->queue
))) {
2017 req
= list_entry(ep
->queue
.next
, struct pch_udc_request
,
2019 if ((req
->td_data_last
->status
& PCH_UDC_BUFF_STS
) !=
2020 PCH_UDC_BS_DMA_DONE
) {
2021 if (!req
->dma_going
)
2022 pch_udc_start_rxrequest(ep
, req
);
2026 if (epsts
& UDC_EPSTS_HE
)
2028 if (epsts
& UDC_EPSTS_RSS
)
2029 pch_udc_ep_set_stall(ep
);
2030 pch_udc_enable_ep_interrupts(ep
->dev
,
2031 PCH_UDC_EPINT(ep
->in
, ep
->num
));
2032 if (epsts
& UDC_EPSTS_RCS
) {
2033 if (!dev
->prot_stall
) {
2034 pch_udc_ep_clear_stall(ep
);
2036 pch_udc_ep_set_stall(ep
);
2037 pch_udc_enable_ep_interrupts(ep
->dev
,
2038 PCH_UDC_EPINT(ep
->in
, ep
->num
));
2041 if (((epsts
& UDC_EPSTS_OUT_MASK
) >> UDC_EPSTS_OUT_SHIFT
) ==
2042 UDC_EPSTS_OUT_DATA
) {
2043 if (ep
->dev
->prot_stall
== 1) {
2044 pch_udc_ep_set_stall(ep
);
2045 pch_udc_enable_ep_interrupts(ep
->dev
,
2046 PCH_UDC_EPINT(ep
->in
, ep
->num
));
2048 pch_udc_complete_receiver(ep
);
2051 if (list_empty(&ep
->queue
))
2052 pch_udc_set_dma(dev
, DMA_DIR_RX
);
2056 * pch_udc_svc_control_in() - Handle Control IN endpoint interrupts
2057 * @dev: Reference to the device structure
2059 static void pch_udc_svc_control_in(struct pch_udc_dev
*dev
)
2062 struct pch_udc_ep
*ep
;
2064 ep
= &dev
->ep
[UDC_EP0IN_IDX
];
2068 if (!(epsts
& (UDC_EPSTS_IN
| UDC_EPSTS_BNA
| UDC_EPSTS_HE
|
2069 UDC_EPSTS_TDC
| UDC_EPSTS_RCS
| UDC_EPSTS_TXEMPTY
|
2070 UDC_EPSTS_XFERDONE
)))
2072 if ((epsts
& UDC_EPSTS_BNA
))
2074 if (epsts
& UDC_EPSTS_HE
)
2076 if ((epsts
& UDC_EPSTS_TDC
) && (!dev
->stall
))
2077 pch_udc_complete_transfer(ep
);
2078 /* On IN interrupt, provide data if we have any */
2079 if ((epsts
& UDC_EPSTS_IN
) && !(epsts
& UDC_EPSTS_TDC
) &&
2080 !(epsts
& UDC_EPSTS_TXEMPTY
))
2081 pch_udc_start_next_txrequest(ep
);
2085 * pch_udc_svc_control_out() - Routine that handle Control
2086 * OUT endpoint interrupts
2087 * @dev: Reference to the device structure
2089 static void pch_udc_svc_control_out(struct pch_udc_dev
*dev
)
2092 int setup_supported
;
2093 struct pch_udc_ep
*ep
;
2095 ep
= &dev
->ep
[UDC_EP0OUT_IDX
];
2100 if (((stat
& UDC_EPSTS_OUT_MASK
) >> UDC_EPSTS_OUT_SHIFT
) ==
2101 UDC_EPSTS_OUT_SETUP
) {
2103 dev
->ep
[UDC_EP0IN_IDX
].halted
= 0;
2104 dev
->ep
[UDC_EP0OUT_IDX
].halted
= 0;
2105 /* In data not ready */
2106 pch_udc_ep_set_nak(&(dev
->ep
[UDC_EP0IN_IDX
]));
2107 dev
->setup_data
= ep
->td_stp
->request
;
2108 pch_udc_init_setup_buff(ep
->td_stp
);
2109 pch_udc_clear_dma(dev
, DMA_DIR_TX
);
2110 pch_udc_ep_fifo_flush(&(dev
->ep
[UDC_EP0IN_IDX
]),
2111 dev
->ep
[UDC_EP0IN_IDX
].in
);
2112 if ((dev
->setup_data
.bRequestType
& USB_DIR_IN
))
2113 dev
->gadget
.ep0
= &dev
->ep
[UDC_EP0IN_IDX
].ep
;
2115 dev
->gadget
.ep0
= &ep
->ep
;
2116 spin_unlock(&dev
->lock
);
2117 /* If Mass storage Reset */
2118 if ((dev
->setup_data
.bRequestType
== 0x21) &&
2119 (dev
->setup_data
.bRequest
== 0xFF))
2120 dev
->prot_stall
= 0;
2121 /* call gadget with setup data received */
2122 setup_supported
= dev
->driver
->setup(&dev
->gadget
,
2124 spin_lock(&dev
->lock
);
2125 /* ep0 in returns data on IN phase */
2126 if (setup_supported
>= 0 && setup_supported
<
2127 UDC_EP0IN_MAX_PKT_SIZE
) {
2128 pch_udc_ep_clear_nak(&(dev
->ep
[UDC_EP0IN_IDX
]));
2129 /* Gadget would have queued a request when
2130 * we called the setup */
2131 pch_udc_set_dma(dev
, DMA_DIR_RX
);
2132 pch_udc_ep_clear_nak(ep
);
2133 } else if (setup_supported
< 0) {
2134 /* if unsupported request, then stall */
2135 pch_udc_ep_set_stall(&(dev
->ep
[UDC_EP0IN_IDX
]));
2136 pch_udc_enable_ep_interrupts(ep
->dev
,
2137 PCH_UDC_EPINT(ep
->in
, ep
->num
));
2139 pch_udc_set_dma(dev
, DMA_DIR_RX
);
2141 dev
->waiting_zlp_ack
= 1;
2143 } else if ((((stat
& UDC_EPSTS_OUT_MASK
) >> UDC_EPSTS_OUT_SHIFT
) ==
2144 UDC_EPSTS_OUT_DATA
) && !dev
->stall
) {
2145 if (list_empty(&ep
->queue
)) {
2146 dev_err(&dev
->pdev
->dev
, "%s: No request\n", __func__
);
2147 ep
->td_data
->status
= (ep
->td_data
->status
&
2148 ~PCH_UDC_BUFF_STS
) |
2150 pch_udc_set_dma(dev
, DMA_DIR_RX
);
2153 /* next function will pickuo an clear the status */
2156 pch_udc_svc_data_out(dev
, 0);
2157 /* re-program desc. pointer for possible ZLPs */
2158 pch_udc_ep_set_ddptr(ep
, ep
->td_data_phys
);
2159 pch_udc_set_dma(dev
, DMA_DIR_RX
);
2162 pch_udc_ep_set_rrdy(ep
);
2167 * pch_udc_postsvc_epinters() - This function enables end point interrupts
2168 * and clears NAK status
2169 * @dev: Reference to the device structure
2170 * @ep_num: End point number
2172 static void pch_udc_postsvc_epinters(struct pch_udc_dev
*dev
, int ep_num
)
2174 struct pch_udc_ep
*ep
;
2175 struct pch_udc_request
*req
;
2177 ep
= &dev
->ep
[2*ep_num
];
2178 if (!list_empty(&ep
->queue
)) {
2179 req
= list_entry(ep
->queue
.next
, struct pch_udc_request
, queue
);
2180 pch_udc_enable_ep_interrupts(ep
->dev
,
2181 PCH_UDC_EPINT(ep
->in
, ep
->num
));
2182 pch_udc_ep_clear_nak(ep
);
2187 * pch_udc_read_all_epstatus() - This function read all endpoint status
2188 * @dev: Reference to the device structure
2189 * @ep_intr: Status of endpoint interrupt
2191 static void pch_udc_read_all_epstatus(struct pch_udc_dev
*dev
, u32 ep_intr
)
2194 struct pch_udc_ep
*ep
;
2196 for (i
= 0; i
< PCH_UDC_USED_EP_NUM
; i
++) {
2198 if (ep_intr
& (0x1 << i
)) {
2200 ep
->epsts
= pch_udc_read_ep_status(ep
);
2201 pch_udc_clear_ep_status(ep
, ep
->epsts
);
2204 if (ep_intr
& (0x10000 << i
)) {
2205 ep
= &dev
->ep
[2*i
+1];
2206 ep
->epsts
= pch_udc_read_ep_status(ep
);
2207 pch_udc_clear_ep_status(ep
, ep
->epsts
);
2213 * pch_udc_activate_control_ep() - This function enables the control endpoints
2214 * for traffic after a reset
2215 * @dev: Reference to the device structure
2217 static void pch_udc_activate_control_ep(struct pch_udc_dev
*dev
)
2219 struct pch_udc_ep
*ep
;
2222 /* Setup the IN endpoint */
2223 ep
= &dev
->ep
[UDC_EP0IN_IDX
];
2224 pch_udc_clear_ep_control(ep
);
2225 pch_udc_ep_fifo_flush(ep
, ep
->in
);
2226 pch_udc_ep_set_bufsz(ep
, UDC_EP0IN_BUFF_SIZE
, ep
->in
);
2227 pch_udc_ep_set_maxpkt(ep
, UDC_EP0IN_MAX_PKT_SIZE
);
2228 /* Initialize the IN EP Descriptor */
2231 ep
->td_data_phys
= 0;
2232 ep
->td_stp_phys
= 0;
2234 /* Setup the OUT endpoint */
2235 ep
= &dev
->ep
[UDC_EP0OUT_IDX
];
2236 pch_udc_clear_ep_control(ep
);
2237 pch_udc_ep_fifo_flush(ep
, ep
->in
);
2238 pch_udc_ep_set_bufsz(ep
, UDC_EP0OUT_BUFF_SIZE
, ep
->in
);
2239 pch_udc_ep_set_maxpkt(ep
, UDC_EP0OUT_MAX_PKT_SIZE
);
2240 val
= UDC_EP0OUT_MAX_PKT_SIZE
<< UDC_CSR_NE_MAX_PKT_SHIFT
;
2241 pch_udc_write_csr(ep
->dev
, val
, UDC_EP0OUT_IDX
);
2243 /* Initialize the SETUP buffer */
2244 pch_udc_init_setup_buff(ep
->td_stp
);
2245 /* Write the pointer address of dma descriptor */
2246 pch_udc_ep_set_subptr(ep
, ep
->td_stp_phys
);
2247 /* Write the pointer address of Setup descriptor */
2248 pch_udc_ep_set_ddptr(ep
, ep
->td_data_phys
);
2250 /* Initialize the dma descriptor */
2251 ep
->td_data
->status
= PCH_UDC_DMA_LAST
;
2252 ep
->td_data
->dataptr
= dev
->dma_addr
;
2253 ep
->td_data
->next
= ep
->td_data_phys
;
2255 pch_udc_ep_clear_nak(ep
);
2260 * pch_udc_svc_ur_interrupt() - This function handles a USB reset interrupt
2261 * @dev: Reference to driver structure
2263 static void pch_udc_svc_ur_interrupt(struct pch_udc_dev
*dev
)
2265 struct pch_udc_ep
*ep
;
2268 pch_udc_clear_dma(dev
, DMA_DIR_TX
);
2269 pch_udc_clear_dma(dev
, DMA_DIR_RX
);
2270 /* Mask all endpoint interrupts */
2271 pch_udc_disable_ep_interrupts(dev
, UDC_EPINT_MSK_DISABLE_ALL
);
2272 /* clear all endpoint interrupts */
2273 pch_udc_write_ep_interrupts(dev
, UDC_EPINT_MSK_DISABLE_ALL
);
2275 for (i
= 0; i
< PCH_UDC_EP_NUM
; i
++) {
2277 pch_udc_clear_ep_status(ep
, UDC_EPSTS_ALL_CLR_MASK
);
2278 pch_udc_clear_ep_control(ep
);
2279 pch_udc_ep_set_ddptr(ep
, 0);
2280 pch_udc_write_csr(ep
->dev
, 0x00, i
);
2283 dev
->prot_stall
= 0;
2284 dev
->waiting_zlp_ack
= 0;
2285 dev
->set_cfg_not_acked
= 0;
2287 /* disable ep to empty req queue. Skip the control EP's */
2288 for (i
= 0; i
< (PCH_UDC_USED_EP_NUM
*2); i
++) {
2290 pch_udc_ep_set_nak(ep
);
2291 pch_udc_ep_fifo_flush(ep
, ep
->in
);
2292 /* Complete request queue */
2293 empty_req_queue(ep
);
2295 if (dev
->driver
&& dev
->driver
->disconnect
)
2296 dev
->driver
->disconnect(&dev
->gadget
);
2300 * pch_udc_svc_enum_interrupt() - This function handles a USB speed enumeration
2302 * @dev: Reference to driver structure
2304 static void pch_udc_svc_enum_interrupt(struct pch_udc_dev
*dev
)
2306 u32 dev_stat
, dev_speed
;
2307 u32 speed
= USB_SPEED_FULL
;
2309 dev_stat
= pch_udc_read_device_status(dev
);
2310 dev_speed
= (dev_stat
& UDC_DEVSTS_ENUM_SPEED_MASK
) >>
2311 UDC_DEVSTS_ENUM_SPEED_SHIFT
;
2312 switch (dev_speed
) {
2313 case UDC_DEVSTS_ENUM_SPEED_HIGH
:
2314 speed
= USB_SPEED_HIGH
;
2316 case UDC_DEVSTS_ENUM_SPEED_FULL
:
2317 speed
= USB_SPEED_FULL
;
2319 case UDC_DEVSTS_ENUM_SPEED_LOW
:
2320 speed
= USB_SPEED_LOW
;
2325 dev
->gadget
.speed
= speed
;
2326 pch_udc_activate_control_ep(dev
);
2327 pch_udc_enable_ep_interrupts(dev
, UDC_EPINT_IN_EP0
| UDC_EPINT_OUT_EP0
);
2328 pch_udc_set_dma(dev
, DMA_DIR_TX
);
2329 pch_udc_set_dma(dev
, DMA_DIR_RX
);
2330 pch_udc_ep_set_rrdy(&(dev
->ep
[UDC_EP0OUT_IDX
]));
2334 * pch_udc_svc_intf_interrupt() - This function handles a set interface
2336 * @dev: Reference to driver structure
2338 static void pch_udc_svc_intf_interrupt(struct pch_udc_dev
*dev
)
2340 u32 reg
, dev_stat
= 0;
2343 dev_stat
= pch_udc_read_device_status(dev
);
2344 dev
->cfg_data
.cur_intf
= (dev_stat
& UDC_DEVSTS_INTF_MASK
) >>
2345 UDC_DEVSTS_INTF_SHIFT
;
2346 dev
->cfg_data
.cur_alt
= (dev_stat
& UDC_DEVSTS_ALT_MASK
) >>
2347 UDC_DEVSTS_ALT_SHIFT
;
2348 dev
->set_cfg_not_acked
= 1;
2349 /* Construct the usb request for gadget driver and inform it */
2350 memset(&dev
->setup_data
, 0 , sizeof dev
->setup_data
);
2351 dev
->setup_data
.bRequest
= USB_REQ_SET_INTERFACE
;
2352 dev
->setup_data
.bRequestType
= USB_RECIP_INTERFACE
;
2353 dev
->setup_data
.wValue
= cpu_to_le16(dev
->cfg_data
.cur_alt
);
2354 dev
->setup_data
.wIndex
= cpu_to_le16(dev
->cfg_data
.cur_intf
);
2355 /* programm the Endpoint Cfg registers */
2356 /* Only one end point cfg register */
2357 reg
= pch_udc_read_csr(dev
, UDC_EP0OUT_IDX
);
2358 reg
= (reg
& ~UDC_CSR_NE_INTF_MASK
) |
2359 (dev
->cfg_data
.cur_intf
<< UDC_CSR_NE_INTF_SHIFT
);
2360 reg
= (reg
& ~UDC_CSR_NE_ALT_MASK
) |
2361 (dev
->cfg_data
.cur_alt
<< UDC_CSR_NE_ALT_SHIFT
);
2362 pch_udc_write_csr(dev
, reg
, UDC_EP0OUT_IDX
);
2363 for (i
= 0; i
< PCH_UDC_USED_EP_NUM
* 2; i
++) {
2364 /* clear stall bits */
2365 pch_udc_ep_clear_stall(&(dev
->ep
[i
]));
2366 dev
->ep
[i
].halted
= 0;
2369 spin_unlock(&dev
->lock
);
2370 ret
= dev
->driver
->setup(&dev
->gadget
, &dev
->setup_data
);
2371 spin_lock(&dev
->lock
);
2375 * pch_udc_svc_cfg_interrupt() - This function handles a set configuration
2377 * @dev: Reference to driver structure
2379 static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev
*dev
)
2382 u32 reg
, dev_stat
= 0;
2384 dev_stat
= pch_udc_read_device_status(dev
);
2385 dev
->set_cfg_not_acked
= 1;
2386 dev
->cfg_data
.cur_cfg
= (dev_stat
& UDC_DEVSTS_CFG_MASK
) >>
2387 UDC_DEVSTS_CFG_SHIFT
;
2388 /* make usb request for gadget driver */
2389 memset(&dev
->setup_data
, 0 , sizeof dev
->setup_data
);
2390 dev
->setup_data
.bRequest
= USB_REQ_SET_CONFIGURATION
;
2391 dev
->setup_data
.wValue
= cpu_to_le16(dev
->cfg_data
.cur_cfg
);
2392 /* program the NE registers */
2393 /* Only one end point cfg register */
2394 reg
= pch_udc_read_csr(dev
, UDC_EP0OUT_IDX
);
2395 reg
= (reg
& ~UDC_CSR_NE_CFG_MASK
) |
2396 (dev
->cfg_data
.cur_cfg
<< UDC_CSR_NE_CFG_SHIFT
);
2397 pch_udc_write_csr(dev
, reg
, UDC_EP0OUT_IDX
);
2398 for (i
= 0; i
< PCH_UDC_USED_EP_NUM
* 2; i
++) {
2399 /* clear stall bits */
2400 pch_udc_ep_clear_stall(&(dev
->ep
[i
]));
2401 dev
->ep
[i
].halted
= 0;
2405 /* call gadget zero with setup data received */
2406 spin_unlock(&dev
->lock
);
2407 ret
= dev
->driver
->setup(&dev
->gadget
, &dev
->setup_data
);
2408 spin_lock(&dev
->lock
);
2412 * pch_udc_dev_isr() - This function services device interrupts
2413 * by invoking appropriate routines.
2414 * @dev: Reference to the device structure
2415 * @dev_intr: The Device interrupt status.
2417 static void pch_udc_dev_isr(struct pch_udc_dev
*dev
, u32 dev_intr
)
2419 /* USB Reset Interrupt */
2420 if (dev_intr
& UDC_DEVINT_UR
)
2421 pch_udc_svc_ur_interrupt(dev
);
2422 /* Enumeration Done Interrupt */
2423 if (dev_intr
& UDC_DEVINT_ENUM
)
2424 pch_udc_svc_enum_interrupt(dev
);
2425 /* Set Interface Interrupt */
2426 if (dev_intr
& UDC_DEVINT_SI
)
2427 pch_udc_svc_intf_interrupt(dev
);
2428 /* Set Config Interrupt */
2429 if (dev_intr
& UDC_DEVINT_SC
)
2430 pch_udc_svc_cfg_interrupt(dev
);
2431 /* USB Suspend interrupt */
2432 if (dev_intr
& UDC_DEVINT_US
)
2433 dev_dbg(&dev
->pdev
->dev
, "USB_SUSPEND\n");
2434 /* Clear the SOF interrupt, if enabled */
2435 if (dev_intr
& UDC_DEVINT_SOF
)
2436 dev_dbg(&dev
->pdev
->dev
, "SOF\n");
2437 /* ES interrupt, IDLE > 3ms on the USB */
2438 if (dev_intr
& UDC_DEVINT_ES
)
2439 dev_dbg(&dev
->pdev
->dev
, "ES\n");
2440 /* RWKP interrupt */
2441 if (dev_intr
& UDC_DEVINT_RWKP
)
2442 dev_dbg(&dev
->pdev
->dev
, "RWKP\n");
2446 * pch_udc_isr() - This function handles interrupts from the PCH USB Device
2447 * @irq: Interrupt request number
2448 * @dev: Reference to the device structure
2450 static irqreturn_t
pch_udc_isr(int irq
, void *pdev
)
2452 struct pch_udc_dev
*dev
= (struct pch_udc_dev
*) pdev
;
2453 u32 dev_intr
, ep_intr
;
2456 dev_intr
= pch_udc_read_device_interrupts(dev
);
2457 ep_intr
= pch_udc_read_ep_interrupts(dev
);
2460 /* Clear device interrupts */
2461 pch_udc_write_device_interrupts(dev
, dev_intr
);
2463 /* Clear ep interrupts */
2464 pch_udc_write_ep_interrupts(dev
, ep_intr
);
2465 if (!dev_intr
&& !ep_intr
)
2467 spin_lock(&dev
->lock
);
2469 pch_udc_dev_isr(dev
, dev_intr
);
2471 pch_udc_read_all_epstatus(dev
, ep_intr
);
2472 /* Process Control In interrupts, if present */
2473 if (ep_intr
& UDC_EPINT_IN_EP0
) {
2474 pch_udc_svc_control_in(dev
);
2475 pch_udc_postsvc_epinters(dev
, 0);
2477 /* Process Control Out interrupts, if present */
2478 if (ep_intr
& UDC_EPINT_OUT_EP0
)
2479 pch_udc_svc_control_out(dev
);
2480 /* Process data in end point interrupts */
2481 for (i
= 1; i
< PCH_UDC_USED_EP_NUM
; i
++) {
2482 if (ep_intr
& (1 << i
)) {
2483 pch_udc_svc_data_in(dev
, i
);
2484 pch_udc_postsvc_epinters(dev
, i
);
2487 /* Process data out end point interrupts */
2488 for (i
= UDC_EPINT_OUT_SHIFT
+ 1; i
< (UDC_EPINT_OUT_SHIFT
+
2489 PCH_UDC_USED_EP_NUM
); i
++)
2490 if (ep_intr
& (1 << i
))
2491 pch_udc_svc_data_out(dev
, i
-
2492 UDC_EPINT_OUT_SHIFT
);
2494 spin_unlock(&dev
->lock
);
2499 * pch_udc_setup_ep0() - This function enables control endpoint for traffic
2500 * @dev: Reference to the device structure
2502 static void pch_udc_setup_ep0(struct pch_udc_dev
*dev
)
2504 /* enable ep0 interrupts */
2505 pch_udc_enable_ep_interrupts(dev
, UDC_EPINT_IN_EP0
|
2507 /* enable device interrupts */
2508 pch_udc_enable_interrupts(dev
, UDC_DEVINT_UR
| UDC_DEVINT_US
|
2509 UDC_DEVINT_ES
| UDC_DEVINT_ENUM
|
2510 UDC_DEVINT_SI
| UDC_DEVINT_SC
);
2514 * gadget_release() - Free the gadget driver private data
2515 * @pdev reference to struct pci_dev
2517 static void gadget_release(struct device
*pdev
)
2519 struct pch_udc_dev
*dev
= dev_get_drvdata(pdev
);
2525 * pch_udc_pcd_reinit() - This API initializes the endpoint structures
2526 * @dev: Reference to the driver structure
2528 static void pch_udc_pcd_reinit(struct pch_udc_dev
*dev
)
2530 const char *const ep_string
[] = {
2531 ep0_string
, "ep0out", "ep1in", "ep1out", "ep2in", "ep2out",
2532 "ep3in", "ep3out", "ep4in", "ep4out", "ep5in", "ep5out",
2533 "ep6in", "ep6out", "ep7in", "ep7out", "ep8in", "ep8out",
2534 "ep9in", "ep9out", "ep10in", "ep10out", "ep11in", "ep11out",
2535 "ep12in", "ep12out", "ep13in", "ep13out", "ep14in", "ep14out",
2536 "ep15in", "ep15out",
2540 dev
->gadget
.speed
= USB_SPEED_UNKNOWN
;
2541 INIT_LIST_HEAD(&dev
->gadget
.ep_list
);
2543 /* Initialize the endpoints structures */
2544 memset(dev
->ep
, 0, sizeof dev
->ep
);
2545 for (i
= 0; i
< PCH_UDC_EP_NUM
; i
++) {
2546 struct pch_udc_ep
*ep
= &dev
->ep
[i
];
2551 ep
->ep
.name
= ep_string
[i
];
2552 ep
->ep
.ops
= &pch_udc_ep_ops
;
2554 ep
->offset_addr
= ep
->num
* UDC_EP_REG_SHIFT
;
2556 ep
->offset_addr
= (UDC_EPINT_OUT_SHIFT
+ ep
->num
) *
2558 /* need to set ep->ep.maxpacket and set Default Configuration?*/
2559 ep
->ep
.maxpacket
= UDC_BULK_MAX_PKT_SIZE
;
2560 list_add_tail(&ep
->ep
.ep_list
, &dev
->gadget
.ep_list
);
2561 INIT_LIST_HEAD(&ep
->queue
);
2563 dev
->ep
[UDC_EP0IN_IDX
].ep
.maxpacket
= UDC_EP0IN_MAX_PKT_SIZE
;
2564 dev
->ep
[UDC_EP0OUT_IDX
].ep
.maxpacket
= UDC_EP0OUT_MAX_PKT_SIZE
;
2566 dev
->dma_addr
= pci_map_single(dev
->pdev
, dev
->ep0out_buf
, 256,
2567 PCI_DMA_FROMDEVICE
);
2569 /* remove ep0 in and out from the list. They have own pointer */
2570 list_del_init(&dev
->ep
[UDC_EP0IN_IDX
].ep
.ep_list
);
2571 list_del_init(&dev
->ep
[UDC_EP0OUT_IDX
].ep
.ep_list
);
2573 dev
->gadget
.ep0
= &dev
->ep
[UDC_EP0IN_IDX
].ep
;
2574 INIT_LIST_HEAD(&dev
->gadget
.ep0
->ep_list
);
2578 * pch_udc_pcd_init() - This API initializes the driver structure
2579 * @dev: Reference to the driver structure
2584 static int pch_udc_pcd_init(struct pch_udc_dev
*dev
)
2587 pch_udc_pcd_reinit(dev
);
2592 * init_dma_pools() - create dma pools during initialization
2593 * @pdev: reference to struct pci_dev
2595 static int init_dma_pools(struct pch_udc_dev
*dev
)
2597 struct pch_udc_stp_dma_desc
*td_stp
;
2598 struct pch_udc_data_dma_desc
*td_data
;
2601 dev
->data_requests
= pci_pool_create("data_requests", dev
->pdev
,
2602 sizeof(struct pch_udc_data_dma_desc
), 0, 0);
2603 if (!dev
->data_requests
) {
2604 dev_err(&dev
->pdev
->dev
, "%s: can't get request data pool\n",
2609 /* dma desc for setup data */
2610 dev
->stp_requests
= pci_pool_create("setup requests", dev
->pdev
,
2611 sizeof(struct pch_udc_stp_dma_desc
), 0, 0);
2612 if (!dev
->stp_requests
) {
2613 dev_err(&dev
->pdev
->dev
, "%s: can't get setup request pool\n",
2618 td_stp
= pci_pool_alloc(dev
->stp_requests
, GFP_KERNEL
,
2619 &dev
->ep
[UDC_EP0OUT_IDX
].td_stp_phys
);
2621 dev_err(&dev
->pdev
->dev
,
2622 "%s: can't allocate setup dma descriptor\n", __func__
);
2625 dev
->ep
[UDC_EP0OUT_IDX
].td_stp
= td_stp
;
2627 /* data: 0 packets !? */
2628 td_data
= pci_pool_alloc(dev
->data_requests
, GFP_KERNEL
,
2629 &dev
->ep
[UDC_EP0OUT_IDX
].td_data_phys
);
2631 dev_err(&dev
->pdev
->dev
,
2632 "%s: can't allocate data dma descriptor\n", __func__
);
2635 dev
->ep
[UDC_EP0OUT_IDX
].td_data
= td_data
;
2636 dev
->ep
[UDC_EP0IN_IDX
].td_stp
= NULL
;
2637 dev
->ep
[UDC_EP0IN_IDX
].td_stp_phys
= 0;
2638 dev
->ep
[UDC_EP0IN_IDX
].td_data
= NULL
;
2639 dev
->ep
[UDC_EP0IN_IDX
].td_data_phys
= 0;
2643 int usb_gadget_probe_driver(struct usb_gadget_driver
*driver
,
2644 int (*bind
)(struct usb_gadget
*))
2646 struct pch_udc_dev
*dev
= pch_udc
;
2649 if (!driver
|| (driver
->speed
== USB_SPEED_UNKNOWN
) || !bind
||
2650 !driver
->setup
|| !driver
->unbind
|| !driver
->disconnect
) {
2651 dev_err(&dev
->pdev
->dev
,
2652 "%s: invalid driver parameter\n", __func__
);
2660 dev_err(&dev
->pdev
->dev
, "%s: already bound\n", __func__
);
2663 driver
->driver
.bus
= NULL
;
2664 dev
->driver
= driver
;
2665 dev
->gadget
.dev
.driver
= &driver
->driver
;
2667 /* Invoke the bind routine of the gadget driver */
2668 retval
= bind(&dev
->gadget
);
2671 dev_err(&dev
->pdev
->dev
, "%s: binding to %s returning %d\n",
2672 __func__
, driver
->driver
.name
, retval
);
2674 dev
->gadget
.dev
.driver
= NULL
;
2677 /* get ready for ep0 traffic */
2678 pch_udc_setup_ep0(dev
);
2681 pch_udc_clear_disconnect(dev
);
2686 EXPORT_SYMBOL(usb_gadget_probe_driver
);
2688 int usb_gadget_unregister_driver(struct usb_gadget_driver
*driver
)
2690 struct pch_udc_dev
*dev
= pch_udc
;
2695 if (!driver
|| (driver
!= dev
->driver
)) {
2696 dev_err(&dev
->pdev
->dev
,
2697 "%s: invalid driver parameter\n", __func__
);
2701 pch_udc_disable_interrupts(dev
, UDC_DEVINT_MSK
);
2703 /* Assues that there are no pending requets with this driver */
2704 driver
->unbind(&dev
->gadget
);
2705 dev
->gadget
.dev
.driver
= NULL
;
2710 pch_udc_set_disconnect(dev
);
2713 EXPORT_SYMBOL(usb_gadget_unregister_driver
);
2715 static void pch_udc_shutdown(struct pci_dev
*pdev
)
2717 struct pch_udc_dev
*dev
= pci_get_drvdata(pdev
);
2719 pch_udc_disable_interrupts(dev
, UDC_DEVINT_MSK
);
2720 pch_udc_disable_ep_interrupts(dev
, UDC_EPINT_MSK_DISABLE_ALL
);
2722 /* disable the pullup so the host will think we're gone */
2723 pch_udc_set_disconnect(dev
);
2726 static void pch_udc_remove(struct pci_dev
*pdev
)
2728 struct pch_udc_dev
*dev
= pci_get_drvdata(pdev
);
2730 /* gadget driver must not be registered */
2733 "%s: gadget driver still bound!!!\n", __func__
);
2734 /* dma pool cleanup */
2735 if (dev
->data_requests
)
2736 pci_pool_destroy(dev
->data_requests
);
2738 if (dev
->stp_requests
) {
2739 /* cleanup DMA desc's for ep0in */
2740 if (dev
->ep
[UDC_EP0OUT_IDX
].td_stp
) {
2741 pci_pool_free(dev
->stp_requests
,
2742 dev
->ep
[UDC_EP0OUT_IDX
].td_stp
,
2743 dev
->ep
[UDC_EP0OUT_IDX
].td_stp_phys
);
2745 if (dev
->ep
[UDC_EP0OUT_IDX
].td_data
) {
2746 pci_pool_free(dev
->stp_requests
,
2747 dev
->ep
[UDC_EP0OUT_IDX
].td_data
,
2748 dev
->ep
[UDC_EP0OUT_IDX
].td_data_phys
);
2750 pci_pool_destroy(dev
->stp_requests
);
2755 if (dev
->irq_registered
)
2756 free_irq(pdev
->irq
, dev
);
2758 iounmap(dev
->base_addr
);
2759 if (dev
->mem_region
)
2760 release_mem_region(dev
->phys_addr
,
2761 pci_resource_len(pdev
, PCH_UDC_PCI_BAR
));
2763 pci_disable_device(pdev
);
2764 if (dev
->registered
)
2765 device_unregister(&dev
->gadget
.dev
);
2767 pci_set_drvdata(pdev
, NULL
);
2771 static int pch_udc_suspend(struct pci_dev
*pdev
, pm_message_t state
)
2773 struct pch_udc_dev
*dev
= pci_get_drvdata(pdev
);
2775 pch_udc_disable_interrupts(dev
, UDC_DEVINT_MSK
);
2776 pch_udc_disable_ep_interrupts(dev
, UDC_EPINT_MSK_DISABLE_ALL
);
2778 pci_disable_device(pdev
);
2779 pci_enable_wake(pdev
, PCI_D3hot
, 0);
2781 if (pci_save_state(pdev
)) {
2783 "%s: could not save PCI config state\n", __func__
);
2786 pci_set_power_state(pdev
, pci_choose_state(pdev
, state
));
2790 static int pch_udc_resume(struct pci_dev
*pdev
)
2794 pci_set_power_state(pdev
, PCI_D0
);
2795 ret
= pci_restore_state(pdev
);
2797 dev_err(&pdev
->dev
, "%s: pci_restore_state failed\n", __func__
);
2800 ret
= pci_enable_device(pdev
);
2802 dev_err(&pdev
->dev
, "%s: pci_enable_device failed\n", __func__
);
2805 pci_enable_wake(pdev
, PCI_D3hot
, 0);
2809 #define pch_udc_suspend NULL
2810 #define pch_udc_resume NULL
2811 #endif /* CONFIG_PM */
2813 static int pch_udc_probe(struct pci_dev
*pdev
,
2814 const struct pci_device_id
*id
)
2816 unsigned long resource
;
2819 struct pch_udc_dev
*dev
;
2823 pr_err("%s: already probed\n", __func__
);
2827 dev
= kzalloc(sizeof *dev
, GFP_KERNEL
);
2829 pr_err("%s: no memory for device structure\n", __func__
);
2833 if (pci_enable_device(pdev
) < 0) {
2835 pr_err("%s: pci_enable_device failed\n", __func__
);
2839 pci_set_drvdata(pdev
, dev
);
2841 /* PCI resource allocation */
2842 resource
= pci_resource_start(pdev
, 1);
2843 len
= pci_resource_len(pdev
, 1);
2845 if (!request_mem_region(resource
, len
, KBUILD_MODNAME
)) {
2846 dev_err(&pdev
->dev
, "%s: pci device used already\n", __func__
);
2850 dev
->phys_addr
= resource
;
2851 dev
->mem_region
= 1;
2853 dev
->base_addr
= ioremap_nocache(resource
, len
);
2854 if (!dev
->base_addr
) {
2855 pr_err("%s: device memory cannot be mapped\n", __func__
);
2860 dev_err(&pdev
->dev
, "%s: irq not set\n", __func__
);
2865 /* initialize the hardware */
2866 if (pch_udc_pcd_init(dev
))
2868 if (request_irq(pdev
->irq
, pch_udc_isr
, IRQF_SHARED
, KBUILD_MODNAME
,
2870 dev_err(&pdev
->dev
, "%s: request_irq(%d) fail\n", __func__
,
2875 dev
->irq
= pdev
->irq
;
2876 dev
->irq_registered
= 1;
2878 pci_set_master(pdev
);
2879 pci_try_set_mwi(pdev
);
2881 /* device struct setup */
2882 spin_lock_init(&dev
->lock
);
2884 dev
->gadget
.ops
= &pch_udc_ops
;
2886 retval
= init_dma_pools(dev
);
2890 dev_set_name(&dev
->gadget
.dev
, "gadget");
2891 dev
->gadget
.dev
.parent
= &pdev
->dev
;
2892 dev
->gadget
.dev
.dma_mask
= pdev
->dev
.dma_mask
;
2893 dev
->gadget
.dev
.release
= gadget_release
;
2894 dev
->gadget
.name
= KBUILD_MODNAME
;
2895 dev
->gadget
.is_dualspeed
= 1;
2897 retval
= device_register(&dev
->gadget
.dev
);
2900 dev
->registered
= 1;
2902 /* Put the device in disconnected state till a driver is bound */
2903 pch_udc_set_disconnect(dev
);
2907 pch_udc_remove(pdev
);
2911 static DEFINE_PCI_DEVICE_TABLE(pch_udc_pcidev_id
) = {
2913 PCI_DEVICE(PCI_VENDOR_ID_INTEL
, PCI_DEVICE_ID_INTEL_EG20T_UDC
),
2914 .class = (PCI_CLASS_SERIAL_USB
<< 8) | 0xfe,
2915 .class_mask
= 0xffffffff,
2920 MODULE_DEVICE_TABLE(pci
, pch_udc_pcidev_id
);
2923 static struct pci_driver pch_udc_driver
= {
2924 .name
= KBUILD_MODNAME
,
2925 .id_table
= pch_udc_pcidev_id
,
2926 .probe
= pch_udc_probe
,
2927 .remove
= pch_udc_remove
,
2928 .suspend
= pch_udc_suspend
,
2929 .resume
= pch_udc_resume
,
2930 .shutdown
= pch_udc_shutdown
,
2933 static int __init
pch_udc_pci_init(void)
2935 return pci_register_driver(&pch_udc_driver
);
2937 module_init(pch_udc_pci_init
);
2939 static void __exit
pch_udc_pci_exit(void)
2941 pci_unregister_driver(&pch_udc_driver
);
2943 module_exit(pch_udc_pci_exit
);
2945 MODULE_DESCRIPTION("Intel EG20T USB Device Controller");
2946 MODULE_AUTHOR("OKI SEMICONDUCTOR, <toshiharu-linux@dsn.okisemi.com>");
2947 MODULE_LICENSE("GPL");