iwlwifi: Fix TKIP update key and get_free_ucode_key
[linux/fpc-iii.git] / drivers / usb / host / isp116x-hcd.c
blobd7071c85575876552841c4bff7397cd8c43bbcb1
1 /*
2 * ISP116x HCD (Host Controller Driver) for USB.
4 * Derived from the SL811 HCD, rewritten for ISP116x.
5 * Copyright (C) 2005 Olav Kongas <ok@artecdesign.ee>
7 * Portions:
8 * Copyright (C) 2004 Psion Teklogix (for NetBook PRO)
9 * Copyright (C) 2004 David Brownell
11 * Periodic scheduling is based on Roman's OHCI code
12 * Copyright (C) 1999 Roman Weissgaerber
17 * The driver basically works. A number of people have used it with a range
18 * of devices.
20 * The driver passes all usbtests 1-14.
22 * Suspending/resuming of root hub via sysfs works. Remote wakeup works too.
23 * And suspending/resuming of platform device works too. Suspend/resume
24 * via HCD operations vector is not implemented.
26 * Iso transfer support is not implemented. Adding this would include
27 * implementing recovery from the failure to service the processed ITL
28 * fifo ram in time, which will involve chip reset.
30 * TODO:
31 + More testing of suspend/resume.
35 ISP116x chips require certain delays between accesses to its
36 registers. The following timing options exist.
38 1. Configure your memory controller (the best)
39 2. Implement platform-specific delay function possibly
40 combined with configuring the memory controller; see
41 include/linux/usb-isp116x.h for more info. Some broken
42 memory controllers line LH7A400 SMC need this. Also,
43 uncomment for that to work the following
44 USE_PLATFORM_DELAY macro.
45 3. Use ndelay (easiest, poorest). For that, uncomment
46 the following USE_NDELAY macro.
48 #define USE_PLATFORM_DELAY
49 //#define USE_NDELAY
51 //#define DEBUG
52 //#define VERBOSE
53 /* Transfer descriptors. See dump_ptd() for printout format */
54 //#define PTD_TRACE
55 /* enqueuing/finishing log of urbs */
56 //#define URB_TRACE
58 #include <linux/module.h>
59 #include <linux/delay.h>
60 #include <linux/debugfs.h>
61 #include <linux/seq_file.h>
62 #include <linux/errno.h>
63 #include <linux/init.h>
64 #include <linux/list.h>
65 #include <linux/usb.h>
66 #include <linux/usb/isp116x.h>
67 #include <linux/platform_device.h>
69 #include <asm/io.h>
70 #include <asm/irq.h>
71 #include <asm/system.h>
72 #include <asm/byteorder.h>
74 #include "../core/hcd.h"
75 #include "isp116x.h"
77 #define DRIVER_VERSION "03 Nov 2005"
78 #define DRIVER_DESC "ISP116x USB Host Controller Driver"
80 MODULE_DESCRIPTION(DRIVER_DESC);
81 MODULE_LICENSE("GPL");
83 static const char hcd_name[] = "isp116x-hcd";
85 /*-----------------------------------------------------------------*/
88 Write len bytes to fifo, pad till 32-bit boundary
90 static void write_ptddata_to_fifo(struct isp116x *isp116x, void *buf, int len)
92 u8 *dp = (u8 *) buf;
93 u16 *dp2 = (u16 *) buf;
94 u16 w;
95 int quot = len % 4;
97 if ((unsigned long)dp2 & 1) {
98 /* not aligned */
99 for (; len > 1; len -= 2) {
100 w = *dp++;
101 w |= *dp++ << 8;
102 isp116x_raw_write_data16(isp116x, w);
104 if (len)
105 isp116x_write_data16(isp116x, (u16) * dp);
106 } else {
107 /* aligned */
108 for (; len > 1; len -= 2)
109 isp116x_raw_write_data16(isp116x, *dp2++);
110 if (len)
111 isp116x_write_data16(isp116x, 0xff & *((u8 *) dp2));
113 if (quot == 1 || quot == 2)
114 isp116x_raw_write_data16(isp116x, 0);
118 Read len bytes from fifo and then read till 32-bit boundary.
120 static void read_ptddata_from_fifo(struct isp116x *isp116x, void *buf, int len)
122 u8 *dp = (u8 *) buf;
123 u16 *dp2 = (u16 *) buf;
124 u16 w;
125 int quot = len % 4;
127 if ((unsigned long)dp2 & 1) {
128 /* not aligned */
129 for (; len > 1; len -= 2) {
130 w = isp116x_raw_read_data16(isp116x);
131 *dp++ = w & 0xff;
132 *dp++ = (w >> 8) & 0xff;
134 if (len)
135 *dp = 0xff & isp116x_read_data16(isp116x);
136 } else {
137 /* aligned */
138 for (; len > 1; len -= 2)
139 *dp2++ = isp116x_raw_read_data16(isp116x);
140 if (len)
141 *(u8 *) dp2 = 0xff & isp116x_read_data16(isp116x);
143 if (quot == 1 || quot == 2)
144 isp116x_raw_read_data16(isp116x);
148 Write ptd's and data for scheduled transfers into
149 the fifo ram. Fifo must be empty and ready.
151 static void pack_fifo(struct isp116x *isp116x)
153 struct isp116x_ep *ep;
154 struct ptd *ptd;
155 int buflen = isp116x->atl_last_dir == PTD_DIR_IN
156 ? isp116x->atl_bufshrt : isp116x->atl_buflen;
158 isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
159 isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
160 isp116x_write_addr(isp116x, HCATLPORT | ISP116x_WRITE_OFFSET);
161 for (ep = isp116x->atl_active; ep; ep = ep->active) {
162 ptd = &ep->ptd;
163 dump_ptd(ptd);
164 dump_ptd_out_data(ptd, ep->data);
165 isp116x_write_data16(isp116x, ptd->count);
166 isp116x_write_data16(isp116x, ptd->mps);
167 isp116x_write_data16(isp116x, ptd->len);
168 isp116x_write_data16(isp116x, ptd->faddr);
169 buflen -= sizeof(struct ptd);
170 /* Skip writing data for last IN PTD */
171 if (ep->active || (isp116x->atl_last_dir != PTD_DIR_IN)) {
172 write_ptddata_to_fifo(isp116x, ep->data, ep->length);
173 buflen -= ALIGN(ep->length, 4);
176 BUG_ON(buflen);
180 Read the processed ptd's and data from fifo ram back to
181 URBs' buffers. Fifo must be full and done
183 static void unpack_fifo(struct isp116x *isp116x)
185 struct isp116x_ep *ep;
186 struct ptd *ptd;
187 int buflen = isp116x->atl_last_dir == PTD_DIR_IN
188 ? isp116x->atl_buflen : isp116x->atl_bufshrt;
190 isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
191 isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
192 isp116x_write_addr(isp116x, HCATLPORT);
193 for (ep = isp116x->atl_active; ep; ep = ep->active) {
194 ptd = &ep->ptd;
195 ptd->count = isp116x_read_data16(isp116x);
196 ptd->mps = isp116x_read_data16(isp116x);
197 ptd->len = isp116x_read_data16(isp116x);
198 ptd->faddr = isp116x_read_data16(isp116x);
199 buflen -= sizeof(struct ptd);
200 /* Skip reading data for last Setup or Out PTD */
201 if (ep->active || (isp116x->atl_last_dir == PTD_DIR_IN)) {
202 read_ptddata_from_fifo(isp116x, ep->data, ep->length);
203 buflen -= ALIGN(ep->length, 4);
205 dump_ptd(ptd);
206 dump_ptd_in_data(ptd, ep->data);
208 BUG_ON(buflen);
211 /*---------------------------------------------------------------*/
214 Set up PTD's.
216 static void preproc_atl_queue(struct isp116x *isp116x)
218 struct isp116x_ep *ep;
219 struct urb *urb;
220 struct ptd *ptd;
221 u16 len;
223 for (ep = isp116x->atl_active; ep; ep = ep->active) {
224 u16 toggle = 0, dir = PTD_DIR_SETUP;
226 BUG_ON(list_empty(&ep->hep->urb_list));
227 urb = container_of(ep->hep->urb_list.next,
228 struct urb, urb_list);
229 ptd = &ep->ptd;
230 len = ep->length;
231 ep->data = (unsigned char *)urb->transfer_buffer
232 + urb->actual_length;
234 switch (ep->nextpid) {
235 case USB_PID_IN:
236 toggle = usb_gettoggle(urb->dev, ep->epnum, 0);
237 dir = PTD_DIR_IN;
238 break;
239 case USB_PID_OUT:
240 toggle = usb_gettoggle(urb->dev, ep->epnum, 1);
241 dir = PTD_DIR_OUT;
242 break;
243 case USB_PID_SETUP:
244 len = sizeof(struct usb_ctrlrequest);
245 ep->data = urb->setup_packet;
246 break;
247 case USB_PID_ACK:
248 toggle = 1;
249 len = 0;
250 dir = (urb->transfer_buffer_length
251 && usb_pipein(urb->pipe))
252 ? PTD_DIR_OUT : PTD_DIR_IN;
253 break;
254 default:
255 ERR("%s %d: ep->nextpid %d\n", __func__, __LINE__,
256 ep->nextpid);
257 BUG();
260 ptd->count = PTD_CC_MSK | PTD_ACTIVE_MSK | PTD_TOGGLE(toggle);
261 ptd->mps = PTD_MPS(ep->maxpacket)
262 | PTD_SPD(urb->dev->speed == USB_SPEED_LOW)
263 | PTD_EP(ep->epnum);
264 ptd->len = PTD_LEN(len) | PTD_DIR(dir);
265 ptd->faddr = PTD_FA(usb_pipedevice(urb->pipe));
266 if (!ep->active) {
267 ptd->mps |= PTD_LAST_MSK;
268 isp116x->atl_last_dir = dir;
270 isp116x->atl_bufshrt = sizeof(struct ptd) + isp116x->atl_buflen;
271 isp116x->atl_buflen = isp116x->atl_bufshrt + ALIGN(len, 4);
276 Take done or failed requests out of schedule. Give back
277 processed urbs.
279 static void finish_request(struct isp116x *isp116x, struct isp116x_ep *ep,
280 struct urb *urb, int status)
281 __releases(isp116x->lock) __acquires(isp116x->lock)
283 unsigned i;
285 ep->error_count = 0;
287 if (usb_pipecontrol(urb->pipe))
288 ep->nextpid = USB_PID_SETUP;
290 urb_dbg(urb, "Finish");
292 usb_hcd_unlink_urb_from_ep(isp116x_to_hcd(isp116x), urb);
293 spin_unlock(&isp116x->lock);
294 usb_hcd_giveback_urb(isp116x_to_hcd(isp116x), urb, status);
295 spin_lock(&isp116x->lock);
297 /* take idle endpoints out of the schedule */
298 if (!list_empty(&ep->hep->urb_list))
299 return;
301 /* async deschedule */
302 if (!list_empty(&ep->schedule)) {
303 list_del_init(&ep->schedule);
304 return;
307 /* periodic deschedule */
308 DBG("deschedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
309 for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
310 struct isp116x_ep *temp;
311 struct isp116x_ep **prev = &isp116x->periodic[i];
313 while (*prev && ((temp = *prev) != ep))
314 prev = &temp->next;
315 if (*prev)
316 *prev = ep->next;
317 isp116x->load[i] -= ep->load;
319 ep->branch = PERIODIC_SIZE;
320 isp116x_to_hcd(isp116x)->self.bandwidth_allocated -=
321 ep->load / ep->period;
323 /* switch irq type? */
324 if (!--isp116x->periodic_count) {
325 isp116x->irqenb &= ~HCuPINT_SOF;
326 isp116x->irqenb |= HCuPINT_ATL;
331 Analyze transfer results, handle partial transfers and errors
333 static void postproc_atl_queue(struct isp116x *isp116x)
335 struct isp116x_ep *ep;
336 struct urb *urb;
337 struct usb_device *udev;
338 struct ptd *ptd;
339 int short_not_ok;
340 int status;
341 u8 cc;
343 for (ep = isp116x->atl_active; ep; ep = ep->active) {
344 BUG_ON(list_empty(&ep->hep->urb_list));
345 urb =
346 container_of(ep->hep->urb_list.next, struct urb, urb_list);
347 udev = urb->dev;
348 ptd = &ep->ptd;
349 cc = PTD_GET_CC(ptd);
350 short_not_ok = 1;
351 status = -EINPROGRESS;
353 /* Data underrun is special. For allowed underrun
354 we clear the error and continue as normal. For
355 forbidden underrun we finish the DATA stage
356 immediately while for control transfer,
357 we do a STATUS stage. */
358 if (cc == TD_DATAUNDERRUN) {
359 if (!(urb->transfer_flags & URB_SHORT_NOT_OK) ||
360 usb_pipecontrol(urb->pipe)) {
361 DBG("Allowed or control data underrun\n");
362 cc = TD_CC_NOERROR;
363 short_not_ok = 0;
364 } else {
365 ep->error_count = 1;
366 usb_settoggle(udev, ep->epnum,
367 ep->nextpid == USB_PID_OUT,
368 PTD_GET_TOGGLE(ptd));
369 urb->actual_length += PTD_GET_COUNT(ptd);
370 status = cc_to_error[TD_DATAUNDERRUN];
371 goto done;
375 if (cc != TD_CC_NOERROR && cc != TD_NOTACCESSED
376 && (++ep->error_count >= 3 || cc == TD_CC_STALL
377 || cc == TD_DATAOVERRUN)) {
378 status = cc_to_error[cc];
379 if (ep->nextpid == USB_PID_ACK)
380 ep->nextpid = 0;
381 goto done;
383 /* According to usb spec, zero-length Int transfer signals
384 finishing of the urb. Hey, does this apply only
385 for IN endpoints? */
386 if (usb_pipeint(urb->pipe) && !PTD_GET_LEN(ptd)) {
387 status = 0;
388 goto done;
391 /* Relax after previously failed, but later succeeded
392 or correctly NAK'ed retransmission attempt */
393 if (ep->error_count
394 && (cc == TD_CC_NOERROR || cc == TD_NOTACCESSED))
395 ep->error_count = 0;
397 /* Take into account idiosyncracies of the isp116x chip
398 regarding toggle bit for failed transfers */
399 if (ep->nextpid == USB_PID_OUT)
400 usb_settoggle(udev, ep->epnum, 1, PTD_GET_TOGGLE(ptd)
401 ^ (ep->error_count > 0));
402 else if (ep->nextpid == USB_PID_IN)
403 usb_settoggle(udev, ep->epnum, 0, PTD_GET_TOGGLE(ptd)
404 ^ (ep->error_count > 0));
406 switch (ep->nextpid) {
407 case USB_PID_IN:
408 case USB_PID_OUT:
409 urb->actual_length += PTD_GET_COUNT(ptd);
410 if (PTD_GET_ACTIVE(ptd)
411 || (cc != TD_CC_NOERROR && cc < 0x0E))
412 break;
413 if (urb->transfer_buffer_length != urb->actual_length) {
414 if (short_not_ok)
415 break;
416 } else {
417 if (urb->transfer_flags & URB_ZERO_PACKET
418 && ep->nextpid == USB_PID_OUT
419 && !(PTD_GET_COUNT(ptd) % ep->maxpacket)) {
420 DBG("Zero packet requested\n");
421 break;
424 /* All data for this URB is transferred, let's finish */
425 if (usb_pipecontrol(urb->pipe))
426 ep->nextpid = USB_PID_ACK;
427 else
428 status = 0;
429 break;
430 case USB_PID_SETUP:
431 if (PTD_GET_ACTIVE(ptd)
432 || (cc != TD_CC_NOERROR && cc < 0x0E))
433 break;
434 if (urb->transfer_buffer_length == urb->actual_length)
435 ep->nextpid = USB_PID_ACK;
436 else if (usb_pipeout(urb->pipe)) {
437 usb_settoggle(udev, 0, 1, 1);
438 ep->nextpid = USB_PID_OUT;
439 } else {
440 usb_settoggle(udev, 0, 0, 1);
441 ep->nextpid = USB_PID_IN;
443 break;
444 case USB_PID_ACK:
445 if (PTD_GET_ACTIVE(ptd)
446 || (cc != TD_CC_NOERROR && cc < 0x0E))
447 break;
448 status = 0;
449 ep->nextpid = 0;
450 break;
451 default:
452 BUG();
455 done:
456 if (status != -EINPROGRESS || urb->unlinked)
457 finish_request(isp116x, ep, urb, status);
462 Scan transfer lists, schedule transfers, send data off
463 to chip.
465 static void start_atl_transfers(struct isp116x *isp116x)
467 struct isp116x_ep *last_ep = NULL, *ep;
468 struct urb *urb;
469 u16 load = 0;
470 int len, index, speed, byte_time;
472 if (atomic_read(&isp116x->atl_finishing))
473 return;
475 if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state))
476 return;
478 /* FIFO not empty? */
479 if (isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_FULL)
480 return;
482 isp116x->atl_active = NULL;
483 isp116x->atl_buflen = isp116x->atl_bufshrt = 0;
485 /* Schedule int transfers */
486 if (isp116x->periodic_count) {
487 isp116x->fmindex = index =
488 (isp116x->fmindex + 1) & (PERIODIC_SIZE - 1);
489 if ((load = isp116x->load[index])) {
490 /* Bring all int transfers for this frame
491 into the active queue */
492 isp116x->atl_active = last_ep =
493 isp116x->periodic[index];
494 while (last_ep->next)
495 last_ep = (last_ep->active = last_ep->next);
496 last_ep->active = NULL;
500 /* Schedule control/bulk transfers */
501 list_for_each_entry(ep, &isp116x->async, schedule) {
502 urb = container_of(ep->hep->urb_list.next,
503 struct urb, urb_list);
504 speed = urb->dev->speed;
505 byte_time = speed == USB_SPEED_LOW
506 ? BYTE_TIME_LOWSPEED : BYTE_TIME_FULLSPEED;
508 if (ep->nextpid == USB_PID_SETUP) {
509 len = sizeof(struct usb_ctrlrequest);
510 } else if (ep->nextpid == USB_PID_ACK) {
511 len = 0;
512 } else {
513 /* Find current free length ... */
514 len = (MAX_LOAD_LIMIT - load) / byte_time;
516 /* ... then limit it to configured max size ... */
517 len = min(len, speed == USB_SPEED_LOW ?
518 MAX_TRANSFER_SIZE_LOWSPEED :
519 MAX_TRANSFER_SIZE_FULLSPEED);
521 /* ... and finally cut to the multiple of MaxPacketSize,
522 or to the real length if there's enough room. */
523 if (len <
524 (urb->transfer_buffer_length -
525 urb->actual_length)) {
526 len -= len % ep->maxpacket;
527 if (!len)
528 continue;
529 } else
530 len = urb->transfer_buffer_length -
531 urb->actual_length;
532 BUG_ON(len < 0);
535 load += len * byte_time;
536 if (load > MAX_LOAD_LIMIT)
537 break;
539 ep->active = NULL;
540 ep->length = len;
541 if (last_ep)
542 last_ep->active = ep;
543 else
544 isp116x->atl_active = ep;
545 last_ep = ep;
548 /* Avoid starving of endpoints */
549 if ((&isp116x->async)->next != (&isp116x->async)->prev)
550 list_move(&isp116x->async, (&isp116x->async)->next);
552 if (isp116x->atl_active) {
553 preproc_atl_queue(isp116x);
554 pack_fifo(isp116x);
559 Finish the processed transfers
561 static void finish_atl_transfers(struct isp116x *isp116x)
563 if (!isp116x->atl_active)
564 return;
565 /* Fifo not ready? */
566 if (!(isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_DONE))
567 return;
569 atomic_inc(&isp116x->atl_finishing);
570 unpack_fifo(isp116x);
571 postproc_atl_queue(isp116x);
572 atomic_dec(&isp116x->atl_finishing);
575 static irqreturn_t isp116x_irq(struct usb_hcd *hcd)
577 struct isp116x *isp116x = hcd_to_isp116x(hcd);
578 u16 irqstat;
579 irqreturn_t ret = IRQ_NONE;
581 spin_lock(&isp116x->lock);
582 isp116x_write_reg16(isp116x, HCuPINTENB, 0);
583 irqstat = isp116x_read_reg16(isp116x, HCuPINT);
584 isp116x_write_reg16(isp116x, HCuPINT, irqstat);
586 if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
587 ret = IRQ_HANDLED;
588 finish_atl_transfers(isp116x);
591 if (irqstat & HCuPINT_OPR) {
592 u32 intstat = isp116x_read_reg32(isp116x, HCINTSTAT);
593 isp116x_write_reg32(isp116x, HCINTSTAT, intstat);
594 if (intstat & HCINT_UE) {
595 ERR("Unrecoverable error, HC is dead!\n");
596 /* IRQ's are off, we do no DMA,
597 perfectly ready to die ... */
598 hcd->state = HC_STATE_HALT;
599 ret = IRQ_HANDLED;
600 goto done;
602 if (intstat & HCINT_RHSC)
603 /* When root hub or any of its ports is going
604 to come out of suspend, it may take more
605 than 10ms for status bits to stabilize. */
606 mod_timer(&hcd->rh_timer, jiffies
607 + msecs_to_jiffies(20) + 1);
608 if (intstat & HCINT_RD) {
609 DBG("---- remote wakeup\n");
610 usb_hcd_resume_root_hub(hcd);
612 irqstat &= ~HCuPINT_OPR;
613 ret = IRQ_HANDLED;
616 if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
617 start_atl_transfers(isp116x);
620 isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
621 done:
622 spin_unlock(&isp116x->lock);
623 return ret;
626 /*-----------------------------------------------------------------*/
628 /* usb 1.1 says max 90% of a frame is available for periodic transfers.
629 * this driver doesn't promise that much since it's got to handle an
630 * IRQ per packet; irq handling latencies also use up that time.
633 /* out of 1000 us */
634 #define MAX_PERIODIC_LOAD 600
635 static int balance(struct isp116x *isp116x, u16 period, u16 load)
637 int i, branch = -ENOSPC;
639 /* search for the least loaded schedule branch of that period
640 which has enough bandwidth left unreserved. */
641 for (i = 0; i < period; i++) {
642 if (branch < 0 || isp116x->load[branch] > isp116x->load[i]) {
643 int j;
645 for (j = i; j < PERIODIC_SIZE; j += period) {
646 if ((isp116x->load[j] + load)
647 > MAX_PERIODIC_LOAD)
648 break;
650 if (j < PERIODIC_SIZE)
651 continue;
652 branch = i;
655 return branch;
658 /* NB! ALL the code above this point runs with isp116x->lock
659 held, irqs off
662 /*-----------------------------------------------------------------*/
664 static int isp116x_urb_enqueue(struct usb_hcd *hcd,
665 struct urb *urb,
666 gfp_t mem_flags)
668 struct isp116x *isp116x = hcd_to_isp116x(hcd);
669 struct usb_device *udev = urb->dev;
670 unsigned int pipe = urb->pipe;
671 int is_out = !usb_pipein(pipe);
672 int type = usb_pipetype(pipe);
673 int epnum = usb_pipeendpoint(pipe);
674 struct usb_host_endpoint *hep = urb->ep;
675 struct isp116x_ep *ep = NULL;
676 unsigned long flags;
677 int i;
678 int ret = 0;
680 urb_dbg(urb, "Enqueue");
682 if (type == PIPE_ISOCHRONOUS) {
683 ERR("Isochronous transfers not supported\n");
684 urb_dbg(urb, "Refused to enqueue");
685 return -ENXIO;
687 /* avoid all allocations within spinlocks: request or endpoint */
688 if (!hep->hcpriv) {
689 ep = kzalloc(sizeof *ep, mem_flags);
690 if (!ep)
691 return -ENOMEM;
694 spin_lock_irqsave(&isp116x->lock, flags);
695 if (!HC_IS_RUNNING(hcd->state)) {
696 kfree(ep);
697 ret = -ENODEV;
698 goto fail_not_linked;
700 ret = usb_hcd_link_urb_to_ep(hcd, urb);
701 if (ret) {
702 kfree(ep);
703 goto fail_not_linked;
706 if (hep->hcpriv)
707 ep = hep->hcpriv;
708 else {
709 INIT_LIST_HEAD(&ep->schedule);
710 ep->udev = udev;
711 ep->epnum = epnum;
712 ep->maxpacket = usb_maxpacket(udev, urb->pipe, is_out);
713 usb_settoggle(udev, epnum, is_out, 0);
715 if (type == PIPE_CONTROL) {
716 ep->nextpid = USB_PID_SETUP;
717 } else if (is_out) {
718 ep->nextpid = USB_PID_OUT;
719 } else {
720 ep->nextpid = USB_PID_IN;
723 if (urb->interval) {
725 With INT URBs submitted, the driver works with SOF
726 interrupt enabled and ATL interrupt disabled. After
727 the PTDs are written to fifo ram, the chip starts
728 fifo processing and usb transfers after the next
729 SOF and continues until the transfers are finished
730 (succeeded or failed) or the frame ends. Therefore,
731 the transfers occur only in every second frame,
732 while fifo reading/writing and data processing
733 occur in every other second frame. */
734 if (urb->interval < 2)
735 urb->interval = 2;
736 if (urb->interval > 2 * PERIODIC_SIZE)
737 urb->interval = 2 * PERIODIC_SIZE;
738 ep->period = urb->interval >> 1;
739 ep->branch = PERIODIC_SIZE;
740 ep->load = usb_calc_bus_time(udev->speed,
741 !is_out,
742 (type == PIPE_ISOCHRONOUS),
743 usb_maxpacket(udev, pipe,
744 is_out)) /
745 1000;
747 hep->hcpriv = ep;
748 ep->hep = hep;
751 /* maybe put endpoint into schedule */
752 switch (type) {
753 case PIPE_CONTROL:
754 case PIPE_BULK:
755 if (list_empty(&ep->schedule))
756 list_add_tail(&ep->schedule, &isp116x->async);
757 break;
758 case PIPE_INTERRUPT:
759 urb->interval = ep->period;
760 ep->length = min((int)ep->maxpacket,
761 urb->transfer_buffer_length);
763 /* urb submitted for already existing endpoint */
764 if (ep->branch < PERIODIC_SIZE)
765 break;
767 ep->branch = ret = balance(isp116x, ep->period, ep->load);
768 if (ret < 0)
769 goto fail;
770 ret = 0;
772 urb->start_frame = (isp116x->fmindex & (PERIODIC_SIZE - 1))
773 + ep->branch;
775 /* sort each schedule branch by period (slow before fast)
776 to share the faster parts of the tree without needing
777 dummy/placeholder nodes */
778 DBG("schedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
779 for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
780 struct isp116x_ep **prev = &isp116x->periodic[i];
781 struct isp116x_ep *here = *prev;
783 while (here && ep != here) {
784 if (ep->period > here->period)
785 break;
786 prev = &here->next;
787 here = *prev;
789 if (ep != here) {
790 ep->next = here;
791 *prev = ep;
793 isp116x->load[i] += ep->load;
795 hcd->self.bandwidth_allocated += ep->load / ep->period;
797 /* switch over to SOFint */
798 if (!isp116x->periodic_count++) {
799 isp116x->irqenb &= ~HCuPINT_ATL;
800 isp116x->irqenb |= HCuPINT_SOF;
801 isp116x_write_reg16(isp116x, HCuPINTENB,
802 isp116x->irqenb);
806 urb->hcpriv = hep;
807 start_atl_transfers(isp116x);
809 fail:
810 if (ret)
811 usb_hcd_unlink_urb_from_ep(hcd, urb);
812 fail_not_linked:
813 spin_unlock_irqrestore(&isp116x->lock, flags);
814 return ret;
818 Dequeue URBs.
820 static int isp116x_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
821 int status)
823 struct isp116x *isp116x = hcd_to_isp116x(hcd);
824 struct usb_host_endpoint *hep;
825 struct isp116x_ep *ep, *ep_act;
826 unsigned long flags;
827 int rc;
829 spin_lock_irqsave(&isp116x->lock, flags);
830 rc = usb_hcd_check_unlink_urb(hcd, urb, status);
831 if (rc)
832 goto done;
834 hep = urb->hcpriv;
835 ep = hep->hcpriv;
836 WARN_ON(hep != ep->hep);
838 /* In front of queue? */
839 if (ep->hep->urb_list.next == &urb->urb_list)
840 /* active? */
841 for (ep_act = isp116x->atl_active; ep_act;
842 ep_act = ep_act->active)
843 if (ep_act == ep) {
844 VDBG("dequeue, urb %p active; wait for irq\n",
845 urb);
846 urb = NULL;
847 break;
850 if (urb)
851 finish_request(isp116x, ep, urb, status);
852 done:
853 spin_unlock_irqrestore(&isp116x->lock, flags);
854 return rc;
857 static void isp116x_endpoint_disable(struct usb_hcd *hcd,
858 struct usb_host_endpoint *hep)
860 int i;
861 struct isp116x_ep *ep = hep->hcpriv;
863 if (!ep)
864 return;
866 /* assume we'd just wait for the irq */
867 for (i = 0; i < 100 && !list_empty(&hep->urb_list); i++)
868 msleep(3);
869 if (!list_empty(&hep->urb_list))
870 WARN("ep %p not empty?\n", ep);
872 kfree(ep);
873 hep->hcpriv = NULL;
876 static int isp116x_get_frame(struct usb_hcd *hcd)
878 struct isp116x *isp116x = hcd_to_isp116x(hcd);
879 u32 fmnum;
880 unsigned long flags;
882 spin_lock_irqsave(&isp116x->lock, flags);
883 fmnum = isp116x_read_reg32(isp116x, HCFMNUM);
884 spin_unlock_irqrestore(&isp116x->lock, flags);
885 return (int)fmnum;
889 Adapted from ohci-hub.c. Currently we don't support autosuspend.
891 static int isp116x_hub_status_data(struct usb_hcd *hcd, char *buf)
893 struct isp116x *isp116x = hcd_to_isp116x(hcd);
894 int ports, i, changed = 0;
895 unsigned long flags;
897 if (!HC_IS_RUNNING(hcd->state))
898 return -ESHUTDOWN;
900 /* Report no status change now, if we are scheduled to be
901 called later */
902 if (timer_pending(&hcd->rh_timer))
903 return 0;
905 ports = isp116x->rhdesca & RH_A_NDP;
906 spin_lock_irqsave(&isp116x->lock, flags);
907 isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
908 if (isp116x->rhstatus & (RH_HS_LPSC | RH_HS_OCIC))
909 buf[0] = changed = 1;
910 else
911 buf[0] = 0;
913 for (i = 0; i < ports; i++) {
914 u32 status = isp116x_read_reg32(isp116x, i ? HCRHPORT2 : HCRHPORT1);
916 if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
917 | RH_PS_OCIC | RH_PS_PRSC)) {
918 changed = 1;
919 buf[0] |= 1 << (i + 1);
922 spin_unlock_irqrestore(&isp116x->lock, flags);
923 return changed;
926 static void isp116x_hub_descriptor(struct isp116x *isp116x,
927 struct usb_hub_descriptor *desc)
929 u32 reg = isp116x->rhdesca;
931 desc->bDescriptorType = 0x29;
932 desc->bDescLength = 9;
933 desc->bHubContrCurrent = 0;
934 desc->bNbrPorts = (u8) (reg & 0x3);
935 /* Power switching, device type, overcurrent. */
936 desc->wHubCharacteristics = cpu_to_le16((u16) ((reg >> 8) & 0x1f));
937 desc->bPwrOn2PwrGood = (u8) ((reg >> 24) & 0xff);
938 /* two bitmaps: ports removable, and legacy PortPwrCtrlMask */
939 desc->bitmap[0] = 0;
940 desc->bitmap[1] = ~0;
943 /* Perform reset of a given port.
944 It would be great to just start the reset and let the
945 USB core to clear the reset in due time. However,
946 root hub ports should be reset for at least 50 ms, while
947 our chip stays in reset for about 10 ms. I.e., we must
948 repeatedly reset it ourself here.
950 static inline void root_port_reset(struct isp116x *isp116x, unsigned port)
952 u32 tmp;
953 unsigned long flags, t;
955 /* Root hub reset should be 50 ms, but some devices
956 want it even longer. */
957 t = jiffies + msecs_to_jiffies(100);
959 while (time_before(jiffies, t)) {
960 spin_lock_irqsave(&isp116x->lock, flags);
961 /* spin until any current reset finishes */
962 for (;;) {
963 tmp = isp116x_read_reg32(isp116x, port ?
964 HCRHPORT2 : HCRHPORT1);
965 if (!(tmp & RH_PS_PRS))
966 break;
967 udelay(500);
969 /* Don't reset a disconnected port */
970 if (!(tmp & RH_PS_CCS)) {
971 spin_unlock_irqrestore(&isp116x->lock, flags);
972 break;
974 /* Reset lasts 10ms (claims datasheet) */
975 isp116x_write_reg32(isp116x, port ? HCRHPORT2 :
976 HCRHPORT1, (RH_PS_PRS));
977 spin_unlock_irqrestore(&isp116x->lock, flags);
978 msleep(10);
982 /* Adapted from ohci-hub.c */
983 static int isp116x_hub_control(struct usb_hcd *hcd,
984 u16 typeReq,
985 u16 wValue, u16 wIndex, char *buf, u16 wLength)
987 struct isp116x *isp116x = hcd_to_isp116x(hcd);
988 int ret = 0;
989 unsigned long flags;
990 int ports = isp116x->rhdesca & RH_A_NDP;
991 u32 tmp = 0;
993 switch (typeReq) {
994 case ClearHubFeature:
995 DBG("ClearHubFeature: ");
996 switch (wValue) {
997 case C_HUB_OVER_CURRENT:
998 DBG("C_HUB_OVER_CURRENT\n");
999 spin_lock_irqsave(&isp116x->lock, flags);
1000 isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_OCIC);
1001 spin_unlock_irqrestore(&isp116x->lock, flags);
1002 case C_HUB_LOCAL_POWER:
1003 DBG("C_HUB_LOCAL_POWER\n");
1004 break;
1005 default:
1006 goto error;
1008 break;
1009 case SetHubFeature:
1010 DBG("SetHubFeature: ");
1011 switch (wValue) {
1012 case C_HUB_OVER_CURRENT:
1013 case C_HUB_LOCAL_POWER:
1014 DBG("C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1015 break;
1016 default:
1017 goto error;
1019 break;
1020 case GetHubDescriptor:
1021 DBG("GetHubDescriptor\n");
1022 isp116x_hub_descriptor(isp116x,
1023 (struct usb_hub_descriptor *)buf);
1024 break;
1025 case GetHubStatus:
1026 DBG("GetHubStatus\n");
1027 *(__le32 *) buf = 0;
1028 break;
1029 case GetPortStatus:
1030 DBG("GetPortStatus\n");
1031 if (!wIndex || wIndex > ports)
1032 goto error;
1033 spin_lock_irqsave(&isp116x->lock, flags);
1034 tmp = isp116x_read_reg32(isp116x, (--wIndex) ? HCRHPORT2 : HCRHPORT1);
1035 spin_unlock_irqrestore(&isp116x->lock, flags);
1036 *(__le32 *) buf = cpu_to_le32(tmp);
1037 DBG("GetPortStatus: port[%d] %08x\n", wIndex + 1, tmp);
1038 break;
1039 case ClearPortFeature:
1040 DBG("ClearPortFeature: ");
1041 if (!wIndex || wIndex > ports)
1042 goto error;
1043 wIndex--;
1045 switch (wValue) {
1046 case USB_PORT_FEAT_ENABLE:
1047 DBG("USB_PORT_FEAT_ENABLE\n");
1048 tmp = RH_PS_CCS;
1049 break;
1050 case USB_PORT_FEAT_C_ENABLE:
1051 DBG("USB_PORT_FEAT_C_ENABLE\n");
1052 tmp = RH_PS_PESC;
1053 break;
1054 case USB_PORT_FEAT_SUSPEND:
1055 DBG("USB_PORT_FEAT_SUSPEND\n");
1056 tmp = RH_PS_POCI;
1057 break;
1058 case USB_PORT_FEAT_C_SUSPEND:
1059 DBG("USB_PORT_FEAT_C_SUSPEND\n");
1060 tmp = RH_PS_PSSC;
1061 break;
1062 case USB_PORT_FEAT_POWER:
1063 DBG("USB_PORT_FEAT_POWER\n");
1064 tmp = RH_PS_LSDA;
1065 break;
1066 case USB_PORT_FEAT_C_CONNECTION:
1067 DBG("USB_PORT_FEAT_C_CONNECTION\n");
1068 tmp = RH_PS_CSC;
1069 break;
1070 case USB_PORT_FEAT_C_OVER_CURRENT:
1071 DBG("USB_PORT_FEAT_C_OVER_CURRENT\n");
1072 tmp = RH_PS_OCIC;
1073 break;
1074 case USB_PORT_FEAT_C_RESET:
1075 DBG("USB_PORT_FEAT_C_RESET\n");
1076 tmp = RH_PS_PRSC;
1077 break;
1078 default:
1079 goto error;
1081 spin_lock_irqsave(&isp116x->lock, flags);
1082 isp116x_write_reg32(isp116x, wIndex
1083 ? HCRHPORT2 : HCRHPORT1, tmp);
1084 spin_unlock_irqrestore(&isp116x->lock, flags);
1085 break;
1086 case SetPortFeature:
1087 DBG("SetPortFeature: ");
1088 if (!wIndex || wIndex > ports)
1089 goto error;
1090 wIndex--;
1091 switch (wValue) {
1092 case USB_PORT_FEAT_SUSPEND:
1093 DBG("USB_PORT_FEAT_SUSPEND\n");
1094 spin_lock_irqsave(&isp116x->lock, flags);
1095 isp116x_write_reg32(isp116x, wIndex
1096 ? HCRHPORT2 : HCRHPORT1, RH_PS_PSS);
1097 spin_unlock_irqrestore(&isp116x->lock, flags);
1098 break;
1099 case USB_PORT_FEAT_POWER:
1100 DBG("USB_PORT_FEAT_POWER\n");
1101 spin_lock_irqsave(&isp116x->lock, flags);
1102 isp116x_write_reg32(isp116x, wIndex
1103 ? HCRHPORT2 : HCRHPORT1, RH_PS_PPS);
1104 spin_unlock_irqrestore(&isp116x->lock, flags);
1105 break;
1106 case USB_PORT_FEAT_RESET:
1107 DBG("USB_PORT_FEAT_RESET\n");
1108 root_port_reset(isp116x, wIndex);
1109 break;
1110 default:
1111 goto error;
1113 break;
1115 default:
1116 error:
1117 /* "protocol stall" on error */
1118 DBG("PROTOCOL STALL\n");
1119 ret = -EPIPE;
1121 return ret;
1124 /*-----------------------------------------------------------------*/
1126 #ifdef CONFIG_DEBUG_FS
1128 static void dump_irq(struct seq_file *s, char *label, u16 mask)
1130 seq_printf(s, "%s %04x%s%s%s%s%s%s\n", label, mask,
1131 mask & HCuPINT_CLKRDY ? " clkrdy" : "",
1132 mask & HCuPINT_SUSP ? " susp" : "",
1133 mask & HCuPINT_OPR ? " opr" : "",
1134 mask & HCuPINT_AIIEOT ? " eot" : "",
1135 mask & HCuPINT_ATL ? " atl" : "",
1136 mask & HCuPINT_SOF ? " sof" : "");
1139 static void dump_int(struct seq_file *s, char *label, u32 mask)
1141 seq_printf(s, "%s %08x%s%s%s%s%s%s%s\n", label, mask,
1142 mask & HCINT_MIE ? " MIE" : "",
1143 mask & HCINT_RHSC ? " rhsc" : "",
1144 mask & HCINT_FNO ? " fno" : "",
1145 mask & HCINT_UE ? " ue" : "",
1146 mask & HCINT_RD ? " rd" : "",
1147 mask & HCINT_SF ? " sof" : "", mask & HCINT_SO ? " so" : "");
1150 static int isp116x_show_dbg(struct seq_file *s, void *unused)
1152 struct isp116x *isp116x = s->private;
1154 seq_printf(s, "%s\n%s version %s\n",
1155 isp116x_to_hcd(isp116x)->product_desc, hcd_name,
1156 DRIVER_VERSION);
1158 if (HC_IS_SUSPENDED(isp116x_to_hcd(isp116x)->state)) {
1159 seq_printf(s, "HCD is suspended\n");
1160 return 0;
1162 if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state)) {
1163 seq_printf(s, "HCD not running\n");
1164 return 0;
1167 spin_lock_irq(&isp116x->lock);
1168 dump_irq(s, "hc_irq_enable", isp116x_read_reg16(isp116x, HCuPINTENB));
1169 dump_irq(s, "hc_irq_status", isp116x_read_reg16(isp116x, HCuPINT));
1170 dump_int(s, "hc_int_enable", isp116x_read_reg32(isp116x, HCINTENB));
1171 dump_int(s, "hc_int_status", isp116x_read_reg32(isp116x, HCINTSTAT));
1172 isp116x_show_regs_seq(isp116x, s);
1173 spin_unlock_irq(&isp116x->lock);
1174 seq_printf(s, "\n");
1176 return 0;
1179 static int isp116x_open_seq(struct inode *inode, struct file *file)
1181 return single_open(file, isp116x_show_dbg, inode->i_private);
1184 static const struct file_operations isp116x_debug_fops = {
1185 .open = isp116x_open_seq,
1186 .read = seq_read,
1187 .llseek = seq_lseek,
1188 .release = single_release,
1191 static int create_debug_file(struct isp116x *isp116x)
1193 isp116x->dentry = debugfs_create_file(hcd_name,
1194 S_IRUGO, NULL, isp116x,
1195 &isp116x_debug_fops);
1196 if (!isp116x->dentry)
1197 return -ENOMEM;
1198 return 0;
1201 static void remove_debug_file(struct isp116x *isp116x)
1203 debugfs_remove(isp116x->dentry);
1206 #else
1208 #define create_debug_file(d) 0
1209 #define remove_debug_file(d) do{}while(0)
1211 #endif /* CONFIG_DEBUG_FS */
1213 /*-----------------------------------------------------------------*/
1216 Software reset - can be called from any contect.
1218 static int isp116x_sw_reset(struct isp116x *isp116x)
1220 int retries = 15;
1221 unsigned long flags;
1222 int ret = 0;
1224 spin_lock_irqsave(&isp116x->lock, flags);
1225 isp116x_write_reg16(isp116x, HCSWRES, HCSWRES_MAGIC);
1226 isp116x_write_reg32(isp116x, HCCMDSTAT, HCCMDSTAT_HCR);
1227 while (--retries) {
1228 /* It usually resets within 1 ms */
1229 mdelay(1);
1230 if (!(isp116x_read_reg32(isp116x, HCCMDSTAT) & HCCMDSTAT_HCR))
1231 break;
1233 if (!retries) {
1234 ERR("Software reset timeout\n");
1235 ret = -ETIME;
1237 spin_unlock_irqrestore(&isp116x->lock, flags);
1238 return ret;
1241 static int isp116x_reset(struct usb_hcd *hcd)
1243 struct isp116x *isp116x = hcd_to_isp116x(hcd);
1244 unsigned long t;
1245 u16 clkrdy = 0;
1246 int ret, timeout = 15 /* ms */ ;
1248 ret = isp116x_sw_reset(isp116x);
1249 if (ret)
1250 return ret;
1252 t = jiffies + msecs_to_jiffies(timeout);
1253 while (time_before_eq(jiffies, t)) {
1254 msleep(4);
1255 spin_lock_irq(&isp116x->lock);
1256 clkrdy = isp116x_read_reg16(isp116x, HCuPINT) & HCuPINT_CLKRDY;
1257 spin_unlock_irq(&isp116x->lock);
1258 if (clkrdy)
1259 break;
1261 if (!clkrdy) {
1262 ERR("Clock not ready after %dms\n", timeout);
1263 /* After sw_reset the clock won't report to be ready, if
1264 H_WAKEUP pin is high. */
1265 ERR("Please make sure that the H_WAKEUP pin is pulled low!\n");
1266 ret = -ENODEV;
1268 return ret;
1271 static void isp116x_stop(struct usb_hcd *hcd)
1273 struct isp116x *isp116x = hcd_to_isp116x(hcd);
1274 unsigned long flags;
1275 u32 val;
1277 spin_lock_irqsave(&isp116x->lock, flags);
1278 isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1280 /* Switch off ports' power, some devices don't come up
1281 after next 'insmod' without this */
1282 val = isp116x_read_reg32(isp116x, HCRHDESCA);
1283 val &= ~(RH_A_NPS | RH_A_PSM);
1284 isp116x_write_reg32(isp116x, HCRHDESCA, val);
1285 isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_LPS);
1286 spin_unlock_irqrestore(&isp116x->lock, flags);
1288 isp116x_sw_reset(isp116x);
1292 Configure the chip. The chip must be successfully reset by now.
1294 static int isp116x_start(struct usb_hcd *hcd)
1296 struct isp116x *isp116x = hcd_to_isp116x(hcd);
1297 struct isp116x_platform_data *board = isp116x->board;
1298 u32 val;
1299 unsigned long flags;
1301 spin_lock_irqsave(&isp116x->lock, flags);
1303 /* clear interrupt status and disable all interrupt sources */
1304 isp116x_write_reg16(isp116x, HCuPINT, 0xff);
1305 isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1307 val = isp116x_read_reg16(isp116x, HCCHIPID);
1308 if ((val & HCCHIPID_MASK) != HCCHIPID_MAGIC) {
1309 ERR("Invalid chip ID %04x\n", val);
1310 spin_unlock_irqrestore(&isp116x->lock, flags);
1311 return -ENODEV;
1314 /* To be removed in future */
1315 hcd->uses_new_polling = 1;
1317 isp116x_write_reg16(isp116x, HCITLBUFLEN, ISP116x_ITL_BUFSIZE);
1318 isp116x_write_reg16(isp116x, HCATLBUFLEN, ISP116x_ATL_BUFSIZE);
1320 /* ----- HW conf */
1321 val = HCHWCFG_INT_ENABLE | HCHWCFG_DBWIDTH(1);
1322 if (board->sel15Kres)
1323 val |= HCHWCFG_15KRSEL;
1324 /* Remote wakeup won't work without working clock */
1325 if (board->remote_wakeup_enable)
1326 val |= HCHWCFG_CLKNOTSTOP;
1327 if (board->oc_enable)
1328 val |= HCHWCFG_ANALOG_OC;
1329 if (board->int_act_high)
1330 val |= HCHWCFG_INT_POL;
1331 if (board->int_edge_triggered)
1332 val |= HCHWCFG_INT_TRIGGER;
1333 isp116x_write_reg16(isp116x, HCHWCFG, val);
1335 /* ----- Root hub conf */
1336 val = (25 << 24) & RH_A_POTPGT;
1337 /* AN10003_1.pdf recommends RH_A_NPS (no power switching) to
1338 be always set. Yet, instead, we request individual port
1339 power switching. */
1340 val |= RH_A_PSM;
1341 /* Report overcurrent per port */
1342 val |= RH_A_OCPM;
1343 isp116x_write_reg32(isp116x, HCRHDESCA, val);
1344 isp116x->rhdesca = isp116x_read_reg32(isp116x, HCRHDESCA);
1346 val = RH_B_PPCM;
1347 isp116x_write_reg32(isp116x, HCRHDESCB, val);
1348 isp116x->rhdescb = isp116x_read_reg32(isp116x, HCRHDESCB);
1350 val = 0;
1351 if (board->remote_wakeup_enable) {
1352 if (!device_can_wakeup(hcd->self.controller))
1353 device_init_wakeup(hcd->self.controller, 1);
1354 val |= RH_HS_DRWE;
1356 isp116x_write_reg32(isp116x, HCRHSTATUS, val);
1357 isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
1359 isp116x_write_reg32(isp116x, HCFMINTVL, 0x27782edf);
1361 hcd->state = HC_STATE_RUNNING;
1363 /* Set up interrupts */
1364 isp116x->intenb = HCINT_MIE | HCINT_RHSC | HCINT_UE;
1365 if (board->remote_wakeup_enable)
1366 isp116x->intenb |= HCINT_RD;
1367 isp116x->irqenb = HCuPINT_ATL | HCuPINT_OPR; /* | HCuPINT_SUSP; */
1368 isp116x_write_reg32(isp116x, HCINTENB, isp116x->intenb);
1369 isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
1371 /* Go operational */
1372 val = HCCONTROL_USB_OPER;
1373 if (board->remote_wakeup_enable)
1374 val |= HCCONTROL_RWE;
1375 isp116x_write_reg32(isp116x, HCCONTROL, val);
1377 /* Disable ports to avoid race in device enumeration */
1378 isp116x_write_reg32(isp116x, HCRHPORT1, RH_PS_CCS);
1379 isp116x_write_reg32(isp116x, HCRHPORT2, RH_PS_CCS);
1381 isp116x_show_regs_log(isp116x);
1382 spin_unlock_irqrestore(&isp116x->lock, flags);
1383 return 0;
1386 #ifdef CONFIG_PM
1388 static int isp116x_bus_suspend(struct usb_hcd *hcd)
1390 struct isp116x *isp116x = hcd_to_isp116x(hcd);
1391 unsigned long flags;
1392 u32 val;
1393 int ret = 0;
1395 spin_lock_irqsave(&isp116x->lock, flags);
1396 val = isp116x_read_reg32(isp116x, HCCONTROL);
1398 switch (val & HCCONTROL_HCFS) {
1399 case HCCONTROL_USB_OPER:
1400 spin_unlock_irqrestore(&isp116x->lock, flags);
1401 val &= (~HCCONTROL_HCFS & ~HCCONTROL_RWE);
1402 val |= HCCONTROL_USB_SUSPEND;
1403 if (device_may_wakeup(&hcd->self.root_hub->dev))
1404 val |= HCCONTROL_RWE;
1405 /* Wait for usb transfers to finish */
1406 msleep(2);
1407 spin_lock_irqsave(&isp116x->lock, flags);
1408 isp116x_write_reg32(isp116x, HCCONTROL, val);
1409 spin_unlock_irqrestore(&isp116x->lock, flags);
1410 /* Wait for devices to suspend */
1411 msleep(5);
1412 break;
1413 case HCCONTROL_USB_RESUME:
1414 isp116x_write_reg32(isp116x, HCCONTROL,
1415 (val & ~HCCONTROL_HCFS) |
1416 HCCONTROL_USB_RESET);
1417 case HCCONTROL_USB_RESET:
1418 ret = -EBUSY;
1419 default: /* HCCONTROL_USB_SUSPEND */
1420 spin_unlock_irqrestore(&isp116x->lock, flags);
1421 break;
1424 return ret;
1427 static int isp116x_bus_resume(struct usb_hcd *hcd)
1429 struct isp116x *isp116x = hcd_to_isp116x(hcd);
1430 u32 val;
1432 msleep(5);
1433 spin_lock_irq(&isp116x->lock);
1435 val = isp116x_read_reg32(isp116x, HCCONTROL);
1436 switch (val & HCCONTROL_HCFS) {
1437 case HCCONTROL_USB_SUSPEND:
1438 val &= ~HCCONTROL_HCFS;
1439 val |= HCCONTROL_USB_RESUME;
1440 isp116x_write_reg32(isp116x, HCCONTROL, val);
1441 case HCCONTROL_USB_RESUME:
1442 break;
1443 case HCCONTROL_USB_OPER:
1444 spin_unlock_irq(&isp116x->lock);
1445 /* Without setting power_state here the
1446 SUSPENDED state won't be removed from
1447 sysfs/usbN/power.state as a response to remote
1448 wakeup. Maybe in the future. */
1449 hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1450 return 0;
1451 default:
1452 /* HCCONTROL_USB_RESET: this may happen, when during
1453 suspension the HC lost power. Reinitialize completely */
1454 spin_unlock_irq(&isp116x->lock);
1455 DBG("Chip has been reset while suspended. Reinit from scratch.\n");
1456 isp116x_reset(hcd);
1457 isp116x_start(hcd);
1458 isp116x_hub_control(hcd, SetPortFeature,
1459 USB_PORT_FEAT_POWER, 1, NULL, 0);
1460 if ((isp116x->rhdesca & RH_A_NDP) == 2)
1461 isp116x_hub_control(hcd, SetPortFeature,
1462 USB_PORT_FEAT_POWER, 2, NULL, 0);
1463 hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1464 return 0;
1467 val = isp116x->rhdesca & RH_A_NDP;
1468 while (val--) {
1469 u32 stat =
1470 isp116x_read_reg32(isp116x, val ? HCRHPORT2 : HCRHPORT1);
1471 /* force global, not selective, resume */
1472 if (!(stat & RH_PS_PSS))
1473 continue;
1474 DBG("%s: Resuming port %d\n", __func__, val);
1475 isp116x_write_reg32(isp116x, RH_PS_POCI, val
1476 ? HCRHPORT2 : HCRHPORT1);
1478 spin_unlock_irq(&isp116x->lock);
1480 hcd->state = HC_STATE_RESUMING;
1481 msleep(20);
1483 /* Go operational */
1484 spin_lock_irq(&isp116x->lock);
1485 val = isp116x_read_reg32(isp116x, HCCONTROL);
1486 isp116x_write_reg32(isp116x, HCCONTROL,
1487 (val & ~HCCONTROL_HCFS) | HCCONTROL_USB_OPER);
1488 spin_unlock_irq(&isp116x->lock);
1489 /* see analogous comment above */
1490 hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1491 hcd->state = HC_STATE_RUNNING;
1493 return 0;
1496 #else
1498 #define isp116x_bus_suspend NULL
1499 #define isp116x_bus_resume NULL
1501 #endif
1503 static struct hc_driver isp116x_hc_driver = {
1504 .description = hcd_name,
1505 .product_desc = "ISP116x Host Controller",
1506 .hcd_priv_size = sizeof(struct isp116x),
1508 .irq = isp116x_irq,
1509 .flags = HCD_USB11,
1511 .reset = isp116x_reset,
1512 .start = isp116x_start,
1513 .stop = isp116x_stop,
1515 .urb_enqueue = isp116x_urb_enqueue,
1516 .urb_dequeue = isp116x_urb_dequeue,
1517 .endpoint_disable = isp116x_endpoint_disable,
1519 .get_frame_number = isp116x_get_frame,
1521 .hub_status_data = isp116x_hub_status_data,
1522 .hub_control = isp116x_hub_control,
1523 .bus_suspend = isp116x_bus_suspend,
1524 .bus_resume = isp116x_bus_resume,
1527 /*----------------------------------------------------------------*/
1529 static int isp116x_remove(struct platform_device *pdev)
1531 struct usb_hcd *hcd = platform_get_drvdata(pdev);
1532 struct isp116x *isp116x;
1533 struct resource *res;
1535 if (!hcd)
1536 return 0;
1537 isp116x = hcd_to_isp116x(hcd);
1538 remove_debug_file(isp116x);
1539 usb_remove_hcd(hcd);
1541 iounmap(isp116x->data_reg);
1542 res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1543 release_mem_region(res->start, 2);
1544 iounmap(isp116x->addr_reg);
1545 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1546 release_mem_region(res->start, 2);
1548 usb_put_hcd(hcd);
1549 return 0;
1552 #define resource_len(r) (((r)->end - (r)->start) + 1)
1554 static int __devinit isp116x_probe(struct platform_device *pdev)
1556 struct usb_hcd *hcd;
1557 struct isp116x *isp116x;
1558 struct resource *addr, *data;
1559 void __iomem *addr_reg;
1560 void __iomem *data_reg;
1561 int irq;
1562 int ret = 0;
1564 if (pdev->num_resources < 3) {
1565 ret = -ENODEV;
1566 goto err1;
1569 data = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1570 addr = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1571 irq = platform_get_irq(pdev, 0);
1572 if (!addr || !data || irq < 0) {
1573 ret = -ENODEV;
1574 goto err1;
1577 if (pdev->dev.dma_mask) {
1578 DBG("DMA not supported\n");
1579 ret = -EINVAL;
1580 goto err1;
1583 if (!request_mem_region(addr->start, 2, hcd_name)) {
1584 ret = -EBUSY;
1585 goto err1;
1587 addr_reg = ioremap(addr->start, resource_len(addr));
1588 if (addr_reg == NULL) {
1589 ret = -ENOMEM;
1590 goto err2;
1592 if (!request_mem_region(data->start, 2, hcd_name)) {
1593 ret = -EBUSY;
1594 goto err3;
1596 data_reg = ioremap(data->start, resource_len(data));
1597 if (data_reg == NULL) {
1598 ret = -ENOMEM;
1599 goto err4;
1602 /* allocate and initialize hcd */
1603 hcd = usb_create_hcd(&isp116x_hc_driver, &pdev->dev, pdev->dev.bus_id);
1604 if (!hcd) {
1605 ret = -ENOMEM;
1606 goto err5;
1608 /* this rsrc_start is bogus */
1609 hcd->rsrc_start = addr->start;
1610 isp116x = hcd_to_isp116x(hcd);
1611 isp116x->data_reg = data_reg;
1612 isp116x->addr_reg = addr_reg;
1613 spin_lock_init(&isp116x->lock);
1614 INIT_LIST_HEAD(&isp116x->async);
1615 isp116x->board = pdev->dev.platform_data;
1617 if (!isp116x->board) {
1618 ERR("Platform data structure not initialized\n");
1619 ret = -ENODEV;
1620 goto err6;
1622 if (isp116x_check_platform_delay(isp116x)) {
1623 ERR("USE_PLATFORM_DELAY defined, but delay function not "
1624 "implemented.\n");
1625 ERR("See comments in drivers/usb/host/isp116x-hcd.c\n");
1626 ret = -ENODEV;
1627 goto err6;
1630 ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
1631 if (ret)
1632 goto err6;
1634 ret = create_debug_file(isp116x);
1635 if (ret) {
1636 ERR("Couldn't create debugfs entry\n");
1637 goto err7;
1640 return 0;
1642 err7:
1643 usb_remove_hcd(hcd);
1644 err6:
1645 usb_put_hcd(hcd);
1646 err5:
1647 iounmap(data_reg);
1648 err4:
1649 release_mem_region(data->start, 2);
1650 err3:
1651 iounmap(addr_reg);
1652 err2:
1653 release_mem_region(addr->start, 2);
1654 err1:
1655 ERR("init error, %d\n", ret);
1656 return ret;
1659 #ifdef CONFIG_PM
1661 Suspend of platform device
1663 static int isp116x_suspend(struct platform_device *dev, pm_message_t state)
1665 VDBG("%s: state %x\n", __func__, state.event);
1666 dev->dev.power.power_state = state;
1667 return 0;
1671 Resume platform device
1673 static int isp116x_resume(struct platform_device *dev)
1675 VDBG("%s: state %x\n", __func__, dev->power.power_state.event);
1676 dev->dev.power.power_state = PMSG_ON;
1677 return 0;
1680 #else
1682 #define isp116x_suspend NULL
1683 #define isp116x_resume NULL
1685 #endif
1687 static struct platform_driver isp116x_driver = {
1688 .probe = isp116x_probe,
1689 .remove = isp116x_remove,
1690 .suspend = isp116x_suspend,
1691 .resume = isp116x_resume,
1692 .driver = {
1693 .name = (char *)hcd_name,
1697 /*-----------------------------------------------------------------*/
1699 static int __init isp116x_init(void)
1701 if (usb_disabled())
1702 return -ENODEV;
1704 INFO("driver %s, %s\n", hcd_name, DRIVER_VERSION);
1705 return platform_driver_register(&isp116x_driver);
1708 module_init(isp116x_init);
1710 static void __exit isp116x_cleanup(void)
1712 platform_driver_unregister(&isp116x_driver);
1715 module_exit(isp116x_cleanup);