blob: dfe927b01ffbc43f59aba2b5222fc4769f883308 [file] [log] [blame]
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001/*
2 * Copyright (C) 2010 OKI SEMICONDUCTOR CO., LTD.
3 *
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.
7 *
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.
12 *
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.
16 */
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>
27
28/* Address offset of Registers */
29#define UDC_EP_REG_SHIFT 0x20 /* Offset to next EP */
30
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 */
38
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 */
50
51/* Endpoint control register */
52/* Bit position */
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
62/* Mask patern */
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
69
70/* Endpoint status register */
71/* Bit position */
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
82/* Mask patern */
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
88
89/* Device configuration register */
90/* Bit position */
91#define UDC_DEVCFG_CSR_PRG (1 << 17)
92#define UDC_DEVCFG_SP (1 << 3)
93/* SPD Valee */
94#define UDC_DEVCFG_SPD_HS 0x0
95#define UDC_DEVCFG_SPD_FS 0x1
96#define UDC_DEVCFG_SPD_LS 0x2
97
98/* Device control register */
99/* Bit position */
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)
111
112/* Device status register */
113/* Bit position */
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
119/* Mask patern */
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
130
131/* Device irq register */
132/* Bit position */
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)
141/* Mask patern */
142#define UDC_DEVINT_MSK 0x7f
143
144/* Endpoint irq register */
145/* Bit position */
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)
150/* Mask patern */
151#define UDC_EPINT_MSK_DISABLE_ALL 0xffffffff
152
153/* UDC_CSR_BUSY Status register */
154/* Bit position */
155#define UDC_CSR_BUSY (1 << 0)
156
157/* SOFT RESET register */
158/* Bit position */
159#define UDC_PSRST (1 << 1)
160#define UDC_SRST (1 << 0)
161
162/* USB_DEVICE endpoint register */
163/* Bit position */
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
171/* Mask patern */
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
179
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)))
183
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
193
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 */
197/* Length Value */
198#define PCH_UDC_BRLEN 0x0F /* Burst length */
199#define PCH_UDC_THLEN 0x1F /* Threshold length */
200/* Value of EP Buffer Size */
Toshiharu Okadaabab0c62010-12-29 10:07:33 +0900201#define UDC_EP0IN_BUFF_SIZE 16
202#define UDC_EPIN_BUFF_SIZE 256
203#define UDC_EP0OUT_BUFF_SIZE 16
204#define UDC_EPOUT_BUFF_SIZE 256
Toshiharu Okadaf646cf92010-11-11 18:27:57 +0900205/* 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
209
210/* DMA */
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 */
215
216/**
217 * struct pch_udc_data_dma_desc - Structure to hold DMA descriptor information
218 * for data
219 * @status: Status quadlet
220 * @reserved: Reserved
221 * @dataptr: Buffer descriptor
222 * @next: Next descriptor
223 */
224struct pch_udc_data_dma_desc {
225 u32 status;
226 u32 reserved;
227 u32 dataptr;
228 u32 next;
229};
230
231/**
232 * struct pch_udc_stp_dma_desc - Structure to hold DMA descriptor information
233 * for control data
234 * @status: Status
235 * @reserved: Reserved
236 * @data12: First setup word
237 * @data34: Second setup word
238 */
239struct pch_udc_stp_dma_desc {
240 u32 status;
241 u32 reserved;
242 struct usb_ctrlrequest request;
243} __attribute((packed));
244
245/* DMA status definitions */
246/* Buffer status */
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
252/* Rx/Tx Status */
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
261
262/**
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
268 */
269struct pch_udc_cfg_data {
270 u16 cur_cfg;
271 u16 cur_intf;
272 u16 cur_alt;
273};
274
275/**
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
284 * @desc: for this ep
285 * @queue: queue for requests
286 * @num: endpoint number
287 * @in: endpoint is IN
288 * @halted: endpoint halted?
289 * @epsts: Endpoint status
290 */
291struct pch_udc_ep {
292 struct usb_ep ep;
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;
301 unsigned num:5,
302 in:1,
303 halted:1;
304 unsigned long epsts;
305};
306
307/**
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
334 */
335struct pch_udc_dev {
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];
Richard Röjfors49e20832010-12-07 17:28:30 +0100340 spinlock_t lock; /* protects all state */
Toshiharu Okadaf646cf92010-11-11 18:27:57 +0900341 unsigned active:1,
342 stall:1,
343 prot_stall:1,
344 irq_registered:1,
345 mem_region:1,
346 registered:1,
347 suspended:1,
348 connected:1,
349 set_cfg_not_acked:1,
350 waiting_zlp_ack:1;
351 struct pci_pool *data_requests;
352 struct pci_pool *stp_requests;
353 dma_addr_t dma_addr;
Toshiharu Okadaabab0c62010-12-29 10:07:33 +0900354 void *ep0out_buf;
Toshiharu Okadaf646cf92010-11-11 18:27:57 +0900355 struct usb_ctrlrequest setup_data;
356 unsigned long phys_addr;
357 void __iomem *base_addr;
358 unsigned irq;
359 struct pch_udc_cfg_data cfg_data;
360};
361
362#define PCH_UDC_PCI_BAR 1
363#define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808
364
365static const char ep0_string[] = "ep0in";
366static DEFINE_SPINLOCK(udc_stall_spinlock); /* stall spin lock */
367struct pch_udc_dev *pch_udc; /* pointer to device object */
368
369static int speed_fs;
370module_param_named(speed_fs, speed_fs, bool, S_IRUGO);
371MODULE_PARM_DESC(speed_fs, "true for Full speed operation");
372
373/**
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
384 */
385struct 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,
392 dma_mapped:1,
393 dma_done:1;
394 unsigned chain_len;
395};
396
397static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
398{
399 return ioread32(dev->base_addr + reg);
400}
401
402static inline void pch_udc_writel(struct pch_udc_dev *dev,
403 unsigned long val, unsigned long reg)
404{
405 iowrite32(val, dev->base_addr + reg);
406}
407
408static inline void pch_udc_bit_set(struct pch_udc_dev *dev,
409 unsigned long reg,
410 unsigned long bitmask)
411{
412 pch_udc_writel(dev, pch_udc_readl(dev, reg) | bitmask, reg);
413}
414
415static inline void pch_udc_bit_clr(struct pch_udc_dev *dev,
416 unsigned long reg,
417 unsigned long bitmask)
418{
419 pch_udc_writel(dev, pch_udc_readl(dev, reg) & ~(bitmask), reg);
420}
421
422static inline u32 pch_udc_ep_readl(struct pch_udc_ep *ep, unsigned long reg)
423{
424 return ioread32(ep->dev->base_addr + ep->offset_addr + reg);
425}
426
427static inline void pch_udc_ep_writel(struct pch_udc_ep *ep,
428 unsigned long val, unsigned long reg)
429{
430 iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg);
431}
432
433static inline void pch_udc_ep_bit_set(struct pch_udc_ep *ep,
434 unsigned long reg,
435 unsigned long bitmask)
436{
437 pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) | bitmask, reg);
438}
439
440static inline void pch_udc_ep_bit_clr(struct pch_udc_ep *ep,
441 unsigned long reg,
442 unsigned long bitmask)
443{
444 pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) & ~(bitmask), reg);
445}
446
447/**
448 * pch_udc_csr_busy() - Wait till idle.
449 * @dev: Reference to pch_udc_dev structure
450 */
451static void pch_udc_csr_busy(struct pch_udc_dev *dev)
452{
453 unsigned int count = 200;
454
455 /* Wait till idle */
456 while ((pch_udc_readl(dev, UDC_CSR_BUSY_ADDR) & UDC_CSR_BUSY)
457 && --count)
458 cpu_relax();
459 if (!count)
460 dev_err(&dev->pdev->dev, "%s: wait error\n", __func__);
461}
462
463/**
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
468 */
469static void pch_udc_write_csr(struct pch_udc_dev *dev, unsigned long val,
470 unsigned int ep)
471{
472 unsigned long reg = PCH_UDC_CSR(ep);
473
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 */
477}
478
479/**
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
483 *
484 * Return codes: content of CSR register
485 */
486static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep)
487{
488 unsigned long reg = PCH_UDC_CSR(ep);
489
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);
494}
495
496/**
497 * pch_udc_rmt_wakeup() - Initiate for remote wakeup
498 * @dev: Reference to pch_udc_dev structure
499 */
500static inline void pch_udc_rmt_wakeup(struct pch_udc_dev *dev)
501{
502 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
503 mdelay(1);
504 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
505}
506
507/**
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
511 */
512static inline int pch_udc_get_frame(struct pch_udc_dev *dev)
513{
514 u32 frame = pch_udc_readl(dev, UDC_DEVSTS_ADDR);
515 return (frame & UDC_DEVSTS_TS_MASK) >> UDC_DEVSTS_TS_SHIFT;
516}
517
518/**
519 * pch_udc_clear_selfpowered() - Clear the self power control
520 * @dev: Reference to pch_udc_regs structure
521 */
522static inline void pch_udc_clear_selfpowered(struct pch_udc_dev *dev)
523{
524 pch_udc_bit_clr(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
525}
526
527/**
528 * pch_udc_set_selfpowered() - Set the self power control
529 * @dev: Reference to pch_udc_regs structure
530 */
531static inline void pch_udc_set_selfpowered(struct pch_udc_dev *dev)
532{
533 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
534}
535
536/**
537 * pch_udc_set_disconnect() - Set the disconnect status.
538 * @dev: Reference to pch_udc_regs structure
539 */
540static inline void pch_udc_set_disconnect(struct pch_udc_dev *dev)
541{
542 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
543}
544
545/**
546 * pch_udc_clear_disconnect() - Clear the disconnect status.
547 * @dev: Reference to pch_udc_regs structure
548 */
549static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
550{
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);
554 mdelay(1);
555 /* Resume USB signalling */
556 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
557}
558
559/**
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
565 */
566static inline void pch_udc_vbus_session(struct pch_udc_dev *dev,
567 int is_active)
568{
569 if (is_active)
570 pch_udc_clear_disconnect(dev);
571 else
572 pch_udc_set_disconnect(dev);
573}
574
575/**
576 * pch_udc_ep_set_stall() - Set the stall of endpoint
577 * @ep: Reference to structure of type pch_udc_ep_regs
578 */
579static void pch_udc_ep_set_stall(struct pch_udc_ep *ep)
580{
581 if (ep->in) {
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);
584 } else {
585 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
586 }
587}
588
589/**
590 * pch_udc_ep_clear_stall() - Clear the stall of endpoint
591 * @ep: Reference to structure of type pch_udc_ep_regs
592 */
593static inline void pch_udc_ep_clear_stall(struct pch_udc_ep *ep)
594{
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);
599}
600
601/**
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
605 */
606static inline void pch_udc_ep_set_trfr_type(struct pch_udc_ep *ep,
607 u8 type)
608{
609 pch_udc_ep_writel(ep, ((type << UDC_EPCTL_ET_SHIFT) &
610 UDC_EPCTL_ET_MASK), UDC_EPCTL_ADDR);
611}
612
613/**
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
617 */
618static void pch_udc_ep_set_bufsz(struct pch_udc_ep *ep,
619 u32 buf_size, u32 ep_in)
620{
621 u32 data;
622 if (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);
626 } else {
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);
630 }
631}
632
633/**
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
637 */
638static void pch_udc_ep_set_maxpkt(struct pch_udc_ep *ep, u32 pkt_size)
639{
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);
643}
644
645/**
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
649 */
650static inline void pch_udc_ep_set_subptr(struct pch_udc_ep *ep, u32 addr)
651{
652 pch_udc_ep_writel(ep, addr, UDC_SUBPTR_ADDR);
653}
654
655/**
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
659 */
660static inline void pch_udc_ep_set_ddptr(struct pch_udc_ep *ep, u32 addr)
661{
662 pch_udc_ep_writel(ep, addr, UDC_DESPTR_ADDR);
663}
664
665/**
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
668 */
669static inline void pch_udc_ep_set_pd(struct pch_udc_ep *ep)
670{
671 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_P);
672}
673
674/**
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
677 */
678static inline void pch_udc_ep_set_rrdy(struct pch_udc_ep *ep)
679{
680 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
681}
682
683/**
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
686 */
687static inline void pch_udc_ep_clear_rrdy(struct pch_udc_ep *ep)
688{
689 pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
690}
691
692/**
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
699 */
700static inline void pch_udc_set_dma(struct pch_udc_dev *dev, int dir)
701{
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);
706}
707
708/**
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
715 */
716static inline void pch_udc_clear_dma(struct pch_udc_dev *dev, int dir)
717{
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);
722}
723
724/**
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
728 */
729static inline void pch_udc_set_csr_done(struct pch_udc_dev *dev)
730{
731 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_CSR_DONE);
732}
733
734/**
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
738 */
739static inline void pch_udc_disable_interrupts(struct pch_udc_dev *dev,
740 u32 mask)
741{
742 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, mask);
743}
744
745/**
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
749 */
750static inline void pch_udc_enable_interrupts(struct pch_udc_dev *dev,
751 u32 mask)
752{
753 pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, mask);
754}
755
756/**
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
760 */
761static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev *dev,
762 u32 mask)
763{
764 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, mask);
765}
766
767/**
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
771 */
772static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev *dev,
773 u32 mask)
774{
775 pch_udc_bit_clr(dev, UDC_EPIRQMSK_ADDR, mask);
776}
777
778/**
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
782 */
783static inline u32 pch_udc_read_device_interrupts(struct pch_udc_dev *dev)
784{
785 return pch_udc_readl(dev, UDC_DEVIRQSTS_ADDR);
786}
787
788/**
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
792 */
793static inline void pch_udc_write_device_interrupts(struct pch_udc_dev *dev,
794 u32 val)
795{
796 pch_udc_writel(dev, val, UDC_DEVIRQSTS_ADDR);
797}
798
799/**
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
803 */
804static inline u32 pch_udc_read_ep_interrupts(struct pch_udc_dev *dev)
805{
806 return pch_udc_readl(dev, UDC_EPIRQSTS_ADDR);
807}
808
809/**
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
813 */
814static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev *dev,
815 u32 val)
816{
817 pch_udc_writel(dev, val, UDC_EPIRQSTS_ADDR);
818}
819
820/**
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
824 */
825static inline u32 pch_udc_read_device_status(struct pch_udc_dev *dev)
826{
827 return pch_udc_readl(dev, UDC_DEVSTS_ADDR);
828}
829
830/**
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
834 */
835static inline u32 pch_udc_read_ep_control(struct pch_udc_ep *ep)
836{
837 return pch_udc_ep_readl(ep, UDC_EPCTL_ADDR);
838}
839
840/**
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
844 */
845static inline void pch_udc_clear_ep_control(struct pch_udc_ep *ep)
846{
847 return pch_udc_ep_writel(ep, 0, UDC_EPCTL_ADDR);
848}
849
850/**
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
854 */
855static inline u32 pch_udc_read_ep_status(struct pch_udc_ep *ep)
856{
857 return pch_udc_ep_readl(ep, UDC_EPSTS_ADDR);
858}
859
860/**
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
864 */
865static inline void pch_udc_clear_ep_status(struct pch_udc_ep *ep,
866 u32 stat)
867{
868 return pch_udc_ep_writel(ep, stat, UDC_EPSTS_ADDR);
869}
870
871/**
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
875 */
876static inline void pch_udc_ep_set_nak(struct pch_udc_ep *ep)
877{
878 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_SNAK);
879}
880
881/**
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
885 */
886static void pch_udc_ep_clear_nak(struct pch_udc_ep *ep)
887{
888 unsigned int loopcnt = 0;
889 struct pch_udc_dev *dev = ep->dev;
890
891 if (!(pch_udc_ep_readl(ep, UDC_EPCTL_ADDR) & UDC_EPCTL_NAK))
892 return;
893 if (!ep->in) {
894 loopcnt = 10000;
895 while (!(pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP) &&
896 --loopcnt)
897 udelay(5);
898 if (!loopcnt)
899 dev_err(&dev->pdev->dev, "%s: RxFIFO not Empty\n",
900 __func__);
901 }
902 loopcnt = 10000;
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);
905 udelay(5);
906 }
907 if (!loopcnt)
908 dev_err(&dev->pdev->dev, "%s: Clear NAK not set for ep%d%s\n",
909 __func__, ep->num, (ep->in ? "in" : "out"));
910}
911
912/**
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
916 * 0: endpoint is OUT
917 * !0: endpoint is IN
918 */
919static void pch_udc_ep_fifo_flush(struct pch_udc_ep *ep, int dir)
920{
921 unsigned int loopcnt = 0;
922 struct pch_udc_dev *dev = ep->dev;
923
924 if (dir) { /* IN ep */
925 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
926 return;
927 }
928
929 if (pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP)
930 return;
931 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_MRXFLUSH);
932 /* Wait for RxFIFO Empty */
933 loopcnt = 10000;
934 while (!(pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP) &&
935 --loopcnt)
936 udelay(5);
937 if (!loopcnt)
938 dev_err(&dev->pdev->dev, "RxFIFO not Empty\n");
939 pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_MRXFLUSH);
940}
941
942/**
943 * pch_udc_ep_enable() - This api enables endpoint
944 * @regs: Reference to structure pch_udc_ep_regs
945 * @desc: endpoint descriptor
946 */
947static void pch_udc_ep_enable(struct pch_udc_ep *ep,
948 struct pch_udc_cfg_data *cfg,
949 const struct usb_endpoint_descriptor *desc)
950{
951 u32 val = 0;
952 u32 buff_size = 0;
953
954 pch_udc_ep_set_trfr_type(ep, desc->bmAttributes);
955 if (ep->in)
956 buff_size = UDC_EPIN_BUFF_SIZE;
957 else
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;
971
972 if (ep->in)
973 pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num));
974 else
975 pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num));
976}
977
978/**
979 * pch_udc_ep_disable() - This api disables endpoint
980 * @regs: Reference to structure pch_udc_ep_regs
981 */
982static void pch_udc_ep_disable(struct pch_udc_ep *ep)
983{
984 if (ep->in) {
985 /* flush the fifo */
986 pch_udc_ep_writel(ep, UDC_EPCTL_F, UDC_EPCTL_ADDR);
987 /* set NAK */
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);
990 } else {
991 /* set NAK */
992 pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
993 }
994 /* reset desc pointer */
995 pch_udc_ep_writel(ep, 0, UDC_DESPTR_ADDR);
996}
997
998/**
999 * pch_udc_wait_ep_stall() - Wait EP stall.
1000 * @dev: Reference to pch_udc_dev structure
1001 */
1002static void pch_udc_wait_ep_stall(struct pch_udc_ep *ep)
1003{
1004 unsigned int count = 10000;
1005
1006 /* Wait till idle */
1007 while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_S) && --count)
1008 udelay(5);
1009 if (!count)
1010 dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__);
1011}
1012
1013/**
1014 * pch_udc_init() - This API initializes usb device controller
1015 * @dev: Rreference to pch_udc_regs structure
1016 */
1017static void pch_udc_init(struct pch_udc_dev *dev)
1018{
1019 if (NULL == dev) {
1020 pr_err("%s: Invalid address\n", __func__);
1021 return;
1022 }
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);
1026 mdelay(1);
1027 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1028 pch_udc_writel(dev, 0x00, UDC_SRST_ADDR);
1029 mdelay(1);
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);
1033
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);
1037
1038 /* enable dynamic CSR programmingi, self powered and device speed */
1039 if (speed_fs)
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 |
1049 UDC_DEVCTL_THE);
1050}
1051
1052/**
1053 * pch_udc_exit() - This API exit usb device controller
1054 * @dev: Reference to pch_udc_regs structure
1055 */
1056static void pch_udc_exit(struct pch_udc_dev *dev)
1057{
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);
1064}
1065
1066/**
1067 * pch_udc_pcd_get_frame() - This API is invoked to get the current frame number
1068 * @gadget: Reference to the gadget driver
1069 *
1070 * Return codes:
1071 * 0: Success
1072 * -EINVAL: If the gadget passed is NULL
1073 */
1074static int pch_udc_pcd_get_frame(struct usb_gadget *gadget)
1075{
1076 struct pch_udc_dev *dev;
1077
1078 if (!gadget)
1079 return -EINVAL;
1080 dev = container_of(gadget, struct pch_udc_dev, gadget);
1081 return pch_udc_get_frame(dev);
1082}
1083
1084/**
1085 * pch_udc_pcd_wakeup() - This API is invoked to initiate a remote wakeup
1086 * @gadget: Reference to the gadget driver
1087 *
1088 * Return codes:
1089 * 0: Success
1090 * -EINVAL: If the gadget passed is NULL
1091 */
1092static int pch_udc_pcd_wakeup(struct usb_gadget *gadget)
1093{
1094 struct pch_udc_dev *dev;
1095 unsigned long flags;
1096
1097 if (!gadget)
1098 return -EINVAL;
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);
1103 return 0;
1104}
1105
1106/**
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
1111 *
1112 * Return codes:
1113 * 0: Success
1114 * -EINVAL: If the gadget passed is NULL
1115 */
1116static int pch_udc_pcd_selfpowered(struct usb_gadget *gadget, int value)
1117{
1118 struct pch_udc_dev *dev;
1119
1120 if (!gadget)
1121 return -EINVAL;
1122 dev = container_of(gadget, struct pch_udc_dev, gadget);
1123 if (value)
1124 pch_udc_set_selfpowered(dev);
1125 else
1126 pch_udc_clear_selfpowered(dev);
1127 return 0;
1128}
1129
1130/**
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
1135 *
1136 * Return codes:
1137 * 0: Success
1138 * -EINVAL: If the gadget passed is NULL
1139 */
1140static int pch_udc_pcd_pullup(struct usb_gadget *gadget, int is_on)
1141{
1142 struct pch_udc_dev *dev;
1143
1144 if (!gadget)
1145 return -EINVAL;
1146 dev = container_of(gadget, struct pch_udc_dev, gadget);
1147 pch_udc_vbus_session(dev, is_on);
1148 return 0;
1149}
1150
1151/**
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
1157 *
1158 * Return codes:
1159 * 0: Success
1160 * -EINVAL: If the gadget passed is NULL
1161 */
1162static int pch_udc_pcd_vbus_session(struct usb_gadget *gadget, int is_active)
1163{
1164 struct pch_udc_dev *dev;
1165
1166 if (!gadget)
1167 return -EINVAL;
1168 dev = container_of(gadget, struct pch_udc_dev, gadget);
1169 pch_udc_vbus_session(dev, is_active);
1170 return 0;
1171}
1172
1173/**
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
1179 *
1180 * Return codes:
1181 * -EINVAL: If the gadget passed is NULL
1182 * -EOPNOTSUPP:
1183 */
1184static int pch_udc_pcd_vbus_draw(struct usb_gadget *gadget, unsigned int mA)
1185{
1186 return -EOPNOTSUPP;
1187}
1188
1189static 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,
1196};
1197
1198/**
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
1204 */
1205static void complete_req(struct pch_udc_ep *ep, struct pch_udc_request *req,
1206 int status)
1207{
1208 struct pch_udc_dev *dev;
1209 unsigned halted = ep->halted;
1210
1211 list_del_init(&req->queue);
1212
1213 /* set new status if pending */
1214 if (req->req.status == -EINPROGRESS)
1215 req->req.status = status;
1216 else
1217 status = req->req.status;
1218
1219 dev = ep->dev;
1220 if (req->dma_mapped) {
1221 if (ep->in)
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09001222 dma_unmap_single(&dev->pdev->dev, req->req.dma,
1223 req->req.length, DMA_TO_DEVICE);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001224 else
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09001225 dma_unmap_single(&dev->pdev->dev, req->req.dma,
1226 req->req.length, DMA_FROM_DEVICE);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001227 req->dma_mapped = 0;
1228 req->req.dma = DMA_ADDR_INVALID;
1229 }
1230 ep->halted = 1;
1231 spin_unlock(&dev->lock);
1232 if (!ep->in)
1233 pch_udc_ep_clear_rrdy(ep);
1234 req->req.complete(&ep->ep, &req->req);
1235 spin_lock(&dev->lock);
1236 ep->halted = halted;
1237}
1238
1239/**
1240 * empty_req_queue() - This API empties the request queue of an endpoint
1241 * @ep: Reference to the endpoint structure
1242 */
1243static void empty_req_queue(struct pch_udc_ep *ep)
1244{
1245 struct pch_udc_request *req;
1246
1247 ep->halted = 1;
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 */
1251 }
1252}
1253
1254/**
1255 * pch_udc_free_dma_chain() - This function frees the DMA chain created
1256 * for the request
1257 * @dev Reference to the driver structure
1258 * @req Reference to the request to be freed
1259 *
1260 * Return codes:
1261 * 0: Success
1262 */
1263static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
1264 struct pch_udc_request *req)
1265{
1266 struct pch_udc_data_dma_desc *td = req->td_data;
1267 unsigned i = req->chain_len;
1268
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);
1274 }
1275}
1276
1277/**
1278 * pch_udc_create_dma_chain() - This function creates or reinitializes
1279 * a DMA chain
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
1284 *
1285 * Return codes:
1286 * 0: success,
1287 * -ENOMEM: pci_pool_alloc invocation fails
1288 */
1289static int pch_udc_create_dma_chain(struct pch_udc_ep *ep,
1290 struct pch_udc_request *req,
1291 unsigned long buf_len,
1292 gfp_t gfp_flags)
1293{
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;
1297 unsigned len = 1;
1298
1299 if (req->chain_len > 1)
1300 pch_udc_free_dma_chain(ep->dev, req);
1301
1302 for (; ; bytes -= buf_len, ++len) {
1303 if (ep->in)
1304 td->status = PCH_UDC_BS_HST_BSY | min(buf_len, bytes);
1305 else
1306 td->status = PCH_UDC_BS_HST_BSY;
1307
1308 if (bytes <= buf_len)
1309 break;
1310
1311 last = td;
1312 td = pci_pool_alloc(ep->dev->data_requests, gfp_flags,
1313 &dma_addr);
1314 if (!td)
1315 goto nomem;
1316
1317 i += buf_len;
1318 td->dataptr = req->req.dma + i;
1319 last->next = dma_addr;
1320 }
1321
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;
1326 return 0;
1327
1328nomem:
1329 if (len > 1) {
1330 req->chain_len = len;
1331 pch_udc_free_dma_chain(ep->dev, req);
1332 }
1333 req->chain_len = 1;
1334 return -ENOMEM;
1335}
1336
1337/**
1338 * prepare_dma() - This function creates and initializes the DMA chain
1339 * for the request
1340 * @ep: Reference to the endpoint structure
1341 * @req: Reference to the request
1342 * @gfp: Flag to be used while mapping the data buffer
1343 *
1344 * Return codes:
1345 * 0: Success
1346 * Other 0: linux error number on failure
1347 */
1348static int prepare_dma(struct pch_udc_ep *ep, struct pch_udc_request *req,
1349 gfp_t gfp)
1350{
1351 int retval;
1352
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);
1357 if (retval) {
1358 pr_err("%s: could not create DMA chain: %d\n",
1359 __func__, retval);
1360 return retval;
1361 }
1362 if (!ep->in)
1363 return 0;
1364 if (req->req.length <= ep->ep.maxpacket)
1365 req->td_data->status = PCH_UDC_DMA_LAST | PCH_UDC_BS_HST_BSY |
1366 req->req.length;
1367 /* if bytes < max packet then tx bytes must
1368 * be written in packet per buffer mode
1369 */
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;
1375 return 0;
1376}
1377
1378/**
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
1383 */
1384static void process_zlp(struct pch_udc_ep *ep, struct pch_udc_request *req)
1385{
1386 struct pch_udc_dev *dev = ep->dev;
1387
1388 /* IN zlp's are handled by hardware */
1389 complete_req(ep, req, 0);
1390
1391 /* if set_config or set_intf is waiting for ack by zlp
1392 * then set CSR_DONE
1393 */
1394 if (dev->set_cfg_not_acked) {
1395 pch_udc_set_csr_done(dev);
1396 dev->set_cfg_not_acked = 0;
1397 }
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;
1402 }
1403}
1404
1405/**
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
1409 */
1410static void pch_udc_start_rxrequest(struct pch_udc_ep *ep,
1411 struct pch_udc_request *req)
1412{
1413 struct pch_udc_data_dma_desc *td_data;
1414
1415 pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
1416 td_data = req->td_data;
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001417 /* Set the status bits for all descriptors */
1418 while (1) {
1419 td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
1420 PCH_UDC_BS_HST_RDY;
1421 if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
1422 break;
1423 td_data = phys_to_virt(td_data->next);
1424 }
1425 /* Write the descriptor pointer */
1426 pch_udc_ep_set_ddptr(ep, req->td_data_phys);
1427 req->dma_going = 1;
1428 pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num);
1429 pch_udc_set_dma(ep->dev, DMA_DIR_RX);
1430 pch_udc_ep_clear_nak(ep);
1431 pch_udc_ep_set_rrdy(ep);
1432}
1433
1434/**
1435 * pch_udc_pcd_ep_enable() - This API enables the endpoint. It is called
1436 * from gadget driver
1437 * @usbep: Reference to the USB endpoint structure
1438 * @desc: Reference to the USB endpoint descriptor structure
1439 *
1440 * Return codes:
1441 * 0: Success
1442 * -EINVAL:
1443 * -ESHUTDOWN:
1444 */
1445static int pch_udc_pcd_ep_enable(struct usb_ep *usbep,
1446 const struct usb_endpoint_descriptor *desc)
1447{
1448 struct pch_udc_ep *ep;
1449 struct pch_udc_dev *dev;
1450 unsigned long iflags;
1451
1452 if (!usbep || (usbep->name == ep0_string) || !desc ||
1453 (desc->bDescriptorType != USB_DT_ENDPOINT) || !desc->wMaxPacketSize)
1454 return -EINVAL;
1455
1456 ep = container_of(usbep, struct pch_udc_ep, ep);
1457 dev = ep->dev;
1458 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1459 return -ESHUTDOWN;
1460 spin_lock_irqsave(&dev->lock, iflags);
1461 ep->desc = desc;
1462 ep->halted = 0;
1463 pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc);
1464 ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);
1465 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1466 spin_unlock_irqrestore(&dev->lock, iflags);
1467 return 0;
1468}
1469
1470/**
1471 * pch_udc_pcd_ep_disable() - This API disables endpoint and is called
1472 * from gadget driver
1473 * @usbep Reference to the USB endpoint structure
1474 *
1475 * Return codes:
1476 * 0: Success
1477 * -EINVAL:
1478 */
1479static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
1480{
1481 struct pch_udc_ep *ep;
1482 struct pch_udc_dev *dev;
1483 unsigned long iflags;
1484
1485 if (!usbep)
1486 return -EINVAL;
1487
1488 ep = container_of(usbep, struct pch_udc_ep, ep);
1489 dev = ep->dev;
1490 if ((usbep->name == ep0_string) || !ep->desc)
1491 return -EINVAL;
1492
1493 spin_lock_irqsave(&ep->dev->lock, iflags);
1494 empty_req_queue(ep);
1495 ep->halted = 1;
1496 pch_udc_ep_disable(ep);
1497 pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1498 ep->desc = NULL;
1499 INIT_LIST_HEAD(&ep->queue);
1500 spin_unlock_irqrestore(&ep->dev->lock, iflags);
1501 return 0;
1502}
1503
1504/**
1505 * pch_udc_alloc_request() - This function allocates request structure.
1506 * It is called by gadget driver
1507 * @usbep: Reference to the USB endpoint structure
1508 * @gfp: Flag to be used while allocating memory
1509 *
1510 * Return codes:
1511 * NULL: Failure
1512 * Allocated address: Success
1513 */
1514static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
1515 gfp_t gfp)
1516{
1517 struct pch_udc_request *req;
1518 struct pch_udc_ep *ep;
1519 struct pch_udc_data_dma_desc *dma_desc;
1520 struct pch_udc_dev *dev;
1521
1522 if (!usbep)
1523 return NULL;
1524 ep = container_of(usbep, struct pch_udc_ep, ep);
1525 dev = ep->dev;
1526 req = kzalloc(sizeof *req, gfp);
1527 if (!req)
1528 return NULL;
1529 req->req.dma = DMA_ADDR_INVALID;
1530 INIT_LIST_HEAD(&req->queue);
1531 if (!ep->dev->dma_addr)
1532 return &req->req;
1533 /* ep0 in requests are allocated from data pool here */
1534 dma_desc = pci_pool_alloc(ep->dev->data_requests, gfp,
1535 &req->td_data_phys);
1536 if (NULL == dma_desc) {
1537 kfree(req);
1538 return NULL;
1539 }
1540 /* prevent from using desc. - set HOST BUSY */
1541 dma_desc->status |= PCH_UDC_BS_HST_BSY;
1542 dma_desc->dataptr = __constant_cpu_to_le32(DMA_ADDR_INVALID);
1543 req->td_data = dma_desc;
1544 req->td_data_last = dma_desc;
1545 req->chain_len = 1;
1546 return &req->req;
1547}
1548
1549/**
1550 * pch_udc_free_request() - This function frees request structure.
1551 * It is called by gadget driver
1552 * @usbep: Reference to the USB endpoint structure
1553 * @usbreq: Reference to the USB request
1554 */
1555static void pch_udc_free_request(struct usb_ep *usbep,
1556 struct usb_request *usbreq)
1557{
1558 struct pch_udc_ep *ep;
1559 struct pch_udc_request *req;
1560 struct pch_udc_dev *dev;
1561
1562 if (!usbep || !usbreq)
1563 return;
1564 ep = container_of(usbep, struct pch_udc_ep, ep);
1565 req = container_of(usbreq, struct pch_udc_request, req);
1566 dev = ep->dev;
1567 if (!list_empty(&req->queue))
1568 dev_err(&dev->pdev->dev, "%s: %s req=0x%p queue not empty\n",
1569 __func__, usbep->name, req);
1570 if (req->td_data != NULL) {
1571 if (req->chain_len > 1)
1572 pch_udc_free_dma_chain(ep->dev, req);
1573 pci_pool_free(ep->dev->data_requests, req->td_data,
1574 req->td_data_phys);
1575 }
1576 kfree(req);
1577}
1578
1579/**
1580 * pch_udc_pcd_queue() - This function queues a request packet. It is called
1581 * by gadget driver
1582 * @usbep: Reference to the USB endpoint structure
1583 * @usbreq: Reference to the USB request
1584 * @gfp: Flag to be used while mapping the data buffer
1585 *
1586 * Return codes:
1587 * 0: Success
1588 * linux error number: Failure
1589 */
1590static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
1591 gfp_t gfp)
1592{
1593 int retval = 0;
1594 struct pch_udc_ep *ep;
1595 struct pch_udc_dev *dev;
1596 struct pch_udc_request *req;
1597 unsigned long iflags;
1598
1599 if (!usbep || !usbreq || !usbreq->complete || !usbreq->buf)
1600 return -EINVAL;
1601 ep = container_of(usbep, struct pch_udc_ep, ep);
1602 dev = ep->dev;
1603 if (!ep->desc && ep->num)
1604 return -EINVAL;
1605 req = container_of(usbreq, struct pch_udc_request, req);
1606 if (!list_empty(&req->queue))
1607 return -EINVAL;
1608 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1609 return -ESHUTDOWN;
1610 spin_lock_irqsave(&ep->dev->lock, iflags);
1611 /* map the buffer for dma */
1612 if (usbreq->length &&
1613 ((usbreq->dma == DMA_ADDR_INVALID) || !usbreq->dma)) {
1614 if (ep->in)
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09001615 usbreq->dma = dma_map_single(&dev->pdev->dev,
1616 usbreq->buf,
1617 usbreq->length,
1618 DMA_TO_DEVICE);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001619 else
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09001620 usbreq->dma = dma_map_single(&dev->pdev->dev,
1621 usbreq->buf,
1622 usbreq->length,
1623 DMA_FROM_DEVICE);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001624 req->dma_mapped = 1;
1625 }
1626 if (usbreq->length > 0) {
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09001627 retval = prepare_dma(ep, req, GFP_ATOMIC);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001628 if (retval)
1629 goto probe_end;
1630 }
1631 usbreq->actual = 0;
1632 usbreq->status = -EINPROGRESS;
1633 req->dma_done = 0;
1634 if (list_empty(&ep->queue) && !ep->halted) {
1635 /* no pending transfer, so start this req */
1636 if (!usbreq->length) {
1637 process_zlp(ep, req);
1638 retval = 0;
1639 goto probe_end;
1640 }
1641 if (!ep->in) {
1642 pch_udc_start_rxrequest(ep, req);
1643 } else {
1644 /*
1645 * For IN trfr the descriptors will be programmed and
1646 * P bit will be set when
1647 * we get an IN token
1648 */
1649 pch_udc_wait_ep_stall(ep);
1650 pch_udc_ep_clear_nak(ep);
1651 pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num));
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001652 }
1653 }
1654 /* Now add this request to the ep's pending requests */
1655 if (req != NULL)
1656 list_add_tail(&req->queue, &ep->queue);
1657
1658probe_end:
1659 spin_unlock_irqrestore(&dev->lock, iflags);
1660 return retval;
1661}
1662
1663/**
1664 * pch_udc_pcd_dequeue() - This function de-queues a request packet.
1665 * It is called by gadget driver
1666 * @usbep: Reference to the USB endpoint structure
1667 * @usbreq: Reference to the USB request
1668 *
1669 * Return codes:
1670 * 0: Success
1671 * linux error number: Failure
1672 */
1673static int pch_udc_pcd_dequeue(struct usb_ep *usbep,
1674 struct usb_request *usbreq)
1675{
1676 struct pch_udc_ep *ep;
1677 struct pch_udc_request *req;
1678 struct pch_udc_dev *dev;
1679 unsigned long flags;
1680 int ret = -EINVAL;
1681
1682 ep = container_of(usbep, struct pch_udc_ep, ep);
1683 dev = ep->dev;
1684 if (!usbep || !usbreq || (!ep->desc && ep->num))
1685 return ret;
1686 req = container_of(usbreq, struct pch_udc_request, req);
1687 spin_lock_irqsave(&ep->dev->lock, flags);
1688 /* make sure it's still queued on this endpoint */
1689 list_for_each_entry(req, &ep->queue, queue) {
1690 if (&req->req == usbreq) {
1691 pch_udc_ep_set_nak(ep);
1692 if (!list_empty(&req->queue))
1693 complete_req(ep, req, -ECONNRESET);
1694 ret = 0;
1695 break;
1696 }
1697 }
1698 spin_unlock_irqrestore(&ep->dev->lock, flags);
1699 return ret;
1700}
1701
1702/**
1703 * pch_udc_pcd_set_halt() - This function Sets or clear the endpoint halt
1704 * feature
1705 * @usbep: Reference to the USB endpoint structure
1706 * @halt: Specifies whether to set or clear the feature
1707 *
1708 * Return codes:
1709 * 0: Success
1710 * linux error number: Failure
1711 */
1712static int pch_udc_pcd_set_halt(struct usb_ep *usbep, int halt)
1713{
1714 struct pch_udc_ep *ep;
1715 struct pch_udc_dev *dev;
1716 unsigned long iflags;
1717 int ret;
1718
1719 if (!usbep)
1720 return -EINVAL;
1721 ep = container_of(usbep, struct pch_udc_ep, ep);
1722 dev = ep->dev;
1723 if (!ep->desc && !ep->num)
1724 return -EINVAL;
1725 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1726 return -ESHUTDOWN;
1727 spin_lock_irqsave(&udc_stall_spinlock, iflags);
1728 if (list_empty(&ep->queue)) {
1729 if (halt) {
1730 if (ep->num == PCH_UDC_EP0)
1731 ep->dev->stall = 1;
1732 pch_udc_ep_set_stall(ep);
1733 pch_udc_enable_ep_interrupts(ep->dev,
1734 PCH_UDC_EPINT(ep->in,
1735 ep->num));
1736 } else {
1737 pch_udc_ep_clear_stall(ep);
1738 }
1739 ret = 0;
1740 } else {
1741 ret = -EAGAIN;
1742 }
1743 spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1744 return ret;
1745}
1746
1747/**
1748 * pch_udc_pcd_set_wedge() - This function Sets or clear the endpoint
1749 * halt feature
1750 * @usbep: Reference to the USB endpoint structure
1751 * @halt: Specifies whether to set or clear the feature
1752 *
1753 * Return codes:
1754 * 0: Success
1755 * linux error number: Failure
1756 */
1757static int pch_udc_pcd_set_wedge(struct usb_ep *usbep)
1758{
1759 struct pch_udc_ep *ep;
1760 struct pch_udc_dev *dev;
1761 unsigned long iflags;
1762 int ret;
1763
1764 if (!usbep)
1765 return -EINVAL;
1766 ep = container_of(usbep, struct pch_udc_ep, ep);
1767 dev = ep->dev;
1768 if (!ep->desc && !ep->num)
1769 return -EINVAL;
1770 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1771 return -ESHUTDOWN;
1772 spin_lock_irqsave(&udc_stall_spinlock, iflags);
1773 if (!list_empty(&ep->queue)) {
1774 ret = -EAGAIN;
1775 } else {
1776 if (ep->num == PCH_UDC_EP0)
1777 ep->dev->stall = 1;
1778 pch_udc_ep_set_stall(ep);
1779 pch_udc_enable_ep_interrupts(ep->dev,
1780 PCH_UDC_EPINT(ep->in, ep->num));
1781 ep->dev->prot_stall = 1;
1782 ret = 0;
1783 }
1784 spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1785 return ret;
1786}
1787
1788/**
1789 * pch_udc_pcd_fifo_flush() - This function Flush the FIFO of specified endpoint
1790 * @usbep: Reference to the USB endpoint structure
1791 */
1792static void pch_udc_pcd_fifo_flush(struct usb_ep *usbep)
1793{
1794 struct pch_udc_ep *ep;
1795
1796 if (!usbep)
1797 return;
1798
1799 ep = container_of(usbep, struct pch_udc_ep, ep);
1800 if (ep->desc || !ep->num)
1801 pch_udc_ep_fifo_flush(ep, ep->in);
1802}
1803
1804static const struct usb_ep_ops pch_udc_ep_ops = {
1805 .enable = pch_udc_pcd_ep_enable,
1806 .disable = pch_udc_pcd_ep_disable,
1807 .alloc_request = pch_udc_alloc_request,
1808 .free_request = pch_udc_free_request,
1809 .queue = pch_udc_pcd_queue,
1810 .dequeue = pch_udc_pcd_dequeue,
1811 .set_halt = pch_udc_pcd_set_halt,
1812 .set_wedge = pch_udc_pcd_set_wedge,
1813 .fifo_status = NULL,
1814 .fifo_flush = pch_udc_pcd_fifo_flush,
1815};
1816
1817/**
1818 * pch_udc_init_setup_buff() - This function initializes the SETUP buffer
1819 * @td_stp: Reference to the SETP buffer structure
1820 */
1821static void pch_udc_init_setup_buff(struct pch_udc_stp_dma_desc *td_stp)
1822{
1823 static u32 pky_marker;
1824
1825 if (!td_stp)
1826 return;
1827 td_stp->reserved = ++pky_marker;
1828 memset(&td_stp->request, 0xFF, sizeof td_stp->request);
1829 td_stp->status = PCH_UDC_BS_HST_RDY;
1830}
1831
1832/**
1833 * pch_udc_start_next_txrequest() - This function starts
1834 * the next transmission requirement
1835 * @ep: Reference to the endpoint structure
1836 */
1837static void pch_udc_start_next_txrequest(struct pch_udc_ep *ep)
1838{
1839 struct pch_udc_request *req;
1840 struct pch_udc_data_dma_desc *td_data;
1841
1842 if (pch_udc_read_ep_control(ep) & UDC_EPCTL_P)
1843 return;
1844
1845 if (list_empty(&ep->queue))
1846 return;
1847
1848 /* next request */
1849 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1850 if (req->dma_going)
1851 return;
1852 if (!req->td_data)
1853 return;
1854 pch_udc_wait_ep_stall(ep);
1855 req->dma_going = 1;
1856 pch_udc_ep_set_ddptr(ep, 0);
1857 td_data = req->td_data;
1858 while (1) {
1859 td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
1860 PCH_UDC_BS_HST_RDY;
1861 if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
1862 break;
1863 td_data = phys_to_virt(td_data->next);
1864 }
1865 pch_udc_ep_set_ddptr(ep, req->td_data_phys);
1866 pch_udc_set_dma(ep->dev, DMA_DIR_TX);
1867 pch_udc_ep_set_pd(ep);
1868 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1869 pch_udc_ep_clear_nak(ep);
1870}
1871
1872/**
1873 * pch_udc_complete_transfer() - This function completes a transfer
1874 * @ep: Reference to the endpoint structure
1875 */
1876static void pch_udc_complete_transfer(struct pch_udc_ep *ep)
1877{
1878 struct pch_udc_request *req;
1879 struct pch_udc_dev *dev = ep->dev;
1880
1881 if (list_empty(&ep->queue))
1882 return;
1883 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1884 if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
1885 PCH_UDC_BS_DMA_DONE)
1886 return;
1887 if ((req->td_data_last->status & PCH_UDC_RXTX_STS) !=
1888 PCH_UDC_RTS_SUCC) {
1889 dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) "
1890 "epstatus=0x%08x\n",
1891 (req->td_data_last->status & PCH_UDC_RXTX_STS),
1892 (int)(ep->epsts));
1893 return;
1894 }
1895
1896 req->req.actual = req->req.length;
1897 req->td_data_last->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
1898 req->td_data->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
1899 complete_req(ep, req, 0);
1900 req->dma_going = 0;
1901 if (!list_empty(&ep->queue)) {
1902 pch_udc_wait_ep_stall(ep);
1903 pch_udc_ep_clear_nak(ep);
1904 pch_udc_enable_ep_interrupts(ep->dev,
1905 PCH_UDC_EPINT(ep->in, ep->num));
1906 } else {
1907 pch_udc_disable_ep_interrupts(ep->dev,
1908 PCH_UDC_EPINT(ep->in, ep->num));
1909 }
1910}
1911
1912/**
1913 * pch_udc_complete_receiver() - This function completes a receiver
1914 * @ep: Reference to the endpoint structure
1915 */
1916static void pch_udc_complete_receiver(struct pch_udc_ep *ep)
1917{
1918 struct pch_udc_request *req;
1919 struct pch_udc_dev *dev = ep->dev;
1920 unsigned int count;
1921
1922 if (list_empty(&ep->queue))
1923 return;
1924
1925 /* next request */
1926 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1927 if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
1928 PCH_UDC_BS_DMA_DONE)
1929 return;
1930 pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09001931 pch_udc_ep_set_ddptr(ep, 0);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001932 if ((req->td_data_last->status & PCH_UDC_RXTX_STS) !=
1933 PCH_UDC_RTS_SUCC) {
1934 dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) "
1935 "epstatus=0x%08x\n",
1936 (req->td_data_last->status & PCH_UDC_RXTX_STS),
1937 (int)(ep->epsts));
1938 return;
1939 }
1940 count = req->td_data_last->status & PCH_UDC_RXTX_BYTES;
1941
1942 /* on 64k packets the RXBYTES field is zero */
1943 if (!count && (req->req.length == UDC_DMA_MAXPACKET))
1944 count = UDC_DMA_MAXPACKET;
1945 req->td_data->status |= PCH_UDC_DMA_LAST;
1946 req->td_data_last->status |= PCH_UDC_BS_HST_BSY;
1947
1948 req->dma_going = 0;
1949 req->req.actual = count;
1950 complete_req(ep, req, 0);
1951 /* If there is a new/failed requests try that now */
1952 if (!list_empty(&ep->queue)) {
1953 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1954 pch_udc_start_rxrequest(ep, req);
1955 }
1956}
1957
1958/**
1959 * pch_udc_svc_data_in() - This function process endpoint interrupts
1960 * for IN endpoints
1961 * @dev: Reference to the device structure
1962 * @ep_num: Endpoint that generated the interrupt
1963 */
1964static void pch_udc_svc_data_in(struct pch_udc_dev *dev, int ep_num)
1965{
1966 u32 epsts;
1967 struct pch_udc_ep *ep;
1968
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09001969 ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001970 epsts = ep->epsts;
1971 ep->epsts = 0;
1972
1973 if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
1974 UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
1975 UDC_EPSTS_RSS | UDC_EPSTS_XFERDONE)))
1976 return;
1977 if ((epsts & UDC_EPSTS_BNA))
1978 return;
1979 if (epsts & UDC_EPSTS_HE)
1980 return;
1981 if (epsts & UDC_EPSTS_RSS) {
1982 pch_udc_ep_set_stall(ep);
1983 pch_udc_enable_ep_interrupts(ep->dev,
1984 PCH_UDC_EPINT(ep->in, ep->num));
1985 }
Richard Röjfors49e20832010-12-07 17:28:30 +01001986 if (epsts & UDC_EPSTS_RCS) {
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001987 if (!dev->prot_stall) {
1988 pch_udc_ep_clear_stall(ep);
1989 } else {
1990 pch_udc_ep_set_stall(ep);
1991 pch_udc_enable_ep_interrupts(ep->dev,
1992 PCH_UDC_EPINT(ep->in, ep->num));
1993 }
Richard Röjfors49e20832010-12-07 17:28:30 +01001994 }
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09001995 if (epsts & UDC_EPSTS_TDC)
1996 pch_udc_complete_transfer(ep);
1997 /* On IN interrupt, provide data if we have any */
1998 if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_RSS) &&
1999 !(epsts & UDC_EPSTS_TDC) && !(epsts & UDC_EPSTS_TXEMPTY))
2000 pch_udc_start_next_txrequest(ep);
2001}
2002
2003/**
2004 * pch_udc_svc_data_out() - Handles interrupts from OUT endpoint
2005 * @dev: Reference to the device structure
2006 * @ep_num: Endpoint that generated the interrupt
2007 */
2008static void pch_udc_svc_data_out(struct pch_udc_dev *dev, int ep_num)
2009{
2010 u32 epsts;
2011 struct pch_udc_ep *ep;
2012 struct pch_udc_request *req = NULL;
2013
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002014 ep = &dev->ep[UDC_EPOUT_IDX(ep_num)];
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002015 epsts = ep->epsts;
2016 ep->epsts = 0;
2017
2018 if ((epsts & UDC_EPSTS_BNA) && (!list_empty(&ep->queue))) {
2019 /* next request */
2020 req = list_entry(ep->queue.next, struct pch_udc_request,
2021 queue);
2022 if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
2023 PCH_UDC_BS_DMA_DONE) {
2024 if (!req->dma_going)
2025 pch_udc_start_rxrequest(ep, req);
2026 return;
2027 }
2028 }
2029 if (epsts & UDC_EPSTS_HE)
2030 return;
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002031 if (epsts & UDC_EPSTS_RSS) {
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002032 pch_udc_ep_set_stall(ep);
2033 pch_udc_enable_ep_interrupts(ep->dev,
2034 PCH_UDC_EPINT(ep->in, ep->num));
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002035 }
Richard Röjfors49e20832010-12-07 17:28:30 +01002036 if (epsts & UDC_EPSTS_RCS) {
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002037 if (!dev->prot_stall) {
2038 pch_udc_ep_clear_stall(ep);
2039 } else {
2040 pch_udc_ep_set_stall(ep);
2041 pch_udc_enable_ep_interrupts(ep->dev,
2042 PCH_UDC_EPINT(ep->in, ep->num));
2043 }
Richard Röjfors49e20832010-12-07 17:28:30 +01002044 }
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002045 if (((epsts & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2046 UDC_EPSTS_OUT_DATA) {
2047 if (ep->dev->prot_stall == 1) {
2048 pch_udc_ep_set_stall(ep);
2049 pch_udc_enable_ep_interrupts(ep->dev,
2050 PCH_UDC_EPINT(ep->in, ep->num));
2051 } else {
2052 pch_udc_complete_receiver(ep);
2053 }
2054 }
2055 if (list_empty(&ep->queue))
2056 pch_udc_set_dma(dev, DMA_DIR_RX);
2057}
2058
2059/**
2060 * pch_udc_svc_control_in() - Handle Control IN endpoint interrupts
2061 * @dev: Reference to the device structure
2062 */
2063static void pch_udc_svc_control_in(struct pch_udc_dev *dev)
2064{
2065 u32 epsts;
2066 struct pch_udc_ep *ep;
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002067 struct pch_udc_ep *ep_out;
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002068
2069 ep = &dev->ep[UDC_EP0IN_IDX];
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002070 ep_out = &dev->ep[UDC_EP0OUT_IDX];
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002071 epsts = ep->epsts;
2072 ep->epsts = 0;
2073
2074 if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
2075 UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
2076 UDC_EPSTS_XFERDONE)))
2077 return;
2078 if ((epsts & UDC_EPSTS_BNA))
2079 return;
2080 if (epsts & UDC_EPSTS_HE)
2081 return;
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002082 if ((epsts & UDC_EPSTS_TDC) && (!dev->stall)) {
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002083 pch_udc_complete_transfer(ep);
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002084 pch_udc_clear_dma(dev, DMA_DIR_RX);
2085 ep_out->td_data->status = (ep_out->td_data->status &
2086 ~PCH_UDC_BUFF_STS) |
2087 PCH_UDC_BS_HST_RDY;
2088 pch_udc_ep_clear_nak(ep_out);
2089 pch_udc_set_dma(dev, DMA_DIR_RX);
2090 pch_udc_ep_set_rrdy(ep_out);
2091 }
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002092 /* On IN interrupt, provide data if we have any */
2093 if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_TDC) &&
2094 !(epsts & UDC_EPSTS_TXEMPTY))
2095 pch_udc_start_next_txrequest(ep);
2096}
2097
2098/**
2099 * pch_udc_svc_control_out() - Routine that handle Control
2100 * OUT endpoint interrupts
2101 * @dev: Reference to the device structure
2102 */
2103static void pch_udc_svc_control_out(struct pch_udc_dev *dev)
2104{
2105 u32 stat;
2106 int setup_supported;
2107 struct pch_udc_ep *ep;
2108
2109 ep = &dev->ep[UDC_EP0OUT_IDX];
2110 stat = ep->epsts;
2111 ep->epsts = 0;
2112
2113 /* If setup data */
2114 if (((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2115 UDC_EPSTS_OUT_SETUP) {
2116 dev->stall = 0;
2117 dev->ep[UDC_EP0IN_IDX].halted = 0;
2118 dev->ep[UDC_EP0OUT_IDX].halted = 0;
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002119 dev->setup_data = ep->td_stp->request;
2120 pch_udc_init_setup_buff(ep->td_stp);
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002121 pch_udc_clear_dma(dev, DMA_DIR_RX);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002122 pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]),
2123 dev->ep[UDC_EP0IN_IDX].in);
2124 if ((dev->setup_data.bRequestType & USB_DIR_IN))
2125 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2126 else /* OUT */
2127 dev->gadget.ep0 = &ep->ep;
2128 spin_unlock(&dev->lock);
2129 /* If Mass storage Reset */
2130 if ((dev->setup_data.bRequestType == 0x21) &&
2131 (dev->setup_data.bRequest == 0xFF))
2132 dev->prot_stall = 0;
2133 /* call gadget with setup data received */
2134 setup_supported = dev->driver->setup(&dev->gadget,
2135 &dev->setup_data);
2136 spin_lock(&dev->lock);
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002137
2138 if (dev->setup_data.bRequestType & USB_DIR_IN) {
2139 ep->td_data->status = (ep->td_data->status &
2140 ~PCH_UDC_BUFF_STS) |
2141 PCH_UDC_BS_HST_RDY;
2142 pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2143 }
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002144 /* ep0 in returns data on IN phase */
2145 if (setup_supported >= 0 && setup_supported <
2146 UDC_EP0IN_MAX_PKT_SIZE) {
2147 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
2148 /* Gadget would have queued a request when
2149 * we called the setup */
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002150 if (!(dev->setup_data.bRequestType & USB_DIR_IN)) {
2151 pch_udc_set_dma(dev, DMA_DIR_RX);
2152 pch_udc_ep_clear_nak(ep);
2153 }
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002154 } else if (setup_supported < 0) {
2155 /* if unsupported request, then stall */
2156 pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX]));
2157 pch_udc_enable_ep_interrupts(ep->dev,
2158 PCH_UDC_EPINT(ep->in, ep->num));
2159 dev->stall = 0;
2160 pch_udc_set_dma(dev, DMA_DIR_RX);
2161 } else {
2162 dev->waiting_zlp_ack = 1;
2163 }
2164 } else if ((((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2165 UDC_EPSTS_OUT_DATA) && !dev->stall) {
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002166 pch_udc_clear_dma(dev, DMA_DIR_RX);
2167 pch_udc_ep_set_ddptr(ep, 0);
2168 if (!list_empty(&ep->queue)) {
Richard Röjforsff176a42010-12-07 17:28:33 +01002169 ep->epsts = stat;
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002170 pch_udc_svc_data_out(dev, PCH_UDC_EP0);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002171 }
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002172 pch_udc_set_dma(dev, DMA_DIR_RX);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002173 }
2174 pch_udc_ep_set_rrdy(ep);
2175}
2176
2177
2178/**
2179 * pch_udc_postsvc_epinters() - This function enables end point interrupts
2180 * and clears NAK status
2181 * @dev: Reference to the device structure
2182 * @ep_num: End point number
2183 */
2184static void pch_udc_postsvc_epinters(struct pch_udc_dev *dev, int ep_num)
2185{
2186 struct pch_udc_ep *ep;
2187 struct pch_udc_request *req;
2188
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002189 ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002190 if (!list_empty(&ep->queue)) {
2191 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2192 pch_udc_enable_ep_interrupts(ep->dev,
2193 PCH_UDC_EPINT(ep->in, ep->num));
2194 pch_udc_ep_clear_nak(ep);
2195 }
2196}
2197
2198/**
2199 * pch_udc_read_all_epstatus() - This function read all endpoint status
2200 * @dev: Reference to the device structure
2201 * @ep_intr: Status of endpoint interrupt
2202 */
2203static void pch_udc_read_all_epstatus(struct pch_udc_dev *dev, u32 ep_intr)
2204{
2205 int i;
2206 struct pch_udc_ep *ep;
2207
2208 for (i = 0; i < PCH_UDC_USED_EP_NUM; i++) {
2209 /* IN */
2210 if (ep_intr & (0x1 << i)) {
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002211 ep = &dev->ep[UDC_EPIN_IDX(i)];
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002212 ep->epsts = pch_udc_read_ep_status(ep);
2213 pch_udc_clear_ep_status(ep, ep->epsts);
2214 }
2215 /* OUT */
2216 if (ep_intr & (0x10000 << i)) {
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002217 ep = &dev->ep[UDC_EPOUT_IDX(i)];
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002218 ep->epsts = pch_udc_read_ep_status(ep);
2219 pch_udc_clear_ep_status(ep, ep->epsts);
2220 }
2221 }
2222}
2223
2224/**
2225 * pch_udc_activate_control_ep() - This function enables the control endpoints
2226 * for traffic after a reset
2227 * @dev: Reference to the device structure
2228 */
2229static void pch_udc_activate_control_ep(struct pch_udc_dev *dev)
2230{
2231 struct pch_udc_ep *ep;
2232 u32 val;
2233
2234 /* Setup the IN endpoint */
2235 ep = &dev->ep[UDC_EP0IN_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_EP0IN_BUFF_SIZE, ep->in);
2239 pch_udc_ep_set_maxpkt(ep, UDC_EP0IN_MAX_PKT_SIZE);
2240 /* Initialize the IN EP Descriptor */
2241 ep->td_data = NULL;
2242 ep->td_stp = NULL;
2243 ep->td_data_phys = 0;
2244 ep->td_stp_phys = 0;
2245
2246 /* Setup the OUT endpoint */
2247 ep = &dev->ep[UDC_EP0OUT_IDX];
2248 pch_udc_clear_ep_control(ep);
2249 pch_udc_ep_fifo_flush(ep, ep->in);
2250 pch_udc_ep_set_bufsz(ep, UDC_EP0OUT_BUFF_SIZE, ep->in);
2251 pch_udc_ep_set_maxpkt(ep, UDC_EP0OUT_MAX_PKT_SIZE);
2252 val = UDC_EP0OUT_MAX_PKT_SIZE << UDC_CSR_NE_MAX_PKT_SHIFT;
2253 pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX);
2254
2255 /* Initialize the SETUP buffer */
2256 pch_udc_init_setup_buff(ep->td_stp);
2257 /* Write the pointer address of dma descriptor */
2258 pch_udc_ep_set_subptr(ep, ep->td_stp_phys);
2259 /* Write the pointer address of Setup descriptor */
2260 pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2261
2262 /* Initialize the dma descriptor */
2263 ep->td_data->status = PCH_UDC_DMA_LAST;
2264 ep->td_data->dataptr = dev->dma_addr;
2265 ep->td_data->next = ep->td_data_phys;
2266
2267 pch_udc_ep_clear_nak(ep);
2268}
2269
2270
2271/**
2272 * pch_udc_svc_ur_interrupt() - This function handles a USB reset interrupt
2273 * @dev: Reference to driver structure
2274 */
2275static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
2276{
2277 struct pch_udc_ep *ep;
2278 int i;
2279
2280 pch_udc_clear_dma(dev, DMA_DIR_TX);
2281 pch_udc_clear_dma(dev, DMA_DIR_RX);
2282 /* Mask all endpoint interrupts */
2283 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2284 /* clear all endpoint interrupts */
2285 pch_udc_write_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2286
2287 for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2288 ep = &dev->ep[i];
2289 pch_udc_clear_ep_status(ep, UDC_EPSTS_ALL_CLR_MASK);
2290 pch_udc_clear_ep_control(ep);
2291 pch_udc_ep_set_ddptr(ep, 0);
2292 pch_udc_write_csr(ep->dev, 0x00, i);
2293 }
2294 dev->stall = 0;
2295 dev->prot_stall = 0;
2296 dev->waiting_zlp_ack = 0;
2297 dev->set_cfg_not_acked = 0;
2298
2299 /* disable ep to empty req queue. Skip the control EP's */
2300 for (i = 0; i < (PCH_UDC_USED_EP_NUM*2); i++) {
2301 ep = &dev->ep[i];
2302 pch_udc_ep_set_nak(ep);
2303 pch_udc_ep_fifo_flush(ep, ep->in);
2304 /* Complete request queue */
2305 empty_req_queue(ep);
2306 }
2307 if (dev->driver && dev->driver->disconnect)
2308 dev->driver->disconnect(&dev->gadget);
2309}
2310
2311/**
2312 * pch_udc_svc_enum_interrupt() - This function handles a USB speed enumeration
2313 * done interrupt
2314 * @dev: Reference to driver structure
2315 */
2316static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev)
2317{
2318 u32 dev_stat, dev_speed;
2319 u32 speed = USB_SPEED_FULL;
2320
2321 dev_stat = pch_udc_read_device_status(dev);
2322 dev_speed = (dev_stat & UDC_DEVSTS_ENUM_SPEED_MASK) >>
2323 UDC_DEVSTS_ENUM_SPEED_SHIFT;
2324 switch (dev_speed) {
2325 case UDC_DEVSTS_ENUM_SPEED_HIGH:
2326 speed = USB_SPEED_HIGH;
2327 break;
2328 case UDC_DEVSTS_ENUM_SPEED_FULL:
2329 speed = USB_SPEED_FULL;
2330 break;
2331 case UDC_DEVSTS_ENUM_SPEED_LOW:
2332 speed = USB_SPEED_LOW;
2333 break;
2334 default:
2335 BUG();
2336 }
2337 dev->gadget.speed = speed;
2338 pch_udc_activate_control_ep(dev);
2339 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | UDC_EPINT_OUT_EP0);
2340 pch_udc_set_dma(dev, DMA_DIR_TX);
2341 pch_udc_set_dma(dev, DMA_DIR_RX);
2342 pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX]));
2343}
2344
2345/**
2346 * pch_udc_svc_intf_interrupt() - This function handles a set interface
2347 * interrupt
2348 * @dev: Reference to driver structure
2349 */
2350static void pch_udc_svc_intf_interrupt(struct pch_udc_dev *dev)
2351{
2352 u32 reg, dev_stat = 0;
2353 int i, ret;
2354
2355 dev_stat = pch_udc_read_device_status(dev);
2356 dev->cfg_data.cur_intf = (dev_stat & UDC_DEVSTS_INTF_MASK) >>
2357 UDC_DEVSTS_INTF_SHIFT;
2358 dev->cfg_data.cur_alt = (dev_stat & UDC_DEVSTS_ALT_MASK) >>
2359 UDC_DEVSTS_ALT_SHIFT;
2360 dev->set_cfg_not_acked = 1;
2361 /* Construct the usb request for gadget driver and inform it */
2362 memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2363 dev->setup_data.bRequest = USB_REQ_SET_INTERFACE;
2364 dev->setup_data.bRequestType = USB_RECIP_INTERFACE;
2365 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_alt);
2366 dev->setup_data.wIndex = cpu_to_le16(dev->cfg_data.cur_intf);
2367 /* programm the Endpoint Cfg registers */
2368 /* Only one end point cfg register */
2369 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2370 reg = (reg & ~UDC_CSR_NE_INTF_MASK) |
2371 (dev->cfg_data.cur_intf << UDC_CSR_NE_INTF_SHIFT);
2372 reg = (reg & ~UDC_CSR_NE_ALT_MASK) |
2373 (dev->cfg_data.cur_alt << UDC_CSR_NE_ALT_SHIFT);
2374 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2375 for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2376 /* clear stall bits */
2377 pch_udc_ep_clear_stall(&(dev->ep[i]));
2378 dev->ep[i].halted = 0;
2379 }
2380 dev->stall = 0;
2381 spin_unlock(&dev->lock);
2382 ret = dev->driver->setup(&dev->gadget, &dev->setup_data);
2383 spin_lock(&dev->lock);
2384}
2385
2386/**
2387 * pch_udc_svc_cfg_interrupt() - This function handles a set configuration
2388 * interrupt
2389 * @dev: Reference to driver structure
2390 */
2391static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev *dev)
2392{
2393 int i, ret;
2394 u32 reg, dev_stat = 0;
2395
2396 dev_stat = pch_udc_read_device_status(dev);
2397 dev->set_cfg_not_acked = 1;
2398 dev->cfg_data.cur_cfg = (dev_stat & UDC_DEVSTS_CFG_MASK) >>
2399 UDC_DEVSTS_CFG_SHIFT;
2400 /* make usb request for gadget driver */
2401 memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2402 dev->setup_data.bRequest = USB_REQ_SET_CONFIGURATION;
2403 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_cfg);
2404 /* program the NE registers */
2405 /* Only one end point cfg register */
2406 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2407 reg = (reg & ~UDC_CSR_NE_CFG_MASK) |
2408 (dev->cfg_data.cur_cfg << UDC_CSR_NE_CFG_SHIFT);
2409 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2410 for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2411 /* clear stall bits */
2412 pch_udc_ep_clear_stall(&(dev->ep[i]));
2413 dev->ep[i].halted = 0;
2414 }
2415 dev->stall = 0;
2416
2417 /* call gadget zero with setup data received */
2418 spin_unlock(&dev->lock);
2419 ret = dev->driver->setup(&dev->gadget, &dev->setup_data);
2420 spin_lock(&dev->lock);
2421}
2422
2423/**
2424 * pch_udc_dev_isr() - This function services device interrupts
2425 * by invoking appropriate routines.
2426 * @dev: Reference to the device structure
2427 * @dev_intr: The Device interrupt status.
2428 */
2429static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr)
2430{
2431 /* USB Reset Interrupt */
2432 if (dev_intr & UDC_DEVINT_UR)
2433 pch_udc_svc_ur_interrupt(dev);
2434 /* Enumeration Done Interrupt */
2435 if (dev_intr & UDC_DEVINT_ENUM)
2436 pch_udc_svc_enum_interrupt(dev);
2437 /* Set Interface Interrupt */
2438 if (dev_intr & UDC_DEVINT_SI)
2439 pch_udc_svc_intf_interrupt(dev);
2440 /* Set Config Interrupt */
2441 if (dev_intr & UDC_DEVINT_SC)
2442 pch_udc_svc_cfg_interrupt(dev);
2443 /* USB Suspend interrupt */
2444 if (dev_intr & UDC_DEVINT_US)
2445 dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n");
2446 /* Clear the SOF interrupt, if enabled */
2447 if (dev_intr & UDC_DEVINT_SOF)
2448 dev_dbg(&dev->pdev->dev, "SOF\n");
2449 /* ES interrupt, IDLE > 3ms on the USB */
2450 if (dev_intr & UDC_DEVINT_ES)
2451 dev_dbg(&dev->pdev->dev, "ES\n");
2452 /* RWKP interrupt */
2453 if (dev_intr & UDC_DEVINT_RWKP)
2454 dev_dbg(&dev->pdev->dev, "RWKP\n");
2455}
2456
2457/**
2458 * pch_udc_isr() - This function handles interrupts from the PCH USB Device
2459 * @irq: Interrupt request number
2460 * @dev: Reference to the device structure
2461 */
2462static irqreturn_t pch_udc_isr(int irq, void *pdev)
2463{
2464 struct pch_udc_dev *dev = (struct pch_udc_dev *) pdev;
2465 u32 dev_intr, ep_intr;
2466 int i;
2467
2468 dev_intr = pch_udc_read_device_interrupts(dev);
2469 ep_intr = pch_udc_read_ep_interrupts(dev);
2470
2471 if (dev_intr)
2472 /* Clear device interrupts */
2473 pch_udc_write_device_interrupts(dev, dev_intr);
2474 if (ep_intr)
2475 /* Clear ep interrupts */
2476 pch_udc_write_ep_interrupts(dev, ep_intr);
2477 if (!dev_intr && !ep_intr)
2478 return IRQ_NONE;
2479 spin_lock(&dev->lock);
2480 if (dev_intr)
2481 pch_udc_dev_isr(dev, dev_intr);
2482 if (ep_intr) {
2483 pch_udc_read_all_epstatus(dev, ep_intr);
2484 /* Process Control In interrupts, if present */
2485 if (ep_intr & UDC_EPINT_IN_EP0) {
2486 pch_udc_svc_control_in(dev);
2487 pch_udc_postsvc_epinters(dev, 0);
2488 }
2489 /* Process Control Out interrupts, if present */
2490 if (ep_intr & UDC_EPINT_OUT_EP0)
2491 pch_udc_svc_control_out(dev);
2492 /* Process data in end point interrupts */
2493 for (i = 1; i < PCH_UDC_USED_EP_NUM; i++) {
2494 if (ep_intr & (1 << i)) {
2495 pch_udc_svc_data_in(dev, i);
2496 pch_udc_postsvc_epinters(dev, i);
2497 }
2498 }
2499 /* Process data out end point interrupts */
2500 for (i = UDC_EPINT_OUT_SHIFT + 1; i < (UDC_EPINT_OUT_SHIFT +
2501 PCH_UDC_USED_EP_NUM); i++)
2502 if (ep_intr & (1 << i))
2503 pch_udc_svc_data_out(dev, i -
2504 UDC_EPINT_OUT_SHIFT);
2505 }
2506 spin_unlock(&dev->lock);
2507 return IRQ_HANDLED;
2508}
2509
2510/**
2511 * pch_udc_setup_ep0() - This function enables control endpoint for traffic
2512 * @dev: Reference to the device structure
2513 */
2514static void pch_udc_setup_ep0(struct pch_udc_dev *dev)
2515{
2516 /* enable ep0 interrupts */
2517 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 |
2518 UDC_EPINT_OUT_EP0);
2519 /* enable device interrupts */
2520 pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2521 UDC_DEVINT_ES | UDC_DEVINT_ENUM |
2522 UDC_DEVINT_SI | UDC_DEVINT_SC);
2523}
2524
2525/**
2526 * gadget_release() - Free the gadget driver private data
2527 * @pdev reference to struct pci_dev
2528 */
2529static void gadget_release(struct device *pdev)
2530{
2531 struct pch_udc_dev *dev = dev_get_drvdata(pdev);
2532
2533 kfree(dev);
2534}
2535
2536/**
2537 * pch_udc_pcd_reinit() - This API initializes the endpoint structures
2538 * @dev: Reference to the driver structure
2539 */
2540static void pch_udc_pcd_reinit(struct pch_udc_dev *dev)
2541{
2542 const char *const ep_string[] = {
2543 ep0_string, "ep0out", "ep1in", "ep1out", "ep2in", "ep2out",
2544 "ep3in", "ep3out", "ep4in", "ep4out", "ep5in", "ep5out",
2545 "ep6in", "ep6out", "ep7in", "ep7out", "ep8in", "ep8out",
2546 "ep9in", "ep9out", "ep10in", "ep10out", "ep11in", "ep11out",
2547 "ep12in", "ep12out", "ep13in", "ep13out", "ep14in", "ep14out",
2548 "ep15in", "ep15out",
2549 };
2550 int i;
2551
2552 dev->gadget.speed = USB_SPEED_UNKNOWN;
2553 INIT_LIST_HEAD(&dev->gadget.ep_list);
2554
2555 /* Initialize the endpoints structures */
2556 memset(dev->ep, 0, sizeof dev->ep);
2557 for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2558 struct pch_udc_ep *ep = &dev->ep[i];
2559 ep->dev = dev;
2560 ep->halted = 1;
2561 ep->num = i / 2;
2562 ep->in = ~i & 1;
2563 ep->ep.name = ep_string[i];
2564 ep->ep.ops = &pch_udc_ep_ops;
2565 if (ep->in)
2566 ep->offset_addr = ep->num * UDC_EP_REG_SHIFT;
2567 else
2568 ep->offset_addr = (UDC_EPINT_OUT_SHIFT + ep->num) *
2569 UDC_EP_REG_SHIFT;
2570 /* need to set ep->ep.maxpacket and set Default Configuration?*/
2571 ep->ep.maxpacket = UDC_BULK_MAX_PKT_SIZE;
2572 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
2573 INIT_LIST_HEAD(&ep->queue);
2574 }
2575 dev->ep[UDC_EP0IN_IDX].ep.maxpacket = UDC_EP0IN_MAX_PKT_SIZE;
2576 dev->ep[UDC_EP0OUT_IDX].ep.maxpacket = UDC_EP0OUT_MAX_PKT_SIZE;
2577
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002578 /* remove ep0 in and out from the list. They have own pointer */
2579 list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list);
2580 list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list);
2581
2582 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2583 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
2584}
2585
2586/**
2587 * pch_udc_pcd_init() - This API initializes the driver structure
2588 * @dev: Reference to the driver structure
2589 *
2590 * Return codes:
2591 * 0: Success
2592 */
2593static int pch_udc_pcd_init(struct pch_udc_dev *dev)
2594{
2595 pch_udc_init(dev);
2596 pch_udc_pcd_reinit(dev);
2597 return 0;
2598}
2599
2600/**
2601 * init_dma_pools() - create dma pools during initialization
2602 * @pdev: reference to struct pci_dev
2603 */
2604static int init_dma_pools(struct pch_udc_dev *dev)
2605{
2606 struct pch_udc_stp_dma_desc *td_stp;
2607 struct pch_udc_data_dma_desc *td_data;
2608
2609 /* DMA setup */
2610 dev->data_requests = pci_pool_create("data_requests", dev->pdev,
2611 sizeof(struct pch_udc_data_dma_desc), 0, 0);
2612 if (!dev->data_requests) {
2613 dev_err(&dev->pdev->dev, "%s: can't get request data pool\n",
2614 __func__);
2615 return -ENOMEM;
2616 }
2617
2618 /* dma desc for setup data */
2619 dev->stp_requests = pci_pool_create("setup requests", dev->pdev,
2620 sizeof(struct pch_udc_stp_dma_desc), 0, 0);
2621 if (!dev->stp_requests) {
2622 dev_err(&dev->pdev->dev, "%s: can't get setup request pool\n",
2623 __func__);
2624 return -ENOMEM;
2625 }
2626 /* setup */
2627 td_stp = pci_pool_alloc(dev->stp_requests, GFP_KERNEL,
2628 &dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
2629 if (!td_stp) {
2630 dev_err(&dev->pdev->dev,
2631 "%s: can't allocate setup dma descriptor\n", __func__);
2632 return -ENOMEM;
2633 }
2634 dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp;
2635
2636 /* data: 0 packets !? */
2637 td_data = pci_pool_alloc(dev->data_requests, GFP_KERNEL,
2638 &dev->ep[UDC_EP0OUT_IDX].td_data_phys);
2639 if (!td_data) {
2640 dev_err(&dev->pdev->dev,
2641 "%s: can't allocate data dma descriptor\n", __func__);
2642 return -ENOMEM;
2643 }
2644 dev->ep[UDC_EP0OUT_IDX].td_data = td_data;
2645 dev->ep[UDC_EP0IN_IDX].td_stp = NULL;
2646 dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0;
2647 dev->ep[UDC_EP0IN_IDX].td_data = NULL;
2648 dev->ep[UDC_EP0IN_IDX].td_data_phys = 0;
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002649
2650 dev->ep0out_buf = kzalloc(UDC_EP0OUT_BUFF_SIZE * 4, GFP_KERNEL);
2651 if (!dev->ep0out_buf)
2652 return -ENOMEM;
2653 dev->dma_addr = dma_map_single(&dev->pdev->dev, dev->ep0out_buf,
2654 UDC_EP0OUT_BUFF_SIZE * 4,
2655 DMA_FROM_DEVICE);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002656 return 0;
2657}
2658
Richard Röjfors49e20832010-12-07 17:28:30 +01002659int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
2660 int (*bind)(struct usb_gadget *))
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002661{
2662 struct pch_udc_dev *dev = pch_udc;
2663 int retval;
2664
Richard Röjfors49e20832010-12-07 17:28:30 +01002665 if (!driver || (driver->speed == USB_SPEED_UNKNOWN) || !bind ||
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002666 !driver->setup || !driver->unbind || !driver->disconnect) {
2667 dev_err(&dev->pdev->dev,
2668 "%s: invalid driver parameter\n", __func__);
2669 return -EINVAL;
2670 }
2671
2672 if (!dev)
2673 return -ENODEV;
2674
2675 if (dev->driver) {
2676 dev_err(&dev->pdev->dev, "%s: already bound\n", __func__);
2677 return -EBUSY;
2678 }
2679 driver->driver.bus = NULL;
2680 dev->driver = driver;
2681 dev->gadget.dev.driver = &driver->driver;
2682
2683 /* Invoke the bind routine of the gadget driver */
Richard Röjfors49e20832010-12-07 17:28:30 +01002684 retval = bind(&dev->gadget);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002685
2686 if (retval) {
2687 dev_err(&dev->pdev->dev, "%s: binding to %s returning %d\n",
2688 __func__, driver->driver.name, retval);
2689 dev->driver = NULL;
2690 dev->gadget.dev.driver = NULL;
2691 return retval;
2692 }
2693 /* get ready for ep0 traffic */
2694 pch_udc_setup_ep0(dev);
2695
2696 /* clear SD */
2697 pch_udc_clear_disconnect(dev);
2698
2699 dev->connected = 1;
2700 return 0;
2701}
Richard Röjfors49e20832010-12-07 17:28:30 +01002702EXPORT_SYMBOL(usb_gadget_probe_driver);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002703
2704int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
2705{
2706 struct pch_udc_dev *dev = pch_udc;
2707
2708 if (!dev)
2709 return -ENODEV;
2710
2711 if (!driver || (driver != dev->driver)) {
2712 dev_err(&dev->pdev->dev,
2713 "%s: invalid driver parameter\n", __func__);
2714 return -EINVAL;
2715 }
2716
2717 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2718
2719 /* Assues that there are no pending requets with this driver */
2720 driver->unbind(&dev->gadget);
2721 dev->gadget.dev.driver = NULL;
2722 dev->driver = NULL;
2723 dev->connected = 0;
2724
2725 /* set SD */
2726 pch_udc_set_disconnect(dev);
2727 return 0;
2728}
2729EXPORT_SYMBOL(usb_gadget_unregister_driver);
2730
2731static void pch_udc_shutdown(struct pci_dev *pdev)
2732{
2733 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2734
2735 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2736 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2737
2738 /* disable the pullup so the host will think we're gone */
2739 pch_udc_set_disconnect(dev);
2740}
2741
2742static void pch_udc_remove(struct pci_dev *pdev)
2743{
2744 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2745
2746 /* gadget driver must not be registered */
2747 if (dev->driver)
2748 dev_err(&pdev->dev,
2749 "%s: gadget driver still bound!!!\n", __func__);
2750 /* dma pool cleanup */
2751 if (dev->data_requests)
2752 pci_pool_destroy(dev->data_requests);
2753
2754 if (dev->stp_requests) {
2755 /* cleanup DMA desc's for ep0in */
2756 if (dev->ep[UDC_EP0OUT_IDX].td_stp) {
2757 pci_pool_free(dev->stp_requests,
2758 dev->ep[UDC_EP0OUT_IDX].td_stp,
2759 dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
2760 }
2761 if (dev->ep[UDC_EP0OUT_IDX].td_data) {
2762 pci_pool_free(dev->stp_requests,
2763 dev->ep[UDC_EP0OUT_IDX].td_data,
2764 dev->ep[UDC_EP0OUT_IDX].td_data_phys);
2765 }
2766 pci_pool_destroy(dev->stp_requests);
2767 }
2768
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002769 if (dev->dma_addr)
2770 dma_unmap_single(&dev->pdev->dev, dev->dma_addr,
2771 UDC_EP0OUT_BUFF_SIZE * 4, DMA_FROM_DEVICE);
2772 kfree(dev->ep0out_buf);
2773
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002774 pch_udc_exit(dev);
2775
2776 if (dev->irq_registered)
2777 free_irq(pdev->irq, dev);
2778 if (dev->base_addr)
2779 iounmap(dev->base_addr);
2780 if (dev->mem_region)
2781 release_mem_region(dev->phys_addr,
2782 pci_resource_len(pdev, PCH_UDC_PCI_BAR));
2783 if (dev->active)
2784 pci_disable_device(pdev);
2785 if (dev->registered)
2786 device_unregister(&dev->gadget.dev);
2787 kfree(dev);
2788 pci_set_drvdata(pdev, NULL);
2789}
2790
2791#ifdef CONFIG_PM
2792static int pch_udc_suspend(struct pci_dev *pdev, pm_message_t state)
2793{
2794 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2795
2796 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2797 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2798
2799 pci_disable_device(pdev);
2800 pci_enable_wake(pdev, PCI_D3hot, 0);
2801
2802 if (pci_save_state(pdev)) {
2803 dev_err(&pdev->dev,
2804 "%s: could not save PCI config state\n", __func__);
2805 return -ENOMEM;
2806 }
2807 pci_set_power_state(pdev, pci_choose_state(pdev, state));
2808 return 0;
2809}
2810
2811static int pch_udc_resume(struct pci_dev *pdev)
2812{
2813 int ret;
2814
2815 pci_set_power_state(pdev, PCI_D0);
Toshiharu Okadaabab0c62010-12-29 10:07:33 +09002816 pci_restore_state(pdev);
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002817 ret = pci_enable_device(pdev);
2818 if (ret) {
2819 dev_err(&pdev->dev, "%s: pci_enable_device failed\n", __func__);
2820 return ret;
2821 }
2822 pci_enable_wake(pdev, PCI_D3hot, 0);
2823 return 0;
2824}
2825#else
2826#define pch_udc_suspend NULL
2827#define pch_udc_resume NULL
2828#endif /* CONFIG_PM */
2829
2830static int pch_udc_probe(struct pci_dev *pdev,
2831 const struct pci_device_id *id)
2832{
2833 unsigned long resource;
2834 unsigned long len;
2835 int retval;
2836 struct pch_udc_dev *dev;
2837
2838 /* one udc only */
2839 if (pch_udc) {
2840 pr_err("%s: already probed\n", __func__);
2841 return -EBUSY;
2842 }
2843 /* init */
2844 dev = kzalloc(sizeof *dev, GFP_KERNEL);
2845 if (!dev) {
2846 pr_err("%s: no memory for device structure\n", __func__);
2847 return -ENOMEM;
2848 }
2849 /* pci setup */
2850 if (pci_enable_device(pdev) < 0) {
2851 kfree(dev);
2852 pr_err("%s: pci_enable_device failed\n", __func__);
2853 return -ENODEV;
2854 }
2855 dev->active = 1;
2856 pci_set_drvdata(pdev, dev);
2857
2858 /* PCI resource allocation */
2859 resource = pci_resource_start(pdev, 1);
2860 len = pci_resource_len(pdev, 1);
2861
2862 if (!request_mem_region(resource, len, KBUILD_MODNAME)) {
2863 dev_err(&pdev->dev, "%s: pci device used already\n", __func__);
2864 retval = -EBUSY;
2865 goto finished;
2866 }
2867 dev->phys_addr = resource;
2868 dev->mem_region = 1;
2869
2870 dev->base_addr = ioremap_nocache(resource, len);
2871 if (!dev->base_addr) {
2872 pr_err("%s: device memory cannot be mapped\n", __func__);
2873 retval = -ENOMEM;
2874 goto finished;
2875 }
2876 if (!pdev->irq) {
2877 dev_err(&pdev->dev, "%s: irq not set\n", __func__);
2878 retval = -ENODEV;
2879 goto finished;
2880 }
2881 pch_udc = dev;
2882 /* initialize the hardware */
2883 if (pch_udc_pcd_init(dev))
2884 goto finished;
2885 if (request_irq(pdev->irq, pch_udc_isr, IRQF_SHARED, KBUILD_MODNAME,
2886 dev)) {
2887 dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__,
2888 pdev->irq);
2889 retval = -ENODEV;
2890 goto finished;
2891 }
2892 dev->irq = pdev->irq;
2893 dev->irq_registered = 1;
2894
2895 pci_set_master(pdev);
2896 pci_try_set_mwi(pdev);
2897
2898 /* device struct setup */
2899 spin_lock_init(&dev->lock);
2900 dev->pdev = pdev;
2901 dev->gadget.ops = &pch_udc_ops;
2902
2903 retval = init_dma_pools(dev);
2904 if (retval)
2905 goto finished;
2906
2907 dev_set_name(&dev->gadget.dev, "gadget");
2908 dev->gadget.dev.parent = &pdev->dev;
2909 dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
2910 dev->gadget.dev.release = gadget_release;
2911 dev->gadget.name = KBUILD_MODNAME;
2912 dev->gadget.is_dualspeed = 1;
2913
2914 retval = device_register(&dev->gadget.dev);
2915 if (retval)
2916 goto finished;
2917 dev->registered = 1;
2918
2919 /* Put the device in disconnected state till a driver is bound */
2920 pch_udc_set_disconnect(dev);
2921 return 0;
2922
2923finished:
2924 pch_udc_remove(pdev);
2925 return retval;
2926}
2927
Richard Röjfors49e20832010-12-07 17:28:30 +01002928static DEFINE_PCI_DEVICE_TABLE(pch_udc_pcidev_id) = {
Toshiharu Okadaf646cf92010-11-11 18:27:57 +09002929 {
2930 PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC),
2931 .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
2932 .class_mask = 0xffffffff,
2933 },
2934 { 0 },
2935};
2936
2937MODULE_DEVICE_TABLE(pci, pch_udc_pcidev_id);
2938
2939
2940static struct pci_driver pch_udc_driver = {
2941 .name = KBUILD_MODNAME,
2942 .id_table = pch_udc_pcidev_id,
2943 .probe = pch_udc_probe,
2944 .remove = pch_udc_remove,
2945 .suspend = pch_udc_suspend,
2946 .resume = pch_udc_resume,
2947 .shutdown = pch_udc_shutdown,
2948};
2949
2950static int __init pch_udc_pci_init(void)
2951{
2952 return pci_register_driver(&pch_udc_driver);
2953}
2954module_init(pch_udc_pci_init);
2955
2956static void __exit pch_udc_pci_exit(void)
2957{
2958 pci_unregister_driver(&pch_udc_driver);
2959}
2960module_exit(pch_udc_pci_exit);
2961
2962MODULE_DESCRIPTION("Intel EG20T USB Device Controller");
2963MODULE_AUTHOR("OKI SEMICONDUCTOR, <toshiharu-linux@dsn.okisemi.com>");
2964MODULE_LICENSE("GPL");