Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pxa27x_udc.c
Go to the documentation of this file.
1 /*
2  * Handles the Intel 27x USB Device Controller (UDC)
3  *
4  * Inspired by original driver by Frank Becker, David Brownell, and others.
5  * Copyright (C) 2008 Robert Jarzmik
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  */
12 #include <linux/module.h>
13 #include <linux/kernel.h>
14 #include <linux/types.h>
15 #include <linux/errno.h>
16 #include <linux/err.h>
17 #include <linux/platform_device.h>
18 #include <linux/delay.h>
19 #include <linux/list.h>
20 #include <linux/interrupt.h>
21 #include <linux/proc_fs.h>
22 #include <linux/clk.h>
23 #include <linux/irq.h>
24 #include <linux/gpio.h>
25 #include <linux/slab.h>
26 #include <linux/prefetch.h>
27 
28 #include <asm/byteorder.h>
29 #include <mach/hardware.h>
30 
31 #include <linux/usb.h>
32 #include <linux/usb/ch9.h>
33 #include <linux/usb/gadget.h>
34 #include <mach/udc.h>
35 
36 #include "pxa27x_udc.h"
37 
38 /*
39  * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x
40  * series processors.
41  *
42  * Such controller drivers work with a gadget driver. The gadget driver
43  * returns descriptors, implements configuration and data protocols used
44  * by the host to interact with this device, and allocates endpoints to
45  * the different protocol interfaces. The controller driver virtualizes
46  * usb hardware so that the gadget drivers will be more portable.
47  *
48  * This UDC hardware wants to implement a bit too much USB protocol. The
49  * biggest issues are: that the endpoints have to be set up before the
50  * controller can be enabled (minor, and not uncommon); and each endpoint
51  * can only have one configuration, interface and alternative interface
52  * number (major, and very unusual). Once set up, these cannot be changed
53  * without a controller reset.
54  *
55  * The workaround is to setup all combinations necessary for the gadgets which
56  * will work with this driver. This is done in pxa_udc structure, statically.
57  * See pxa_udc, udc_usb_ep versus pxa_ep, and matching function find_pxa_ep.
58  * (You could modify this if needed. Some drivers have a "fifo_mode" module
59  * parameter to facilitate such changes.)
60  *
61  * The combinations have been tested with these gadgets :
62  * - zero gadget
63  * - file storage gadget
64  * - ether gadget
65  *
66  * The driver doesn't use DMA, only IO access and IRQ callbacks. No use is
67  * made of UDC's double buffering either. USB "On-The-Go" is not implemented.
68  *
69  * All the requests are handled the same way :
70  * - the drivers tries to handle the request directly to the IO
71  * - if the IO fifo is not big enough, the remaining is send/received in
72  * interrupt handling.
73  */
74 
75 #define DRIVER_VERSION "2008-04-18"
76 #define DRIVER_DESC "PXA 27x USB Device Controller driver"
77 
78 static const char driver_name[] = "pxa27x_udc";
79 static struct pxa_udc *the_controller;
80 
81 static void handle_ep(struct pxa_ep *ep);
82 
83 /*
84  * Debug filesystem
85  */
86 #ifdef CONFIG_USB_GADGET_DEBUG_FS
87 
88 #include <linux/debugfs.h>
89 #include <linux/uaccess.h>
90 #include <linux/seq_file.h>
91 
92 static int state_dbg_show(struct seq_file *s, void *p)
93 {
94  struct pxa_udc *udc = s->private;
95  int pos = 0, ret;
96  u32 tmp;
97 
98  ret = -ENODEV;
99  if (!udc->driver)
100  goto out;
101 
102  /* basic device status */
103  pos += seq_printf(s, DRIVER_DESC "\n"
104  "%s version: %s\nGadget driver: %s\n",
106  udc->driver ? udc->driver->driver.name : "(none)");
107 
108  tmp = udc_readl(udc, UDCCR);
109  pos += seq_printf(s,
110  "udccr=0x%0x(%s%s%s%s%s%s%s%s%s%s), "
111  "con=%d,inter=%d,altinter=%d\n", tmp,
112  (tmp & UDCCR_OEN) ? " oen":"",
113  (tmp & UDCCR_AALTHNP) ? " aalthnp":"",
114  (tmp & UDCCR_AHNP) ? " rem" : "",
115  (tmp & UDCCR_BHNP) ? " rstir" : "",
116  (tmp & UDCCR_DWRE) ? " dwre" : "",
117  (tmp & UDCCR_SMAC) ? " smac" : "",
118  (tmp & UDCCR_EMCE) ? " emce" : "",
119  (tmp & UDCCR_UDR) ? " udr" : "",
120  (tmp & UDCCR_UDA) ? " uda" : "",
121  (tmp & UDCCR_UDE) ? " ude" : "",
122  (tmp & UDCCR_ACN) >> UDCCR_ACN_S,
123  (tmp & UDCCR_AIN) >> UDCCR_AIN_S,
124  (tmp & UDCCR_AAISN) >> UDCCR_AAISN_S);
125  /* registers for device and ep0 */
126  pos += seq_printf(s, "udcicr0=0x%08x udcicr1=0x%08x\n",
127  udc_readl(udc, UDCICR0), udc_readl(udc, UDCICR1));
128  pos += seq_printf(s, "udcisr0=0x%08x udcisr1=0x%08x\n",
129  udc_readl(udc, UDCISR0), udc_readl(udc, UDCISR1));
130  pos += seq_printf(s, "udcfnr=%d\n", udc_readl(udc, UDCFNR));
131  pos += seq_printf(s, "irqs: reset=%lu, suspend=%lu, resume=%lu, "
132  "reconfig=%lu\n",
133  udc->stats.irqs_reset, udc->stats.irqs_suspend,
134  udc->stats.irqs_resume, udc->stats.irqs_reconfig);
135 
136  ret = 0;
137 out:
138  return ret;
139 }
140 
141 static int queues_dbg_show(struct seq_file *s, void *p)
142 {
143  struct pxa_udc *udc = s->private;
144  struct pxa_ep *ep;
145  struct pxa27x_request *req;
146  int pos = 0, i, maxpkt, ret;
147 
148  ret = -ENODEV;
149  if (!udc->driver)
150  goto out;
151 
152  /* dump endpoint queues */
153  for (i = 0; i < NR_PXA_ENDPOINTS; i++) {
154  ep = &udc->pxa_ep[i];
155  maxpkt = ep->fifo_size;
156  pos += seq_printf(s, "%-12s max_pkt=%d %s\n",
157  EPNAME(ep), maxpkt, "pio");
158 
159  if (list_empty(&ep->queue)) {
160  pos += seq_printf(s, "\t(nothing queued)\n");
161  continue;
162  }
163 
164  list_for_each_entry(req, &ep->queue, queue) {
165  pos += seq_printf(s, "\treq %p len %d/%d buf %p\n",
166  &req->req, req->req.actual,
167  req->req.length, req->req.buf);
168  }
169  }
170 
171  ret = 0;
172 out:
173  return ret;
174 }
175 
176 static int eps_dbg_show(struct seq_file *s, void *p)
177 {
178  struct pxa_udc *udc = s->private;
179  struct pxa_ep *ep;
180  int pos = 0, i, ret;
181  u32 tmp;
182 
183  ret = -ENODEV;
184  if (!udc->driver)
185  goto out;
186 
187  ep = &udc->pxa_ep[0];
188  tmp = udc_ep_readl(ep, UDCCSR);
189  pos += seq_printf(s, "udccsr0=0x%03x(%s%s%s%s%s%s%s)\n", tmp,
190  (tmp & UDCCSR0_SA) ? " sa" : "",
191  (tmp & UDCCSR0_RNE) ? " rne" : "",
192  (tmp & UDCCSR0_FST) ? " fst" : "",
193  (tmp & UDCCSR0_SST) ? " sst" : "",
194  (tmp & UDCCSR0_DME) ? " dme" : "",
195  (tmp & UDCCSR0_IPR) ? " ipr" : "",
196  (tmp & UDCCSR0_OPC) ? " opc" : "");
197  for (i = 0; i < NR_PXA_ENDPOINTS; i++) {
198  ep = &udc->pxa_ep[i];
199  tmp = i? udc_ep_readl(ep, UDCCR) : udc_readl(udc, UDCCR);
200  pos += seq_printf(s, "%-12s: "
201  "IN %lu(%lu reqs), OUT %lu(%lu reqs), "
202  "irqs=%lu, udccr=0x%08x, udccsr=0x%03x, "
203  "udcbcr=%d\n",
204  EPNAME(ep),
205  ep->stats.in_bytes, ep->stats.in_ops,
206  ep->stats.out_bytes, ep->stats.out_ops,
207  ep->stats.irqs,
208  tmp, udc_ep_readl(ep, UDCCSR),
209  udc_ep_readl(ep, UDCBCR));
210  }
211 
212  ret = 0;
213 out:
214  return ret;
215 }
216 
217 static int eps_dbg_open(struct inode *inode, struct file *file)
218 {
219  return single_open(file, eps_dbg_show, inode->i_private);
220 }
221 
222 static int queues_dbg_open(struct inode *inode, struct file *file)
223 {
224  return single_open(file, queues_dbg_show, inode->i_private);
225 }
226 
227 static int state_dbg_open(struct inode *inode, struct file *file)
228 {
229  return single_open(file, state_dbg_show, inode->i_private);
230 }
231 
232 static const struct file_operations state_dbg_fops = {
233  .owner = THIS_MODULE,
234  .open = state_dbg_open,
235  .llseek = seq_lseek,
236  .read = seq_read,
237  .release = single_release,
238 };
239 
240 static const struct file_operations queues_dbg_fops = {
241  .owner = THIS_MODULE,
242  .open = queues_dbg_open,
243  .llseek = seq_lseek,
244  .read = seq_read,
245  .release = single_release,
246 };
247 
248 static const struct file_operations eps_dbg_fops = {
249  .owner = THIS_MODULE,
250  .open = eps_dbg_open,
251  .llseek = seq_lseek,
252  .read = seq_read,
253  .release = single_release,
254 };
255 
256 static void pxa_init_debugfs(struct pxa_udc *udc)
257 {
258  struct dentry *root, *state, *queues, *eps;
259 
260  root = debugfs_create_dir(udc->gadget.name, NULL);
261  if (IS_ERR(root) || !root)
262  goto err_root;
263 
264  state = debugfs_create_file("udcstate", 0400, root, udc,
265  &state_dbg_fops);
266  if (!state)
267  goto err_state;
268  queues = debugfs_create_file("queues", 0400, root, udc,
269  &queues_dbg_fops);
270  if (!queues)
271  goto err_queues;
272  eps = debugfs_create_file("epstate", 0400, root, udc,
273  &eps_dbg_fops);
274  if (!eps)
275  goto err_eps;
276 
277  udc->debugfs_root = root;
278  udc->debugfs_state = state;
279  udc->debugfs_queues = queues;
280  udc->debugfs_eps = eps;
281  return;
282 err_eps:
283  debugfs_remove(eps);
284 err_queues:
285  debugfs_remove(queues);
286 err_state:
287  debugfs_remove(root);
288 err_root:
289  dev_err(udc->dev, "debugfs is not available\n");
290 }
291 
292 static void pxa_cleanup_debugfs(struct pxa_udc *udc)
293 {
294  debugfs_remove(udc->debugfs_eps);
295  debugfs_remove(udc->debugfs_queues);
296  debugfs_remove(udc->debugfs_state);
297  debugfs_remove(udc->debugfs_root);
298  udc->debugfs_eps = NULL;
299  udc->debugfs_queues = NULL;
300  udc->debugfs_state = NULL;
301  udc->debugfs_root = NULL;
302 }
303 
304 #else
305 static inline void pxa_init_debugfs(struct pxa_udc *udc)
306 {
307 }
308 
309 static inline void pxa_cleanup_debugfs(struct pxa_udc *udc)
310 {
311 }
312 #endif
313 
324 static int is_match_usb_pxa(struct udc_usb_ep *udc_usb_ep, struct pxa_ep *ep,
325  int config, int interface, int altsetting)
326 {
327  if (usb_endpoint_num(&udc_usb_ep->desc) != ep->addr)
328  return 0;
329  if (usb_endpoint_dir_in(&udc_usb_ep->desc) != ep->dir_in)
330  return 0;
331  if (usb_endpoint_type(&udc_usb_ep->desc) != ep->type)
332  return 0;
333  if ((ep->config != config) || (ep->interface != interface)
334  || (ep->alternate != altsetting))
335  return 0;
336  return 1;
337 }
338 
364 static struct pxa_ep *find_pxa_ep(struct pxa_udc *udc,
365  struct udc_usb_ep *udc_usb_ep)
366 {
367  int i;
368  struct pxa_ep *ep;
369  int cfg = udc->config;
370  int iface = udc->last_interface;
371  int alt = udc->last_alternate;
372 
373  if (udc_usb_ep == &udc->udc_usb_ep[0])
374  return &udc->pxa_ep[0];
375 
376  for (i = 1; i < NR_PXA_ENDPOINTS; i++) {
377  ep = &udc->pxa_ep[i];
378  if (is_match_usb_pxa(udc_usb_ep, ep, cfg, iface, alt))
379  return ep;
380  }
381  return NULL;
382 }
383 
394 static void update_pxa_ep_matches(struct pxa_udc *udc)
395 {
396  int i;
397  struct udc_usb_ep *udc_usb_ep;
398 
399  for (i = 1; i < NR_USB_ENDPOINTS; i++) {
400  udc_usb_ep = &udc->udc_usb_ep[i];
401  if (udc_usb_ep->pxa_ep)
402  udc_usb_ep->pxa_ep = find_pxa_ep(udc, udc_usb_ep);
403  }
404 }
405 
410 static void pio_irq_enable(struct pxa_ep *ep)
411 {
412  struct pxa_udc *udc = ep->dev;
413  int index = EPIDX(ep);
414  u32 udcicr0 = udc_readl(udc, UDCICR0);
415  u32 udcicr1 = udc_readl(udc, UDCICR1);
416 
417  if (index < 16)
418  udc_writel(udc, UDCICR0, udcicr0 | (3 << (index * 2)));
419  else
420  udc_writel(udc, UDCICR1, udcicr1 | (3 << ((index - 16) * 2)));
421 }
422 
427 static void pio_irq_disable(struct pxa_ep *ep)
428 {
429  struct pxa_udc *udc = ep->dev;
430  int index = EPIDX(ep);
431  u32 udcicr0 = udc_readl(udc, UDCICR0);
432  u32 udcicr1 = udc_readl(udc, UDCICR1);
433 
434  if (index < 16)
435  udc_writel(udc, UDCICR0, udcicr0 & ~(3 << (index * 2)));
436  else
437  udc_writel(udc, UDCICR1, udcicr1 & ~(3 << ((index - 16) * 2)));
438 }
439 
447 static inline void udc_set_mask_UDCCR(struct pxa_udc *udc, int mask)
448 {
449  u32 udccr = udc_readl(udc, UDCCR);
450  udc_writel(udc, UDCCR,
451  (udccr & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS));
452 }
453 
461 static inline void udc_clear_mask_UDCCR(struct pxa_udc *udc, int mask)
462 {
463  u32 udccr = udc_readl(udc, UDCCR);
464  udc_writel(udc, UDCCR,
465  (udccr & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS));
466 }
467 
478 static inline void ep_write_UDCCSR(struct pxa_ep *ep, int mask)
479 {
480  if (is_ep0(ep))
481  mask |= UDCCSR0_ACM;
482  udc_ep_writel(ep, UDCCSR, mask);
483 }
484 
491 static int ep_count_bytes_remain(struct pxa_ep *ep)
492 {
493  if (ep->dir_in)
494  return -EOPNOTSUPP;
495  return udc_ep_readl(ep, UDCBCR) & 0x3ff;
496 }
497 
508 static int ep_is_empty(struct pxa_ep *ep)
509 {
510  int ret;
511 
512  if (!is_ep0(ep) && ep->dir_in)
513  return -EOPNOTSUPP;
514  if (is_ep0(ep))
515  ret = !(udc_ep_readl(ep, UDCCSR) & UDCCSR0_RNE);
516  else
517  ret = !(udc_ep_readl(ep, UDCCSR) & UDCCSR_BNE);
518  return ret;
519 }
520 
530 static int ep_is_full(struct pxa_ep *ep)
531 {
532  if (is_ep0(ep))
533  return (udc_ep_readl(ep, UDCCSR) & UDCCSR0_IPR);
534  if (!ep->dir_in)
535  return -EOPNOTSUPP;
536  return (!(udc_ep_readl(ep, UDCCSR) & UDCCSR_BNF));
537 }
538 
545 static int epout_has_pkt(struct pxa_ep *ep)
546 {
547  if (!is_ep0(ep) && ep->dir_in)
548  return -EOPNOTSUPP;
549  if (is_ep0(ep))
550  return (udc_ep_readl(ep, UDCCSR) & UDCCSR0_OPC);
551  return (udc_ep_readl(ep, UDCCSR) & UDCCSR_PC);
552 }
553 
559 static void set_ep0state(struct pxa_udc *udc, int state)
560 {
561  struct pxa_ep *ep = &udc->pxa_ep[0];
562  char *old_stname = EP0_STNAME(udc);
563 
564  udc->ep0state = state;
565  ep_dbg(ep, "state=%s->%s, udccsr0=0x%03x, udcbcr=%d\n", old_stname,
566  EP0_STNAME(udc), udc_ep_readl(ep, UDCCSR),
567  udc_ep_readl(ep, UDCBCR));
568 }
569 
574 static void ep0_idle(struct pxa_udc *dev)
575 {
576  set_ep0state(dev, WAIT_FOR_SETUP);
577 }
578 
586 static void inc_ep_stats_reqs(struct pxa_ep *ep, int is_in)
587 {
588  if (is_in)
589  ep->stats.in_ops++;
590  else
591  ep->stats.out_ops++;
592 }
593 
600 static void inc_ep_stats_bytes(struct pxa_ep *ep, int count, int is_in)
601 {
602  if (is_in)
603  ep->stats.in_bytes += count;
604  else
605  ep->stats.out_bytes += count;
606 }
607 
614 static __init void pxa_ep_setup(struct pxa_ep *ep)
615 {
616  u32 new_udccr;
617 
618  new_udccr = ((ep->config << UDCCONR_CN_S) & UDCCONR_CN)
619  | ((ep->interface << UDCCONR_IN_S) & UDCCONR_IN)
620  | ((ep->alternate << UDCCONR_AISN_S) & UDCCONR_AISN)
621  | ((EPADDR(ep) << UDCCONR_EN_S) & UDCCONR_EN)
622  | ((EPXFERTYPE(ep) << UDCCONR_ET_S) & UDCCONR_ET)
623  | ((ep->dir_in) ? UDCCONR_ED : 0)
624  | ((ep->fifo_size << UDCCONR_MPS_S) & UDCCONR_MPS)
625  | UDCCONR_EE;
626 
627  udc_ep_writel(ep, UDCCR, new_udccr);
628 }
629 
636 static __init void pxa_eps_setup(struct pxa_udc *dev)
637 {
638  unsigned int i;
639 
640  dev_dbg(dev->dev, "%s: dev=%p\n", __func__, dev);
641 
642  for (i = 1; i < NR_PXA_ENDPOINTS; i++)
643  pxa_ep_setup(&dev->pxa_ep[i]);
644 }
645 
655 static struct usb_request *
656 pxa_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
657 {
658  struct pxa27x_request *req;
659 
660  req = kzalloc(sizeof *req, gfp_flags);
661  if (!req)
662  return NULL;
663 
664  INIT_LIST_HEAD(&req->queue);
665  req->in_use = 0;
666  req->udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
667 
668  return &req->req;
669 }
670 
678 static void pxa_ep_free_request(struct usb_ep *_ep, struct usb_request *_req)
679 {
680  struct pxa27x_request *req;
681 
682  req = container_of(_req, struct pxa27x_request, req);
683  WARN_ON(!list_empty(&req->queue));
684  kfree(req);
685 }
686 
697 static void ep_add_request(struct pxa_ep *ep, struct pxa27x_request *req)
698 {
699  if (unlikely(!req))
700  return;
701  ep_vdbg(ep, "req:%p, lg=%d, udccsr=0x%03x\n", req,
702  req->req.length, udc_ep_readl(ep, UDCCSR));
703 
704  req->in_use = 1;
705  list_add_tail(&req->queue, &ep->queue);
706  pio_irq_enable(ep);
707 }
708 
720 static void ep_del_request(struct pxa_ep *ep, struct pxa27x_request *req)
721 {
722  if (unlikely(!req))
723  return;
724  ep_vdbg(ep, "req:%p, lg=%d, udccsr=0x%03x\n", req,
725  req->req.length, udc_ep_readl(ep, UDCCSR));
726 
727  list_del_init(&req->queue);
728  req->in_use = 0;
729  if (!is_ep0(ep) && list_empty(&ep->queue))
730  pio_irq_disable(ep);
731 }
732 
744 static void req_done(struct pxa_ep *ep, struct pxa27x_request *req, int status,
745  unsigned long *pflags)
746 {
747  unsigned long flags;
748 
749  ep_del_request(ep, req);
750  if (likely(req->req.status == -EINPROGRESS))
751  req->req.status = status;
752  else
753  status = req->req.status;
754 
755  if (status && status != -ESHUTDOWN)
756  ep_dbg(ep, "complete req %p stat %d len %u/%u\n",
757  &req->req, status,
758  req->req.actual, req->req.length);
759 
760  if (pflags)
761  spin_unlock_irqrestore(&ep->lock, *pflags);
762  local_irq_save(flags);
763  req->req.complete(&req->udc_usb_ep->usb_ep, &req->req);
764  local_irq_restore(flags);
765  if (pflags)
766  spin_lock_irqsave(&ep->lock, *pflags);
767 }
768 
779 static void ep_end_out_req(struct pxa_ep *ep, struct pxa27x_request *req,
780  unsigned long *pflags)
781 {
782  inc_ep_stats_reqs(ep, !USB_DIR_IN);
783  req_done(ep, req, 0, pflags);
784 }
785 
797 static void ep0_end_out_req(struct pxa_ep *ep, struct pxa27x_request *req,
798  unsigned long *pflags)
799 {
800  set_ep0state(ep->dev, OUT_STATUS_STAGE);
801  ep_end_out_req(ep, req, pflags);
802  ep0_idle(ep->dev);
803 }
804 
815 static void ep_end_in_req(struct pxa_ep *ep, struct pxa27x_request *req,
816  unsigned long *pflags)
817 {
818  inc_ep_stats_reqs(ep, USB_DIR_IN);
819  req_done(ep, req, 0, pflags);
820 }
821 
833 static void ep0_end_in_req(struct pxa_ep *ep, struct pxa27x_request *req,
834  unsigned long *pflags)
835 {
836  set_ep0state(ep->dev, IN_STATUS_STAGE);
837  ep_end_in_req(ep, req, pflags);
838 }
839 
850 static void nuke(struct pxa_ep *ep, int status)
851 {
852  struct pxa27x_request *req;
853  unsigned long flags;
854 
855  spin_lock_irqsave(&ep->lock, flags);
856  while (!list_empty(&ep->queue)) {
857  req = list_entry(ep->queue.next, struct pxa27x_request, queue);
858  req_done(ep, req, status, &flags);
859  }
860  spin_unlock_irqrestore(&ep->lock, flags);
861 }
862 
874 static int read_packet(struct pxa_ep *ep, struct pxa27x_request *req)
875 {
876  u32 *buf;
877  int bytes_ep, bufferspace, count, i;
878 
879  bytes_ep = ep_count_bytes_remain(ep);
880  bufferspace = req->req.length - req->req.actual;
881 
882  buf = (u32 *)(req->req.buf + req->req.actual);
883  prefetchw(buf);
884 
885  if (likely(!ep_is_empty(ep)))
886  count = min(bytes_ep, bufferspace);
887  else /* zlp */
888  count = 0;
889 
890  for (i = count; i > 0; i -= 4)
891  *buf++ = udc_ep_readl(ep, UDCDR);
892  req->req.actual += count;
893 
894  ep_write_UDCCSR(ep, UDCCSR_PC);
895 
896  return count;
897 }
898 
911 static int write_packet(struct pxa_ep *ep, struct pxa27x_request *req,
912  unsigned int max)
913 {
914  int length, count, remain, i;
915  u32 *buf;
916  u8 *buf_8;
917 
918  buf = (u32 *)(req->req.buf + req->req.actual);
919  prefetch(buf);
920 
921  length = min(req->req.length - req->req.actual, max);
922  req->req.actual += length;
923 
924  remain = length & 0x3;
925  count = length & ~(0x3);
926  for (i = count; i > 0 ; i -= 4)
927  udc_ep_writel(ep, UDCDR, *buf++);
928 
929  buf_8 = (u8 *)buf;
930  for (i = remain; i > 0; i--)
931  udc_ep_writeb(ep, UDCDR, *buf_8++);
932 
933  ep_vdbg(ep, "length=%d+%d, udccsr=0x%03x\n", count, remain,
934  udc_ep_readl(ep, UDCCSR));
935 
936  return length;
937 }
938 
953 static int read_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
954 {
955  int count, is_short, completed = 0;
956 
957  while (epout_has_pkt(ep)) {
958  count = read_packet(ep, req);
959  inc_ep_stats_bytes(ep, count, !USB_DIR_IN);
960 
961  is_short = (count < ep->fifo_size);
962  ep_dbg(ep, "read udccsr:%03x, count:%d bytes%s req %p %d/%d\n",
963  udc_ep_readl(ep, UDCCSR), count, is_short ? "/S" : "",
964  &req->req, req->req.actual, req->req.length);
965 
966  /* completion */
967  if (is_short || req->req.actual == req->req.length) {
968  completed = 1;
969  break;
970  }
971  /* finished that packet. the next one may be waiting... */
972  }
973  return completed;
974 }
975 
988 static int write_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
989 {
990  unsigned max;
991  int count, is_short, is_last = 0, completed = 0, totcount = 0;
992  u32 udccsr;
993 
994  max = ep->fifo_size;
995  do {
996  is_short = 0;
997 
998  udccsr = udc_ep_readl(ep, UDCCSR);
999  if (udccsr & UDCCSR_PC) {
1000  ep_vdbg(ep, "Clearing Transmit Complete, udccsr=%x\n",
1001  udccsr);
1002  ep_write_UDCCSR(ep, UDCCSR_PC);
1003  }
1004  if (udccsr & UDCCSR_TRN) {
1005  ep_vdbg(ep, "Clearing Underrun on, udccsr=%x\n",
1006  udccsr);
1007  ep_write_UDCCSR(ep, UDCCSR_TRN);
1008  }
1009 
1010  count = write_packet(ep, req, max);
1011  inc_ep_stats_bytes(ep, count, USB_DIR_IN);
1012  totcount += count;
1013 
1014  /* last packet is usually short (or a zlp) */
1015  if (unlikely(count < max)) {
1016  is_last = 1;
1017  is_short = 1;
1018  } else {
1019  if (likely(req->req.length > req->req.actual)
1020  || req->req.zero)
1021  is_last = 0;
1022  else
1023  is_last = 1;
1024  /* interrupt/iso maxpacket may not fill the fifo */
1025  is_short = unlikely(max < ep->fifo_size);
1026  }
1027 
1028  if (is_short)
1029  ep_write_UDCCSR(ep, UDCCSR_SP);
1030 
1031  /* requests complete when all IN data is in the FIFO */
1032  if (is_last) {
1033  completed = 1;
1034  break;
1035  }
1036  } while (!ep_is_full(ep));
1037 
1038  ep_dbg(ep, "wrote count:%d bytes%s%s, left:%d req=%p\n",
1039  totcount, is_last ? "/L" : "", is_short ? "/S" : "",
1040  req->req.length - req->req.actual, &req->req);
1041 
1042  return completed;
1043 }
1044 
1056 static int read_ep0_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
1057 {
1058  int count, is_short, completed = 0;
1059 
1060  while (epout_has_pkt(ep)) {
1061  count = read_packet(ep, req);
1062  ep_write_UDCCSR(ep, UDCCSR0_OPC);
1063  inc_ep_stats_bytes(ep, count, !USB_DIR_IN);
1064 
1065  is_short = (count < ep->fifo_size);
1066  ep_dbg(ep, "read udccsr:%03x, count:%d bytes%s req %p %d/%d\n",
1067  udc_ep_readl(ep, UDCCSR), count, is_short ? "/S" : "",
1068  &req->req, req->req.actual, req->req.length);
1069 
1070  if (is_short || req->req.actual >= req->req.length) {
1071  completed = 1;
1072  break;
1073  }
1074  }
1075 
1076  return completed;
1077 }
1078 
1094 static int write_ep0_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
1095 {
1096  unsigned count;
1097  int is_last, is_short;
1098 
1099  count = write_packet(ep, req, EP0_FIFO_SIZE);
1100  inc_ep_stats_bytes(ep, count, USB_DIR_IN);
1101 
1102  is_short = (count < EP0_FIFO_SIZE);
1103  is_last = ((count == 0) || (count < EP0_FIFO_SIZE));
1104 
1105  /* Sends either a short packet or a 0 length packet */
1106  if (unlikely(is_short))
1107  ep_write_UDCCSR(ep, UDCCSR0_IPR);
1108 
1109  ep_dbg(ep, "in %d bytes%s%s, %d left, req=%p, udccsr0=0x%03x\n",
1110  count, is_short ? "/S" : "", is_last ? "/L" : "",
1111  req->req.length - req->req.actual,
1112  &req->req, udc_ep_readl(ep, UDCCSR));
1113 
1114  return is_last;
1115 }
1116 
1129 static int pxa_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
1130  gfp_t gfp_flags)
1131 {
1132  struct udc_usb_ep *udc_usb_ep;
1133  struct pxa_ep *ep;
1134  struct pxa27x_request *req;
1135  struct pxa_udc *dev;
1136  unsigned long flags;
1137  int rc = 0;
1138  int is_first_req;
1139  unsigned length;
1140  int recursion_detected;
1141 
1142  req = container_of(_req, struct pxa27x_request, req);
1143  udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1144 
1145  if (unlikely(!_req || !_req->complete || !_req->buf))
1146  return -EINVAL;
1147 
1148  if (unlikely(!_ep))
1149  return -EINVAL;
1150 
1151  dev = udc_usb_ep->dev;
1152  ep = udc_usb_ep->pxa_ep;
1153  if (unlikely(!ep))
1154  return -EINVAL;
1155 
1156  dev = ep->dev;
1157  if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) {
1158  ep_dbg(ep, "bogus device state\n");
1159  return -ESHUTDOWN;
1160  }
1161 
1162  /* iso is always one packet per request, that's the only way
1163  * we can report per-packet status. that also helps with dma.
1164  */
1165  if (unlikely(EPXFERTYPE_is_ISO(ep)
1166  && req->req.length > ep->fifo_size))
1167  return -EMSGSIZE;
1168 
1169  spin_lock_irqsave(&ep->lock, flags);
1170  recursion_detected = ep->in_handle_ep;
1171 
1172  is_first_req = list_empty(&ep->queue);
1173  ep_dbg(ep, "queue req %p(first=%s), len %d buf %p\n",
1174  _req, is_first_req ? "yes" : "no",
1175  _req->length, _req->buf);
1176 
1177  if (!ep->enabled) {
1178  _req->status = -ESHUTDOWN;
1179  rc = -ESHUTDOWN;
1180  goto out_locked;
1181  }
1182 
1183  if (req->in_use) {
1184  ep_err(ep, "refusing to queue req %p (already queued)\n", req);
1185  goto out_locked;
1186  }
1187 
1188  length = _req->length;
1189  _req->status = -EINPROGRESS;
1190  _req->actual = 0;
1191 
1192  ep_add_request(ep, req);
1193  spin_unlock_irqrestore(&ep->lock, flags);
1194 
1195  if (is_ep0(ep)) {
1196  switch (dev->ep0state) {
1198  if (length == 0) {
1199  ep_end_in_req(ep, req, NULL);
1200  } else {
1201  ep_err(ep, "got a request of %d bytes while"
1202  "in state WAIT_ACK_SET_CONF_INTERF\n",
1203  length);
1204  ep_del_request(ep, req);
1205  rc = -EL2HLT;
1206  }
1207  ep0_idle(ep->dev);
1208  break;
1209  case IN_DATA_STAGE:
1210  if (!ep_is_full(ep))
1211  if (write_ep0_fifo(ep, req))
1212  ep0_end_in_req(ep, req, NULL);
1213  break;
1214  case OUT_DATA_STAGE:
1215  if ((length == 0) || !epout_has_pkt(ep))
1216  if (read_ep0_fifo(ep, req))
1217  ep0_end_out_req(ep, req, NULL);
1218  break;
1219  default:
1220  ep_err(ep, "odd state %s to send me a request\n",
1221  EP0_STNAME(ep->dev));
1222  ep_del_request(ep, req);
1223  rc = -EL2HLT;
1224  break;
1225  }
1226  } else {
1227  if (!recursion_detected)
1228  handle_ep(ep);
1229  }
1230 
1231 out:
1232  return rc;
1233 out_locked:
1234  spin_unlock_irqrestore(&ep->lock, flags);
1235  goto out;
1236 }
1237 
1245 static int pxa_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
1246 {
1247  struct pxa_ep *ep;
1248  struct udc_usb_ep *udc_usb_ep;
1249  struct pxa27x_request *req;
1250  unsigned long flags;
1251  int rc = -EINVAL;
1252 
1253  if (!_ep)
1254  return rc;
1255  udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1256  ep = udc_usb_ep->pxa_ep;
1257  if (!ep || is_ep0(ep))
1258  return rc;
1259 
1260  spin_lock_irqsave(&ep->lock, flags);
1261 
1262  /* make sure it's actually queued on this endpoint */
1263  list_for_each_entry(req, &ep->queue, queue) {
1264  if (&req->req == _req) {
1265  rc = 0;
1266  break;
1267  }
1268  }
1269 
1270  spin_unlock_irqrestore(&ep->lock, flags);
1271  if (!rc)
1272  req_done(ep, req, -ECONNRESET, NULL);
1273  return rc;
1274 }
1275 
1283 static int pxa_ep_set_halt(struct usb_ep *_ep, int value)
1284 {
1285  struct pxa_ep *ep;
1286  struct udc_usb_ep *udc_usb_ep;
1287  unsigned long flags;
1288  int rc;
1289 
1290 
1291  if (!_ep)
1292  return -EINVAL;
1293  udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1294  ep = udc_usb_ep->pxa_ep;
1295  if (!ep || is_ep0(ep))
1296  return -EINVAL;
1297 
1298  if (value == 0) {
1299  /*
1300  * This path (reset toggle+halt) is needed to implement
1301  * SET_INTERFACE on normal hardware. but it can't be
1302  * done from software on the PXA UDC, and the hardware
1303  * forgets to do it as part of SET_INTERFACE automagic.
1304  */
1305  ep_dbg(ep, "only host can clear halt\n");
1306  return -EROFS;
1307  }
1308 
1309  spin_lock_irqsave(&ep->lock, flags);
1310 
1311  rc = -EAGAIN;
1312  if (ep->dir_in && (ep_is_full(ep) || !list_empty(&ep->queue)))
1313  goto out;
1314 
1315  /* FST, FEF bits are the same for control and non control endpoints */
1316  rc = 0;
1317  ep_write_UDCCSR(ep, UDCCSR_FST | UDCCSR_FEF);
1318  if (is_ep0(ep))
1319  set_ep0state(ep->dev, STALL);
1320 
1321 out:
1322  spin_unlock_irqrestore(&ep->lock, flags);
1323  return rc;
1324 }
1325 
1332 static int pxa_ep_fifo_status(struct usb_ep *_ep)
1333 {
1334  struct pxa_ep *ep;
1335  struct udc_usb_ep *udc_usb_ep;
1336 
1337  if (!_ep)
1338  return -ENODEV;
1339  udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1340  ep = udc_usb_ep->pxa_ep;
1341  if (!ep || is_ep0(ep))
1342  return -ENODEV;
1343 
1344  if (ep->dir_in)
1345  return -EOPNOTSUPP;
1346  if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN || ep_is_empty(ep))
1347  return 0;
1348  else
1349  return ep_count_bytes_remain(ep) + 1;
1350 }
1351 
1358 static void pxa_ep_fifo_flush(struct usb_ep *_ep)
1359 {
1360  struct pxa_ep *ep;
1361  struct udc_usb_ep *udc_usb_ep;
1362  unsigned long flags;
1363 
1364  if (!_ep)
1365  return;
1366  udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1367  ep = udc_usb_ep->pxa_ep;
1368  if (!ep || is_ep0(ep))
1369  return;
1370 
1371  spin_lock_irqsave(&ep->lock, flags);
1372 
1373  if (unlikely(!list_empty(&ep->queue)))
1374  ep_dbg(ep, "called while queue list not empty\n");
1375  ep_dbg(ep, "called\n");
1376 
1377  /* for OUT, just read and discard the FIFO contents. */
1378  if (!ep->dir_in) {
1379  while (!ep_is_empty(ep))
1380  udc_ep_readl(ep, UDCDR);
1381  } else {
1382  /* most IN status is the same, but ISO can't stall */
1383  ep_write_UDCCSR(ep,
1384  UDCCSR_PC | UDCCSR_FEF | UDCCSR_TRN
1385  | (EPXFERTYPE_is_ISO(ep) ? 0 : UDCCSR_SST));
1386  }
1387 
1388  spin_unlock_irqrestore(&ep->lock, flags);
1389 }
1390 
1401 static int pxa_ep_enable(struct usb_ep *_ep,
1402  const struct usb_endpoint_descriptor *desc)
1403 {
1404  struct pxa_ep *ep;
1405  struct udc_usb_ep *udc_usb_ep;
1406  struct pxa_udc *udc;
1407 
1408  if (!_ep || !desc)
1409  return -EINVAL;
1410 
1411  udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1412  if (udc_usb_ep->pxa_ep) {
1413  ep = udc_usb_ep->pxa_ep;
1414  ep_warn(ep, "usb_ep %s already enabled, doing nothing\n",
1415  _ep->name);
1416  } else {
1417  ep = find_pxa_ep(udc_usb_ep->dev, udc_usb_ep);
1418  }
1419 
1420  if (!ep || is_ep0(ep)) {
1421  dev_err(udc_usb_ep->dev->dev,
1422  "unable to match pxa_ep for ep %s\n",
1423  _ep->name);
1424  return -EINVAL;
1425  }
1426 
1427  if ((desc->bDescriptorType != USB_DT_ENDPOINT)
1428  || (ep->type != usb_endpoint_type(desc))) {
1429  ep_err(ep, "type mismatch\n");
1430  return -EINVAL;
1431  }
1432 
1433  if (ep->fifo_size < usb_endpoint_maxp(desc)) {
1434  ep_err(ep, "bad maxpacket\n");
1435  return -ERANGE;
1436  }
1437 
1438  udc_usb_ep->pxa_ep = ep;
1439  udc = ep->dev;
1440 
1441  if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
1442  ep_err(ep, "bogus device state\n");
1443  return -ESHUTDOWN;
1444  }
1445 
1446  ep->enabled = 1;
1447 
1448  /* flush fifo (mostly for OUT buffers) */
1449  pxa_ep_fifo_flush(_ep);
1450 
1451  ep_dbg(ep, "enabled\n");
1452  return 0;
1453 }
1454 
1463 static int pxa_ep_disable(struct usb_ep *_ep)
1464 {
1465  struct pxa_ep *ep;
1466  struct udc_usb_ep *udc_usb_ep;
1467 
1468  if (!_ep)
1469  return -EINVAL;
1470 
1471  udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1472  ep = udc_usb_ep->pxa_ep;
1473  if (!ep || is_ep0(ep) || !list_empty(&ep->queue))
1474  return -EINVAL;
1475 
1476  ep->enabled = 0;
1477  nuke(ep, -ESHUTDOWN);
1478 
1479  pxa_ep_fifo_flush(_ep);
1480  udc_usb_ep->pxa_ep = NULL;
1481 
1482  ep_dbg(ep, "disabled\n");
1483  return 0;
1484 }
1485 
1486 static struct usb_ep_ops pxa_ep_ops = {
1487  .enable = pxa_ep_enable,
1488  .disable = pxa_ep_disable,
1489 
1490  .alloc_request = pxa_ep_alloc_request,
1491  .free_request = pxa_ep_free_request,
1492 
1493  .queue = pxa_ep_queue,
1494  .dequeue = pxa_ep_dequeue,
1495 
1496  .set_halt = pxa_ep_set_halt,
1497  .fifo_status = pxa_ep_fifo_status,
1498  .fifo_flush = pxa_ep_fifo_flush,
1499 };
1500 
1510 static void dplus_pullup(struct pxa_udc *udc, int on)
1511 {
1512  if (on) {
1513  if (gpio_is_valid(udc->mach->gpio_pullup))
1514  gpio_set_value(udc->mach->gpio_pullup,
1515  !udc->mach->gpio_pullup_inverted);
1516  if (udc->mach->udc_command)
1517  udc->mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
1518  } else {
1519  if (gpio_is_valid(udc->mach->gpio_pullup))
1520  gpio_set_value(udc->mach->gpio_pullup,
1521  udc->mach->gpio_pullup_inverted);
1522  if (udc->mach->udc_command)
1523  udc->mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
1524  }
1525  udc->pullup_on = on;
1526 }
1527 
1532 static int pxa_udc_get_frame(struct usb_gadget *_gadget)
1533 {
1534  struct pxa_udc *udc = to_gadget_udc(_gadget);
1535 
1536  return (udc_readl(udc, UDCFNR) & 0x7ff);
1537 }
1538 
1545 static int pxa_udc_wakeup(struct usb_gadget *_gadget)
1546 {
1547  struct pxa_udc *udc = to_gadget_udc(_gadget);
1548 
1549  /* host may not have enabled remote wakeup */
1550  if ((udc_readl(udc, UDCCR) & UDCCR_DWRE) == 0)
1551  return -EHOSTUNREACH;
1552  udc_set_mask_UDCCR(udc, UDCCR_UDR);
1553  return 0;
1554 }
1555 
1556 static void udc_enable(struct pxa_udc *udc);
1557 static void udc_disable(struct pxa_udc *udc);
1558 
1572 static int should_enable_udc(struct pxa_udc *udc)
1573 {
1574  int put_on;
1575 
1576  put_on = ((udc->pullup_on) && (udc->driver));
1577  put_on &= ((udc->vbus_sensed) || (IS_ERR_OR_NULL(udc->transceiver)));
1578  return put_on;
1579 }
1580 
1593 static int should_disable_udc(struct pxa_udc *udc)
1594 {
1595  int put_off;
1596 
1597  put_off = ((!udc->pullup_on) || (!udc->driver));
1598  put_off |= ((!udc->vbus_sensed) && (!IS_ERR_OR_NULL(udc->transceiver)));
1599  return put_off;
1600 }
1601 
1610 static int pxa_udc_pullup(struct usb_gadget *_gadget, int is_active)
1611 {
1612  struct pxa_udc *udc = to_gadget_udc(_gadget);
1613 
1614  if (!gpio_is_valid(udc->mach->gpio_pullup) && !udc->mach->udc_command)
1615  return -EOPNOTSUPP;
1616 
1617  dplus_pullup(udc, is_active);
1618 
1619  if (should_enable_udc(udc))
1620  udc_enable(udc);
1621  if (should_disable_udc(udc))
1622  udc_disable(udc);
1623  return 0;
1624 }
1625 
1626 static void udc_enable(struct pxa_udc *udc);
1627 static void udc_disable(struct pxa_udc *udc);
1628 
1639 static int pxa_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
1640 {
1641  struct pxa_udc *udc = to_gadget_udc(_gadget);
1642 
1643  udc->vbus_sensed = is_active;
1644  if (should_enable_udc(udc))
1645  udc_enable(udc);
1646  if (should_disable_udc(udc))
1647  udc_disable(udc);
1648 
1649  return 0;
1650 }
1651 
1664 static int pxa_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1665 {
1666  struct pxa_udc *udc;
1667 
1668  udc = to_gadget_udc(_gadget);
1669  if (!IS_ERR_OR_NULL(udc->transceiver))
1670  return usb_phy_set_power(udc->transceiver, mA);
1671  return -EOPNOTSUPP;
1672 }
1673 
1674 static int pxa27x_udc_start(struct usb_gadget_driver *driver,
1675  int (*bind)(struct usb_gadget *, struct usb_gadget_driver *));
1676 static int pxa27x_udc_stop(struct usb_gadget_driver *driver);
1677 
1678 static const struct usb_gadget_ops pxa_udc_ops = {
1679  .get_frame = pxa_udc_get_frame,
1680  .wakeup = pxa_udc_wakeup,
1681  .pullup = pxa_udc_pullup,
1682  .vbus_session = pxa_udc_vbus_session,
1683  .vbus_draw = pxa_udc_vbus_draw,
1684  .start = pxa27x_udc_start,
1685  .stop = pxa27x_udc_stop,
1686 };
1687 
1696 static void udc_disable(struct pxa_udc *udc)
1697 {
1698  if (!udc->enabled)
1699  return;
1700 
1701  udc_writel(udc, UDCICR0, 0);
1702  udc_writel(udc, UDCICR1, 0);
1703 
1704  udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1705  clk_disable(udc->clk);
1706 
1707  ep0_idle(udc);
1708  udc->gadget.speed = USB_SPEED_UNKNOWN;
1709 
1710  udc->enabled = 0;
1711 }
1712 
1720 static __init void udc_init_data(struct pxa_udc *dev)
1721 {
1722  int i;
1723  struct pxa_ep *ep;
1724 
1725  /* device/ep0 records init */
1726  INIT_LIST_HEAD(&dev->gadget.ep_list);
1727  INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
1728  dev->udc_usb_ep[0].pxa_ep = &dev->pxa_ep[0];
1729  ep0_idle(dev);
1730 
1731  /* PXA endpoints init */
1732  for (i = 0; i < NR_PXA_ENDPOINTS; i++) {
1733  ep = &dev->pxa_ep[i];
1734 
1735  ep->enabled = is_ep0(ep);
1736  INIT_LIST_HEAD(&ep->queue);
1737  spin_lock_init(&ep->lock);
1738  }
1739 
1740  /* USB endpoints init */
1741  for (i = 1; i < NR_USB_ENDPOINTS; i++)
1742  list_add_tail(&dev->udc_usb_ep[i].usb_ep.ep_list,
1743  &dev->gadget.ep_list);
1744 }
1745 
1753 static void udc_enable(struct pxa_udc *udc)
1754 {
1755  if (udc->enabled)
1756  return;
1757 
1758  udc_writel(udc, UDCICR0, 0);
1759  udc_writel(udc, UDCICR1, 0);
1760  udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1761 
1762  clk_enable(udc->clk);
1763 
1764  ep0_idle(udc);
1765  udc->gadget.speed = USB_SPEED_FULL;
1766  memset(&udc->stats, 0, sizeof(udc->stats));
1767 
1768  udc_set_mask_UDCCR(udc, UDCCR_UDE);
1769  ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_ACM);
1770  udelay(2);
1771  if (udc_readl(udc, UDCCR) & UDCCR_EMCE)
1772  dev_err(udc->dev, "Configuration errors, udc disabled\n");
1773 
1774  /*
1775  * Caller must be able to sleep in order to cope with startup transients
1776  */
1777  msleep(100);
1778 
1779  /* enable suspend/resume and reset irqs */
1780  udc_writel(udc, UDCICR1,
1783 
1784  /* enable ep0 irqs */
1785  pio_irq_enable(&udc->pxa_ep[0]);
1786 
1787  udc->enabled = 1;
1788 }
1789 
1805 static int pxa27x_udc_start(struct usb_gadget_driver *driver,
1806  int (*bind)(struct usb_gadget *, struct usb_gadget_driver *))
1807 {
1808  struct pxa_udc *udc = the_controller;
1809  int retval;
1810 
1811  if (!driver || driver->max_speed < USB_SPEED_FULL || !bind
1812  || !driver->disconnect || !driver->setup)
1813  return -EINVAL;
1814  if (!udc)
1815  return -ENODEV;
1816  if (udc->driver)
1817  return -EBUSY;
1818 
1819  /* first hook up the driver ... */
1820  udc->driver = driver;
1821  udc->gadget.dev.driver = &driver->driver;
1822  dplus_pullup(udc, 1);
1823 
1824  retval = device_add(&udc->gadget.dev);
1825  if (retval) {
1826  dev_err(udc->dev, "device_add error %d\n", retval);
1827  goto add_fail;
1828  }
1829  retval = bind(&udc->gadget, driver);
1830  if (retval) {
1831  dev_err(udc->dev, "bind to driver %s --> error %d\n",
1832  driver->driver.name, retval);
1833  goto bind_fail;
1834  }
1835  dev_dbg(udc->dev, "registered gadget driver '%s'\n",
1836  driver->driver.name);
1837 
1838  if (!IS_ERR_OR_NULL(udc->transceiver)) {
1839  retval = otg_set_peripheral(udc->transceiver->otg,
1840  &udc->gadget);
1841  if (retval) {
1842  dev_err(udc->dev, "can't bind to transceiver\n");
1843  goto transceiver_fail;
1844  }
1845  }
1846 
1847  if (should_enable_udc(udc))
1848  udc_enable(udc);
1849  return 0;
1850 
1851 transceiver_fail:
1852  if (driver->unbind)
1853  driver->unbind(&udc->gadget);
1854 bind_fail:
1855  device_del(&udc->gadget.dev);
1856 add_fail:
1857  udc->driver = NULL;
1858  udc->gadget.dev.driver = NULL;
1859  return retval;
1860 }
1861 
1870 static void stop_activity(struct pxa_udc *udc, struct usb_gadget_driver *driver)
1871 {
1872  int i;
1873 
1874  /* don't disconnect drivers more than once */
1875  if (udc->gadget.speed == USB_SPEED_UNKNOWN)
1876  driver = NULL;
1877  udc->gadget.speed = USB_SPEED_UNKNOWN;
1878 
1879  for (i = 0; i < NR_USB_ENDPOINTS; i++)
1880  pxa_ep_disable(&udc->udc_usb_ep[i].usb_ep);
1881 
1882  if (driver)
1883  driver->disconnect(&udc->gadget);
1884 }
1885 
1892 static int pxa27x_udc_stop(struct usb_gadget_driver *driver)
1893 {
1894  struct pxa_udc *udc = the_controller;
1895 
1896  if (!udc)
1897  return -ENODEV;
1898  if (!driver || driver != udc->driver || !driver->unbind)
1899  return -EINVAL;
1900 
1901  stop_activity(udc, driver);
1902  udc_disable(udc);
1903  dplus_pullup(udc, 0);
1904 
1905  driver->unbind(&udc->gadget);
1906  udc->driver = NULL;
1907 
1908  device_del(&udc->gadget.dev);
1909  dev_info(udc->dev, "unregistered gadget driver '%s'\n",
1910  driver->driver.name);
1911 
1912  if (!IS_ERR_OR_NULL(udc->transceiver))
1913  return otg_set_peripheral(udc->transceiver->otg, NULL);
1914  return 0;
1915 }
1916 
1922 static void handle_ep0_ctrl_req(struct pxa_udc *udc,
1923  struct pxa27x_request *req)
1924 {
1925  struct pxa_ep *ep = &udc->pxa_ep[0];
1926  union {
1927  struct usb_ctrlrequest r;
1928  u32 word[2];
1929  } u;
1930  int i;
1931  int have_extrabytes = 0;
1932  unsigned long flags;
1933 
1934  nuke(ep, -EPROTO);
1935  spin_lock_irqsave(&ep->lock, flags);
1936 
1937  /*
1938  * In the PXA320 manual, in the section about Back-to-Back setup
1939  * packets, it describes this situation. The solution is to set OPC to
1940  * get rid of the status packet, and then continue with the setup
1941  * packet. Generalize to pxa27x CPUs.
1942  */
1943  if (epout_has_pkt(ep) && (ep_count_bytes_remain(ep) == 0))
1944  ep_write_UDCCSR(ep, UDCCSR0_OPC);
1945 
1946  /* read SETUP packet */
1947  for (i = 0; i < 2; i++) {
1948  if (unlikely(ep_is_empty(ep)))
1949  goto stall;
1950  u.word[i] = udc_ep_readl(ep, UDCDR);
1951  }
1952 
1953  have_extrabytes = !ep_is_empty(ep);
1954  while (!ep_is_empty(ep)) {
1955  i = udc_ep_readl(ep, UDCDR);
1956  ep_err(ep, "wrong to have extra bytes for setup : 0x%08x\n", i);
1957  }
1958 
1959  ep_dbg(ep, "SETUP %02x.%02x v%04x i%04x l%04x\n",
1960  u.r.bRequestType, u.r.bRequest,
1961  le16_to_cpu(u.r.wValue), le16_to_cpu(u.r.wIndex),
1962  le16_to_cpu(u.r.wLength));
1963  if (unlikely(have_extrabytes))
1964  goto stall;
1965 
1966  if (u.r.bRequestType & USB_DIR_IN)
1967  set_ep0state(udc, IN_DATA_STAGE);
1968  else
1969  set_ep0state(udc, OUT_DATA_STAGE);
1970 
1971  /* Tell UDC to enter Data Stage */
1972  ep_write_UDCCSR(ep, UDCCSR0_SA | UDCCSR0_OPC);
1973 
1974  spin_unlock_irqrestore(&ep->lock, flags);
1975  i = udc->driver->setup(&udc->gadget, &u.r);
1976  spin_lock_irqsave(&ep->lock, flags);
1977  if (i < 0)
1978  goto stall;
1979 out:
1980  spin_unlock_irqrestore(&ep->lock, flags);
1981  return;
1982 stall:
1983  ep_dbg(ep, "protocol STALL, udccsr0=%03x err %d\n",
1984  udc_ep_readl(ep, UDCCSR), i);
1985  ep_write_UDCCSR(ep, UDCCSR0_FST | UDCCSR0_FTF);
1986  set_ep0state(udc, STALL);
1987  goto out;
1988 }
1989 
2038 static void handle_ep0(struct pxa_udc *udc, int fifo_irq, int opc_irq)
2039 {
2040  u32 udccsr0;
2041  struct pxa_ep *ep = &udc->pxa_ep[0];
2042  struct pxa27x_request *req = NULL;
2043  int completed = 0;
2044 
2045  if (!list_empty(&ep->queue))
2046  req = list_entry(ep->queue.next, struct pxa27x_request, queue);
2047 
2048  udccsr0 = udc_ep_readl(ep, UDCCSR);
2049  ep_dbg(ep, "state=%s, req=%p, udccsr0=0x%03x, udcbcr=%d, irq_msk=%x\n",
2050  EP0_STNAME(udc), req, udccsr0, udc_ep_readl(ep, UDCBCR),
2051  (fifo_irq << 1 | opc_irq));
2052 
2053  if (udccsr0 & UDCCSR0_SST) {
2054  ep_dbg(ep, "clearing stall status\n");
2055  nuke(ep, -EPIPE);
2056  ep_write_UDCCSR(ep, UDCCSR0_SST);
2057  ep0_idle(udc);
2058  }
2059 
2060  if (udccsr0 & UDCCSR0_SA) {
2061  nuke(ep, 0);
2062  set_ep0state(udc, SETUP_STAGE);
2063  }
2064 
2065  switch (udc->ep0state) {
2066  case WAIT_FOR_SETUP:
2067  /*
2068  * Hardware bug : beware, we cannot clear OPC, since we would
2069  * miss a potential OPC irq for a setup packet.
2070  * So, we only do ... nothing, and hope for a next irq with
2071  * UDCCSR0_SA set.
2072  */
2073  break;
2074  case SETUP_STAGE:
2075  udccsr0 &= UDCCSR0_CTRL_REQ_MASK;
2076  if (likely(udccsr0 == UDCCSR0_CTRL_REQ_MASK))
2077  handle_ep0_ctrl_req(udc, req);
2078  break;
2079  case IN_DATA_STAGE: /* GET_DESCRIPTOR */
2080  if (epout_has_pkt(ep))
2081  ep_write_UDCCSR(ep, UDCCSR0_OPC);
2082  if (req && !ep_is_full(ep))
2083  completed = write_ep0_fifo(ep, req);
2084  if (completed)
2085  ep0_end_in_req(ep, req, NULL);
2086  break;
2087  case OUT_DATA_STAGE: /* SET_DESCRIPTOR */
2088  if (epout_has_pkt(ep) && req)
2089  completed = read_ep0_fifo(ep, req);
2090  if (completed)
2091  ep0_end_out_req(ep, req, NULL);
2092  break;
2093  case STALL:
2094  ep_write_UDCCSR(ep, UDCCSR0_FST);
2095  break;
2096  case IN_STATUS_STAGE:
2097  /*
2098  * Hardware bug : beware, we cannot clear OPC, since we would
2099  * miss a potential PC irq for a setup packet.
2100  * So, we only put the ep0 into WAIT_FOR_SETUP state.
2101  */
2102  if (opc_irq)
2103  ep0_idle(udc);
2104  break;
2105  case OUT_STATUS_STAGE:
2107  ep_warn(ep, "should never get in %s state here!!!\n",
2108  EP0_STNAME(ep->dev));
2109  ep0_idle(udc);
2110  break;
2111  }
2112 }
2113 
2123 static void handle_ep(struct pxa_ep *ep)
2124 {
2125  struct pxa27x_request *req;
2126  int completed;
2127  u32 udccsr;
2128  int is_in = ep->dir_in;
2129  int loop = 0;
2130  unsigned long flags;
2131 
2132  spin_lock_irqsave(&ep->lock, flags);
2133  if (ep->in_handle_ep)
2134  goto recursion_detected;
2135  ep->in_handle_ep = 1;
2136 
2137  do {
2138  completed = 0;
2139  udccsr = udc_ep_readl(ep, UDCCSR);
2140 
2141  if (likely(!list_empty(&ep->queue)))
2142  req = list_entry(ep->queue.next,
2143  struct pxa27x_request, queue);
2144  else
2145  req = NULL;
2146 
2147  ep_dbg(ep, "req:%p, udccsr 0x%03x loop=%d\n",
2148  req, udccsr, loop++);
2149 
2150  if (unlikely(udccsr & (UDCCSR_SST | UDCCSR_TRN)))
2151  udc_ep_writel(ep, UDCCSR,
2152  udccsr & (UDCCSR_SST | UDCCSR_TRN));
2153  if (!req)
2154  break;
2155 
2156  if (unlikely(is_in)) {
2157  if (likely(!ep_is_full(ep)))
2158  completed = write_fifo(ep, req);
2159  } else {
2160  if (likely(epout_has_pkt(ep)))
2161  completed = read_fifo(ep, req);
2162  }
2163 
2164  if (completed) {
2165  if (is_in)
2166  ep_end_in_req(ep, req, &flags);
2167  else
2168  ep_end_out_req(ep, req, &flags);
2169  }
2170  } while (completed);
2171 
2172  ep->in_handle_ep = 0;
2173 recursion_detected:
2174  spin_unlock_irqrestore(&ep->lock, flags);
2175 }
2176 
2185 static void pxa27x_change_configuration(struct pxa_udc *udc, int config)
2186 {
2187  struct usb_ctrlrequest req ;
2188 
2189  dev_dbg(udc->dev, "config=%d\n", config);
2190 
2191  udc->config = config;
2192  udc->last_interface = 0;
2193  udc->last_alternate = 0;
2194 
2195  req.bRequestType = 0;
2196  req.bRequest = USB_REQ_SET_CONFIGURATION;
2197  req.wValue = config;
2198  req.wIndex = 0;
2199  req.wLength = 0;
2200 
2201  set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2202  udc->driver->setup(&udc->gadget, &req);
2203  ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2204 }
2205 
2215 static void pxa27x_change_interface(struct pxa_udc *udc, int iface, int alt)
2216 {
2217  struct usb_ctrlrequest req;
2218 
2219  dev_dbg(udc->dev, "interface=%d, alternate setting=%d\n", iface, alt);
2220 
2221  udc->last_interface = iface;
2222  udc->last_alternate = alt;
2223 
2224  req.bRequestType = USB_RECIP_INTERFACE;
2225  req.bRequest = USB_REQ_SET_INTERFACE;
2226  req.wValue = alt;
2227  req.wIndex = iface;
2228  req.wLength = 0;
2229 
2230  set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2231  udc->driver->setup(&udc->gadget, &req);
2232  ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2233 }
2234 
2235 /*
2236  * irq_handle_data - Handle data transfer
2237  * @irq: irq IRQ number
2238  * @udc: dev pxa_udc device structure
2239  *
2240  * Called from irq handler, transferts data to or from endpoint to queue
2241  */
2242 static void irq_handle_data(int irq, struct pxa_udc *udc)
2243 {
2244  int i;
2245  struct pxa_ep *ep;
2246  u32 udcisr0 = udc_readl(udc, UDCISR0) & UDCCISR0_EP_MASK;
2247  u32 udcisr1 = udc_readl(udc, UDCISR1) & UDCCISR1_EP_MASK;
2248 
2249  if (udcisr0 & UDCISR_INT_MASK) {
2250  udc->pxa_ep[0].stats.irqs++;
2251  udc_writel(udc, UDCISR0, UDCISR_INT(0, UDCISR_INT_MASK));
2252  handle_ep0(udc, !!(udcisr0 & UDCICR_FIFOERR),
2253  !!(udcisr0 & UDCICR_PKTCOMPL));
2254  }
2255 
2256  udcisr0 >>= 2;
2257  for (i = 1; udcisr0 != 0 && i < 16; udcisr0 >>= 2, i++) {
2258  if (!(udcisr0 & UDCISR_INT_MASK))
2259  continue;
2260 
2261  udc_writel(udc, UDCISR0, UDCISR_INT(i, UDCISR_INT_MASK));
2262 
2263  WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2264  if (i < ARRAY_SIZE(udc->pxa_ep)) {
2265  ep = &udc->pxa_ep[i];
2266  ep->stats.irqs++;
2267  handle_ep(ep);
2268  }
2269  }
2270 
2271  for (i = 16; udcisr1 != 0 && i < 24; udcisr1 >>= 2, i++) {
2272  udc_writel(udc, UDCISR1, UDCISR_INT(i - 16, UDCISR_INT_MASK));
2273  if (!(udcisr1 & UDCISR_INT_MASK))
2274  continue;
2275 
2276  WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2277  if (i < ARRAY_SIZE(udc->pxa_ep)) {
2278  ep = &udc->pxa_ep[i];
2279  ep->stats.irqs++;
2280  handle_ep(ep);
2281  }
2282  }
2283 
2284 }
2285 
2290 static void irq_udc_suspend(struct pxa_udc *udc)
2291 {
2293  udc->stats.irqs_suspend++;
2294 
2295  if (udc->gadget.speed != USB_SPEED_UNKNOWN
2296  && udc->driver && udc->driver->suspend)
2297  udc->driver->suspend(&udc->gadget);
2298  ep0_idle(udc);
2299 }
2300 
2305 static void irq_udc_resume(struct pxa_udc *udc)
2306 {
2308  udc->stats.irqs_resume++;
2309 
2310  if (udc->gadget.speed != USB_SPEED_UNKNOWN
2311  && udc->driver && udc->driver->resume)
2312  udc->driver->resume(&udc->gadget);
2313 }
2314 
2319 static void irq_udc_reconfig(struct pxa_udc *udc)
2320 {
2321  unsigned config, interface, alternate, config_change;
2322  u32 udccr = udc_readl(udc, UDCCR);
2323 
2325  udc->stats.irqs_reconfig++;
2326 
2327  config = (udccr & UDCCR_ACN) >> UDCCR_ACN_S;
2328  config_change = (config != udc->config);
2329  pxa27x_change_configuration(udc, config);
2330 
2331  interface = (udccr & UDCCR_AIN) >> UDCCR_AIN_S;
2332  alternate = (udccr & UDCCR_AAISN) >> UDCCR_AAISN_S;
2333  pxa27x_change_interface(udc, interface, alternate);
2334 
2335  if (config_change)
2336  update_pxa_ep_matches(udc);
2337  udc_set_mask_UDCCR(udc, UDCCR_SMAC);
2338 }
2339 
2344 static void irq_udc_reset(struct pxa_udc *udc)
2345 {
2346  u32 udccr = udc_readl(udc, UDCCR);
2347  struct pxa_ep *ep = &udc->pxa_ep[0];
2348 
2349  dev_info(udc->dev, "USB reset\n");
2351  udc->stats.irqs_reset++;
2352 
2353  if ((udccr & UDCCR_UDA) == 0) {
2354  dev_dbg(udc->dev, "USB reset start\n");
2355  stop_activity(udc, udc->driver);
2356  }
2357  udc->gadget.speed = USB_SPEED_FULL;
2358  memset(&udc->stats, 0, sizeof udc->stats);
2359 
2360  nuke(ep, -EPROTO);
2361  ep_write_UDCCSR(ep, UDCCSR0_FTF | UDCCSR0_OPC);
2362  ep0_idle(udc);
2363 }
2364 
2372 static irqreturn_t pxa_udc_irq(int irq, void *_dev)
2373 {
2374  struct pxa_udc *udc = _dev;
2375  u32 udcisr0 = udc_readl(udc, UDCISR0);
2376  u32 udcisr1 = udc_readl(udc, UDCISR1);
2377  u32 udccr = udc_readl(udc, UDCCR);
2378  u32 udcisr1_spec;
2379 
2380  dev_vdbg(udc->dev, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, "
2381  "UDCCR:0x%08x\n", udcisr0, udcisr1, udccr);
2382 
2383  udcisr1_spec = udcisr1 & 0xf8000000;
2384  if (unlikely(udcisr1_spec & UDCISR1_IRSU))
2385  irq_udc_suspend(udc);
2386  if (unlikely(udcisr1_spec & UDCISR1_IRRU))
2387  irq_udc_resume(udc);
2388  if (unlikely(udcisr1_spec & UDCISR1_IRCC))
2389  irq_udc_reconfig(udc);
2390  if (unlikely(udcisr1_spec & UDCISR1_IRRS))
2391  irq_udc_reset(udc);
2392 
2393  if ((udcisr0 & UDCCISR0_EP_MASK) | (udcisr1 & UDCCISR1_EP_MASK))
2394  irq_handle_data(irq, udc);
2395 
2396  return IRQ_HANDLED;
2397 }
2398 
2399 static struct pxa_udc memory = {
2400  .gadget = {
2401  .ops = &pxa_udc_ops,
2402  .ep0 = &memory.udc_usb_ep[0].usb_ep,
2403  .name = driver_name,
2404  .dev = {
2405  .init_name = "gadget",
2406  },
2407  },
2408 
2409  .udc_usb_ep = {
2410  USB_EP_CTRL,
2411  USB_EP_OUT_BULK(1),
2412  USB_EP_IN_BULK(2),
2413  USB_EP_IN_ISO(3),
2414  USB_EP_OUT_ISO(4),
2415  USB_EP_IN_INT(5),
2416  },
2417 
2418  .pxa_ep = {
2419  PXA_EP_CTRL,
2420  /* Endpoints for gadget zero */
2421  PXA_EP_OUT_BULK(1, 1, 3, 0, 0),
2422  PXA_EP_IN_BULK(2, 2, 3, 0, 0),
2423  /* Endpoints for ether gadget, file storage gadget */
2424  PXA_EP_OUT_BULK(3, 1, 1, 0, 0),
2425  PXA_EP_IN_BULK(4, 2, 1, 0, 0),
2426  PXA_EP_IN_ISO(5, 3, 1, 0, 0),
2427  PXA_EP_OUT_ISO(6, 4, 1, 0, 0),
2428  PXA_EP_IN_INT(7, 5, 1, 0, 0),
2429  /* Endpoints for RNDIS, serial */
2430  PXA_EP_OUT_BULK(8, 1, 2, 0, 0),
2431  PXA_EP_IN_BULK(9, 2, 2, 0, 0),
2432  PXA_EP_IN_INT(10, 5, 2, 0, 0),
2433  /*
2434  * All the following endpoints are only for completion. They
2435  * won't never work, as multiple interfaces are really broken on
2436  * the pxa.
2437  */
2438  PXA_EP_OUT_BULK(11, 1, 2, 1, 0),
2439  PXA_EP_IN_BULK(12, 2, 2, 1, 0),
2440  /* Endpoint for CDC Ether */
2441  PXA_EP_OUT_BULK(13, 1, 1, 1, 1),
2442  PXA_EP_IN_BULK(14, 2, 1, 1, 1),
2443  }
2444 };
2445 
2453 static int __init pxa_udc_probe(struct platform_device *pdev)
2454 {
2455  struct resource *regs;
2456  struct pxa_udc *udc = &memory;
2457  int retval = 0, gpio;
2458 
2459  regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2460  if (!regs)
2461  return -ENXIO;
2462  udc->irq = platform_get_irq(pdev, 0);
2463  if (udc->irq < 0)
2464  return udc->irq;
2465 
2466  udc->dev = &pdev->dev;
2467  udc->mach = pdev->dev.platform_data;
2469 
2470  gpio = udc->mach->gpio_pullup;
2471  if (gpio_is_valid(gpio)) {
2472  retval = gpio_request(gpio, "USB D+ pullup");
2473  if (retval == 0)
2475  udc->mach->gpio_pullup_inverted);
2476  }
2477  if (retval) {
2478  dev_err(&pdev->dev, "Couldn't request gpio %d : %d\n",
2479  gpio, retval);
2480  return retval;
2481  }
2482 
2483  udc->clk = clk_get(&pdev->dev, NULL);
2484  if (IS_ERR(udc->clk)) {
2485  retval = PTR_ERR(udc->clk);
2486  goto err_clk;
2487  }
2488 
2489  retval = -ENOMEM;
2490  udc->regs = ioremap(regs->start, resource_size(regs));
2491  if (!udc->regs) {
2492  dev_err(&pdev->dev, "Unable to map UDC I/O memory\n");
2493  goto err_map;
2494  }
2495 
2496  device_initialize(&udc->gadget.dev);
2497  udc->gadget.dev.parent = &pdev->dev;
2498  udc->gadget.dev.dma_mask = NULL;
2499  udc->vbus_sensed = 0;
2500 
2501  the_controller = udc;
2502  platform_set_drvdata(pdev, udc);
2503  udc_init_data(udc);
2504  pxa_eps_setup(udc);
2505 
2506  /* irq setup after old hardware state is cleaned up */
2507  retval = request_irq(udc->irq, pxa_udc_irq,
2508  IRQF_SHARED, driver_name, udc);
2509  if (retval != 0) {
2510  dev_err(udc->dev, "%s: can't get irq %i, err %d\n",
2511  driver_name, udc->irq, retval);
2512  goto err_irq;
2513  }
2514  retval = usb_add_gadget_udc(&pdev->dev, &udc->gadget);
2515  if (retval)
2516  goto err_add_udc;
2517 
2518  pxa_init_debugfs(udc);
2519  return 0;
2520 err_add_udc:
2521  free_irq(udc->irq, udc);
2522 err_irq:
2523  iounmap(udc->regs);
2524 err_map:
2525  clk_put(udc->clk);
2526  udc->clk = NULL;
2527 err_clk:
2528  return retval;
2529 }
2530 
2535 static int __exit pxa_udc_remove(struct platform_device *_dev)
2536 {
2537  struct pxa_udc *udc = platform_get_drvdata(_dev);
2538  int gpio = udc->mach->gpio_pullup;
2539 
2540  usb_del_gadget_udc(&udc->gadget);
2542  free_irq(udc->irq, udc);
2543  pxa_cleanup_debugfs(udc);
2544  if (gpio_is_valid(gpio))
2545  gpio_free(gpio);
2546 
2547  usb_put_phy(udc->transceiver);
2548 
2549  udc->transceiver = NULL;
2550  platform_set_drvdata(_dev, NULL);
2551  the_controller = NULL;
2552  clk_put(udc->clk);
2553  iounmap(udc->regs);
2554 
2555  return 0;
2556 }
2557 
2558 static void pxa_udc_shutdown(struct platform_device *_dev)
2559 {
2560  struct pxa_udc *udc = platform_get_drvdata(_dev);
2561 
2562  if (udc_readl(udc, UDCCR) & UDCCR_UDE)
2563  udc_disable(udc);
2564 }
2565 
2566 #ifdef CONFIG_PXA27x
2567 extern void pxa27x_clear_otgph(void);
2568 #else
2569 #define pxa27x_clear_otgph() do {} while (0)
2570 #endif
2571 
2572 #ifdef CONFIG_PM
2573 
2581 static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state)
2582 {
2583  int i;
2584  struct pxa_udc *udc = platform_get_drvdata(_dev);
2585  struct pxa_ep *ep;
2586 
2587  ep = &udc->pxa_ep[0];
2588  udc->udccsr0 = udc_ep_readl(ep, UDCCSR);
2589  for (i = 1; i < NR_PXA_ENDPOINTS; i++) {
2590  ep = &udc->pxa_ep[i];
2591  ep->udccsr_value = udc_ep_readl(ep, UDCCSR);
2592  ep->udccr_value = udc_ep_readl(ep, UDCCR);
2593  ep_dbg(ep, "udccsr:0x%03x, udccr:0x%x\n",
2594  ep->udccsr_value, ep->udccr_value);
2595  }
2596 
2597  udc_disable(udc);
2598  udc->pullup_resume = udc->pullup_on;
2599  dplus_pullup(udc, 0);
2600 
2601  return 0;
2602 }
2603 
2611 static int pxa_udc_resume(struct platform_device *_dev)
2612 {
2613  int i;
2614  struct pxa_udc *udc = platform_get_drvdata(_dev);
2615  struct pxa_ep *ep;
2616 
2617  ep = &udc->pxa_ep[0];
2618  udc_ep_writel(ep, UDCCSR, udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME));
2619  for (i = 1; i < NR_PXA_ENDPOINTS; i++) {
2620  ep = &udc->pxa_ep[i];
2621  udc_ep_writel(ep, UDCCSR, ep->udccsr_value);
2622  udc_ep_writel(ep, UDCCR, ep->udccr_value);
2623  ep_dbg(ep, "udccsr:0x%03x, udccr:0x%x\n",
2624  ep->udccsr_value, ep->udccr_value);
2625  }
2626 
2627  dplus_pullup(udc, udc->pullup_resume);
2628  if (should_enable_udc(udc))
2629  udc_enable(udc);
2630  /*
2631  * We do not handle OTG yet.
2632  *
2633  * OTGPH bit is set when sleep mode is entered.
2634  * it indicates that OTG pad is retaining its state.
2635  * Upon exit from sleep mode and before clearing OTGPH,
2636  * Software must configure the USB OTG pad, UDC, and UHC
2637  * to the state they were in before entering sleep mode.
2638  */
2640 
2641  return 0;
2642 }
2643 #endif
2644 
2645 /* work with hotplug and coldplug */
2646 MODULE_ALIAS("platform:pxa27x-udc");
2647 
2648 static struct platform_driver udc_driver = {
2649  .driver = {
2650  .name = "pxa27x-udc",
2651  .owner = THIS_MODULE,
2652  },
2653  .remove = __exit_p(pxa_udc_remove),
2654  .shutdown = pxa_udc_shutdown,
2655 #ifdef CONFIG_PM
2656  .suspend = pxa_udc_suspend,
2657  .resume = pxa_udc_resume
2658 #endif
2659 };
2660 
2661 static int __init udc_init(void)
2662 {
2663  if (!cpu_is_pxa27x() && !cpu_is_pxa3xx())
2664  return -ENODEV;
2665 
2666  printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
2667  return platform_driver_probe(&udc_driver, pxa_udc_probe);
2668 }
2669 module_init(udc_init);
2670 
2671 
2672 static void __exit udc_exit(void)
2673 {
2674  platform_driver_unregister(&udc_driver);
2675 }
2676 module_exit(udc_exit);
2677 
2679 MODULE_AUTHOR("Robert Jarzmik");
2680 MODULE_LICENSE("GPL");