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