Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
[sfrench/cifs-2.6.git] / drivers / usb / gadget / lh7a40x_udc.c
1 /*
2  * linux/drivers/usb/gadget/lh7a40x_udc.c
3  * Sharp LH7A40x on-chip full speed USB device controllers
4  *
5  * Copyright (C) 2004 Mikko Lahteenmaki, Nordic ID
6  * Copyright (C) 2004 Bo Henriksen, Nordic ID
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  */
23
24 #include <linux/platform_device.h>
25 #include <linux/slab.h>
26
27 #include "lh7a40x_udc.h"
28
29 //#define DEBUG printk
30 //#define DEBUG_EP0 printk
31 //#define DEBUG_SETUP printk
32
33 #ifndef DEBUG_EP0
34 # define DEBUG_EP0(fmt,args...)
35 #endif
36 #ifndef DEBUG_SETUP
37 # define DEBUG_SETUP(fmt,args...)
38 #endif
39 #ifndef DEBUG
40 # define NO_STATES
41 # define DEBUG(fmt,args...)
42 #endif
43
44 #define DRIVER_DESC                     "LH7A40x USB Device Controller"
45 #define DRIVER_VERSION          __DATE__
46
47 #ifndef _BIT                    /* FIXME - what happended to _BIT in 2.6.7bk18? */
48 #define _BIT(x) (1<<(x))
49 #endif
50
51 struct lh7a40x_udc *the_controller;
52
53 static const char driver_name[] = "lh7a40x_udc";
54 static const char driver_desc[] = DRIVER_DESC;
55 static const char ep0name[] = "ep0-control";
56
57 /*
58   Local definintions.
59 */
60
61 #ifndef NO_STATES
62 static char *state_names[] = {
63         "WAIT_FOR_SETUP",
64         "DATA_STATE_XMIT",
65         "DATA_STATE_NEED_ZLP",
66         "WAIT_FOR_OUT_STATUS",
67         "DATA_STATE_RECV"
68 };
69 #endif
70
71 /*
72   Local declarations.
73 */
74 static int lh7a40x_ep_enable(struct usb_ep *ep,
75                              const struct usb_endpoint_descriptor *);
76 static int lh7a40x_ep_disable(struct usb_ep *ep);
77 static struct usb_request *lh7a40x_alloc_request(struct usb_ep *ep, gfp_t);
78 static void lh7a40x_free_request(struct usb_ep *ep, struct usb_request *);
79 static int lh7a40x_queue(struct usb_ep *ep, struct usb_request *, gfp_t);
80 static int lh7a40x_dequeue(struct usb_ep *ep, struct usb_request *);
81 static int lh7a40x_set_halt(struct usb_ep *ep, int);
82 static int lh7a40x_fifo_status(struct usb_ep *ep);
83 static void lh7a40x_fifo_flush(struct usb_ep *ep);
84 static void lh7a40x_ep0_kick(struct lh7a40x_udc *dev, struct lh7a40x_ep *ep);
85 static void lh7a40x_handle_ep0(struct lh7a40x_udc *dev, u32 intr);
86
87 static void done(struct lh7a40x_ep *ep, struct lh7a40x_request *req,
88                  int status);
89 static void pio_irq_enable(int bEndpointAddress);
90 static void pio_irq_disable(int bEndpointAddress);
91 static void stop_activity(struct lh7a40x_udc *dev,
92                           struct usb_gadget_driver *driver);
93 static void flush(struct lh7a40x_ep *ep);
94 static void udc_enable(struct lh7a40x_udc *dev);
95 static void udc_set_address(struct lh7a40x_udc *dev, unsigned char address);
96
97 static struct usb_ep_ops lh7a40x_ep_ops = {
98         .enable = lh7a40x_ep_enable,
99         .disable = lh7a40x_ep_disable,
100
101         .alloc_request = lh7a40x_alloc_request,
102         .free_request = lh7a40x_free_request,
103
104         .queue = lh7a40x_queue,
105         .dequeue = lh7a40x_dequeue,
106
107         .set_halt = lh7a40x_set_halt,
108         .fifo_status = lh7a40x_fifo_status,
109         .fifo_flush = lh7a40x_fifo_flush,
110 };
111
112 /* Inline code */
113
114 static __inline__ int write_packet(struct lh7a40x_ep *ep,
115                                    struct lh7a40x_request *req, int max)
116 {
117         u8 *buf;
118         int length, count;
119         volatile u32 *fifo = (volatile u32 *)ep->fifo;
120
121         buf = req->req.buf + req->req.actual;
122         prefetch(buf);
123
124         length = req->req.length - req->req.actual;
125         length = min(length, max);
126         req->req.actual += length;
127
128         DEBUG("Write %d (max %d), fifo %p\n", length, max, fifo);
129
130         count = length;
131         while (count--) {
132                 *fifo = *buf++;
133         }
134
135         return length;
136 }
137
138 static __inline__ void usb_set_index(u32 ep)
139 {
140         *(volatile u32 *)io_p2v(USB_INDEX) = ep;
141 }
142
143 static __inline__ u32 usb_read(u32 port)
144 {
145         return *(volatile u32 *)io_p2v(port);
146 }
147
148 static __inline__ void usb_write(u32 val, u32 port)
149 {
150         *(volatile u32 *)io_p2v(port) = val;
151 }
152
153 static __inline__ void usb_set(u32 val, u32 port)
154 {
155         volatile u32 *ioport = (volatile u32 *)io_p2v(port);
156         u32 after = (*ioport) | val;
157         *ioport = after;
158 }
159
160 static __inline__ void usb_clear(u32 val, u32 port)
161 {
162         volatile u32 *ioport = (volatile u32 *)io_p2v(port);
163         u32 after = (*ioport) & ~val;
164         *ioport = after;
165 }
166
167 /*-------------------------------------------------------------------------*/
168
169 #define GPIO_PORTC_DR   (0x80000E08)
170 #define GPIO_PORTC_DDR  (0x80000E18)
171 #define GPIO_PORTC_PDR  (0x80000E70)
172
173 /* get port C pin data register */
174 #define get_portc_pdr(bit)              ((usb_read(GPIO_PORTC_PDR) & _BIT(bit)) != 0)
175 /* get port C data direction register */
176 #define get_portc_ddr(bit)              ((usb_read(GPIO_PORTC_DDR) & _BIT(bit)) != 0)
177 /* set port C data register */
178 #define set_portc_dr(bit, val)  (val ? usb_set(_BIT(bit), GPIO_PORTC_DR) : usb_clear(_BIT(bit), GPIO_PORTC_DR))
179 /* set port C data direction register */
180 #define set_portc_ddr(bit, val) (val ? usb_set(_BIT(bit), GPIO_PORTC_DDR) : usb_clear(_BIT(bit), GPIO_PORTC_DDR))
181
182 /*
183  * LPD7A404 GPIO's:
184  * Port C bit 1 = USB Port 1 Power Enable
185  * Port C bit 2 = USB Port 1 Data Carrier Detect
186  */
187 #define is_usb_connected()              get_portc_pdr(2)
188
189 #ifdef CONFIG_USB_GADGET_DEBUG_FILES
190
191 static const char proc_node_name[] = "driver/udc";
192
193 static int
194 udc_proc_read(char *page, char **start, off_t off, int count,
195               int *eof, void *_dev)
196 {
197         char *buf = page;
198         struct lh7a40x_udc *dev = _dev;
199         char *next = buf;
200         unsigned size = count;
201         unsigned long flags;
202         int t;
203
204         if (off != 0)
205                 return 0;
206
207         local_irq_save(flags);
208
209         /* basic device status */
210         t = scnprintf(next, size,
211                       DRIVER_DESC "\n"
212                       "%s version: %s\n"
213                       "Gadget driver: %s\n"
214                       "Host: %s\n\n",
215                       driver_name, DRIVER_VERSION,
216                       dev->driver ? dev->driver->driver.name : "(none)",
217                       is_usb_connected()? "full speed" : "disconnected");
218         size -= t;
219         next += t;
220
221         t = scnprintf(next, size,
222                       "GPIO:\n"
223                       " Port C bit 1: %d, dir %d\n"
224                       " Port C bit 2: %d, dir %d\n\n",
225                       get_portc_pdr(1), get_portc_ddr(1),
226                       get_portc_pdr(2), get_portc_ddr(2)
227             );
228         size -= t;
229         next += t;
230
231         t = scnprintf(next, size,
232                       "DCP pullup: %d\n\n",
233                       (usb_read(USB_PM) & PM_USB_DCP) != 0);
234         size -= t;
235         next += t;
236
237         local_irq_restore(flags);
238         *eof = 1;
239         return count - size;
240 }
241
242 #define create_proc_files()     create_proc_read_entry(proc_node_name, 0, NULL, udc_proc_read, dev)
243 #define remove_proc_files()     remove_proc_entry(proc_node_name, NULL)
244
245 #else   /* !CONFIG_USB_GADGET_DEBUG_FILES */
246
247 #define create_proc_files() do {} while (0)
248 #define remove_proc_files() do {} while (0)
249
250 #endif  /* CONFIG_USB_GADGET_DEBUG_FILES */
251
252 /*
253  *      udc_disable - disable USB device controller
254  */
255 static void udc_disable(struct lh7a40x_udc *dev)
256 {
257         DEBUG("%s, %p\n", __func__, dev);
258
259         udc_set_address(dev, 0);
260
261         /* Disable interrupts */
262         usb_write(0, USB_IN_INT_EN);
263         usb_write(0, USB_OUT_INT_EN);
264         usb_write(0, USB_INT_EN);
265
266         /* Disable the USB */
267         usb_write(0, USB_PM);
268
269 #ifdef CONFIG_ARCH_LH7A404
270         /* Disable USB power */
271         set_portc_dr(1, 0);
272 #endif
273
274         /* if hardware supports it, disconnect from usb */
275         /* make_usb_disappear(); */
276
277         dev->ep0state = WAIT_FOR_SETUP;
278         dev->gadget.speed = USB_SPEED_UNKNOWN;
279         dev->usb_address = 0;
280 }
281
282 /*
283  *      udc_reinit - initialize software state
284  */
285 static void udc_reinit(struct lh7a40x_udc *dev)
286 {
287         u32 i;
288
289         DEBUG("%s, %p\n", __func__, dev);
290
291         /* device/ep0 records init */
292         INIT_LIST_HEAD(&dev->gadget.ep_list);
293         INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
294         dev->ep0state = WAIT_FOR_SETUP;
295
296         /* basic endpoint records init */
297         for (i = 0; i < UDC_MAX_ENDPOINTS; i++) {
298                 struct lh7a40x_ep *ep = &dev->ep[i];
299
300                 if (i != 0)
301                         list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
302
303                 ep->desc = 0;
304                 ep->stopped = 0;
305                 INIT_LIST_HEAD(&ep->queue);
306                 ep->pio_irqs = 0;
307         }
308
309         /* the rest was statically initialized, and is read-only */
310 }
311
312 #define BYTES2MAXP(x)   (x / 8)
313 #define MAXP2BYTES(x)   (x * 8)
314
315 /* until it's enabled, this UDC should be completely invisible
316  * to any USB host.
317  */
318 static void udc_enable(struct lh7a40x_udc *dev)
319 {
320         int ep;
321
322         DEBUG("%s, %p\n", __func__, dev);
323
324         dev->gadget.speed = USB_SPEED_UNKNOWN;
325
326 #ifdef CONFIG_ARCH_LH7A404
327         /* Set Port C bit 1 & 2 as output */
328         set_portc_ddr(1, 1);
329         set_portc_ddr(2, 1);
330
331         /* Enable USB power */
332         set_portc_dr(1, 0);
333 #endif
334
335         /*
336          * C.f Chapter 18.1.3.1 Initializing the USB
337          */
338
339         /* Disable the USB */
340         usb_clear(PM_USB_ENABLE, USB_PM);
341
342         /* Reset APB & I/O sides of the USB */
343         usb_set(USB_RESET_APB | USB_RESET_IO, USB_RESET);
344         mdelay(5);
345         usb_clear(USB_RESET_APB | USB_RESET_IO, USB_RESET);
346
347         /* Set MAXP values for each */
348         for (ep = 0; ep < UDC_MAX_ENDPOINTS; ep++) {
349                 struct lh7a40x_ep *ep_reg = &dev->ep[ep];
350                 u32 csr;
351
352                 usb_set_index(ep);
353
354                 switch (ep_reg->ep_type) {
355                 case ep_bulk_in:
356                 case ep_interrupt:
357                         usb_clear(USB_IN_CSR2_USB_DMA_EN | USB_IN_CSR2_AUTO_SET,
358                                   ep_reg->csr2);
359                         /* Fall through */
360                 case ep_control:
361                         usb_write(BYTES2MAXP(ep_maxpacket(ep_reg)),
362                                   USB_IN_MAXP);
363                         break;
364                 case ep_bulk_out:
365                         usb_clear(USB_OUT_CSR2_USB_DMA_EN |
366                                   USB_OUT_CSR2_AUTO_CLR, ep_reg->csr2);
367                         usb_write(BYTES2MAXP(ep_maxpacket(ep_reg)),
368                                   USB_OUT_MAXP);
369                         break;
370                 }
371
372                 /* Read & Write CSR1, just in case */
373                 csr = usb_read(ep_reg->csr1);
374                 usb_write(csr, ep_reg->csr1);
375
376                 flush(ep_reg);
377         }
378
379         /* Disable interrupts */
380         usb_write(0, USB_IN_INT_EN);
381         usb_write(0, USB_OUT_INT_EN);
382         usb_write(0, USB_INT_EN);
383
384         /* Enable interrupts */
385         usb_set(USB_IN_INT_EP0, USB_IN_INT_EN);
386         usb_set(USB_INT_RESET_INT | USB_INT_RESUME_INT, USB_INT_EN);
387         /* Dont enable rest of the interrupts */
388         /* usb_set(USB_IN_INT_EP3 | USB_IN_INT_EP1 | USB_IN_INT_EP0, USB_IN_INT_EN);
389            usb_set(USB_OUT_INT_EP2, USB_OUT_INT_EN); */
390
391         /* Enable SUSPEND */
392         usb_set(PM_ENABLE_SUSPEND, USB_PM);
393
394         /* Enable the USB */
395         usb_set(PM_USB_ENABLE, USB_PM);
396
397 #ifdef CONFIG_ARCH_LH7A404
398         /* NOTE: DOES NOT WORK! */
399         /* Let host detect UDC:
400          * Software must write a 0 to the PMR:DCP_CTRL bit to turn this
401          * transistor on and pull the USBDP pin HIGH.
402          */
403         /* usb_clear(PM_USB_DCP, USB_PM);
404            usb_set(PM_USB_DCP, USB_PM); */
405 #endif
406 }
407
408 /*
409   Register entry point for the peripheral controller driver.
410 */
411 int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
412                 int (*bind)(struct usb_gadget *))
413 {
414         struct lh7a40x_udc *dev = the_controller;
415         int retval;
416
417         DEBUG("%s: %s\n", __func__, driver->driver.name);
418
419         if (!driver
420                         || driver->speed != USB_SPEED_FULL
421                         || !bind
422                         || !driver->disconnect
423                         || !driver->setup)
424                 return -EINVAL;
425         if (!dev)
426                 return -ENODEV;
427         if (dev->driver)
428                 return -EBUSY;
429
430         /* first hook up the driver ... */
431         dev->driver = driver;
432         dev->gadget.dev.driver = &driver->driver;
433
434         device_add(&dev->gadget.dev);
435         retval = bind(&dev->gadget);
436         if (retval) {
437                 printk(KERN_WARNING "%s: bind to driver %s --> error %d\n",
438                        dev->gadget.name, driver->driver.name, retval);
439                 device_del(&dev->gadget.dev);
440
441                 dev->driver = 0;
442                 dev->gadget.dev.driver = 0;
443                 return retval;
444         }
445
446         /* ... then enable host detection and ep0; and we're ready
447          * for set_configuration as well as eventual disconnect.
448          * NOTE:  this shouldn't power up until later.
449          */
450         printk(KERN_WARNING "%s: registered gadget driver '%s'\n",
451                dev->gadget.name, driver->driver.name);
452
453         udc_enable(dev);
454
455         return 0;
456 }
457 EXPORT_SYMBOL(usb_gadget_probe_driver);
458
459 /*
460   Unregister entry point for the peripheral controller driver.
461 */
462 int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
463 {
464         struct lh7a40x_udc *dev = the_controller;
465         unsigned long flags;
466
467         if (!dev)
468                 return -ENODEV;
469         if (!driver || driver != dev->driver || !driver->unbind)
470                 return -EINVAL;
471
472         spin_lock_irqsave(&dev->lock, flags);
473         dev->driver = 0;
474         stop_activity(dev, driver);
475         spin_unlock_irqrestore(&dev->lock, flags);
476
477         driver->unbind(&dev->gadget);
478         dev->gadget.dev.driver = NULL;
479         device_del(&dev->gadget.dev);
480
481         udc_disable(dev);
482
483         DEBUG("unregistered gadget driver '%s'\n", driver->driver.name);
484         return 0;
485 }
486
487 EXPORT_SYMBOL(usb_gadget_unregister_driver);
488
489 /*-------------------------------------------------------------------------*/
490
491 /** Write request to FIFO (max write == maxp size)
492  *  Return:  0 = still running, 1 = completed, negative = errno
493  *  NOTE: INDEX register must be set for EP
494  */
495 static int write_fifo(struct lh7a40x_ep *ep, struct lh7a40x_request *req)
496 {
497         u32 max;
498         u32 csr;
499
500         max = le16_to_cpu(ep->desc->wMaxPacketSize);
501
502         csr = usb_read(ep->csr1);
503         DEBUG("CSR: %x %d\n", csr, csr & USB_IN_CSR1_FIFO_NOT_EMPTY);
504
505         if (!(csr & USB_IN_CSR1_FIFO_NOT_EMPTY)) {
506                 unsigned count;
507                 int is_last, is_short;
508
509                 count = write_packet(ep, req, max);
510                 usb_set(USB_IN_CSR1_IN_PKT_RDY, ep->csr1);
511
512                 /* last packet is usually short (or a zlp) */
513                 if (unlikely(count != max))
514                         is_last = is_short = 1;
515                 else {
516                         if (likely(req->req.length != req->req.actual)
517                             || req->req.zero)
518                                 is_last = 0;
519                         else
520                                 is_last = 1;
521                         /* interrupt/iso maxpacket may not fill the fifo */
522                         is_short = unlikely(max < ep_maxpacket(ep));
523                 }
524
525                 DEBUG("%s: wrote %s %d bytes%s%s %d left %p\n", __func__,
526                       ep->ep.name, count,
527                       is_last ? "/L" : "", is_short ? "/S" : "",
528                       req->req.length - req->req.actual, req);
529
530                 /* requests complete when all IN data is in the FIFO */
531                 if (is_last) {
532                         done(ep, req, 0);
533                         if (list_empty(&ep->queue)) {
534                                 pio_irq_disable(ep_index(ep));
535                         }
536                         return 1;
537                 }
538         } else {
539                 DEBUG("Hmm.. %d ep FIFO is not empty!\n", ep_index(ep));
540         }
541
542         return 0;
543 }
544
545 /** Read to request from FIFO (max read == bytes in fifo)
546  *  Return:  0 = still running, 1 = completed, negative = errno
547  *  NOTE: INDEX register must be set for EP
548  */
549 static int read_fifo(struct lh7a40x_ep *ep, struct lh7a40x_request *req)
550 {
551         u32 csr;
552         u8 *buf;
553         unsigned bufferspace, count, is_short;
554         volatile u32 *fifo = (volatile u32 *)ep->fifo;
555
556         /* make sure there's a packet in the FIFO. */
557         csr = usb_read(ep->csr1);
558         if (!(csr & USB_OUT_CSR1_OUT_PKT_RDY)) {
559                 DEBUG("%s: Packet NOT ready!\n", __func__);
560                 return -EINVAL;
561         }
562
563         buf = req->req.buf + req->req.actual;
564         prefetchw(buf);
565         bufferspace = req->req.length - req->req.actual;
566
567         /* read all bytes from this packet */
568         count = usb_read(USB_OUT_FIFO_WC1);
569         req->req.actual += min(count, bufferspace);
570
571         is_short = (count < ep->ep.maxpacket);
572         DEBUG("read %s %02x, %d bytes%s req %p %d/%d\n",
573               ep->ep.name, csr, count,
574               is_short ? "/S" : "", req, req->req.actual, req->req.length);
575
576         while (likely(count-- != 0)) {
577                 u8 byte = (u8) (*fifo & 0xff);
578
579                 if (unlikely(bufferspace == 0)) {
580                         /* this happens when the driver's buffer
581                          * is smaller than what the host sent.
582                          * discard the extra data.
583                          */
584                         if (req->req.status != -EOVERFLOW)
585                                 printk(KERN_WARNING "%s overflow %d\n",
586                                        ep->ep.name, count);
587                         req->req.status = -EOVERFLOW;
588                 } else {
589                         *buf++ = byte;
590                         bufferspace--;
591                 }
592         }
593
594         usb_clear(USB_OUT_CSR1_OUT_PKT_RDY, ep->csr1);
595
596         /* completion */
597         if (is_short || req->req.actual == req->req.length) {
598                 done(ep, req, 0);
599                 usb_set(USB_OUT_CSR1_FIFO_FLUSH, ep->csr1);
600
601                 if (list_empty(&ep->queue))
602                         pio_irq_disable(ep_index(ep));
603                 return 1;
604         }
605
606         /* finished that packet.  the next one may be waiting... */
607         return 0;
608 }
609
610 /*
611  *      done - retire a request; caller blocked irqs
612  *  INDEX register is preserved to keep same
613  */
614 static void done(struct lh7a40x_ep *ep, struct lh7a40x_request *req, int status)
615 {
616         unsigned int stopped = ep->stopped;
617         u32 index;
618
619         DEBUG("%s, %p\n", __func__, ep);
620         list_del_init(&req->queue);
621
622         if (likely(req->req.status == -EINPROGRESS))
623                 req->req.status = status;
624         else
625                 status = req->req.status;
626
627         if (status && status != -ESHUTDOWN)
628                 DEBUG("complete %s req %p stat %d len %u/%u\n",
629                       ep->ep.name, &req->req, status,
630                       req->req.actual, req->req.length);
631
632         /* don't modify queue heads during completion callback */
633         ep->stopped = 1;
634         /* Read current index (completion may modify it) */
635         index = usb_read(USB_INDEX);
636
637         spin_unlock(&ep->dev->lock);
638         req->req.complete(&ep->ep, &req->req);
639         spin_lock(&ep->dev->lock);
640
641         /* Restore index */
642         usb_set_index(index);
643         ep->stopped = stopped;
644 }
645
646 /** Enable EP interrupt */
647 static void pio_irq_enable(int ep)
648 {
649         DEBUG("%s: %d\n", __func__, ep);
650
651         switch (ep) {
652         case 1:
653                 usb_set(USB_IN_INT_EP1, USB_IN_INT_EN);
654                 break;
655         case 2:
656                 usb_set(USB_OUT_INT_EP2, USB_OUT_INT_EN);
657                 break;
658         case 3:
659                 usb_set(USB_IN_INT_EP3, USB_IN_INT_EN);
660                 break;
661         default:
662                 DEBUG("Unknown endpoint: %d\n", ep);
663                 break;
664         }
665 }
666
667 /** Disable EP interrupt */
668 static void pio_irq_disable(int ep)
669 {
670         DEBUG("%s: %d\n", __func__, ep);
671
672         switch (ep) {
673         case 1:
674                 usb_clear(USB_IN_INT_EP1, USB_IN_INT_EN);
675                 break;
676         case 2:
677                 usb_clear(USB_OUT_INT_EP2, USB_OUT_INT_EN);
678                 break;
679         case 3:
680                 usb_clear(USB_IN_INT_EP3, USB_IN_INT_EN);
681                 break;
682         default:
683                 DEBUG("Unknown endpoint: %d\n", ep);
684                 break;
685         }
686 }
687
688 /*
689  *      nuke - dequeue ALL requests
690  */
691 void nuke(struct lh7a40x_ep *ep, int status)
692 {
693         struct lh7a40x_request *req;
694
695         DEBUG("%s, %p\n", __func__, ep);
696
697         /* Flush FIFO */
698         flush(ep);
699
700         /* called with irqs blocked */
701         while (!list_empty(&ep->queue)) {
702                 req = list_entry(ep->queue.next, struct lh7a40x_request, queue);
703                 done(ep, req, status);
704         }
705
706         /* Disable IRQ if EP is enabled (has descriptor) */
707         if (ep->desc)
708                 pio_irq_disable(ep_index(ep));
709 }
710
711 /*
712 void nuke_all(struct lh7a40x_udc *dev)
713 {
714         int n;
715         for(n=0; n<UDC_MAX_ENDPOINTS; n++) {
716                 struct lh7a40x_ep *ep = &dev->ep[n];
717                 usb_set_index(n);
718                 nuke(ep, 0);
719         }
720 }*/
721
722 /*
723 static void flush_all(struct lh7a40x_udc *dev)
724 {
725         int n;
726     for (n = 0; n < UDC_MAX_ENDPOINTS; n++)
727     {
728                 struct lh7a40x_ep *ep = &dev->ep[n];
729                 flush(ep);
730     }
731 }
732 */
733
734 /** Flush EP
735  * NOTE: INDEX register must be set before this call
736  */
737 static void flush(struct lh7a40x_ep *ep)
738 {
739         DEBUG("%s, %p\n", __func__, ep);
740
741         switch (ep->ep_type) {
742         case ep_control:
743                 /* check, by implication c.f. 15.1.2.11 */
744                 break;
745
746         case ep_bulk_in:
747         case ep_interrupt:
748                 /* if(csr & USB_IN_CSR1_IN_PKT_RDY) */
749                 usb_set(USB_IN_CSR1_FIFO_FLUSH, ep->csr1);
750                 break;
751
752         case ep_bulk_out:
753                 /* if(csr & USB_OUT_CSR1_OUT_PKT_RDY) */
754                 usb_set(USB_OUT_CSR1_FIFO_FLUSH, ep->csr1);
755                 break;
756         }
757 }
758
759 /**
760  * lh7a40x_in_epn - handle IN interrupt
761  */
762 static void lh7a40x_in_epn(struct lh7a40x_udc *dev, u32 ep_idx, u32 intr)
763 {
764         u32 csr;
765         struct lh7a40x_ep *ep = &dev->ep[ep_idx];
766         struct lh7a40x_request *req;
767
768         usb_set_index(ep_idx);
769
770         csr = usb_read(ep->csr1);
771         DEBUG("%s: %d, csr %x\n", __func__, ep_idx, csr);
772
773         if (csr & USB_IN_CSR1_SENT_STALL) {
774                 DEBUG("USB_IN_CSR1_SENT_STALL\n");
775                 usb_set(USB_IN_CSR1_SENT_STALL /*|USB_IN_CSR1_SEND_STALL */ ,
776                         ep->csr1);
777                 return;
778         }
779
780         if (!ep->desc) {
781                 DEBUG("%s: NO EP DESC\n", __func__);
782                 return;
783         }
784
785         if (list_empty(&ep->queue))
786                 req = 0;
787         else
788                 req = list_entry(ep->queue.next, struct lh7a40x_request, queue);
789
790         DEBUG("req: %p\n", req);
791
792         if (!req)
793                 return;
794
795         write_fifo(ep, req);
796 }
797
798 /* ********************************************************************************************* */
799 /* Bulk OUT (recv)
800  */
801
802 static void lh7a40x_out_epn(struct lh7a40x_udc *dev, u32 ep_idx, u32 intr)
803 {
804         struct lh7a40x_ep *ep = &dev->ep[ep_idx];
805         struct lh7a40x_request *req;
806
807         DEBUG("%s: %d\n", __func__, ep_idx);
808
809         usb_set_index(ep_idx);
810
811         if (ep->desc) {
812                 u32 csr;
813                 csr = usb_read(ep->csr1);
814
815                 while ((csr =
816                         usb_read(ep->
817                                  csr1)) & (USB_OUT_CSR1_OUT_PKT_RDY |
818                                            USB_OUT_CSR1_SENT_STALL)) {
819                         DEBUG("%s: %x\n", __func__, csr);
820
821                         if (csr & USB_OUT_CSR1_SENT_STALL) {
822                                 DEBUG("%s: stall sent, flush fifo\n",
823                                       __func__);
824                                 /* usb_set(USB_OUT_CSR1_FIFO_FLUSH, ep->csr1); */
825                                 flush(ep);
826                         } else if (csr & USB_OUT_CSR1_OUT_PKT_RDY) {
827                                 if (list_empty(&ep->queue))
828                                         req = 0;
829                                 else
830                                         req =
831                                             list_entry(ep->queue.next,
832                                                        struct lh7a40x_request,
833                                                        queue);
834
835                                 if (!req) {
836                                         printk(KERN_WARNING
837                                                "%s: NULL REQ %d\n",
838                                                __func__, ep_idx);
839                                         flush(ep);
840                                         break;
841                                 } else {
842                                         read_fifo(ep, req);
843                                 }
844                         }
845
846                 }
847
848         } else {
849                 /* Throw packet away.. */
850                 printk(KERN_WARNING "%s: No descriptor?!?\n", __func__);
851                 flush(ep);
852         }
853 }
854
855 static void stop_activity(struct lh7a40x_udc *dev,
856                           struct usb_gadget_driver *driver)
857 {
858         int i;
859
860         /* don't disconnect drivers more than once */
861         if (dev->gadget.speed == USB_SPEED_UNKNOWN)
862                 driver = 0;
863         dev->gadget.speed = USB_SPEED_UNKNOWN;
864
865         /* prevent new request submissions, kill any outstanding requests  */
866         for (i = 0; i < UDC_MAX_ENDPOINTS; i++) {
867                 struct lh7a40x_ep *ep = &dev->ep[i];
868                 ep->stopped = 1;
869
870                 usb_set_index(i);
871                 nuke(ep, -ESHUTDOWN);
872         }
873
874         /* report disconnect; the driver is already quiesced */
875         if (driver) {
876                 spin_unlock(&dev->lock);
877                 driver->disconnect(&dev->gadget);
878                 spin_lock(&dev->lock);
879         }
880
881         /* re-init driver-visible data structures */
882         udc_reinit(dev);
883 }
884
885 /** Handle USB RESET interrupt
886  */
887 static void lh7a40x_reset_intr(struct lh7a40x_udc *dev)
888 {
889 #if 0                           /* def CONFIG_ARCH_LH7A404 */
890         /* Does not work always... */
891
892         DEBUG("%s: %d\n", __func__, dev->usb_address);
893
894         if (!dev->usb_address) {
895                 /*usb_set(USB_RESET_IO, USB_RESET);
896                    mdelay(5);
897                    usb_clear(USB_RESET_IO, USB_RESET); */
898                 return;
899         }
900         /* Put the USB controller into reset. */
901         usb_set(USB_RESET_IO, USB_RESET);
902
903         /* Set Device ID to 0 */
904         udc_set_address(dev, 0);
905
906         /* Let PLL2 settle down */
907         mdelay(5);
908
909         /* Release the USB controller from reset */
910         usb_clear(USB_RESET_IO, USB_RESET);
911
912         /* Re-enable UDC */
913         udc_enable(dev);
914
915 #endif
916         dev->gadget.speed = USB_SPEED_FULL;
917 }
918
919 /*
920  *      lh7a40x usb client interrupt handler.
921  */
922 static irqreturn_t lh7a40x_udc_irq(int irq, void *_dev)
923 {
924         struct lh7a40x_udc *dev = _dev;
925
926         DEBUG("\n\n");
927
928         spin_lock(&dev->lock);
929
930         for (;;) {
931                 u32 intr_in = usb_read(USB_IN_INT);
932                 u32 intr_out = usb_read(USB_OUT_INT);
933                 u32 intr_int = usb_read(USB_INT);
934
935                 /* Test also against enable bits.. (lh7a40x errata).. Sigh.. */
936                 u32 in_en = usb_read(USB_IN_INT_EN);
937                 u32 out_en = usb_read(USB_OUT_INT_EN);
938
939                 if (!intr_out && !intr_in && !intr_int)
940                         break;
941
942                 DEBUG("%s (on state %s)\n", __func__,
943                       state_names[dev->ep0state]);
944                 DEBUG("intr_out = %x\n", intr_out);
945                 DEBUG("intr_in  = %x\n", intr_in);
946                 DEBUG("intr_int = %x\n", intr_int);
947
948                 if (intr_in) {
949                         usb_write(intr_in, USB_IN_INT);
950
951                         if ((intr_in & USB_IN_INT_EP1)
952                             && (in_en & USB_IN_INT_EP1)) {
953                                 DEBUG("USB_IN_INT_EP1\n");
954                                 lh7a40x_in_epn(dev, 1, intr_in);
955                         }
956                         if ((intr_in & USB_IN_INT_EP3)
957                             && (in_en & USB_IN_INT_EP3)) {
958                                 DEBUG("USB_IN_INT_EP3\n");
959                                 lh7a40x_in_epn(dev, 3, intr_in);
960                         }
961                         if (intr_in & USB_IN_INT_EP0) {
962                                 DEBUG("USB_IN_INT_EP0 (control)\n");
963                                 lh7a40x_handle_ep0(dev, intr_in);
964                         }
965                 }
966
967                 if (intr_out) {
968                         usb_write(intr_out, USB_OUT_INT);
969
970                         if ((intr_out & USB_OUT_INT_EP2)
971                             && (out_en & USB_OUT_INT_EP2)) {
972                                 DEBUG("USB_OUT_INT_EP2\n");
973                                 lh7a40x_out_epn(dev, 2, intr_out);
974                         }
975                 }
976
977                 if (intr_int) {
978                         usb_write(intr_int, USB_INT);
979
980                         if (intr_int & USB_INT_RESET_INT) {
981                                 lh7a40x_reset_intr(dev);
982                         }
983
984                         if (intr_int & USB_INT_RESUME_INT) {
985                                 DEBUG("USB resume\n");
986
987                                 if (dev->gadget.speed != USB_SPEED_UNKNOWN
988                                     && dev->driver
989                                     && dev->driver->resume
990                                     && is_usb_connected()) {
991                                         dev->driver->resume(&dev->gadget);
992                                 }
993                         }
994
995                         if (intr_int & USB_INT_SUSPEND_INT) {
996                                 DEBUG("USB suspend%s\n",
997                                       is_usb_connected()? "" : "+disconnect");
998                                 if (!is_usb_connected()) {
999                                         stop_activity(dev, dev->driver);
1000                                 } else if (dev->gadget.speed !=
1001                                            USB_SPEED_UNKNOWN && dev->driver
1002                                            && dev->driver->suspend) {
1003                                         dev->driver->suspend(&dev->gadget);
1004                                 }
1005                         }
1006
1007                 }
1008         }
1009
1010         spin_unlock(&dev->lock);
1011
1012         return IRQ_HANDLED;
1013 }
1014
1015 static int lh7a40x_ep_enable(struct usb_ep *_ep,
1016                              const struct usb_endpoint_descriptor *desc)
1017 {
1018         struct lh7a40x_ep *ep;
1019         struct lh7a40x_udc *dev;
1020         unsigned long flags;
1021
1022         DEBUG("%s, %p\n", __func__, _ep);
1023
1024         ep = container_of(_ep, struct lh7a40x_ep, ep);
1025         if (!_ep || !desc || ep->desc || _ep->name == ep0name
1026             || desc->bDescriptorType != USB_DT_ENDPOINT
1027             || ep->bEndpointAddress != desc->bEndpointAddress
1028             || ep_maxpacket(ep) < le16_to_cpu(desc->wMaxPacketSize)) {
1029                 DEBUG("%s, bad ep or descriptor\n", __func__);
1030                 return -EINVAL;
1031         }
1032
1033         /* xfer types must match, except that interrupt ~= bulk */
1034         if (ep->bmAttributes != desc->bmAttributes
1035             && ep->bmAttributes != USB_ENDPOINT_XFER_BULK
1036             && desc->bmAttributes != USB_ENDPOINT_XFER_INT) {
1037                 DEBUG("%s, %s type mismatch\n", __func__, _ep->name);
1038                 return -EINVAL;
1039         }
1040
1041         /* hardware _could_ do smaller, but driver doesn't */
1042         if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK
1043              && le16_to_cpu(desc->wMaxPacketSize) != ep_maxpacket(ep))
1044             || !desc->wMaxPacketSize) {
1045                 DEBUG("%s, bad %s maxpacket\n", __func__, _ep->name);
1046                 return -ERANGE;
1047         }
1048
1049         dev = ep->dev;
1050         if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) {
1051                 DEBUG("%s, bogus device state\n", __func__);
1052                 return -ESHUTDOWN;
1053         }
1054
1055         spin_lock_irqsave(&ep->dev->lock, flags);
1056
1057         ep->stopped = 0;
1058         ep->desc = desc;
1059         ep->pio_irqs = 0;
1060         ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);
1061
1062         spin_unlock_irqrestore(&ep->dev->lock, flags);
1063
1064         /* Reset halt state (does flush) */
1065         lh7a40x_set_halt(_ep, 0);
1066
1067         DEBUG("%s: enabled %s\n", __func__, _ep->name);
1068         return 0;
1069 }
1070
1071 /** Disable EP
1072  *  NOTE: Sets INDEX register
1073  */
1074 static int lh7a40x_ep_disable(struct usb_ep *_ep)
1075 {
1076         struct lh7a40x_ep *ep;
1077         unsigned long flags;
1078
1079         DEBUG("%s, %p\n", __func__, _ep);
1080
1081         ep = container_of(_ep, struct lh7a40x_ep, ep);
1082         if (!_ep || !ep->desc) {
1083                 DEBUG("%s, %s not enabled\n", __func__,
1084                       _ep ? ep->ep.name : NULL);
1085                 return -EINVAL;
1086         }
1087
1088         spin_lock_irqsave(&ep->dev->lock, flags);
1089
1090         usb_set_index(ep_index(ep));
1091
1092         /* Nuke all pending requests (does flush) */
1093         nuke(ep, -ESHUTDOWN);
1094
1095         /* Disable ep IRQ */
1096         pio_irq_disable(ep_index(ep));
1097
1098         ep->desc = 0;
1099         ep->stopped = 1;
1100
1101         spin_unlock_irqrestore(&ep->dev->lock, flags);
1102
1103         DEBUG("%s: disabled %s\n", __func__, _ep->name);
1104         return 0;
1105 }
1106
1107 static struct usb_request *lh7a40x_alloc_request(struct usb_ep *ep,
1108                                                  gfp_t gfp_flags)
1109 {
1110         struct lh7a40x_request *req;
1111
1112         DEBUG("%s, %p\n", __func__, ep);
1113
1114         req = kzalloc(sizeof(*req), gfp_flags);
1115         if (!req)
1116                 return 0;
1117
1118         INIT_LIST_HEAD(&req->queue);
1119
1120         return &req->req;
1121 }
1122
1123 static void lh7a40x_free_request(struct usb_ep *ep, struct usb_request *_req)
1124 {
1125         struct lh7a40x_request *req;
1126
1127         DEBUG("%s, %p\n", __func__, ep);
1128
1129         req = container_of(_req, struct lh7a40x_request, req);
1130         WARN_ON(!list_empty(&req->queue));
1131         kfree(req);
1132 }
1133
1134 /** Queue one request
1135  *  Kickstart transfer if needed
1136  *  NOTE: Sets INDEX register
1137  */
1138 static int lh7a40x_queue(struct usb_ep *_ep, struct usb_request *_req,
1139                          gfp_t gfp_flags)
1140 {
1141         struct lh7a40x_request *req;
1142         struct lh7a40x_ep *ep;
1143         struct lh7a40x_udc *dev;
1144         unsigned long flags;
1145
1146         DEBUG("\n\n\n%s, %p\n", __func__, _ep);
1147
1148         req = container_of(_req, struct lh7a40x_request, req);
1149         if (unlikely
1150             (!_req || !_req->complete || !_req->buf
1151              || !list_empty(&req->queue))) {
1152                 DEBUG("%s, bad params\n", __func__);
1153                 return -EINVAL;
1154         }
1155
1156         ep = container_of(_ep, struct lh7a40x_ep, ep);
1157         if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) {
1158                 DEBUG("%s, bad ep\n", __func__);
1159                 return -EINVAL;
1160         }
1161
1162         dev = ep->dev;
1163         if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) {
1164                 DEBUG("%s, bogus device state %p\n", __func__, dev->driver);
1165                 return -ESHUTDOWN;
1166         }
1167
1168         DEBUG("%s queue req %p, len %d buf %p\n", _ep->name, _req, _req->length,
1169               _req->buf);
1170
1171         spin_lock_irqsave(&dev->lock, flags);
1172
1173         _req->status = -EINPROGRESS;
1174         _req->actual = 0;
1175
1176         /* kickstart this i/o queue? */
1177         DEBUG("Add to %d Q %d %d\n", ep_index(ep), list_empty(&ep->queue),
1178               ep->stopped);
1179         if (list_empty(&ep->queue) && likely(!ep->stopped)) {
1180                 u32 csr;
1181
1182                 if (unlikely(ep_index(ep) == 0)) {
1183                         /* EP0 */
1184                         list_add_tail(&req->queue, &ep->queue);
1185                         lh7a40x_ep0_kick(dev, ep);
1186                         req = 0;
1187                 } else if (ep_is_in(ep)) {
1188                         /* EP1 & EP3 */
1189                         usb_set_index(ep_index(ep));
1190                         csr = usb_read(ep->csr1);
1191                         pio_irq_enable(ep_index(ep));
1192                         if ((csr & USB_IN_CSR1_FIFO_NOT_EMPTY) == 0) {
1193                                 if (write_fifo(ep, req) == 1)
1194                                         req = 0;
1195                         }
1196                 } else {
1197                         /* EP2 */
1198                         usb_set_index(ep_index(ep));
1199                         csr = usb_read(ep->csr1);
1200                         pio_irq_enable(ep_index(ep));
1201                         if (!(csr & USB_OUT_CSR1_FIFO_FULL)) {
1202                                 if (read_fifo(ep, req) == 1)
1203                                         req = 0;
1204                         }
1205                 }
1206         }
1207
1208         /* pio or dma irq handler advances the queue. */
1209         if (likely(req != 0))
1210                 list_add_tail(&req->queue, &ep->queue);
1211
1212         spin_unlock_irqrestore(&dev->lock, flags);
1213
1214         return 0;
1215 }
1216
1217 /* dequeue JUST ONE request */
1218 static int lh7a40x_dequeue(struct usb_ep *_ep, struct usb_request *_req)
1219 {
1220         struct lh7a40x_ep *ep;
1221         struct lh7a40x_request *req;
1222         unsigned long flags;
1223
1224         DEBUG("%s, %p\n", __func__, _ep);
1225
1226         ep = container_of(_ep, struct lh7a40x_ep, ep);
1227         if (!_ep || ep->ep.name == ep0name)
1228                 return -EINVAL;
1229
1230         spin_lock_irqsave(&ep->dev->lock, flags);
1231
1232         /* make sure it's actually queued on this endpoint */
1233         list_for_each_entry(req, &ep->queue, queue) {
1234                 if (&req->req == _req)
1235                         break;
1236         }
1237         if (&req->req != _req) {
1238                 spin_unlock_irqrestore(&ep->dev->lock, flags);
1239                 return -EINVAL;
1240         }
1241
1242         done(ep, req, -ECONNRESET);
1243
1244         spin_unlock_irqrestore(&ep->dev->lock, flags);
1245         return 0;
1246 }
1247
1248 /** Halt specific EP
1249  *  Return 0 if success
1250  *  NOTE: Sets INDEX register to EP !
1251  */
1252 static int lh7a40x_set_halt(struct usb_ep *_ep, int value)
1253 {
1254         struct lh7a40x_ep *ep;
1255         unsigned long flags;
1256
1257         ep = container_of(_ep, struct lh7a40x_ep, ep);
1258         if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) {
1259                 DEBUG("%s, bad ep\n", __func__);
1260                 return -EINVAL;
1261         }
1262
1263         usb_set_index(ep_index(ep));
1264
1265         DEBUG("%s, ep %d, val %d\n", __func__, ep_index(ep), value);
1266
1267         spin_lock_irqsave(&ep->dev->lock, flags);
1268
1269         if (ep_index(ep) == 0) {
1270                 /* EP0 */
1271                 usb_set(EP0_SEND_STALL, ep->csr1);
1272         } else if (ep_is_in(ep)) {
1273                 u32 csr = usb_read(ep->csr1);
1274                 if (value && ((csr & USB_IN_CSR1_FIFO_NOT_EMPTY)
1275                               || !list_empty(&ep->queue))) {
1276                         /*
1277                          * Attempts to halt IN endpoints will fail (returning -EAGAIN)
1278                          * if any transfer requests are still queued, or if the controller
1279                          * FIFO still holds bytes that the host hasn't collected.
1280                          */
1281                         spin_unlock_irqrestore(&ep->dev->lock, flags);
1282                         DEBUG
1283                             ("Attempt to halt IN endpoint failed (returning -EAGAIN) %d %d\n",
1284                              (csr & USB_IN_CSR1_FIFO_NOT_EMPTY),
1285                              !list_empty(&ep->queue));
1286                         return -EAGAIN;
1287                 }
1288                 flush(ep);
1289                 if (value)
1290                         usb_set(USB_IN_CSR1_SEND_STALL, ep->csr1);
1291                 else {
1292                         usb_clear(USB_IN_CSR1_SEND_STALL, ep->csr1);
1293                         usb_set(USB_IN_CSR1_CLR_DATA_TOGGLE, ep->csr1);
1294                 }
1295
1296         } else {
1297
1298                 flush(ep);
1299                 if (value)
1300                         usb_set(USB_OUT_CSR1_SEND_STALL, ep->csr1);
1301                 else {
1302                         usb_clear(USB_OUT_CSR1_SEND_STALL, ep->csr1);
1303                         usb_set(USB_OUT_CSR1_CLR_DATA_REG, ep->csr1);
1304                 }
1305         }
1306
1307         if (value) {
1308                 ep->stopped = 1;
1309         } else {
1310                 ep->stopped = 0;
1311         }
1312
1313         spin_unlock_irqrestore(&ep->dev->lock, flags);
1314
1315         DEBUG("%s %s halted\n", _ep->name, value == 0 ? "NOT" : "IS");
1316
1317         return 0;
1318 }
1319
1320 /** Return bytes in EP FIFO
1321  *  NOTE: Sets INDEX register to EP
1322  */
1323 static int lh7a40x_fifo_status(struct usb_ep *_ep)
1324 {
1325         u32 csr;
1326         int count = 0;
1327         struct lh7a40x_ep *ep;
1328
1329         ep = container_of(_ep, struct lh7a40x_ep, ep);
1330         if (!_ep) {
1331                 DEBUG("%s, bad ep\n", __func__);
1332                 return -ENODEV;
1333         }
1334
1335         DEBUG("%s, %d\n", __func__, ep_index(ep));
1336
1337         /* LPD can't report unclaimed bytes from IN fifos */
1338         if (ep_is_in(ep))
1339                 return -EOPNOTSUPP;
1340
1341         usb_set_index(ep_index(ep));
1342
1343         csr = usb_read(ep->csr1);
1344         if (ep->dev->gadget.speed != USB_SPEED_UNKNOWN ||
1345             csr & USB_OUT_CSR1_OUT_PKT_RDY) {
1346                 count = usb_read(USB_OUT_FIFO_WC1);
1347         }
1348
1349         return count;
1350 }
1351
1352 /** Flush EP FIFO
1353  *  NOTE: Sets INDEX register to EP
1354  */
1355 static void lh7a40x_fifo_flush(struct usb_ep *_ep)
1356 {
1357         struct lh7a40x_ep *ep;
1358
1359         ep = container_of(_ep, struct lh7a40x_ep, ep);
1360         if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) {
1361                 DEBUG("%s, bad ep\n", __func__);
1362                 return;
1363         }
1364
1365         usb_set_index(ep_index(ep));
1366         flush(ep);
1367 }
1368
1369 /****************************************************************/
1370 /* End Point 0 related functions                                */
1371 /****************************************************************/
1372
1373 /* return:  0 = still running, 1 = completed, negative = errno */
1374 static int write_fifo_ep0(struct lh7a40x_ep *ep, struct lh7a40x_request *req)
1375 {
1376         u32 max;
1377         unsigned count;
1378         int is_last;
1379
1380         max = ep_maxpacket(ep);
1381
1382         DEBUG_EP0("%s\n", __func__);
1383
1384         count = write_packet(ep, req, max);
1385
1386         /* last packet is usually short (or a zlp) */
1387         if (unlikely(count != max))
1388                 is_last = 1;
1389         else {
1390                 if (likely(req->req.length != req->req.actual) || req->req.zero)
1391                         is_last = 0;
1392                 else
1393                         is_last = 1;
1394         }
1395
1396         DEBUG_EP0("%s: wrote %s %d bytes%s %d left %p\n", __func__,
1397                   ep->ep.name, count,
1398                   is_last ? "/L" : "", req->req.length - req->req.actual, req);
1399
1400         /* requests complete when all IN data is in the FIFO */
1401         if (is_last) {
1402                 done(ep, req, 0);
1403                 return 1;
1404         }
1405
1406         return 0;
1407 }
1408
1409 static __inline__ int lh7a40x_fifo_read(struct lh7a40x_ep *ep,
1410                                         unsigned char *cp, int max)
1411 {
1412         int bytes;
1413         int count = usb_read(USB_OUT_FIFO_WC1);
1414         volatile u32 *fifo = (volatile u32 *)ep->fifo;
1415
1416         if (count > max)
1417                 count = max;
1418         bytes = count;
1419         while (count--)
1420                 *cp++ = *fifo & 0xFF;
1421         return bytes;
1422 }
1423
1424 static __inline__ void lh7a40x_fifo_write(struct lh7a40x_ep *ep,
1425                                           unsigned char *cp, int count)
1426 {
1427         volatile u32 *fifo = (volatile u32 *)ep->fifo;
1428         DEBUG_EP0("fifo_write: %d %d\n", ep_index(ep), count);
1429         while (count--)
1430                 *fifo = *cp++;
1431 }
1432
1433 static int read_fifo_ep0(struct lh7a40x_ep *ep, struct lh7a40x_request *req)
1434 {
1435         u32 csr;
1436         u8 *buf;
1437         unsigned bufferspace, count, is_short;
1438         volatile u32 *fifo = (volatile u32 *)ep->fifo;
1439
1440         DEBUG_EP0("%s\n", __func__);
1441
1442         csr = usb_read(USB_EP0_CSR);
1443         if (!(csr & USB_OUT_CSR1_OUT_PKT_RDY))
1444                 return 0;
1445
1446         buf = req->req.buf + req->req.actual;
1447         prefetchw(buf);
1448         bufferspace = req->req.length - req->req.actual;
1449
1450         /* read all bytes from this packet */
1451         if (likely(csr & EP0_OUT_PKT_RDY)) {
1452                 count = usb_read(USB_OUT_FIFO_WC1);
1453                 req->req.actual += min(count, bufferspace);
1454         } else                  /* zlp */
1455                 count = 0;
1456
1457         is_short = (count < ep->ep.maxpacket);
1458         DEBUG_EP0("read %s %02x, %d bytes%s req %p %d/%d\n",
1459                   ep->ep.name, csr, count,
1460                   is_short ? "/S" : "", req, req->req.actual, req->req.length);
1461
1462         while (likely(count-- != 0)) {
1463                 u8 byte = (u8) (*fifo & 0xff);
1464
1465                 if (unlikely(bufferspace == 0)) {
1466                         /* this happens when the driver's buffer
1467                          * is smaller than what the host sent.
1468                          * discard the extra data.
1469                          */
1470                         if (req->req.status != -EOVERFLOW)
1471                                 DEBUG_EP0("%s overflow %d\n", ep->ep.name,
1472                                           count);
1473                         req->req.status = -EOVERFLOW;
1474                 } else {
1475                         *buf++ = byte;
1476                         bufferspace--;
1477                 }
1478         }
1479
1480         /* completion */
1481         if (is_short || req->req.actual == req->req.length) {
1482                 done(ep, req, 0);
1483                 return 1;
1484         }
1485
1486         /* finished that packet.  the next one may be waiting... */
1487         return 0;
1488 }
1489
1490 /**
1491  * udc_set_address - set the USB address for this device
1492  * @address:
1493  *
1494  * Called from control endpoint function after it decodes a set address setup packet.
1495  */
1496 static void udc_set_address(struct lh7a40x_udc *dev, unsigned char address)
1497 {
1498         DEBUG_EP0("%s: %d\n", __func__, address);
1499         /* c.f. 15.1.2.2 Table 15-4 address will be used after DATA_END is set */
1500         dev->usb_address = address;
1501         usb_set((address & USB_FA_FUNCTION_ADDR), USB_FA);
1502         usb_set(USB_FA_ADDR_UPDATE | (address & USB_FA_FUNCTION_ADDR), USB_FA);
1503         /* usb_read(USB_FA); */
1504 }
1505
1506 /*
1507  * DATA_STATE_RECV (OUT_PKT_RDY)
1508  *      - if error
1509  *              set EP0_CLR_OUT | EP0_DATA_END | EP0_SEND_STALL bits
1510  *      - else
1511  *              set EP0_CLR_OUT bit
1512                                 if last set EP0_DATA_END bit
1513  */
1514 static void lh7a40x_ep0_out(struct lh7a40x_udc *dev, u32 csr)
1515 {
1516         struct lh7a40x_request *req;
1517         struct lh7a40x_ep *ep = &dev->ep[0];
1518         int ret;
1519
1520         DEBUG_EP0("%s: %x\n", __func__, csr);
1521
1522         if (list_empty(&ep->queue))
1523                 req = 0;
1524         else
1525                 req = list_entry(ep->queue.next, struct lh7a40x_request, queue);
1526
1527         if (req) {
1528
1529                 if (req->req.length == 0) {
1530                         DEBUG_EP0("ZERO LENGTH OUT!\n");
1531                         usb_set((EP0_CLR_OUT | EP0_DATA_END), USB_EP0_CSR);
1532                         dev->ep0state = WAIT_FOR_SETUP;
1533                         return;
1534                 }
1535                 ret = read_fifo_ep0(ep, req);
1536                 if (ret) {
1537                         /* Done! */
1538                         DEBUG_EP0("%s: finished, waiting for status\n",
1539                                   __func__);
1540
1541                         usb_set((EP0_CLR_OUT | EP0_DATA_END), USB_EP0_CSR);
1542                         dev->ep0state = WAIT_FOR_SETUP;
1543                 } else {
1544                         /* Not done yet.. */
1545                         DEBUG_EP0("%s: not finished\n", __func__);
1546                         usb_set(EP0_CLR_OUT, USB_EP0_CSR);
1547                 }
1548         } else {
1549                 DEBUG_EP0("NO REQ??!\n");
1550         }
1551 }
1552
1553 /*
1554  * DATA_STATE_XMIT
1555  */
1556 static int lh7a40x_ep0_in(struct lh7a40x_udc *dev, u32 csr)
1557 {
1558         struct lh7a40x_request *req;
1559         struct lh7a40x_ep *ep = &dev->ep[0];
1560         int ret, need_zlp = 0;
1561
1562         DEBUG_EP0("%s: %x\n", __func__, csr);
1563
1564         if (list_empty(&ep->queue))
1565                 req = 0;
1566         else
1567                 req = list_entry(ep->queue.next, struct lh7a40x_request, queue);
1568
1569         if (!req) {
1570                 DEBUG_EP0("%s: NULL REQ\n", __func__);
1571                 return 0;
1572         }
1573
1574         if (req->req.length == 0) {
1575
1576                 usb_set((EP0_IN_PKT_RDY | EP0_DATA_END), USB_EP0_CSR);
1577                 dev->ep0state = WAIT_FOR_SETUP;
1578                 return 1;
1579         }
1580
1581         if (req->req.length - req->req.actual == EP0_PACKETSIZE) {
1582                 /* Next write will end with the packet size, */
1583                 /* so we need Zero-length-packet */
1584                 need_zlp = 1;
1585         }
1586
1587         ret = write_fifo_ep0(ep, req);
1588
1589         if (ret == 1 && !need_zlp) {
1590                 /* Last packet */
1591                 DEBUG_EP0("%s: finished, waiting for status\n", __func__);
1592
1593                 usb_set((EP0_IN_PKT_RDY | EP0_DATA_END), USB_EP0_CSR);
1594                 dev->ep0state = WAIT_FOR_SETUP;
1595         } else {
1596                 DEBUG_EP0("%s: not finished\n", __func__);
1597                 usb_set(EP0_IN_PKT_RDY, USB_EP0_CSR);
1598         }
1599
1600         if (need_zlp) {
1601                 DEBUG_EP0("%s: Need ZLP!\n", __func__);
1602                 usb_set(EP0_IN_PKT_RDY, USB_EP0_CSR);
1603                 dev->ep0state = DATA_STATE_NEED_ZLP;
1604         }
1605
1606         return 1;
1607 }
1608
1609 static int lh7a40x_handle_get_status(struct lh7a40x_udc *dev,
1610                                      struct usb_ctrlrequest *ctrl)
1611 {
1612         struct lh7a40x_ep *ep0 = &dev->ep[0];
1613         struct lh7a40x_ep *qep;
1614         int reqtype = (ctrl->bRequestType & USB_RECIP_MASK);
1615         u16 val = 0;
1616
1617         if (reqtype == USB_RECIP_INTERFACE) {
1618                 /* This is not supported.
1619                  * And according to the USB spec, this one does nothing..
1620                  * Just return 0
1621                  */
1622                 DEBUG_SETUP("GET_STATUS: USB_RECIP_INTERFACE\n");
1623         } else if (reqtype == USB_RECIP_DEVICE) {
1624                 DEBUG_SETUP("GET_STATUS: USB_RECIP_DEVICE\n");
1625                 val |= (1 << 0);        /* Self powered */
1626                 /*val |= (1<<1); *//* Remote wakeup */
1627         } else if (reqtype == USB_RECIP_ENDPOINT) {
1628                 int ep_num = (ctrl->wIndex & ~USB_DIR_IN);
1629
1630                 DEBUG_SETUP
1631                     ("GET_STATUS: USB_RECIP_ENDPOINT (%d), ctrl->wLength = %d\n",
1632                      ep_num, ctrl->wLength);
1633
1634                 if (ctrl->wLength > 2 || ep_num > 3)
1635                         return -EOPNOTSUPP;
1636
1637                 qep = &dev->ep[ep_num];
1638                 if (ep_is_in(qep) != ((ctrl->wIndex & USB_DIR_IN) ? 1 : 0)
1639                     && ep_index(qep) != 0) {
1640                         return -EOPNOTSUPP;
1641                 }
1642
1643                 usb_set_index(ep_index(qep));
1644
1645                 /* Return status on next IN token */
1646                 switch (qep->ep_type) {
1647                 case ep_control:
1648                         val =
1649                             (usb_read(qep->csr1) & EP0_SEND_STALL) ==
1650                             EP0_SEND_STALL;
1651                         break;
1652                 case ep_bulk_in:
1653                 case ep_interrupt:
1654                         val =
1655                             (usb_read(qep->csr1) & USB_IN_CSR1_SEND_STALL) ==
1656                             USB_IN_CSR1_SEND_STALL;
1657                         break;
1658                 case ep_bulk_out:
1659                         val =
1660                             (usb_read(qep->csr1) & USB_OUT_CSR1_SEND_STALL) ==
1661                             USB_OUT_CSR1_SEND_STALL;
1662                         break;
1663                 }
1664
1665                 /* Back to EP0 index */
1666                 usb_set_index(0);
1667
1668                 DEBUG_SETUP("GET_STATUS, ep: %d (%x), val = %d\n", ep_num,
1669                             ctrl->wIndex, val);
1670         } else {
1671                 DEBUG_SETUP("Unknown REQ TYPE: %d\n", reqtype);
1672                 return -EOPNOTSUPP;
1673         }
1674
1675         /* Clear "out packet ready" */
1676         usb_set((EP0_CLR_OUT), USB_EP0_CSR);
1677         /* Put status to FIFO */
1678         lh7a40x_fifo_write(ep0, (u8 *) & val, sizeof(val));
1679         /* Issue "In packet ready" */
1680         usb_set((EP0_IN_PKT_RDY | EP0_DATA_END), USB_EP0_CSR);
1681
1682         return 0;
1683 }
1684
1685 /*
1686  * WAIT_FOR_SETUP (OUT_PKT_RDY)
1687  *      - read data packet from EP0 FIFO
1688  *      - decode command
1689  *      - if error
1690  *              set EP0_CLR_OUT | EP0_DATA_END | EP0_SEND_STALL bits
1691  *      - else
1692  *              set EP0_CLR_OUT | EP0_DATA_END bits
1693  */
1694 static void lh7a40x_ep0_setup(struct lh7a40x_udc *dev, u32 csr)
1695 {
1696         struct lh7a40x_ep *ep = &dev->ep[0];
1697         struct usb_ctrlrequest ctrl;
1698         int i, bytes, is_in;
1699
1700         DEBUG_SETUP("%s: %x\n", __func__, csr);
1701
1702         /* Nuke all previous transfers */
1703         nuke(ep, -EPROTO);
1704
1705         /* read control req from fifo (8 bytes) */
1706         bytes = lh7a40x_fifo_read(ep, (unsigned char *)&ctrl, 8);
1707
1708         DEBUG_SETUP("Read CTRL REQ %d bytes\n", bytes);
1709         DEBUG_SETUP("CTRL.bRequestType = %d (is_in %d)\n", ctrl.bRequestType,
1710                     ctrl.bRequestType == USB_DIR_IN);
1711         DEBUG_SETUP("CTRL.bRequest = %d\n", ctrl.bRequest);
1712         DEBUG_SETUP("CTRL.wLength = %d\n", ctrl.wLength);
1713         DEBUG_SETUP("CTRL.wValue = %d (%d)\n", ctrl.wValue, ctrl.wValue >> 8);
1714         DEBUG_SETUP("CTRL.wIndex = %d\n", ctrl.wIndex);
1715
1716         /* Set direction of EP0 */
1717         if (likely(ctrl.bRequestType & USB_DIR_IN)) {
1718                 ep->bEndpointAddress |= USB_DIR_IN;
1719                 is_in = 1;
1720         } else {
1721                 ep->bEndpointAddress &= ~USB_DIR_IN;
1722                 is_in = 0;
1723         }
1724
1725         dev->req_pending = 1;
1726
1727         /* Handle some SETUP packets ourselves */
1728         switch (ctrl.bRequest) {
1729         case USB_REQ_SET_ADDRESS:
1730                 if (ctrl.bRequestType != (USB_TYPE_STANDARD | USB_RECIP_DEVICE))
1731                         break;
1732
1733                 DEBUG_SETUP("USB_REQ_SET_ADDRESS (%d)\n", ctrl.wValue);
1734                 udc_set_address(dev, ctrl.wValue);
1735                 usb_set((EP0_CLR_OUT | EP0_DATA_END), USB_EP0_CSR);
1736                 return;
1737
1738         case USB_REQ_GET_STATUS:{
1739                         if (lh7a40x_handle_get_status(dev, &ctrl) == 0)
1740                                 return;
1741
1742         case USB_REQ_CLEAR_FEATURE:
1743         case USB_REQ_SET_FEATURE:
1744                         if (ctrl.bRequestType == USB_RECIP_ENDPOINT) {
1745                                 struct lh7a40x_ep *qep;
1746                                 int ep_num = (ctrl.wIndex & 0x0f);
1747
1748                                 /* Support only HALT feature */
1749                                 if (ctrl.wValue != 0 || ctrl.wLength != 0
1750                                     || ep_num > 3 || ep_num < 1)
1751                                         break;
1752
1753                                 qep = &dev->ep[ep_num];
1754                                 spin_unlock(&dev->lock);
1755                                 if (ctrl.bRequest == USB_REQ_SET_FEATURE) {
1756                                         DEBUG_SETUP("SET_FEATURE (%d)\n",
1757                                                     ep_num);
1758                                         lh7a40x_set_halt(&qep->ep, 1);
1759                                 } else {
1760                                         DEBUG_SETUP("CLR_FEATURE (%d)\n",
1761                                                     ep_num);
1762                                         lh7a40x_set_halt(&qep->ep, 0);
1763                                 }
1764                                 spin_lock(&dev->lock);
1765                                 usb_set_index(0);
1766
1767                                 /* Reply with a ZLP on next IN token */
1768                                 usb_set((EP0_CLR_OUT | EP0_DATA_END),
1769                                         USB_EP0_CSR);
1770                                 return;
1771                         }
1772                         break;
1773                 }
1774
1775         default:
1776                 break;
1777         }
1778
1779         if (likely(dev->driver)) {
1780                 /* device-2-host (IN) or no data setup command, process immediately */
1781                 spin_unlock(&dev->lock);
1782                 i = dev->driver->setup(&dev->gadget, &ctrl);
1783                 spin_lock(&dev->lock);
1784
1785                 if (i < 0) {
1786                         /* setup processing failed, force stall */
1787                         DEBUG_SETUP
1788                             ("  --> ERROR: gadget setup FAILED (stalling), setup returned %d\n",
1789                              i);
1790                         usb_set_index(0);
1791                         usb_set((EP0_CLR_OUT | EP0_DATA_END | EP0_SEND_STALL),
1792                                 USB_EP0_CSR);
1793
1794                         /* ep->stopped = 1; */
1795                         dev->ep0state = WAIT_FOR_SETUP;
1796                 }
1797         }
1798 }
1799
1800 /*
1801  * DATA_STATE_NEED_ZLP
1802  */
1803 static void lh7a40x_ep0_in_zlp(struct lh7a40x_udc *dev, u32 csr)
1804 {
1805         DEBUG_EP0("%s: %x\n", __func__, csr);
1806
1807         /* c.f. Table 15-14 */
1808         usb_set((EP0_IN_PKT_RDY | EP0_DATA_END), USB_EP0_CSR);
1809         dev->ep0state = WAIT_FOR_SETUP;
1810 }
1811
1812 /*
1813  * handle ep0 interrupt
1814  */
1815 static void lh7a40x_handle_ep0(struct lh7a40x_udc *dev, u32 intr)
1816 {
1817         struct lh7a40x_ep *ep = &dev->ep[0];
1818         u32 csr;
1819
1820         /* Set index 0 */
1821         usb_set_index(0);
1822         csr = usb_read(USB_EP0_CSR);
1823
1824         DEBUG_EP0("%s: csr = %x\n", __func__, csr);
1825
1826         /*
1827          * For overview of what we should be doing see c.f. Chapter 18.1.2.4
1828          * We will follow that outline here modified by our own global state
1829          * indication which provides hints as to what we think should be
1830          * happening..
1831          */
1832
1833         /*
1834          * if SENT_STALL is set
1835          *      - clear the SENT_STALL bit
1836          */
1837         if (csr & EP0_SENT_STALL) {
1838                 DEBUG_EP0("%s: EP0_SENT_STALL is set: %x\n", __func__, csr);
1839                 usb_clear((EP0_SENT_STALL | EP0_SEND_STALL), USB_EP0_CSR);
1840                 nuke(ep, -ECONNABORTED);
1841                 dev->ep0state = WAIT_FOR_SETUP;
1842                 return;
1843         }
1844
1845         /*
1846          * if a transfer is in progress && IN_PKT_RDY and OUT_PKT_RDY are clear
1847          *      - fill EP0 FIFO
1848          *      - if last packet
1849          *      -       set IN_PKT_RDY | DATA_END
1850          *      - else
1851          *              set IN_PKT_RDY
1852          */
1853         if (!(csr & (EP0_IN_PKT_RDY | EP0_OUT_PKT_RDY))) {
1854                 DEBUG_EP0("%s: IN_PKT_RDY and OUT_PKT_RDY are clear\n",
1855                           __func__);
1856
1857                 switch (dev->ep0state) {
1858                 case DATA_STATE_XMIT:
1859                         DEBUG_EP0("continue with DATA_STATE_XMIT\n");
1860                         lh7a40x_ep0_in(dev, csr);
1861                         return;
1862                 case DATA_STATE_NEED_ZLP:
1863                         DEBUG_EP0("continue with DATA_STATE_NEED_ZLP\n");
1864                         lh7a40x_ep0_in_zlp(dev, csr);
1865                         return;
1866                 default:
1867                         /* Stall? */
1868                         DEBUG_EP0("Odd state!! state = %s\n",
1869                                   state_names[dev->ep0state]);
1870                         dev->ep0state = WAIT_FOR_SETUP;
1871                         /* nuke(ep, 0); */
1872                         /* usb_set(EP0_SEND_STALL, ep->csr1); */
1873                         break;
1874                 }
1875         }
1876
1877         /*
1878          * if SETUP_END is set
1879          *      - abort the last transfer
1880          *      - set SERVICED_SETUP_END_BIT
1881          */
1882         if (csr & EP0_SETUP_END) {
1883                 DEBUG_EP0("%s: EP0_SETUP_END is set: %x\n", __func__, csr);
1884
1885                 usb_set(EP0_CLR_SETUP_END, USB_EP0_CSR);
1886
1887                 nuke(ep, 0);
1888                 dev->ep0state = WAIT_FOR_SETUP;
1889         }
1890
1891         /*
1892          * if EP0_OUT_PKT_RDY is set
1893          *      - read data packet from EP0 FIFO
1894          *      - decode command
1895          *      - if error
1896          *              set SERVICED_OUT_PKT_RDY | DATA_END bits | SEND_STALL
1897          *      - else
1898          *              set SERVICED_OUT_PKT_RDY | DATA_END bits
1899          */
1900         if (csr & EP0_OUT_PKT_RDY) {
1901
1902                 DEBUG_EP0("%s: EP0_OUT_PKT_RDY is set: %x\n", __func__,
1903                           csr);
1904
1905                 switch (dev->ep0state) {
1906                 case WAIT_FOR_SETUP:
1907                         DEBUG_EP0("WAIT_FOR_SETUP\n");
1908                         lh7a40x_ep0_setup(dev, csr);
1909                         break;
1910
1911                 case DATA_STATE_RECV:
1912                         DEBUG_EP0("DATA_STATE_RECV\n");
1913                         lh7a40x_ep0_out(dev, csr);
1914                         break;
1915
1916                 default:
1917                         /* send stall? */
1918                         DEBUG_EP0("strange state!! 2. send stall? state = %d\n",
1919                                   dev->ep0state);
1920                         break;
1921                 }
1922         }
1923 }
1924
1925 static void lh7a40x_ep0_kick(struct lh7a40x_udc *dev, struct lh7a40x_ep *ep)
1926 {
1927         u32 csr;
1928
1929         usb_set_index(0);
1930         csr = usb_read(USB_EP0_CSR);
1931
1932         DEBUG_EP0("%s: %x\n", __func__, csr);
1933
1934         /* Clear "out packet ready" */
1935         usb_set(EP0_CLR_OUT, USB_EP0_CSR);
1936
1937         if (ep_is_in(ep)) {
1938                 dev->ep0state = DATA_STATE_XMIT;
1939                 lh7a40x_ep0_in(dev, csr);
1940         } else {
1941                 dev->ep0state = DATA_STATE_RECV;
1942                 lh7a40x_ep0_out(dev, csr);
1943         }
1944 }
1945
1946 /* ---------------------------------------------------------------------------
1947  *      device-scoped parts of the api to the usb controller hardware
1948  * ---------------------------------------------------------------------------
1949  */
1950
1951 static int lh7a40x_udc_get_frame(struct usb_gadget *_gadget)
1952 {
1953         u32 frame1 = usb_read(USB_FRM_NUM1);    /* Least significant 8 bits */
1954         u32 frame2 = usb_read(USB_FRM_NUM2);    /* Most significant 3 bits */
1955         DEBUG("%s, %p\n", __func__, _gadget);
1956         return ((frame2 & 0x07) << 8) | (frame1 & 0xff);
1957 }
1958
1959 static int lh7a40x_udc_wakeup(struct usb_gadget *_gadget)
1960 {
1961         /* host may not have enabled remote wakeup */
1962         /*if ((UDCCS0 & UDCCS0_DRWF) == 0)
1963            return -EHOSTUNREACH;
1964            udc_set_mask_UDCCR(UDCCR_RSM); */
1965         return -ENOTSUPP;
1966 }
1967
1968 static const struct usb_gadget_ops lh7a40x_udc_ops = {
1969         .get_frame = lh7a40x_udc_get_frame,
1970         .wakeup = lh7a40x_udc_wakeup,
1971         /* current versions must always be self-powered */
1972 };
1973
1974 static void nop_release(struct device *dev)
1975 {
1976         DEBUG("%s %s\n", __func__, dev_name(dev));
1977 }
1978
1979 static struct lh7a40x_udc memory = {
1980         .usb_address = 0,
1981
1982         .gadget = {
1983                    .ops = &lh7a40x_udc_ops,
1984                    .ep0 = &memory.ep[0].ep,
1985                    .name = driver_name,
1986                    .dev = {
1987                            .init_name = "gadget",
1988                            .release = nop_release,
1989                            },
1990                    },
1991
1992         /* control endpoint */
1993         .ep[0] = {
1994                   .ep = {
1995                          .name = ep0name,
1996                          .ops = &lh7a40x_ep_ops,
1997                          .maxpacket = EP0_PACKETSIZE,
1998                          },
1999                   .dev = &memory,
2000
2001                   .bEndpointAddress = 0,
2002                   .bmAttributes = 0,
2003
2004                   .ep_type = ep_control,
2005                   .fifo = io_p2v(USB_EP0_FIFO),
2006                   .csr1 = USB_EP0_CSR,
2007                   .csr2 = USB_EP0_CSR,
2008                   },
2009
2010         /* first group of endpoints */
2011         .ep[1] = {
2012                   .ep = {
2013                          .name = "ep1in-bulk",
2014                          .ops = &lh7a40x_ep_ops,
2015                          .maxpacket = 64,
2016                          },
2017                   .dev = &memory,
2018
2019                   .bEndpointAddress = USB_DIR_IN | 1,
2020                   .bmAttributes = USB_ENDPOINT_XFER_BULK,
2021
2022                   .ep_type = ep_bulk_in,
2023                   .fifo = io_p2v(USB_EP1_FIFO),
2024                   .csr1 = USB_IN_CSR1,
2025                   .csr2 = USB_IN_CSR2,
2026                   },
2027
2028         .ep[2] = {
2029                   .ep = {
2030                          .name = "ep2out-bulk",
2031                          .ops = &lh7a40x_ep_ops,
2032                          .maxpacket = 64,
2033                          },
2034                   .dev = &memory,
2035
2036                   .bEndpointAddress = 2,
2037                   .bmAttributes = USB_ENDPOINT_XFER_BULK,
2038
2039                   .ep_type = ep_bulk_out,
2040                   .fifo = io_p2v(USB_EP2_FIFO),
2041                   .csr1 = USB_OUT_CSR1,
2042                   .csr2 = USB_OUT_CSR2,
2043                   },
2044
2045         .ep[3] = {
2046                   .ep = {
2047                          .name = "ep3in-int",
2048                          .ops = &lh7a40x_ep_ops,
2049                          .maxpacket = 64,
2050                          },
2051                   .dev = &memory,
2052
2053                   .bEndpointAddress = USB_DIR_IN | 3,
2054                   .bmAttributes = USB_ENDPOINT_XFER_INT,
2055
2056                   .ep_type = ep_interrupt,
2057                   .fifo = io_p2v(USB_EP3_FIFO),
2058                   .csr1 = USB_IN_CSR1,
2059                   .csr2 = USB_IN_CSR2,
2060                   },
2061 };
2062
2063 /*
2064  *      probe - binds to the platform device
2065  */
2066 static int lh7a40x_udc_probe(struct platform_device *pdev)
2067 {
2068         struct lh7a40x_udc *dev = &memory;
2069         int retval;
2070
2071         DEBUG("%s: %p\n", __func__, pdev);
2072
2073         spin_lock_init(&dev->lock);
2074         dev->dev = &pdev->dev;
2075
2076         device_initialize(&dev->gadget.dev);
2077         dev->gadget.dev.parent = &pdev->dev;
2078
2079         the_controller = dev;
2080         platform_set_drvdata(pdev, dev);
2081
2082         udc_disable(dev);
2083         udc_reinit(dev);
2084
2085         /* irq setup after old hardware state is cleaned up */
2086         retval =
2087             request_irq(IRQ_USBINTR, lh7a40x_udc_irq, IRQF_DISABLED, driver_name,
2088                         dev);
2089         if (retval != 0) {
2090                 DEBUG(KERN_ERR "%s: can't get irq %i, err %d\n", driver_name,
2091                       IRQ_USBINTR, retval);
2092                 return -EBUSY;
2093         }
2094
2095         create_proc_files();
2096
2097         return retval;
2098 }
2099
2100 static int lh7a40x_udc_remove(struct platform_device *pdev)
2101 {
2102         struct lh7a40x_udc *dev = platform_get_drvdata(pdev);
2103
2104         DEBUG("%s: %p\n", __func__, pdev);
2105
2106         if (dev->driver)
2107                 return -EBUSY;
2108
2109         udc_disable(dev);
2110         remove_proc_files();
2111
2112         free_irq(IRQ_USBINTR, dev);
2113
2114         platform_set_drvdata(pdev, 0);
2115
2116         the_controller = 0;
2117
2118         return 0;
2119 }
2120
2121 /*-------------------------------------------------------------------------*/
2122
2123 static struct platform_driver udc_driver = {
2124         .probe = lh7a40x_udc_probe,
2125         .remove = lh7a40x_udc_remove,
2126             /* FIXME power management support */
2127             /* .suspend = ... disable UDC */
2128             /* .resume = ... re-enable UDC */
2129         .driver = {
2130                 .name = (char *)driver_name,
2131                 .owner = THIS_MODULE,
2132         },
2133 };
2134
2135 static int __init udc_init(void)
2136 {
2137         DEBUG("%s: %s version %s\n", __func__, driver_name, DRIVER_VERSION);
2138         return platform_driver_register(&udc_driver);
2139 }
2140
2141 static void __exit udc_exit(void)
2142 {
2143         platform_driver_unregister(&udc_driver);
2144 }
2145
2146 module_init(udc_init);
2147 module_exit(udc_exit);
2148
2149 MODULE_DESCRIPTION(DRIVER_DESC);
2150 MODULE_AUTHOR("Mikko Lahteenmaki, Bo Henriksen");
2151 MODULE_LICENSE("GPL");
2152 MODULE_ALIAS("platform:lh7a40x_udc");