Linux-libre 3.12.18-gnu
[librecmc/linux-libre.git] / drivers / usb / host / r8a66597-hcd.c
1 /*
2  * R8A66597 HCD (Host Controller Driver)
3  *
4  * Copyright (C) 2006-2007 Renesas Solutions Corp.
5  * Portions Copyright (C) 2004 Psion Teklogix (for NetBook PRO)
6  * Portions Copyright (C) 2004-2005 David Brownell
7  * Portions Copyright (C) 1999 Roman Weissgaerber
8  *
9  * Author : Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; version 2 of the License.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
23  *
24  */
25
26 #include <linux/module.h>
27 #include <linux/kernel.h>
28 #include <linux/sched.h>
29 #include <linux/errno.h>
30 #include <linux/init.h>
31 #include <linux/timer.h>
32 #include <linux/delay.h>
33 #include <linux/list.h>
34 #include <linux/interrupt.h>
35 #include <linux/usb.h>
36 #include <linux/usb/hcd.h>
37 #include <linux/platform_device.h>
38 #include <linux/io.h>
39 #include <linux/mm.h>
40 #include <linux/irq.h>
41 #include <linux/slab.h>
42 #include <asm/cacheflush.h>
43
44 #include "r8a66597.h"
45
46 MODULE_DESCRIPTION("R8A66597 USB Host Controller Driver");
47 MODULE_LICENSE("GPL");
48 MODULE_AUTHOR("Yoshihiro Shimoda");
49 MODULE_ALIAS("platform:r8a66597_hcd");
50
51 #define DRIVER_VERSION  "2009-05-26"
52
53 static const char hcd_name[] = "r8a66597_hcd";
54
55 static void packet_write(struct r8a66597 *r8a66597, u16 pipenum);
56 static int r8a66597_get_frame(struct usb_hcd *hcd);
57
58 /* this function must be called with interrupt disabled */
59 static void enable_pipe_irq(struct r8a66597 *r8a66597, u16 pipenum,
60                             unsigned long reg)
61 {
62         u16 tmp;
63
64         tmp = r8a66597_read(r8a66597, INTENB0);
65         r8a66597_bclr(r8a66597, BEMPE | NRDYE | BRDYE, INTENB0);
66         r8a66597_bset(r8a66597, 1 << pipenum, reg);
67         r8a66597_write(r8a66597, tmp, INTENB0);
68 }
69
70 /* this function must be called with interrupt disabled */
71 static void disable_pipe_irq(struct r8a66597 *r8a66597, u16 pipenum,
72                              unsigned long reg)
73 {
74         u16 tmp;
75
76         tmp = r8a66597_read(r8a66597, INTENB0);
77         r8a66597_bclr(r8a66597, BEMPE | NRDYE | BRDYE, INTENB0);
78         r8a66597_bclr(r8a66597, 1 << pipenum, reg);
79         r8a66597_write(r8a66597, tmp, INTENB0);
80 }
81
82 static void set_devadd_reg(struct r8a66597 *r8a66597, u8 r8a66597_address,
83                            u16 usbspd, u8 upphub, u8 hubport, int port)
84 {
85         u16 val;
86         unsigned long devadd_reg = get_devadd_addr(r8a66597_address);
87
88         val = (upphub << 11) | (hubport << 8) | (usbspd << 6) | (port & 0x0001);
89         r8a66597_write(r8a66597, val, devadd_reg);
90 }
91
92 static int r8a66597_clock_enable(struct r8a66597 *r8a66597)
93 {
94         u16 tmp;
95         int i = 0;
96
97         if (r8a66597->pdata->on_chip) {
98                 clk_enable(r8a66597->clk);
99                 do {
100                         r8a66597_write(r8a66597, SCKE, SYSCFG0);
101                         tmp = r8a66597_read(r8a66597, SYSCFG0);
102                         if (i++ > 1000) {
103                                 printk(KERN_ERR "r8a66597: reg access fail.\n");
104                                 return -ENXIO;
105                         }
106                 } while ((tmp & SCKE) != SCKE);
107                 r8a66597_write(r8a66597, 0x04, 0x02);
108         } else {
109                 do {
110                         r8a66597_write(r8a66597, USBE, SYSCFG0);
111                         tmp = r8a66597_read(r8a66597, SYSCFG0);
112                         if (i++ > 1000) {
113                                 printk(KERN_ERR "r8a66597: reg access fail.\n");
114                                 return -ENXIO;
115                         }
116                 } while ((tmp & USBE) != USBE);
117                 r8a66597_bclr(r8a66597, USBE, SYSCFG0);
118                 r8a66597_mdfy(r8a66597, get_xtal_from_pdata(r8a66597->pdata),
119                               XTAL, SYSCFG0);
120
121                 i = 0;
122                 r8a66597_bset(r8a66597, XCKE, SYSCFG0);
123                 do {
124                         msleep(1);
125                         tmp = r8a66597_read(r8a66597, SYSCFG0);
126                         if (i++ > 500) {
127                                 printk(KERN_ERR "r8a66597: reg access fail.\n");
128                                 return -ENXIO;
129                         }
130                 } while ((tmp & SCKE) != SCKE);
131         }
132
133         return 0;
134 }
135
136 static void r8a66597_clock_disable(struct r8a66597 *r8a66597)
137 {
138         r8a66597_bclr(r8a66597, SCKE, SYSCFG0);
139         udelay(1);
140
141         if (r8a66597->pdata->on_chip) {
142                 clk_disable(r8a66597->clk);
143         } else {
144                 r8a66597_bclr(r8a66597, PLLC, SYSCFG0);
145                 r8a66597_bclr(r8a66597, XCKE, SYSCFG0);
146                 r8a66597_bclr(r8a66597, USBE, SYSCFG0);
147         }
148 }
149
150 static void r8a66597_enable_port(struct r8a66597 *r8a66597, int port)
151 {
152         u16 val;
153
154         val = port ? DRPD : DCFM | DRPD;
155         r8a66597_bset(r8a66597, val, get_syscfg_reg(port));
156         r8a66597_bset(r8a66597, HSE, get_syscfg_reg(port));
157
158         r8a66597_write(r8a66597, BURST | CPU_ADR_RD_WR, get_dmacfg_reg(port));
159         r8a66597_bclr(r8a66597, DTCHE, get_intenb_reg(port));
160         r8a66597_bset(r8a66597, ATTCHE, get_intenb_reg(port));
161 }
162
163 static void r8a66597_disable_port(struct r8a66597 *r8a66597, int port)
164 {
165         u16 val, tmp;
166
167         r8a66597_write(r8a66597, 0, get_intenb_reg(port));
168         r8a66597_write(r8a66597, 0, get_intsts_reg(port));
169
170         r8a66597_port_power(r8a66597, port, 0);
171
172         do {
173                 tmp = r8a66597_read(r8a66597, SOFCFG) & EDGESTS;
174                 udelay(640);
175         } while (tmp == EDGESTS);
176
177         val = port ? DRPD : DCFM | DRPD;
178         r8a66597_bclr(r8a66597, val, get_syscfg_reg(port));
179         r8a66597_bclr(r8a66597, HSE, get_syscfg_reg(port));
180 }
181
182 static int enable_controller(struct r8a66597 *r8a66597)
183 {
184         int ret, port;
185         u16 vif = r8a66597->pdata->vif ? LDRV : 0;
186         u16 irq_sense = r8a66597->irq_sense_low ? INTL : 0;
187         u16 endian = r8a66597->pdata->endian ? BIGEND : 0;
188
189         ret = r8a66597_clock_enable(r8a66597);
190         if (ret < 0)
191                 return ret;
192
193         r8a66597_bset(r8a66597, vif & LDRV, PINCFG);
194         r8a66597_bset(r8a66597, USBE, SYSCFG0);
195
196         r8a66597_bset(r8a66597, BEMPE | NRDYE | BRDYE, INTENB0);
197         r8a66597_bset(r8a66597, irq_sense & INTL, SOFCFG);
198         r8a66597_bset(r8a66597, BRDY0, BRDYENB);
199         r8a66597_bset(r8a66597, BEMP0, BEMPENB);
200
201         r8a66597_bset(r8a66597, endian & BIGEND, CFIFOSEL);
202         r8a66597_bset(r8a66597, endian & BIGEND, D0FIFOSEL);
203         r8a66597_bset(r8a66597, endian & BIGEND, D1FIFOSEL);
204         r8a66597_bset(r8a66597, TRNENSEL, SOFCFG);
205
206         r8a66597_bset(r8a66597, SIGNE | SACKE, INTENB1);
207
208         for (port = 0; port < r8a66597->max_root_hub; port++)
209                 r8a66597_enable_port(r8a66597, port);
210
211         return 0;
212 }
213
214 static void disable_controller(struct r8a66597 *r8a66597)
215 {
216         int port;
217
218         /* disable interrupts */
219         r8a66597_write(r8a66597, 0, INTENB0);
220         r8a66597_write(r8a66597, 0, INTENB1);
221         r8a66597_write(r8a66597, 0, BRDYENB);
222         r8a66597_write(r8a66597, 0, BEMPENB);
223         r8a66597_write(r8a66597, 0, NRDYENB);
224
225         /* clear status */
226         r8a66597_write(r8a66597, 0, BRDYSTS);
227         r8a66597_write(r8a66597, 0, NRDYSTS);
228         r8a66597_write(r8a66597, 0, BEMPSTS);
229
230         for (port = 0; port < r8a66597->max_root_hub; port++)
231                 r8a66597_disable_port(r8a66597, port);
232
233         r8a66597_clock_disable(r8a66597);
234 }
235
236 static int get_parent_r8a66597_address(struct r8a66597 *r8a66597,
237                                        struct usb_device *udev)
238 {
239         struct r8a66597_device *dev;
240
241         if (udev->parent && udev->parent->devnum != 1)
242                 udev = udev->parent;
243
244         dev = dev_get_drvdata(&udev->dev);
245         if (dev)
246                 return dev->address;
247         else
248                 return 0;
249 }
250
251 static int is_child_device(char *devpath)
252 {
253         return (devpath[2] ? 1 : 0);
254 }
255
256 static int is_hub_limit(char *devpath)
257 {
258         return ((strlen(devpath) >= 4) ? 1 : 0);
259 }
260
261 static void get_port_number(struct r8a66597 *r8a66597,
262                             char *devpath, u16 *root_port, u16 *hub_port)
263 {
264         if (root_port) {
265                 *root_port = (devpath[0] & 0x0F) - 1;
266                 if (*root_port >= r8a66597->max_root_hub)
267                         printk(KERN_ERR "r8a66597: Illegal root port number.\n");
268         }
269         if (hub_port)
270                 *hub_port = devpath[2] & 0x0F;
271 }
272
273 static u16 get_r8a66597_usb_speed(enum usb_device_speed speed)
274 {
275         u16 usbspd = 0;
276
277         switch (speed) {
278         case USB_SPEED_LOW:
279                 usbspd = LSMODE;
280                 break;
281         case USB_SPEED_FULL:
282                 usbspd = FSMODE;
283                 break;
284         case USB_SPEED_HIGH:
285                 usbspd = HSMODE;
286                 break;
287         default:
288                 printk(KERN_ERR "r8a66597: unknown speed\n");
289                 break;
290         }
291
292         return usbspd;
293 }
294
295 static void set_child_connect_map(struct r8a66597 *r8a66597, int address)
296 {
297         int idx;
298
299         idx = address / 32;
300         r8a66597->child_connect_map[idx] |= 1 << (address % 32);
301 }
302
303 static void put_child_connect_map(struct r8a66597 *r8a66597, int address)
304 {
305         int idx;
306
307         idx = address / 32;
308         r8a66597->child_connect_map[idx] &= ~(1 << (address % 32));
309 }
310
311 static void set_pipe_reg_addr(struct r8a66597_pipe *pipe, u8 dma_ch)
312 {
313         u16 pipenum = pipe->info.pipenum;
314         const unsigned long fifoaddr[] = {D0FIFO, D1FIFO, CFIFO};
315         const unsigned long fifosel[] = {D0FIFOSEL, D1FIFOSEL, CFIFOSEL};
316         const unsigned long fifoctr[] = {D0FIFOCTR, D1FIFOCTR, CFIFOCTR};
317
318         if (dma_ch > R8A66597_PIPE_NO_DMA)      /* dma fifo not use? */
319                 dma_ch = R8A66597_PIPE_NO_DMA;
320
321         pipe->fifoaddr = fifoaddr[dma_ch];
322         pipe->fifosel = fifosel[dma_ch];
323         pipe->fifoctr = fifoctr[dma_ch];
324
325         if (pipenum == 0)
326                 pipe->pipectr = DCPCTR;
327         else
328                 pipe->pipectr = get_pipectr_addr(pipenum);
329
330         if (check_bulk_or_isoc(pipenum)) {
331                 pipe->pipetre = get_pipetre_addr(pipenum);
332                 pipe->pipetrn = get_pipetrn_addr(pipenum);
333         } else {
334                 pipe->pipetre = 0;
335                 pipe->pipetrn = 0;
336         }
337 }
338
339 static struct r8a66597_device *
340 get_urb_to_r8a66597_dev(struct r8a66597 *r8a66597, struct urb *urb)
341 {
342         if (usb_pipedevice(urb->pipe) == 0)
343                 return &r8a66597->device0;
344
345         return dev_get_drvdata(&urb->dev->dev);
346 }
347
348 static int make_r8a66597_device(struct r8a66597 *r8a66597,
349                                 struct urb *urb, u8 addr)
350 {
351         struct r8a66597_device *dev;
352         int usb_address = urb->setup_packet[2]; /* urb->pipe is address 0 */
353
354         dev = kzalloc(sizeof(struct r8a66597_device), GFP_ATOMIC);
355         if (dev == NULL)
356                 return -ENOMEM;
357
358         dev_set_drvdata(&urb->dev->dev, dev);
359         dev->udev = urb->dev;
360         dev->address = addr;
361         dev->usb_address = usb_address;
362         dev->state = USB_STATE_ADDRESS;
363         dev->ep_in_toggle = 0;
364         dev->ep_out_toggle = 0;
365         INIT_LIST_HEAD(&dev->device_list);
366         list_add_tail(&dev->device_list, &r8a66597->child_device);
367
368         get_port_number(r8a66597, urb->dev->devpath,
369                         &dev->root_port, &dev->hub_port);
370         if (!is_child_device(urb->dev->devpath))
371                 r8a66597->root_hub[dev->root_port].dev = dev;
372
373         set_devadd_reg(r8a66597, dev->address,
374                        get_r8a66597_usb_speed(urb->dev->speed),
375                        get_parent_r8a66597_address(r8a66597, urb->dev),
376                        dev->hub_port, dev->root_port);
377
378         return 0;
379 }
380
381 /* this function must be called with interrupt disabled */
382 static u8 alloc_usb_address(struct r8a66597 *r8a66597, struct urb *urb)
383 {
384         u8 addr;        /* R8A66597's address */
385         struct r8a66597_device *dev;
386
387         if (is_hub_limit(urb->dev->devpath)) {
388                 dev_err(&urb->dev->dev, "External hub limit reached.\n");
389                 return 0;
390         }
391
392         dev = get_urb_to_r8a66597_dev(r8a66597, urb);
393         if (dev && dev->state >= USB_STATE_ADDRESS)
394                 return dev->address;
395
396         for (addr = 1; addr <= R8A66597_MAX_DEVICE; addr++) {
397                 if (r8a66597->address_map & (1 << addr))
398                         continue;
399
400                 dev_dbg(&urb->dev->dev, "alloc_address: r8a66597_addr=%d\n", addr);
401                 r8a66597->address_map |= 1 << addr;
402
403                 if (make_r8a66597_device(r8a66597, urb, addr) < 0)
404                         return 0;
405
406                 return addr;
407         }
408
409         dev_err(&urb->dev->dev,
410                 "cannot communicate with a USB device more than 10.(%x)\n",
411                 r8a66597->address_map);
412
413         return 0;
414 }
415
416 /* this function must be called with interrupt disabled */
417 static void free_usb_address(struct r8a66597 *r8a66597,
418                              struct r8a66597_device *dev, int reset)
419 {
420         int port;
421
422         if (!dev)
423                 return;
424
425         dev_dbg(&dev->udev->dev, "free_addr: addr=%d\n", dev->address);
426
427         dev->state = USB_STATE_DEFAULT;
428         r8a66597->address_map &= ~(1 << dev->address);
429         dev->address = 0;
430         /*
431          * Only when resetting USB, it is necessary to erase drvdata. When
432          * a usb device with usb hub is disconnect, "dev->udev" is already
433          * freed on usb_desconnect(). So we cannot access the data.
434          */
435         if (reset)
436                 dev_set_drvdata(&dev->udev->dev, NULL);
437         list_del(&dev->device_list);
438         kfree(dev);
439
440         for (port = 0; port < r8a66597->max_root_hub; port++) {
441                 if (r8a66597->root_hub[port].dev == dev) {
442                         r8a66597->root_hub[port].dev = NULL;
443                         break;
444                 }
445         }
446 }
447
448 static void r8a66597_reg_wait(struct r8a66597 *r8a66597, unsigned long reg,
449                               u16 mask, u16 loop)
450 {
451         u16 tmp;
452         int i = 0;
453
454         do {
455                 tmp = r8a66597_read(r8a66597, reg);
456                 if (i++ > 1000000) {
457                         printk(KERN_ERR "r8a66597: register%lx, loop %x "
458                                "is timeout\n", reg, loop);
459                         break;
460                 }
461                 ndelay(1);
462         } while ((tmp & mask) != loop);
463 }
464
465 /* this function must be called with interrupt disabled */
466 static void pipe_start(struct r8a66597 *r8a66597, struct r8a66597_pipe *pipe)
467 {
468         u16 tmp;
469
470         tmp = r8a66597_read(r8a66597, pipe->pipectr) & PID;
471         if ((pipe->info.pipenum != 0) & ((tmp & PID_STALL) != 0)) /* stall? */
472                 r8a66597_mdfy(r8a66597, PID_NAK, PID, pipe->pipectr);
473         r8a66597_mdfy(r8a66597, PID_BUF, PID, pipe->pipectr);
474 }
475
476 /* this function must be called with interrupt disabled */
477 static void pipe_stop(struct r8a66597 *r8a66597, struct r8a66597_pipe *pipe)
478 {
479         u16 tmp;
480
481         tmp = r8a66597_read(r8a66597, pipe->pipectr) & PID;
482         if ((tmp & PID_STALL11) != PID_STALL11) /* force stall? */
483                 r8a66597_mdfy(r8a66597, PID_STALL, PID, pipe->pipectr);
484         r8a66597_mdfy(r8a66597, PID_NAK, PID, pipe->pipectr);
485         r8a66597_reg_wait(r8a66597, pipe->pipectr, PBUSY, 0);
486 }
487
488 /* this function must be called with interrupt disabled */
489 static void clear_all_buffer(struct r8a66597 *r8a66597,
490                              struct r8a66597_pipe *pipe)
491 {
492         u16 tmp;
493
494         if (!pipe || pipe->info.pipenum == 0)
495                 return;
496
497         pipe_stop(r8a66597, pipe);
498         r8a66597_bset(r8a66597, ACLRM, pipe->pipectr);
499         tmp = r8a66597_read(r8a66597, pipe->pipectr);
500         tmp = r8a66597_read(r8a66597, pipe->pipectr);
501         tmp = r8a66597_read(r8a66597, pipe->pipectr);
502         r8a66597_bclr(r8a66597, ACLRM, pipe->pipectr);
503 }
504
505 /* this function must be called with interrupt disabled */
506 static void r8a66597_pipe_toggle(struct r8a66597 *r8a66597,
507                                  struct r8a66597_pipe *pipe, int toggle)
508 {
509         if (toggle)
510                 r8a66597_bset(r8a66597, SQSET, pipe->pipectr);
511         else
512                 r8a66597_bset(r8a66597, SQCLR, pipe->pipectr);
513 }
514
515 static inline unsigned short mbw_value(struct r8a66597 *r8a66597)
516 {
517         if (r8a66597->pdata->on_chip)
518                 return MBW_32;
519         else
520                 return MBW_16;
521 }
522
523 /* this function must be called with interrupt disabled */
524 static inline void cfifo_change(struct r8a66597 *r8a66597, u16 pipenum)
525 {
526         unsigned short mbw = mbw_value(r8a66597);
527
528         r8a66597_mdfy(r8a66597, mbw | pipenum, mbw | CURPIPE, CFIFOSEL);
529         r8a66597_reg_wait(r8a66597, CFIFOSEL, CURPIPE, pipenum);
530 }
531
532 /* this function must be called with interrupt disabled */
533 static inline void fifo_change_from_pipe(struct r8a66597 *r8a66597,
534                                          struct r8a66597_pipe *pipe)
535 {
536         unsigned short mbw = mbw_value(r8a66597);
537
538         cfifo_change(r8a66597, 0);
539         r8a66597_mdfy(r8a66597, mbw | 0, mbw | CURPIPE, D0FIFOSEL);
540         r8a66597_mdfy(r8a66597, mbw | 0, mbw | CURPIPE, D1FIFOSEL);
541
542         r8a66597_mdfy(r8a66597, mbw | pipe->info.pipenum, mbw | CURPIPE,
543                       pipe->fifosel);
544         r8a66597_reg_wait(r8a66597, pipe->fifosel, CURPIPE, pipe->info.pipenum);
545 }
546
547 static u16 r8a66597_get_pipenum(struct urb *urb, struct usb_host_endpoint *hep)
548 {
549         struct r8a66597_pipe *pipe = hep->hcpriv;
550
551         if (usb_pipeendpoint(urb->pipe) == 0)
552                 return 0;
553         else
554                 return pipe->info.pipenum;
555 }
556
557 static u16 get_urb_to_r8a66597_addr(struct r8a66597 *r8a66597, struct urb *urb)
558 {
559         struct r8a66597_device *dev = get_urb_to_r8a66597_dev(r8a66597, urb);
560
561         return (usb_pipedevice(urb->pipe) == 0) ? 0 : dev->address;
562 }
563
564 static unsigned short *get_toggle_pointer(struct r8a66597_device *dev,
565                                           int urb_pipe)
566 {
567         if (!dev)
568                 return NULL;
569
570         return usb_pipein(urb_pipe) ? &dev->ep_in_toggle : &dev->ep_out_toggle;
571 }
572
573 /* this function must be called with interrupt disabled */
574 static void pipe_toggle_set(struct r8a66597 *r8a66597,
575                             struct r8a66597_pipe *pipe,
576                             struct urb *urb, int set)
577 {
578         struct r8a66597_device *dev = get_urb_to_r8a66597_dev(r8a66597, urb);
579         unsigned char endpoint = usb_pipeendpoint(urb->pipe);
580         unsigned short *toggle = get_toggle_pointer(dev, urb->pipe);
581
582         if (!toggle)
583                 return;
584
585         if (set)
586                 *toggle |= 1 << endpoint;
587         else
588                 *toggle &= ~(1 << endpoint);
589 }
590
591 /* this function must be called with interrupt disabled */
592 static void pipe_toggle_save(struct r8a66597 *r8a66597,
593                              struct r8a66597_pipe *pipe,
594                              struct urb *urb)
595 {
596         if (r8a66597_read(r8a66597, pipe->pipectr) & SQMON)
597                 pipe_toggle_set(r8a66597, pipe, urb, 1);
598         else
599                 pipe_toggle_set(r8a66597, pipe, urb, 0);
600 }
601
602 /* this function must be called with interrupt disabled */
603 static void pipe_toggle_restore(struct r8a66597 *r8a66597,
604                                 struct r8a66597_pipe *pipe,
605                                 struct urb *urb)
606 {
607         struct r8a66597_device *dev = get_urb_to_r8a66597_dev(r8a66597, urb);
608         unsigned char endpoint = usb_pipeendpoint(urb->pipe);
609         unsigned short *toggle = get_toggle_pointer(dev, urb->pipe);
610
611         if (!toggle)
612                 return;
613
614         r8a66597_pipe_toggle(r8a66597, pipe, *toggle & (1 << endpoint));
615 }
616
617 /* this function must be called with interrupt disabled */
618 static void pipe_buffer_setting(struct r8a66597 *r8a66597,
619                                 struct r8a66597_pipe_info *info)
620 {
621         u16 val = 0;
622
623         if (info->pipenum == 0)
624                 return;
625
626         r8a66597_bset(r8a66597, ACLRM, get_pipectr_addr(info->pipenum));
627         r8a66597_bclr(r8a66597, ACLRM, get_pipectr_addr(info->pipenum));
628         r8a66597_write(r8a66597, info->pipenum, PIPESEL);
629         if (!info->dir_in)
630                 val |= R8A66597_DIR;
631         if (info->type == R8A66597_BULK && info->dir_in)
632                 val |= R8A66597_DBLB | R8A66597_SHTNAK;
633         val |= info->type | info->epnum;
634         r8a66597_write(r8a66597, val, PIPECFG);
635
636         r8a66597_write(r8a66597, (info->buf_bsize << 10) | (info->bufnum),
637                        PIPEBUF);
638         r8a66597_write(r8a66597, make_devsel(info->address) | info->maxpacket,
639                        PIPEMAXP);
640         r8a66597_write(r8a66597, info->interval, PIPEPERI);
641 }
642
643 /* this function must be called with interrupt disabled */
644 static void pipe_setting(struct r8a66597 *r8a66597, struct r8a66597_td *td)
645 {
646         struct r8a66597_pipe_info *info;
647         struct urb *urb = td->urb;
648
649         if (td->pipenum > 0) {
650                 info = &td->pipe->info;
651                 cfifo_change(r8a66597, 0);
652                 pipe_buffer_setting(r8a66597, info);
653
654                 if (!usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe),
655                                    usb_pipeout(urb->pipe)) &&
656                     !usb_pipecontrol(urb->pipe)) {
657                         r8a66597_pipe_toggle(r8a66597, td->pipe, 0);
658                         pipe_toggle_set(r8a66597, td->pipe, urb, 0);
659                         clear_all_buffer(r8a66597, td->pipe);
660                         usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
661                                       usb_pipeout(urb->pipe), 1);
662                 }
663                 pipe_toggle_restore(r8a66597, td->pipe, urb);
664         }
665 }
666
667 /* this function must be called with interrupt disabled */
668 static u16 get_empty_pipenum(struct r8a66597 *r8a66597,
669                              struct usb_endpoint_descriptor *ep)
670 {
671         u16 array[R8A66597_MAX_NUM_PIPE], i = 0, min;
672
673         memset(array, 0, sizeof(array));
674         switch (usb_endpoint_type(ep)) {
675         case USB_ENDPOINT_XFER_BULK:
676                 if (usb_endpoint_dir_in(ep))
677                         array[i++] = 4;
678                 else {
679                         array[i++] = 3;
680                         array[i++] = 5;
681                 }
682                 break;
683         case USB_ENDPOINT_XFER_INT:
684                 if (usb_endpoint_dir_in(ep)) {
685                         array[i++] = 6;
686                         array[i++] = 7;
687                         array[i++] = 8;
688                 } else
689                         array[i++] = 9;
690                 break;
691         case USB_ENDPOINT_XFER_ISOC:
692                 if (usb_endpoint_dir_in(ep))
693                         array[i++] = 2;
694                 else
695                         array[i++] = 1;
696                 break;
697         default:
698                 printk(KERN_ERR "r8a66597: Illegal type\n");
699                 return 0;
700         }
701
702         i = 1;
703         min = array[0];
704         while (array[i] != 0) {
705                 if (r8a66597->pipe_cnt[min] > r8a66597->pipe_cnt[array[i]])
706                         min = array[i];
707                 i++;
708         }
709
710         return min;
711 }
712
713 static u16 get_r8a66597_type(__u8 type)
714 {
715         u16 r8a66597_type;
716
717         switch (type) {
718         case USB_ENDPOINT_XFER_BULK:
719                 r8a66597_type = R8A66597_BULK;
720                 break;
721         case USB_ENDPOINT_XFER_INT:
722                 r8a66597_type = R8A66597_INT;
723                 break;
724         case USB_ENDPOINT_XFER_ISOC:
725                 r8a66597_type = R8A66597_ISO;
726                 break;
727         default:
728                 printk(KERN_ERR "r8a66597: Illegal type\n");
729                 r8a66597_type = 0x0000;
730                 break;
731         }
732
733         return r8a66597_type;
734 }
735
736 static u16 get_bufnum(u16 pipenum)
737 {
738         u16 bufnum = 0;
739
740         if (pipenum == 0)
741                 bufnum = 0;
742         else if (check_bulk_or_isoc(pipenum))
743                 bufnum = 8 + (pipenum - 1) * R8A66597_BUF_BSIZE*2;
744         else if (check_interrupt(pipenum))
745                 bufnum = 4 + (pipenum - 6);
746         else
747                 printk(KERN_ERR "r8a66597: Illegal pipenum (%d)\n", pipenum);
748
749         return bufnum;
750 }
751
752 static u16 get_buf_bsize(u16 pipenum)
753 {
754         u16 buf_bsize = 0;
755
756         if (pipenum == 0)
757                 buf_bsize = 3;
758         else if (check_bulk_or_isoc(pipenum))
759                 buf_bsize = R8A66597_BUF_BSIZE - 1;
760         else if (check_interrupt(pipenum))
761                 buf_bsize = 0;
762         else
763                 printk(KERN_ERR "r8a66597: Illegal pipenum (%d)\n", pipenum);
764
765         return buf_bsize;
766 }
767
768 /* this function must be called with interrupt disabled */
769 static void enable_r8a66597_pipe_dma(struct r8a66597 *r8a66597,
770                                      struct r8a66597_device *dev,
771                                      struct r8a66597_pipe *pipe,
772                                      struct urb *urb)
773 {
774         int i;
775         struct r8a66597_pipe_info *info = &pipe->info;
776         unsigned short mbw = mbw_value(r8a66597);
777
778         /* pipe dma is only for external controlles */
779         if (r8a66597->pdata->on_chip)
780                 return;
781
782         if ((pipe->info.pipenum != 0) && (info->type != R8A66597_INT)) {
783                 for (i = 0; i < R8A66597_MAX_DMA_CHANNEL; i++) {
784                         if ((r8a66597->dma_map & (1 << i)) != 0)
785                                 continue;
786
787                         dev_info(&dev->udev->dev,
788                                  "address %d, EndpointAddress 0x%02x use "
789                                  "DMA FIFO\n", usb_pipedevice(urb->pipe),
790                                  info->dir_in ?
791                                         USB_ENDPOINT_DIR_MASK + info->epnum
792                                         : info->epnum);
793
794                         r8a66597->dma_map |= 1 << i;
795                         dev->dma_map |= 1 << i;
796                         set_pipe_reg_addr(pipe, i);
797
798                         cfifo_change(r8a66597, 0);
799                         r8a66597_mdfy(r8a66597, mbw | pipe->info.pipenum,
800                                       mbw | CURPIPE, pipe->fifosel);
801
802                         r8a66597_reg_wait(r8a66597, pipe->fifosel, CURPIPE,
803                                           pipe->info.pipenum);
804                         r8a66597_bset(r8a66597, BCLR, pipe->fifoctr);
805                         break;
806                 }
807         }
808 }
809
810 /* this function must be called with interrupt disabled */
811 static void enable_r8a66597_pipe(struct r8a66597 *r8a66597, struct urb *urb,
812                                  struct usb_host_endpoint *hep,
813                                  struct r8a66597_pipe_info *info)
814 {
815         struct r8a66597_device *dev = get_urb_to_r8a66597_dev(r8a66597, urb);
816         struct r8a66597_pipe *pipe = hep->hcpriv;
817
818         dev_dbg(&dev->udev->dev, "enable_pipe:\n");
819
820         pipe->info = *info;
821         set_pipe_reg_addr(pipe, R8A66597_PIPE_NO_DMA);
822         r8a66597->pipe_cnt[pipe->info.pipenum]++;
823         dev->pipe_cnt[pipe->info.pipenum]++;
824
825         enable_r8a66597_pipe_dma(r8a66597, dev, pipe, urb);
826 }
827
828 static void r8a66597_urb_done(struct r8a66597 *r8a66597, struct urb *urb,
829                               int status)
830 __releases(r8a66597->lock)
831 __acquires(r8a66597->lock)
832 {
833         if (usb_pipein(urb->pipe) && usb_pipetype(urb->pipe) != PIPE_CONTROL) {
834                 void *ptr;
835
836                 for (ptr = urb->transfer_buffer;
837                      ptr < urb->transfer_buffer + urb->transfer_buffer_length;
838                      ptr += PAGE_SIZE)
839                         flush_dcache_page(virt_to_page(ptr));
840         }
841
842         usb_hcd_unlink_urb_from_ep(r8a66597_to_hcd(r8a66597), urb);
843         spin_unlock(&r8a66597->lock);
844         usb_hcd_giveback_urb(r8a66597_to_hcd(r8a66597), urb, status);
845         spin_lock(&r8a66597->lock);
846 }
847
848 /* this function must be called with interrupt disabled */
849 static void force_dequeue(struct r8a66597 *r8a66597, u16 pipenum, u16 address)
850 {
851         struct r8a66597_td *td, *next;
852         struct urb *urb;
853         struct list_head *list = &r8a66597->pipe_queue[pipenum];
854
855         if (list_empty(list))
856                 return;
857
858         list_for_each_entry_safe(td, next, list, queue) {
859                 if (td->address != address)
860                         continue;
861
862                 urb = td->urb;
863                 list_del(&td->queue);
864                 kfree(td);
865
866                 if (urb)
867                         r8a66597_urb_done(r8a66597, urb, -ENODEV);
868
869                 break;
870         }
871 }
872
873 /* this function must be called with interrupt disabled */
874 static void disable_r8a66597_pipe_all(struct r8a66597 *r8a66597,
875                                       struct r8a66597_device *dev)
876 {
877         int check_ep0 = 0;
878         u16 pipenum;
879
880         if (!dev)
881                 return;
882
883         for (pipenum = 1; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) {
884                 if (!dev->pipe_cnt[pipenum])
885                         continue;
886
887                 if (!check_ep0) {
888                         check_ep0 = 1;
889                         force_dequeue(r8a66597, 0, dev->address);
890                 }
891
892                 r8a66597->pipe_cnt[pipenum] -= dev->pipe_cnt[pipenum];
893                 dev->pipe_cnt[pipenum] = 0;
894                 force_dequeue(r8a66597, pipenum, dev->address);
895         }
896
897         dev_dbg(&dev->udev->dev, "disable_pipe\n");
898
899         r8a66597->dma_map &= ~(dev->dma_map);
900         dev->dma_map = 0;
901 }
902
903 static u16 get_interval(struct urb *urb, __u8 interval)
904 {
905         u16 time = 1;
906         int i;
907
908         if (urb->dev->speed == USB_SPEED_HIGH) {
909                 if (interval > IITV)
910                         time = IITV;
911                 else
912                         time = interval ? interval - 1 : 0;
913         } else {
914                 if (interval > 128) {
915                         time = IITV;
916                 } else {
917                         /* calculate the nearest value for PIPEPERI */
918                         for (i = 0; i < 7; i++) {
919                                 if ((1 << i) < interval &&
920                                     (1 << (i + 1) > interval))
921                                         time = 1 << i;
922                         }
923                 }
924         }
925
926         return time;
927 }
928
929 static unsigned long get_timer_interval(struct urb *urb, __u8 interval)
930 {
931         __u8 i;
932         unsigned long time = 1;
933
934         if (usb_pipeisoc(urb->pipe))
935                 return 0;
936
937         if (get_r8a66597_usb_speed(urb->dev->speed) == HSMODE) {
938                 for (i = 0; i < (interval - 1); i++)
939                         time *= 2;
940                 time = time * 125 / 1000;       /* uSOF -> msec */
941         } else {
942                 time = interval;
943         }
944
945         return time;
946 }
947
948 /* this function must be called with interrupt disabled */
949 static void init_pipe_info(struct r8a66597 *r8a66597, struct urb *urb,
950                            struct usb_host_endpoint *hep,
951                            struct usb_endpoint_descriptor *ep)
952 {
953         struct r8a66597_pipe_info info;
954
955         info.pipenum = get_empty_pipenum(r8a66597, ep);
956         info.address = get_urb_to_r8a66597_addr(r8a66597, urb);
957         info.epnum = usb_endpoint_num(ep);
958         info.maxpacket = usb_endpoint_maxp(ep);
959         info.type = get_r8a66597_type(usb_endpoint_type(ep));
960         info.bufnum = get_bufnum(info.pipenum);
961         info.buf_bsize = get_buf_bsize(info.pipenum);
962         if (info.type == R8A66597_BULK) {
963                 info.interval = 0;
964                 info.timer_interval = 0;
965         } else {
966                 info.interval = get_interval(urb, ep->bInterval);
967                 info.timer_interval = get_timer_interval(urb, ep->bInterval);
968         }
969         if (usb_endpoint_dir_in(ep))
970                 info.dir_in = 1;
971         else
972                 info.dir_in = 0;
973
974         enable_r8a66597_pipe(r8a66597, urb, hep, &info);
975 }
976
977 static void init_pipe_config(struct r8a66597 *r8a66597, struct urb *urb)
978 {
979         struct r8a66597_device *dev;
980
981         dev = get_urb_to_r8a66597_dev(r8a66597, urb);
982         dev->state = USB_STATE_CONFIGURED;
983 }
984
985 static void pipe_irq_enable(struct r8a66597 *r8a66597, struct urb *urb,
986                             u16 pipenum)
987 {
988         if (pipenum == 0 && usb_pipeout(urb->pipe))
989                 enable_irq_empty(r8a66597, pipenum);
990         else
991                 enable_irq_ready(r8a66597, pipenum);
992
993         if (!usb_pipeisoc(urb->pipe))
994                 enable_irq_nrdy(r8a66597, pipenum);
995 }
996
997 static void pipe_irq_disable(struct r8a66597 *r8a66597, u16 pipenum)
998 {
999         disable_irq_ready(r8a66597, pipenum);
1000         disable_irq_nrdy(r8a66597, pipenum);
1001 }
1002
1003 static void r8a66597_root_hub_start_polling(struct r8a66597 *r8a66597)
1004 {
1005         mod_timer(&r8a66597->rh_timer,
1006                         jiffies + msecs_to_jiffies(R8A66597_RH_POLL_TIME));
1007 }
1008
1009 static void start_root_hub_sampling(struct r8a66597 *r8a66597, int port,
1010                                         int connect)
1011 {
1012         struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
1013
1014         rh->old_syssts = r8a66597_read(r8a66597, get_syssts_reg(port)) & LNST;
1015         rh->scount = R8A66597_MAX_SAMPLING;
1016         if (connect)
1017                 rh->port |= USB_PORT_STAT_CONNECTION;
1018         else
1019                 rh->port &= ~USB_PORT_STAT_CONNECTION;
1020         rh->port |= USB_PORT_STAT_C_CONNECTION << 16;
1021
1022         r8a66597_root_hub_start_polling(r8a66597);
1023 }
1024
1025 /* this function must be called with interrupt disabled */
1026 static void r8a66597_check_syssts(struct r8a66597 *r8a66597, int port,
1027                                         u16 syssts)
1028 __releases(r8a66597->lock)
1029 __acquires(r8a66597->lock)
1030 {
1031         if (syssts == SE0) {
1032                 r8a66597_write(r8a66597, ~ATTCH, get_intsts_reg(port));
1033                 r8a66597_bset(r8a66597, ATTCHE, get_intenb_reg(port));
1034         } else {
1035                 if (syssts == FS_JSTS)
1036                         r8a66597_bset(r8a66597, HSE, get_syscfg_reg(port));
1037                 else if (syssts == LS_JSTS)
1038                         r8a66597_bclr(r8a66597, HSE, get_syscfg_reg(port));
1039
1040                 r8a66597_write(r8a66597, ~DTCH, get_intsts_reg(port));
1041                 r8a66597_bset(r8a66597, DTCHE, get_intenb_reg(port));
1042
1043                 if (r8a66597->bus_suspended)
1044                         usb_hcd_resume_root_hub(r8a66597_to_hcd(r8a66597));
1045         }
1046
1047         spin_unlock(&r8a66597->lock);
1048         usb_hcd_poll_rh_status(r8a66597_to_hcd(r8a66597));
1049         spin_lock(&r8a66597->lock);
1050 }
1051
1052 /* this function must be called with interrupt disabled */
1053 static void r8a66597_usb_connect(struct r8a66597 *r8a66597, int port)
1054 {
1055         u16 speed = get_rh_usb_speed(r8a66597, port);
1056         struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
1057
1058         rh->port &= ~(USB_PORT_STAT_HIGH_SPEED | USB_PORT_STAT_LOW_SPEED);
1059         if (speed == HSMODE)
1060                 rh->port |= USB_PORT_STAT_HIGH_SPEED;
1061         else if (speed == LSMODE)
1062                 rh->port |= USB_PORT_STAT_LOW_SPEED;
1063
1064         rh->port &= ~USB_PORT_STAT_RESET;
1065         rh->port |= USB_PORT_STAT_ENABLE;
1066 }
1067
1068 /* this function must be called with interrupt disabled */
1069 static void r8a66597_usb_disconnect(struct r8a66597 *r8a66597, int port)
1070 {
1071         struct r8a66597_device *dev = r8a66597->root_hub[port].dev;
1072
1073         disable_r8a66597_pipe_all(r8a66597, dev);
1074         free_usb_address(r8a66597, dev, 0);
1075
1076         start_root_hub_sampling(r8a66597, port, 0);
1077 }
1078
1079 /* this function must be called with interrupt disabled */
1080 static void prepare_setup_packet(struct r8a66597 *r8a66597,
1081                                  struct r8a66597_td *td)
1082 {
1083         int i;
1084         __le16 *p = (__le16 *)td->urb->setup_packet;
1085         unsigned long setup_addr = USBREQ;
1086
1087         r8a66597_write(r8a66597, make_devsel(td->address) | td->maxpacket,
1088                        DCPMAXP);
1089         r8a66597_write(r8a66597, ~(SIGN | SACK), INTSTS1);
1090
1091         for (i = 0; i < 4; i++) {
1092                 r8a66597_write(r8a66597, le16_to_cpu(p[i]), setup_addr);
1093                 setup_addr += 2;
1094         }
1095         r8a66597_write(r8a66597, SUREQ, DCPCTR);
1096 }
1097
1098 /* this function must be called with interrupt disabled */
1099 static void prepare_packet_read(struct r8a66597 *r8a66597,
1100                                 struct r8a66597_td *td)
1101 {
1102         struct urb *urb = td->urb;
1103
1104         if (usb_pipecontrol(urb->pipe)) {
1105                 r8a66597_bclr(r8a66597, R8A66597_DIR, DCPCFG);
1106                 r8a66597_mdfy(r8a66597, 0, ISEL | CURPIPE, CFIFOSEL);
1107                 r8a66597_reg_wait(r8a66597, CFIFOSEL, CURPIPE, 0);
1108                 if (urb->actual_length == 0) {
1109                         r8a66597_pipe_toggle(r8a66597, td->pipe, 1);
1110                         r8a66597_write(r8a66597, BCLR, CFIFOCTR);
1111                 }
1112                 pipe_irq_disable(r8a66597, td->pipenum);
1113                 pipe_start(r8a66597, td->pipe);
1114                 pipe_irq_enable(r8a66597, urb, td->pipenum);
1115         } else {
1116                 if (urb->actual_length == 0) {
1117                         pipe_irq_disable(r8a66597, td->pipenum);
1118                         pipe_setting(r8a66597, td);
1119                         pipe_stop(r8a66597, td->pipe);
1120                         r8a66597_write(r8a66597, ~(1 << td->pipenum), BRDYSTS);
1121
1122                         if (td->pipe->pipetre) {
1123                                 r8a66597_write(r8a66597, TRCLR,
1124                                                 td->pipe->pipetre);
1125                                 r8a66597_write(r8a66597,
1126                                                 DIV_ROUND_UP
1127                                                   (urb->transfer_buffer_length,
1128                                                    td->maxpacket),
1129                                                 td->pipe->pipetrn);
1130                                 r8a66597_bset(r8a66597, TRENB,
1131                                                 td->pipe->pipetre);
1132                         }
1133
1134                         pipe_start(r8a66597, td->pipe);
1135                         pipe_irq_enable(r8a66597, urb, td->pipenum);
1136                 }
1137         }
1138 }
1139
1140 /* this function must be called with interrupt disabled */
1141 static void prepare_packet_write(struct r8a66597 *r8a66597,
1142                                  struct r8a66597_td *td)
1143 {
1144         u16 tmp;
1145         struct urb *urb = td->urb;
1146
1147         if (usb_pipecontrol(urb->pipe)) {
1148                 pipe_stop(r8a66597, td->pipe);
1149                 r8a66597_bset(r8a66597, R8A66597_DIR, DCPCFG);
1150                 r8a66597_mdfy(r8a66597, ISEL, ISEL | CURPIPE, CFIFOSEL);
1151                 r8a66597_reg_wait(r8a66597, CFIFOSEL, CURPIPE, 0);
1152                 if (urb->actual_length == 0) {
1153                         r8a66597_pipe_toggle(r8a66597, td->pipe, 1);
1154                         r8a66597_write(r8a66597, BCLR, CFIFOCTR);
1155                 }
1156         } else {
1157                 if (urb->actual_length == 0)
1158                         pipe_setting(r8a66597, td);
1159                 if (td->pipe->pipetre)
1160                         r8a66597_bclr(r8a66597, TRENB, td->pipe->pipetre);
1161         }
1162         r8a66597_write(r8a66597, ~(1 << td->pipenum), BRDYSTS);
1163
1164         fifo_change_from_pipe(r8a66597, td->pipe);
1165         tmp = r8a66597_read(r8a66597, td->pipe->fifoctr);
1166         if (unlikely((tmp & FRDY) == 0))
1167                 pipe_irq_enable(r8a66597, urb, td->pipenum);
1168         else
1169                 packet_write(r8a66597, td->pipenum);
1170         pipe_start(r8a66597, td->pipe);
1171 }
1172
1173 /* this function must be called with interrupt disabled */
1174 static void prepare_status_packet(struct r8a66597 *r8a66597,
1175                                   struct r8a66597_td *td)
1176 {
1177         struct urb *urb = td->urb;
1178
1179         r8a66597_pipe_toggle(r8a66597, td->pipe, 1);
1180         pipe_stop(r8a66597, td->pipe);
1181
1182         if (urb->setup_packet[0] & USB_ENDPOINT_DIR_MASK) {
1183                 r8a66597_bset(r8a66597, R8A66597_DIR, DCPCFG);
1184                 r8a66597_mdfy(r8a66597, ISEL, ISEL | CURPIPE, CFIFOSEL);
1185                 r8a66597_reg_wait(r8a66597, CFIFOSEL, CURPIPE, 0);
1186                 r8a66597_write(r8a66597, ~BEMP0, BEMPSTS);
1187                 r8a66597_write(r8a66597, BCLR | BVAL, CFIFOCTR);
1188                 enable_irq_empty(r8a66597, 0);
1189         } else {
1190                 r8a66597_bclr(r8a66597, R8A66597_DIR, DCPCFG);
1191                 r8a66597_mdfy(r8a66597, 0, ISEL | CURPIPE, CFIFOSEL);
1192                 r8a66597_reg_wait(r8a66597, CFIFOSEL, CURPIPE, 0);
1193                 r8a66597_write(r8a66597, BCLR, CFIFOCTR);
1194                 enable_irq_ready(r8a66597, 0);
1195         }
1196         enable_irq_nrdy(r8a66597, 0);
1197         pipe_start(r8a66597, td->pipe);
1198 }
1199
1200 static int is_set_address(unsigned char *setup_packet)
1201 {
1202         if (((setup_packet[0] & USB_TYPE_MASK) == USB_TYPE_STANDARD) &&
1203                         setup_packet[1] == USB_REQ_SET_ADDRESS)
1204                 return 1;
1205         else
1206                 return 0;
1207 }
1208
1209 /* this function must be called with interrupt disabled */
1210 static int start_transfer(struct r8a66597 *r8a66597, struct r8a66597_td *td)
1211 {
1212         BUG_ON(!td);
1213
1214         switch (td->type) {
1215         case USB_PID_SETUP:
1216                 if (is_set_address(td->urb->setup_packet)) {
1217                         td->set_address = 1;
1218                         td->urb->setup_packet[2] = alloc_usb_address(r8a66597,
1219                                                                      td->urb);
1220                         if (td->urb->setup_packet[2] == 0)
1221                                 return -EPIPE;
1222                 }
1223                 prepare_setup_packet(r8a66597, td);
1224                 break;
1225         case USB_PID_IN:
1226                 prepare_packet_read(r8a66597, td);
1227                 break;
1228         case USB_PID_OUT:
1229                 prepare_packet_write(r8a66597, td);
1230                 break;
1231         case USB_PID_ACK:
1232                 prepare_status_packet(r8a66597, td);
1233                 break;
1234         default:
1235                 printk(KERN_ERR "r8a66597: invalid type.\n");
1236                 break;
1237         }
1238
1239         return 0;
1240 }
1241
1242 static int check_transfer_finish(struct r8a66597_td *td, struct urb *urb)
1243 {
1244         if (usb_pipeisoc(urb->pipe)) {
1245                 if (urb->number_of_packets == td->iso_cnt)
1246                         return 1;
1247         }
1248
1249         /* control or bulk or interrupt */
1250         if ((urb->transfer_buffer_length <= urb->actual_length) ||
1251             (td->short_packet) || (td->zero_packet))
1252                 return 1;
1253
1254         return 0;
1255 }
1256
1257 /* this function must be called with interrupt disabled */
1258 static void set_td_timer(struct r8a66597 *r8a66597, struct r8a66597_td *td)
1259 {
1260         unsigned long time;
1261
1262         BUG_ON(!td);
1263
1264         if (!list_empty(&r8a66597->pipe_queue[td->pipenum]) &&
1265             !usb_pipecontrol(td->urb->pipe) && usb_pipein(td->urb->pipe)) {
1266                 r8a66597->timeout_map |= 1 << td->pipenum;
1267                 switch (usb_pipetype(td->urb->pipe)) {
1268                 case PIPE_INTERRUPT:
1269                 case PIPE_ISOCHRONOUS:
1270                         time = 30;
1271                         break;
1272                 default:
1273                         time = 300;
1274                         break;
1275                 }
1276
1277                 mod_timer(&r8a66597->td_timer[td->pipenum],
1278                           jiffies + msecs_to_jiffies(time));
1279         }
1280 }
1281
1282 /* this function must be called with interrupt disabled */
1283 static void finish_request(struct r8a66597 *r8a66597, struct r8a66597_td *td,
1284                 u16 pipenum, struct urb *urb, int status)
1285 __releases(r8a66597->lock) __acquires(r8a66597->lock)
1286 {
1287         int restart = 0;
1288         struct usb_hcd *hcd = r8a66597_to_hcd(r8a66597);
1289
1290         r8a66597->timeout_map &= ~(1 << pipenum);
1291
1292         if (likely(td)) {
1293                 if (td->set_address && (status != 0 || urb->unlinked))
1294                         r8a66597->address_map &= ~(1 << urb->setup_packet[2]);
1295
1296                 pipe_toggle_save(r8a66597, td->pipe, urb);
1297                 list_del(&td->queue);
1298                 kfree(td);
1299         }
1300
1301         if (!list_empty(&r8a66597->pipe_queue[pipenum]))
1302                 restart = 1;
1303
1304         if (likely(urb)) {
1305                 if (usb_pipeisoc(urb->pipe))
1306                         urb->start_frame = r8a66597_get_frame(hcd);
1307
1308                 r8a66597_urb_done(r8a66597, urb, status);
1309         }
1310
1311         if (restart) {
1312                 td = r8a66597_get_td(r8a66597, pipenum);
1313                 if (unlikely(!td))
1314                         return;
1315
1316                 start_transfer(r8a66597, td);
1317                 set_td_timer(r8a66597, td);
1318         }
1319 }
1320
1321 static void packet_read(struct r8a66597 *r8a66597, u16 pipenum)
1322 {
1323         u16 tmp;
1324         int rcv_len, bufsize, urb_len, size;
1325         u16 *buf;
1326         struct r8a66597_td *td = r8a66597_get_td(r8a66597, pipenum);
1327         struct urb *urb;
1328         int finish = 0;
1329         int status = 0;
1330
1331         if (unlikely(!td))
1332                 return;
1333         urb = td->urb;
1334
1335         fifo_change_from_pipe(r8a66597, td->pipe);
1336         tmp = r8a66597_read(r8a66597, td->pipe->fifoctr);
1337         if (unlikely((tmp & FRDY) == 0)) {
1338                 pipe_stop(r8a66597, td->pipe);
1339                 pipe_irq_disable(r8a66597, pipenum);
1340                 printk(KERN_ERR "r8a66597: in fifo not ready (%d)\n", pipenum);
1341                 finish_request(r8a66597, td, pipenum, td->urb, -EPIPE);
1342                 return;
1343         }
1344
1345         /* prepare parameters */
1346         rcv_len = tmp & DTLN;
1347         if (usb_pipeisoc(urb->pipe)) {
1348                 buf = (u16 *)(urb->transfer_buffer +
1349                                 urb->iso_frame_desc[td->iso_cnt].offset);
1350                 urb_len = urb->iso_frame_desc[td->iso_cnt].length;
1351         } else {
1352                 buf = (void *)urb->transfer_buffer + urb->actual_length;
1353                 urb_len = urb->transfer_buffer_length - urb->actual_length;
1354         }
1355         bufsize = min(urb_len, (int) td->maxpacket);
1356         if (rcv_len <= bufsize) {
1357                 size = rcv_len;
1358         } else {
1359                 size = bufsize;
1360                 status = -EOVERFLOW;
1361                 finish = 1;
1362         }
1363
1364         /* update parameters */
1365         urb->actual_length += size;
1366         if (rcv_len == 0)
1367                 td->zero_packet = 1;
1368         if (rcv_len < bufsize) {
1369                 td->short_packet = 1;
1370         }
1371         if (usb_pipeisoc(urb->pipe)) {
1372                 urb->iso_frame_desc[td->iso_cnt].actual_length = size;
1373                 urb->iso_frame_desc[td->iso_cnt].status = status;
1374                 td->iso_cnt++;
1375                 finish = 0;
1376         }
1377
1378         /* check transfer finish */
1379         if (finish || check_transfer_finish(td, urb)) {
1380                 pipe_stop(r8a66597, td->pipe);
1381                 pipe_irq_disable(r8a66597, pipenum);
1382                 finish = 1;
1383         }
1384
1385         /* read fifo */
1386         if (urb->transfer_buffer) {
1387                 if (size == 0)
1388                         r8a66597_write(r8a66597, BCLR, td->pipe->fifoctr);
1389                 else
1390                         r8a66597_read_fifo(r8a66597, td->pipe->fifoaddr,
1391                                            buf, size);
1392         }
1393
1394         if (finish && pipenum != 0)
1395                 finish_request(r8a66597, td, pipenum, urb, status);
1396 }
1397
1398 static void packet_write(struct r8a66597 *r8a66597, u16 pipenum)
1399 {
1400         u16 tmp;
1401         int bufsize, size;
1402         u16 *buf;
1403         struct r8a66597_td *td = r8a66597_get_td(r8a66597, pipenum);
1404         struct urb *urb;
1405
1406         if (unlikely(!td))
1407                 return;
1408         urb = td->urb;
1409
1410         fifo_change_from_pipe(r8a66597, td->pipe);
1411         tmp = r8a66597_read(r8a66597, td->pipe->fifoctr);
1412         if (unlikely((tmp & FRDY) == 0)) {
1413                 pipe_stop(r8a66597, td->pipe);
1414                 pipe_irq_disable(r8a66597, pipenum);
1415                 printk(KERN_ERR "r8a66597: out fifo not ready (%d)\n", pipenum);
1416                 finish_request(r8a66597, td, pipenum, urb, -EPIPE);
1417                 return;
1418         }
1419
1420         /* prepare parameters */
1421         bufsize = td->maxpacket;
1422         if (usb_pipeisoc(urb->pipe)) {
1423                 buf = (u16 *)(urb->transfer_buffer +
1424                                 urb->iso_frame_desc[td->iso_cnt].offset);
1425                 size = min(bufsize,
1426                            (int)urb->iso_frame_desc[td->iso_cnt].length);
1427         } else {
1428                 buf = (u16 *)(urb->transfer_buffer + urb->actual_length);
1429                 size = min_t(u32, bufsize,
1430                            urb->transfer_buffer_length - urb->actual_length);
1431         }
1432
1433         /* write fifo */
1434         if (pipenum > 0)
1435                 r8a66597_write(r8a66597, ~(1 << pipenum), BEMPSTS);
1436         if (urb->transfer_buffer) {
1437                 r8a66597_write_fifo(r8a66597, td->pipe, buf, size);
1438                 if (!usb_pipebulk(urb->pipe) || td->maxpacket != size)
1439                         r8a66597_write(r8a66597, BVAL, td->pipe->fifoctr);
1440         }
1441
1442         /* update parameters */
1443         urb->actual_length += size;
1444         if (usb_pipeisoc(urb->pipe)) {
1445                 urb->iso_frame_desc[td->iso_cnt].actual_length = size;
1446                 urb->iso_frame_desc[td->iso_cnt].status = 0;
1447                 td->iso_cnt++;
1448         }
1449
1450         /* check transfer finish */
1451         if (check_transfer_finish(td, urb)) {
1452                 disable_irq_ready(r8a66597, pipenum);
1453                 enable_irq_empty(r8a66597, pipenum);
1454                 if (!usb_pipeisoc(urb->pipe))
1455                         enable_irq_nrdy(r8a66597, pipenum);
1456         } else
1457                 pipe_irq_enable(r8a66597, urb, pipenum);
1458 }
1459
1460
1461 static void check_next_phase(struct r8a66597 *r8a66597, int status)
1462 {
1463         struct r8a66597_td *td = r8a66597_get_td(r8a66597, 0);
1464         struct urb *urb;
1465         u8 finish = 0;
1466
1467         if (unlikely(!td))
1468                 return;
1469         urb = td->urb;
1470
1471         switch (td->type) {
1472         case USB_PID_IN:
1473         case USB_PID_OUT:
1474                 if (check_transfer_finish(td, urb))
1475                         td->type = USB_PID_ACK;
1476                 break;
1477         case USB_PID_SETUP:
1478                 if (urb->transfer_buffer_length == urb->actual_length)
1479                         td->type = USB_PID_ACK;
1480                 else if (usb_pipeout(urb->pipe))
1481                         td->type = USB_PID_OUT;
1482                 else
1483                         td->type = USB_PID_IN;
1484                 break;
1485         case USB_PID_ACK:
1486                 finish = 1;
1487                 break;
1488         }
1489
1490         if (finish || status != 0 || urb->unlinked)
1491                 finish_request(r8a66597, td, 0, urb, status);
1492         else
1493                 start_transfer(r8a66597, td);
1494 }
1495
1496 static int get_urb_error(struct r8a66597 *r8a66597, u16 pipenum)
1497 {
1498         struct r8a66597_td *td = r8a66597_get_td(r8a66597, pipenum);
1499
1500         if (td) {
1501                 u16 pid = r8a66597_read(r8a66597, td->pipe->pipectr) & PID;
1502
1503                 if (pid == PID_NAK)
1504                         return -ECONNRESET;
1505                 else
1506                         return -EPIPE;
1507         }
1508         return 0;
1509 }
1510
1511 static void irq_pipe_ready(struct r8a66597 *r8a66597)
1512 {
1513         u16 check;
1514         u16 pipenum;
1515         u16 mask;
1516         struct r8a66597_td *td;
1517
1518         mask = r8a66597_read(r8a66597, BRDYSTS)
1519                & r8a66597_read(r8a66597, BRDYENB);
1520         r8a66597_write(r8a66597, ~mask, BRDYSTS);
1521         if (mask & BRDY0) {
1522                 td = r8a66597_get_td(r8a66597, 0);
1523                 if (td && td->type == USB_PID_IN)
1524                         packet_read(r8a66597, 0);
1525                 else
1526                         pipe_irq_disable(r8a66597, 0);
1527                 check_next_phase(r8a66597, 0);
1528         }
1529
1530         for (pipenum = 1; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) {
1531                 check = 1 << pipenum;
1532                 if (mask & check) {
1533                         td = r8a66597_get_td(r8a66597, pipenum);
1534                         if (unlikely(!td))
1535                                 continue;
1536
1537                         if (td->type == USB_PID_IN)
1538                                 packet_read(r8a66597, pipenum);
1539                         else if (td->type == USB_PID_OUT)
1540                                 packet_write(r8a66597, pipenum);
1541                 }
1542         }
1543 }
1544
1545 static void irq_pipe_empty(struct r8a66597 *r8a66597)
1546 {
1547         u16 tmp;
1548         u16 check;
1549         u16 pipenum;
1550         u16 mask;
1551         struct r8a66597_td *td;
1552
1553         mask = r8a66597_read(r8a66597, BEMPSTS)
1554                & r8a66597_read(r8a66597, BEMPENB);
1555         r8a66597_write(r8a66597, ~mask, BEMPSTS);
1556         if (mask & BEMP0) {
1557                 cfifo_change(r8a66597, 0);
1558                 td = r8a66597_get_td(r8a66597, 0);
1559                 if (td && td->type != USB_PID_OUT)
1560                         disable_irq_empty(r8a66597, 0);
1561                 check_next_phase(r8a66597, 0);
1562         }
1563
1564         for (pipenum = 1; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) {
1565                 check = 1 << pipenum;
1566                 if (mask &  check) {
1567                         struct r8a66597_td *td;
1568                         td = r8a66597_get_td(r8a66597, pipenum);
1569                         if (unlikely(!td))
1570                                 continue;
1571
1572                         tmp = r8a66597_read(r8a66597, td->pipe->pipectr);
1573                         if ((tmp & INBUFM) == 0) {
1574                                 disable_irq_empty(r8a66597, pipenum);
1575                                 pipe_irq_disable(r8a66597, pipenum);
1576                                 finish_request(r8a66597, td, pipenum, td->urb,
1577                                                 0);
1578                         }
1579                 }
1580         }
1581 }
1582
1583 static void irq_pipe_nrdy(struct r8a66597 *r8a66597)
1584 {
1585         u16 check;
1586         u16 pipenum;
1587         u16 mask;
1588         int status;
1589
1590         mask = r8a66597_read(r8a66597, NRDYSTS)
1591                & r8a66597_read(r8a66597, NRDYENB);
1592         r8a66597_write(r8a66597, ~mask, NRDYSTS);
1593         if (mask & NRDY0) {
1594                 cfifo_change(r8a66597, 0);
1595                 status = get_urb_error(r8a66597, 0);
1596                 pipe_irq_disable(r8a66597, 0);
1597                 check_next_phase(r8a66597, status);
1598         }
1599
1600         for (pipenum = 1; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) {
1601                 check = 1 << pipenum;
1602                 if (mask & check) {
1603                         struct r8a66597_td *td;
1604                         td = r8a66597_get_td(r8a66597, pipenum);
1605                         if (unlikely(!td))
1606                                 continue;
1607
1608                         status = get_urb_error(r8a66597, pipenum);
1609                         pipe_irq_disable(r8a66597, pipenum);
1610                         pipe_stop(r8a66597, td->pipe);
1611                         finish_request(r8a66597, td, pipenum, td->urb, status);
1612                 }
1613         }
1614 }
1615
1616 static irqreturn_t r8a66597_irq(struct usb_hcd *hcd)
1617 {
1618         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
1619         u16 intsts0, intsts1, intsts2;
1620         u16 intenb0, intenb1, intenb2;
1621         u16 mask0, mask1, mask2;
1622         int status;
1623
1624         spin_lock(&r8a66597->lock);
1625
1626         intsts0 = r8a66597_read(r8a66597, INTSTS0);
1627         intsts1 = r8a66597_read(r8a66597, INTSTS1);
1628         intsts2 = r8a66597_read(r8a66597, INTSTS2);
1629         intenb0 = r8a66597_read(r8a66597, INTENB0);
1630         intenb1 = r8a66597_read(r8a66597, INTENB1);
1631         intenb2 = r8a66597_read(r8a66597, INTENB2);
1632
1633         mask2 = intsts2 & intenb2;
1634         mask1 = intsts1 & intenb1;
1635         mask0 = intsts0 & intenb0 & (BEMP | NRDY | BRDY);
1636         if (mask2) {
1637                 if (mask2 & ATTCH) {
1638                         r8a66597_write(r8a66597, ~ATTCH, INTSTS2);
1639                         r8a66597_bclr(r8a66597, ATTCHE, INTENB2);
1640
1641                         /* start usb bus sampling */
1642                         start_root_hub_sampling(r8a66597, 1, 1);
1643                 }
1644                 if (mask2 & DTCH) {
1645                         r8a66597_write(r8a66597, ~DTCH, INTSTS2);
1646                         r8a66597_bclr(r8a66597, DTCHE, INTENB2);
1647                         r8a66597_usb_disconnect(r8a66597, 1);
1648                 }
1649                 if (mask2 & BCHG) {
1650                         r8a66597_write(r8a66597, ~BCHG, INTSTS2);
1651                         r8a66597_bclr(r8a66597, BCHGE, INTENB2);
1652                         usb_hcd_resume_root_hub(r8a66597_to_hcd(r8a66597));
1653                 }
1654         }
1655
1656         if (mask1) {
1657                 if (mask1 & ATTCH) {
1658                         r8a66597_write(r8a66597, ~ATTCH, INTSTS1);
1659                         r8a66597_bclr(r8a66597, ATTCHE, INTENB1);
1660
1661                         /* start usb bus sampling */
1662                         start_root_hub_sampling(r8a66597, 0, 1);
1663                 }
1664                 if (mask1 & DTCH) {
1665                         r8a66597_write(r8a66597, ~DTCH, INTSTS1);
1666                         r8a66597_bclr(r8a66597, DTCHE, INTENB1);
1667                         r8a66597_usb_disconnect(r8a66597, 0);
1668                 }
1669                 if (mask1 & BCHG) {
1670                         r8a66597_write(r8a66597, ~BCHG, INTSTS1);
1671                         r8a66597_bclr(r8a66597, BCHGE, INTENB1);
1672                         usb_hcd_resume_root_hub(r8a66597_to_hcd(r8a66597));
1673                 }
1674
1675                 if (mask1 & SIGN) {
1676                         r8a66597_write(r8a66597, ~SIGN, INTSTS1);
1677                         status = get_urb_error(r8a66597, 0);
1678                         check_next_phase(r8a66597, status);
1679                 }
1680                 if (mask1 & SACK) {
1681                         r8a66597_write(r8a66597, ~SACK, INTSTS1);
1682                         check_next_phase(r8a66597, 0);
1683                 }
1684         }
1685         if (mask0) {
1686                 if (mask0 & BRDY)
1687                         irq_pipe_ready(r8a66597);
1688                 if (mask0 & BEMP)
1689                         irq_pipe_empty(r8a66597);
1690                 if (mask0 & NRDY)
1691                         irq_pipe_nrdy(r8a66597);
1692         }
1693
1694         spin_unlock(&r8a66597->lock);
1695         return IRQ_HANDLED;
1696 }
1697
1698 /* this function must be called with interrupt disabled */
1699 static void r8a66597_root_hub_control(struct r8a66597 *r8a66597, int port)
1700 {
1701         u16 tmp;
1702         struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
1703
1704         if (rh->port & USB_PORT_STAT_RESET) {
1705                 unsigned long dvstctr_reg = get_dvstctr_reg(port);
1706
1707                 tmp = r8a66597_read(r8a66597, dvstctr_reg);
1708                 if ((tmp & USBRST) == USBRST) {
1709                         r8a66597_mdfy(r8a66597, UACT, USBRST | UACT,
1710                                       dvstctr_reg);
1711                         r8a66597_root_hub_start_polling(r8a66597);
1712                 } else
1713                         r8a66597_usb_connect(r8a66597, port);
1714         }
1715
1716         if (!(rh->port & USB_PORT_STAT_CONNECTION)) {
1717                 r8a66597_write(r8a66597, ~ATTCH, get_intsts_reg(port));
1718                 r8a66597_bset(r8a66597, ATTCHE, get_intenb_reg(port));
1719         }
1720
1721         if (rh->scount > 0) {
1722                 tmp = r8a66597_read(r8a66597, get_syssts_reg(port)) & LNST;
1723                 if (tmp == rh->old_syssts) {
1724                         rh->scount--;
1725                         if (rh->scount == 0)
1726                                 r8a66597_check_syssts(r8a66597, port, tmp);
1727                         else
1728                                 r8a66597_root_hub_start_polling(r8a66597);
1729                 } else {
1730                         rh->scount = R8A66597_MAX_SAMPLING;
1731                         rh->old_syssts = tmp;
1732                         r8a66597_root_hub_start_polling(r8a66597);
1733                 }
1734         }
1735 }
1736
1737 static void r8a66597_interval_timer(unsigned long _r8a66597)
1738 {
1739         struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597;
1740         unsigned long flags;
1741         u16 pipenum;
1742         struct r8a66597_td *td;
1743
1744         spin_lock_irqsave(&r8a66597->lock, flags);
1745
1746         for (pipenum = 0; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) {
1747                 if (!(r8a66597->interval_map & (1 << pipenum)))
1748                         continue;
1749                 if (timer_pending(&r8a66597->interval_timer[pipenum]))
1750                         continue;
1751
1752                 td = r8a66597_get_td(r8a66597, pipenum);
1753                 if (td)
1754                         start_transfer(r8a66597, td);
1755         }
1756
1757         spin_unlock_irqrestore(&r8a66597->lock, flags);
1758 }
1759
1760 static void r8a66597_td_timer(unsigned long _r8a66597)
1761 {
1762         struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597;
1763         unsigned long flags;
1764         u16 pipenum;
1765         struct r8a66597_td *td, *new_td = NULL;
1766         struct r8a66597_pipe *pipe;
1767
1768         spin_lock_irqsave(&r8a66597->lock, flags);
1769         for (pipenum = 0; pipenum < R8A66597_MAX_NUM_PIPE; pipenum++) {
1770                 if (!(r8a66597->timeout_map & (1 << pipenum)))
1771                         continue;
1772                 if (timer_pending(&r8a66597->td_timer[pipenum]))
1773                         continue;
1774
1775                 td = r8a66597_get_td(r8a66597, pipenum);
1776                 if (!td) {
1777                         r8a66597->timeout_map &= ~(1 << pipenum);
1778                         continue;
1779                 }
1780
1781                 if (td->urb->actual_length) {
1782                         set_td_timer(r8a66597, td);
1783                         break;
1784                 }
1785
1786                 pipe = td->pipe;
1787                 pipe_stop(r8a66597, pipe);
1788
1789                 new_td = td;
1790                 do {
1791                         list_move_tail(&new_td->queue,
1792                                        &r8a66597->pipe_queue[pipenum]);
1793                         new_td = r8a66597_get_td(r8a66597, pipenum);
1794                         if (!new_td) {
1795                                 new_td = td;
1796                                 break;
1797                         }
1798                 } while (td != new_td && td->address == new_td->address);
1799
1800                 start_transfer(r8a66597, new_td);
1801
1802                 if (td == new_td)
1803                         r8a66597->timeout_map &= ~(1 << pipenum);
1804                 else
1805                         set_td_timer(r8a66597, new_td);
1806                 break;
1807         }
1808         spin_unlock_irqrestore(&r8a66597->lock, flags);
1809 }
1810
1811 static void r8a66597_timer(unsigned long _r8a66597)
1812 {
1813         struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597;
1814         unsigned long flags;
1815         int port;
1816
1817         spin_lock_irqsave(&r8a66597->lock, flags);
1818
1819         for (port = 0; port < r8a66597->max_root_hub; port++)
1820                 r8a66597_root_hub_control(r8a66597, port);
1821
1822         spin_unlock_irqrestore(&r8a66597->lock, flags);
1823 }
1824
1825 static int check_pipe_config(struct r8a66597 *r8a66597, struct urb *urb)
1826 {
1827         struct r8a66597_device *dev = get_urb_to_r8a66597_dev(r8a66597, urb);
1828
1829         if (dev && dev->address && dev->state != USB_STATE_CONFIGURED &&
1830             (urb->dev->state == USB_STATE_CONFIGURED))
1831                 return 1;
1832         else
1833                 return 0;
1834 }
1835
1836 static int r8a66597_start(struct usb_hcd *hcd)
1837 {
1838         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
1839
1840         hcd->state = HC_STATE_RUNNING;
1841         return enable_controller(r8a66597);
1842 }
1843
1844 static void r8a66597_stop(struct usb_hcd *hcd)
1845 {
1846         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
1847
1848         disable_controller(r8a66597);
1849 }
1850
1851 static void set_address_zero(struct r8a66597 *r8a66597, struct urb *urb)
1852 {
1853         unsigned int usb_address = usb_pipedevice(urb->pipe);
1854         u16 root_port, hub_port;
1855
1856         if (usb_address == 0) {
1857                 get_port_number(r8a66597, urb->dev->devpath,
1858                                 &root_port, &hub_port);
1859                 set_devadd_reg(r8a66597, 0,
1860                                get_r8a66597_usb_speed(urb->dev->speed),
1861                                get_parent_r8a66597_address(r8a66597, urb->dev),
1862                                hub_port, root_port);
1863         }
1864 }
1865
1866 static struct r8a66597_td *r8a66597_make_td(struct r8a66597 *r8a66597,
1867                                             struct urb *urb,
1868                                             struct usb_host_endpoint *hep)
1869 {
1870         struct r8a66597_td *td;
1871         u16 pipenum;
1872
1873         td = kzalloc(sizeof(struct r8a66597_td), GFP_ATOMIC);
1874         if (td == NULL)
1875                 return NULL;
1876
1877         pipenum = r8a66597_get_pipenum(urb, hep);
1878         td->pipenum = pipenum;
1879         td->pipe = hep->hcpriv;
1880         td->urb = urb;
1881         td->address = get_urb_to_r8a66597_addr(r8a66597, urb);
1882         td->maxpacket = usb_maxpacket(urb->dev, urb->pipe,
1883                                       !usb_pipein(urb->pipe));
1884         if (usb_pipecontrol(urb->pipe))
1885                 td->type = USB_PID_SETUP;
1886         else if (usb_pipein(urb->pipe))
1887                 td->type = USB_PID_IN;
1888         else
1889                 td->type = USB_PID_OUT;
1890         INIT_LIST_HEAD(&td->queue);
1891
1892         return td;
1893 }
1894
1895 static int r8a66597_urb_enqueue(struct usb_hcd *hcd,
1896                                 struct urb *urb,
1897                                 gfp_t mem_flags)
1898 {
1899         struct usb_host_endpoint *hep = urb->ep;
1900         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
1901         struct r8a66597_td *td = NULL;
1902         int ret, request = 0;
1903         unsigned long flags;
1904
1905         spin_lock_irqsave(&r8a66597->lock, flags);
1906         if (!get_urb_to_r8a66597_dev(r8a66597, urb)) {
1907                 ret = -ENODEV;
1908                 goto error_not_linked;
1909         }
1910
1911         ret = usb_hcd_link_urb_to_ep(hcd, urb);
1912         if (ret)
1913                 goto error_not_linked;
1914
1915         if (!hep->hcpriv) {
1916                 hep->hcpriv = kzalloc(sizeof(struct r8a66597_pipe),
1917                                 GFP_ATOMIC);
1918                 if (!hep->hcpriv) {
1919                         ret = -ENOMEM;
1920                         goto error;
1921                 }
1922                 set_pipe_reg_addr(hep->hcpriv, R8A66597_PIPE_NO_DMA);
1923                 if (usb_pipeendpoint(urb->pipe))
1924                         init_pipe_info(r8a66597, urb, hep, &hep->desc);
1925         }
1926
1927         if (unlikely(check_pipe_config(r8a66597, urb)))
1928                 init_pipe_config(r8a66597, urb);
1929
1930         set_address_zero(r8a66597, urb);
1931         td = r8a66597_make_td(r8a66597, urb, hep);
1932         if (td == NULL) {
1933                 ret = -ENOMEM;
1934                 goto error;
1935         }
1936         if (list_empty(&r8a66597->pipe_queue[td->pipenum]))
1937                 request = 1;
1938         list_add_tail(&td->queue, &r8a66597->pipe_queue[td->pipenum]);
1939         urb->hcpriv = td;
1940
1941         if (request) {
1942                 if (td->pipe->info.timer_interval) {
1943                         r8a66597->interval_map |= 1 << td->pipenum;
1944                         mod_timer(&r8a66597->interval_timer[td->pipenum],
1945                                   jiffies + msecs_to_jiffies(
1946                                         td->pipe->info.timer_interval));
1947                 } else {
1948                         ret = start_transfer(r8a66597, td);
1949                         if (ret < 0) {
1950                                 list_del(&td->queue);
1951                                 kfree(td);
1952                         }
1953                 }
1954         } else
1955                 set_td_timer(r8a66597, td);
1956
1957 error:
1958         if (ret)
1959                 usb_hcd_unlink_urb_from_ep(hcd, urb);
1960 error_not_linked:
1961         spin_unlock_irqrestore(&r8a66597->lock, flags);
1962         return ret;
1963 }
1964
1965 static int r8a66597_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
1966                 int status)
1967 {
1968         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
1969         struct r8a66597_td *td;
1970         unsigned long flags;
1971         int rc;
1972
1973         spin_lock_irqsave(&r8a66597->lock, flags);
1974         rc = usb_hcd_check_unlink_urb(hcd, urb, status);
1975         if (rc)
1976                 goto done;
1977
1978         if (urb->hcpriv) {
1979                 td = urb->hcpriv;
1980                 pipe_stop(r8a66597, td->pipe);
1981                 pipe_irq_disable(r8a66597, td->pipenum);
1982                 disable_irq_empty(r8a66597, td->pipenum);
1983                 finish_request(r8a66597, td, td->pipenum, urb, status);
1984         }
1985  done:
1986         spin_unlock_irqrestore(&r8a66597->lock, flags);
1987         return rc;
1988 }
1989
1990 static void r8a66597_endpoint_disable(struct usb_hcd *hcd,
1991                                       struct usb_host_endpoint *hep)
1992 {
1993         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
1994         struct r8a66597_pipe *pipe = (struct r8a66597_pipe *)hep->hcpriv;
1995         struct r8a66597_td *td;
1996         struct urb *urb = NULL;
1997         u16 pipenum;
1998         unsigned long flags;
1999
2000         if (pipe == NULL)
2001                 return;
2002         pipenum = pipe->info.pipenum;
2003
2004         if (pipenum == 0) {
2005                 kfree(hep->hcpriv);
2006                 hep->hcpriv = NULL;
2007                 return;
2008         }
2009
2010         spin_lock_irqsave(&r8a66597->lock, flags);
2011         pipe_stop(r8a66597, pipe);
2012         pipe_irq_disable(r8a66597, pipenum);
2013         disable_irq_empty(r8a66597, pipenum);
2014         td = r8a66597_get_td(r8a66597, pipenum);
2015         if (td)
2016                 urb = td->urb;
2017         finish_request(r8a66597, td, pipenum, urb, -ESHUTDOWN);
2018         kfree(hep->hcpriv);
2019         hep->hcpriv = NULL;
2020         spin_unlock_irqrestore(&r8a66597->lock, flags);
2021 }
2022
2023 static int r8a66597_get_frame(struct usb_hcd *hcd)
2024 {
2025         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
2026         return r8a66597_read(r8a66597, FRMNUM) & 0x03FF;
2027 }
2028
2029 static void collect_usb_address_map(struct usb_device *udev, unsigned long *map)
2030 {
2031         int chix;
2032         struct usb_device *childdev;
2033
2034         if (udev->state == USB_STATE_CONFIGURED &&
2035             udev->parent && udev->parent->devnum > 1 &&
2036             udev->parent->descriptor.bDeviceClass == USB_CLASS_HUB)
2037                 map[udev->devnum/32] |= (1 << (udev->devnum % 32));
2038
2039         usb_hub_for_each_child(udev, chix, childdev)
2040                 collect_usb_address_map(childdev, map);
2041 }
2042
2043 /* this function must be called with interrupt disabled */
2044 static struct r8a66597_device *get_r8a66597_device(struct r8a66597 *r8a66597,
2045                                                    int addr)
2046 {
2047         struct r8a66597_device *dev;
2048         struct list_head *list = &r8a66597->child_device;
2049
2050         list_for_each_entry(dev, list, device_list) {
2051                 if (dev->usb_address != addr)
2052                         continue;
2053
2054                 return dev;
2055         }
2056
2057         printk(KERN_ERR "r8a66597: get_r8a66597_device fail.(%d)\n", addr);
2058         return NULL;
2059 }
2060
2061 static void update_usb_address_map(struct r8a66597 *r8a66597,
2062                                    struct usb_device *root_hub,
2063                                    unsigned long *map)
2064 {
2065         int i, j, addr;
2066         unsigned long diff;
2067         unsigned long flags;
2068
2069         for (i = 0; i < 4; i++) {
2070                 diff = r8a66597->child_connect_map[i] ^ map[i];
2071                 if (!diff)
2072                         continue;
2073
2074                 for (j = 0; j < 32; j++) {
2075                         if (!(diff & (1 << j)))
2076                                 continue;
2077
2078                         addr = i * 32 + j;
2079                         if (map[i] & (1 << j))
2080                                 set_child_connect_map(r8a66597, addr);
2081                         else {
2082                                 struct r8a66597_device *dev;
2083
2084                                 spin_lock_irqsave(&r8a66597->lock, flags);
2085                                 dev = get_r8a66597_device(r8a66597, addr);
2086                                 disable_r8a66597_pipe_all(r8a66597, dev);
2087                                 free_usb_address(r8a66597, dev, 0);
2088                                 put_child_connect_map(r8a66597, addr);
2089                                 spin_unlock_irqrestore(&r8a66597->lock, flags);
2090                         }
2091                 }
2092         }
2093 }
2094
2095 static void r8a66597_check_detect_child(struct r8a66597 *r8a66597,
2096                                         struct usb_hcd *hcd)
2097 {
2098         struct usb_bus *bus;
2099         unsigned long now_map[4];
2100
2101         memset(now_map, 0, sizeof(now_map));
2102
2103         list_for_each_entry(bus, &usb_bus_list, bus_list) {
2104                 if (!bus->root_hub)
2105                         continue;
2106
2107                 if (bus->busnum != hcd->self.busnum)
2108                         continue;
2109
2110                 collect_usb_address_map(bus->root_hub, now_map);
2111                 update_usb_address_map(r8a66597, bus->root_hub, now_map);
2112         }
2113 }
2114
2115 static int r8a66597_hub_status_data(struct usb_hcd *hcd, char *buf)
2116 {
2117         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
2118         unsigned long flags;
2119         int i;
2120
2121         r8a66597_check_detect_child(r8a66597, hcd);
2122
2123         spin_lock_irqsave(&r8a66597->lock, flags);
2124
2125         *buf = 0;       /* initialize (no change) */
2126
2127         for (i = 0; i < r8a66597->max_root_hub; i++) {
2128                 if (r8a66597->root_hub[i].port & 0xffff0000)
2129                         *buf |= 1 << (i + 1);
2130         }
2131
2132         spin_unlock_irqrestore(&r8a66597->lock, flags);
2133
2134         return (*buf != 0);
2135 }
2136
2137 static void r8a66597_hub_descriptor(struct r8a66597 *r8a66597,
2138                                     struct usb_hub_descriptor *desc)
2139 {
2140         desc->bDescriptorType = 0x29;
2141         desc->bHubContrCurrent = 0;
2142         desc->bNbrPorts = r8a66597->max_root_hub;
2143         desc->bDescLength = 9;
2144         desc->bPwrOn2PwrGood = 0;
2145         desc->wHubCharacteristics = cpu_to_le16(0x0011);
2146         desc->u.hs.DeviceRemovable[0] =
2147                 ((1 << r8a66597->max_root_hub) - 1) << 1;
2148         desc->u.hs.DeviceRemovable[1] = ~0;
2149 }
2150
2151 static int r8a66597_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
2152                                 u16 wIndex, char *buf, u16 wLength)
2153 {
2154         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
2155         int ret;
2156         int port = (wIndex & 0x00FF) - 1;
2157         struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
2158         unsigned long flags;
2159
2160         ret = 0;
2161
2162         spin_lock_irqsave(&r8a66597->lock, flags);
2163         switch (typeReq) {
2164         case ClearHubFeature:
2165         case SetHubFeature:
2166                 switch (wValue) {
2167                 case C_HUB_OVER_CURRENT:
2168                 case C_HUB_LOCAL_POWER:
2169                         break;
2170                 default:
2171                         goto error;
2172                 }
2173                 break;
2174         case ClearPortFeature:
2175                 if (wIndex > r8a66597->max_root_hub)
2176                         goto error;
2177                 if (wLength != 0)
2178                         goto error;
2179
2180                 switch (wValue) {
2181                 case USB_PORT_FEAT_ENABLE:
2182                         rh->port &= ~USB_PORT_STAT_POWER;
2183                         break;
2184                 case USB_PORT_FEAT_SUSPEND:
2185                         break;
2186                 case USB_PORT_FEAT_POWER:
2187                         r8a66597_port_power(r8a66597, port, 0);
2188                         break;
2189                 case USB_PORT_FEAT_C_ENABLE:
2190                 case USB_PORT_FEAT_C_SUSPEND:
2191                 case USB_PORT_FEAT_C_CONNECTION:
2192                 case USB_PORT_FEAT_C_OVER_CURRENT:
2193                 case USB_PORT_FEAT_C_RESET:
2194                         break;
2195                 default:
2196                         goto error;
2197                 }
2198                 rh->port &= ~(1 << wValue);
2199                 break;
2200         case GetHubDescriptor:
2201                 r8a66597_hub_descriptor(r8a66597,
2202                                         (struct usb_hub_descriptor *)buf);
2203                 break;
2204         case GetHubStatus:
2205                 *buf = 0x00;
2206                 break;
2207         case GetPortStatus:
2208                 if (wIndex > r8a66597->max_root_hub)
2209                         goto error;
2210                 *(__le32 *)buf = cpu_to_le32(rh->port);
2211                 break;
2212         case SetPortFeature:
2213                 if (wIndex > r8a66597->max_root_hub)
2214                         goto error;
2215                 if (wLength != 0)
2216                         goto error;
2217
2218                 switch (wValue) {
2219                 case USB_PORT_FEAT_SUSPEND:
2220                         break;
2221                 case USB_PORT_FEAT_POWER:
2222                         r8a66597_port_power(r8a66597, port, 1);
2223                         rh->port |= USB_PORT_STAT_POWER;
2224                         break;
2225                 case USB_PORT_FEAT_RESET: {
2226                         struct r8a66597_device *dev = rh->dev;
2227
2228                         rh->port |= USB_PORT_STAT_RESET;
2229
2230                         disable_r8a66597_pipe_all(r8a66597, dev);
2231                         free_usb_address(r8a66597, dev, 1);
2232
2233                         r8a66597_mdfy(r8a66597, USBRST, USBRST | UACT,
2234                                       get_dvstctr_reg(port));
2235                         mod_timer(&r8a66597->rh_timer,
2236                                   jiffies + msecs_to_jiffies(50));
2237                         }
2238                         break;
2239                 default:
2240                         goto error;
2241                 }
2242                 rh->port |= 1 << wValue;
2243                 break;
2244         default:
2245 error:
2246                 ret = -EPIPE;
2247                 break;
2248         }
2249
2250         spin_unlock_irqrestore(&r8a66597->lock, flags);
2251         return ret;
2252 }
2253
2254 #if defined(CONFIG_PM)
2255 static int r8a66597_bus_suspend(struct usb_hcd *hcd)
2256 {
2257         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
2258         int port;
2259
2260         dev_dbg(&r8a66597->device0.udev->dev, "%s\n", __func__);
2261
2262         for (port = 0; port < r8a66597->max_root_hub; port++) {
2263                 struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
2264                 unsigned long dvstctr_reg = get_dvstctr_reg(port);
2265
2266                 if (!(rh->port & USB_PORT_STAT_ENABLE))
2267                         continue;
2268
2269                 dev_dbg(&rh->dev->udev->dev, "suspend port = %d\n", port);
2270                 r8a66597_bclr(r8a66597, UACT, dvstctr_reg);     /* suspend */
2271                 rh->port |= USB_PORT_STAT_SUSPEND;
2272
2273                 if (rh->dev->udev->do_remote_wakeup) {
2274                         msleep(3);      /* waiting last SOF */
2275                         r8a66597_bset(r8a66597, RWUPE, dvstctr_reg);
2276                         r8a66597_write(r8a66597, ~BCHG, get_intsts_reg(port));
2277                         r8a66597_bset(r8a66597, BCHGE, get_intenb_reg(port));
2278                 }
2279         }
2280
2281         r8a66597->bus_suspended = 1;
2282
2283         return 0;
2284 }
2285
2286 static int r8a66597_bus_resume(struct usb_hcd *hcd)
2287 {
2288         struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd);
2289         int port;
2290
2291         dev_dbg(&r8a66597->device0.udev->dev, "%s\n", __func__);
2292
2293         for (port = 0; port < r8a66597->max_root_hub; port++) {
2294                 struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
2295                 unsigned long dvstctr_reg = get_dvstctr_reg(port);
2296
2297                 if (!(rh->port & USB_PORT_STAT_SUSPEND))
2298                         continue;
2299
2300                 dev_dbg(&rh->dev->udev->dev, "resume port = %d\n", port);
2301                 rh->port &= ~USB_PORT_STAT_SUSPEND;
2302                 rh->port |= USB_PORT_STAT_C_SUSPEND << 16;
2303                 r8a66597_mdfy(r8a66597, RESUME, RESUME | UACT, dvstctr_reg);
2304                 msleep(50);
2305                 r8a66597_mdfy(r8a66597, UACT, RESUME | UACT, dvstctr_reg);
2306         }
2307
2308         return 0;
2309
2310 }
2311 #else
2312 #define r8a66597_bus_suspend    NULL
2313 #define r8a66597_bus_resume     NULL
2314 #endif
2315
2316 static struct hc_driver r8a66597_hc_driver = {
2317         .description =          hcd_name,
2318         .hcd_priv_size =        sizeof(struct r8a66597),
2319         .irq =                  r8a66597_irq,
2320
2321         /*
2322          * generic hardware linkage
2323          */
2324         .flags =                HCD_USB2,
2325
2326         .start =                r8a66597_start,
2327         .stop =                 r8a66597_stop,
2328
2329         /*
2330          * managing i/o requests and associated device resources
2331          */
2332         .urb_enqueue =          r8a66597_urb_enqueue,
2333         .urb_dequeue =          r8a66597_urb_dequeue,
2334         .endpoint_disable =     r8a66597_endpoint_disable,
2335
2336         /*
2337          * periodic schedule support
2338          */
2339         .get_frame_number =     r8a66597_get_frame,
2340
2341         /*
2342          * root hub support
2343          */
2344         .hub_status_data =      r8a66597_hub_status_data,
2345         .hub_control =          r8a66597_hub_control,
2346         .bus_suspend =          r8a66597_bus_suspend,
2347         .bus_resume =           r8a66597_bus_resume,
2348 };
2349
2350 #if defined(CONFIG_PM)
2351 static int r8a66597_suspend(struct device *dev)
2352 {
2353         struct r8a66597         *r8a66597 = dev_get_drvdata(dev);
2354         int port;
2355
2356         dev_dbg(dev, "%s\n", __func__);
2357
2358         disable_controller(r8a66597);
2359
2360         for (port = 0; port < r8a66597->max_root_hub; port++) {
2361                 struct r8a66597_root_hub *rh = &r8a66597->root_hub[port];
2362
2363                 rh->port = 0x00000000;
2364         }
2365
2366         return 0;
2367 }
2368
2369 static int r8a66597_resume(struct device *dev)
2370 {
2371         struct r8a66597         *r8a66597 = dev_get_drvdata(dev);
2372         struct usb_hcd          *hcd = r8a66597_to_hcd(r8a66597);
2373
2374         dev_dbg(dev, "%s\n", __func__);
2375
2376         enable_controller(r8a66597);
2377         usb_root_hub_lost_power(hcd->self.root_hub);
2378
2379         return 0;
2380 }
2381
2382 static const struct dev_pm_ops r8a66597_dev_pm_ops = {
2383         .suspend = r8a66597_suspend,
2384         .resume = r8a66597_resume,
2385         .poweroff = r8a66597_suspend,
2386         .restore = r8a66597_resume,
2387 };
2388
2389 #define R8A66597_DEV_PM_OPS     (&r8a66597_dev_pm_ops)
2390 #else   /* if defined(CONFIG_PM) */
2391 #define R8A66597_DEV_PM_OPS     NULL
2392 #endif
2393
2394 static int r8a66597_remove(struct platform_device *pdev)
2395 {
2396         struct r8a66597         *r8a66597 = platform_get_drvdata(pdev);
2397         struct usb_hcd          *hcd = r8a66597_to_hcd(r8a66597);
2398
2399         del_timer_sync(&r8a66597->rh_timer);
2400         usb_remove_hcd(hcd);
2401         iounmap(r8a66597->reg);
2402         if (r8a66597->pdata->on_chip)
2403                 clk_put(r8a66597->clk);
2404         usb_put_hcd(hcd);
2405         return 0;
2406 }
2407
2408 static int r8a66597_probe(struct platform_device *pdev)
2409 {
2410         char clk_name[8];
2411         struct resource *res = NULL, *ires;
2412         int irq = -1;
2413         void __iomem *reg = NULL;
2414         struct usb_hcd *hcd = NULL;
2415         struct r8a66597 *r8a66597;
2416         int ret = 0;
2417         int i;
2418         unsigned long irq_trigger;
2419
2420         if (usb_disabled())
2421                 return -ENODEV;
2422
2423         if (pdev->dev.dma_mask) {
2424                 ret = -EINVAL;
2425                 dev_err(&pdev->dev, "dma not supported\n");
2426                 goto clean_up;
2427         }
2428
2429         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2430         if (!res) {
2431                 ret = -ENODEV;
2432                 dev_err(&pdev->dev, "platform_get_resource error.\n");
2433                 goto clean_up;
2434         }
2435
2436         ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
2437         if (!ires) {
2438                 ret = -ENODEV;
2439                 dev_err(&pdev->dev,
2440                         "platform_get_resource IORESOURCE_IRQ error.\n");
2441                 goto clean_up;
2442         }
2443
2444         irq = ires->start;
2445         irq_trigger = ires->flags & IRQF_TRIGGER_MASK;
2446
2447         reg = ioremap(res->start, resource_size(res));
2448         if (reg == NULL) {
2449                 ret = -ENOMEM;
2450                 dev_err(&pdev->dev, "ioremap error.\n");
2451                 goto clean_up;
2452         }
2453
2454         if (pdev->dev.platform_data == NULL) {
2455                 dev_err(&pdev->dev, "no platform data\n");
2456                 ret = -ENODEV;
2457                 goto clean_up;
2458         }
2459
2460         /* initialize hcd */
2461         hcd = usb_create_hcd(&r8a66597_hc_driver, &pdev->dev, (char *)hcd_name);
2462         if (!hcd) {
2463                 ret = -ENOMEM;
2464                 dev_err(&pdev->dev, "Failed to create hcd\n");
2465                 goto clean_up;
2466         }
2467         r8a66597 = hcd_to_r8a66597(hcd);
2468         memset(r8a66597, 0, sizeof(struct r8a66597));
2469         platform_set_drvdata(pdev, r8a66597);
2470         r8a66597->pdata = dev_get_platdata(&pdev->dev);
2471         r8a66597->irq_sense_low = irq_trigger == IRQF_TRIGGER_LOW;
2472
2473         if (r8a66597->pdata->on_chip) {
2474                 snprintf(clk_name, sizeof(clk_name), "usb%d", pdev->id);
2475                 r8a66597->clk = clk_get(&pdev->dev, clk_name);
2476                 if (IS_ERR(r8a66597->clk)) {
2477                         dev_err(&pdev->dev, "cannot get clock \"%s\"\n",
2478                                 clk_name);
2479                         ret = PTR_ERR(r8a66597->clk);
2480                         goto clean_up2;
2481                 }
2482                 r8a66597->max_root_hub = 1;
2483         } else
2484                 r8a66597->max_root_hub = 2;
2485
2486         spin_lock_init(&r8a66597->lock);
2487         init_timer(&r8a66597->rh_timer);
2488         r8a66597->rh_timer.function = r8a66597_timer;
2489         r8a66597->rh_timer.data = (unsigned long)r8a66597;
2490         r8a66597->reg = reg;
2491
2492         /* make sure no interrupts are pending */
2493         ret = r8a66597_clock_enable(r8a66597);
2494         if (ret < 0)
2495                 goto clean_up3;
2496         disable_controller(r8a66597);
2497
2498         for (i = 0; i < R8A66597_MAX_NUM_PIPE; i++) {
2499                 INIT_LIST_HEAD(&r8a66597->pipe_queue[i]);
2500                 init_timer(&r8a66597->td_timer[i]);
2501                 r8a66597->td_timer[i].function = r8a66597_td_timer;
2502                 r8a66597->td_timer[i].data = (unsigned long)r8a66597;
2503                 setup_timer(&r8a66597->interval_timer[i],
2504                                 r8a66597_interval_timer,
2505                                 (unsigned long)r8a66597);
2506         }
2507         INIT_LIST_HEAD(&r8a66597->child_device);
2508
2509         hcd->rsrc_start = res->start;
2510         hcd->has_tt = 1;
2511
2512         ret = usb_add_hcd(hcd, irq, irq_trigger);
2513         if (ret != 0) {
2514                 dev_err(&pdev->dev, "Failed to add hcd\n");
2515                 goto clean_up3;
2516         }
2517
2518         return 0;
2519
2520 clean_up3:
2521         if (r8a66597->pdata->on_chip)
2522                 clk_put(r8a66597->clk);
2523 clean_up2:
2524         usb_put_hcd(hcd);
2525
2526 clean_up:
2527         if (reg)
2528                 iounmap(reg);
2529
2530         return ret;
2531 }
2532
2533 static struct platform_driver r8a66597_driver = {
2534         .probe =        r8a66597_probe,
2535         .remove =       r8a66597_remove,
2536         .driver         = {
2537                 .name = (char *) hcd_name,
2538                 .owner  = THIS_MODULE,
2539                 .pm     = R8A66597_DEV_PM_OPS,
2540         },
2541 };
2542
2543 module_platform_driver(r8a66597_driver);