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>
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
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.
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
53 /* Transfer descriptors. See dump_ptd() for printout format */
55 /* enqueuing/finishing log of urbs */
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>
71 #include <asm/system.h>
72 #include <asm/byteorder.h>
74 #include "../core/hcd.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
)
93 u16
*dp2
= (u16
*) buf
;
97 if ((unsigned long)dp2
& 1) {
99 for (; len
> 1; len
-= 2) {
102 isp116x_raw_write_data16(isp116x
, w
);
105 isp116x_write_data16(isp116x
, (u16
) * dp
);
108 for (; len
> 1; len
-= 2)
109 isp116x_raw_write_data16(isp116x
, *dp2
++);
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
)
123 u16
*dp2
= (u16
*) buf
;
127 if ((unsigned long)dp2
& 1) {
129 for (; len
> 1; len
-= 2) {
130 w
= isp116x_raw_read_data16(isp116x
);
132 *dp
++ = (w
>> 8) & 0xff;
135 *dp
= 0xff & isp116x_read_data16(isp116x
);
138 for (; len
> 1; len
-= 2)
139 *dp2
++ = isp116x_raw_read_data16(isp116x
);
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
;
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
) {
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);
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
;
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
) {
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);
206 dump_ptd_in_data(ptd
, ep
->data
);
211 /*---------------------------------------------------------------*/
216 static void preproc_atl_queue(struct isp116x
*isp116x
)
218 struct isp116x_ep
*ep
;
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
);
231 ep
->data
= (unsigned char *)urb
->transfer_buffer
232 + urb
->actual_length
;
234 switch (ep
->nextpid
) {
236 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 0);
240 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 1);
244 len
= sizeof(struct usb_ctrlrequest
);
245 ep
->data
= urb
->setup_packet
;
250 dir
= (urb
->transfer_buffer_length
251 && usb_pipein(urb
->pipe
))
252 ? PTD_DIR_OUT
: PTD_DIR_IN
;
255 ERR("%s %d: ep->nextpid %d\n", __func__
, __LINE__
,
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
)
264 ptd
->len
= PTD_LEN(len
) | PTD_DIR(dir
);
265 ptd
->faddr
= PTD_FA(usb_pipedevice(urb
->pipe
));
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
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
)
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
))
301 /* async deschedule */
302 if (!list_empty(&ep
->schedule
)) {
303 list_del_init(&ep
->schedule
);
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
))
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
;
337 struct usb_device
*udev
;
343 for (ep
= isp116x
->atl_active
; ep
; ep
= ep
->active
) {
344 BUG_ON(list_empty(&ep
->hep
->urb_list
));
346 container_of(ep
->hep
->urb_list
.next
, struct urb
, urb_list
);
349 cc
= PTD_GET_CC(ptd
);
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");
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
];
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
)
383 /* According to usb spec, zero-length Int transfer signals
384 finishing of the urb. Hey, does this apply only
386 if (usb_pipeint(urb
->pipe
) && !PTD_GET_LEN(ptd
)) {
391 /* Relax after previously failed, but later succeeded
392 or correctly NAK'ed retransmission attempt */
394 && (cc
== TD_CC_NOERROR
|| cc
== TD_NOTACCESSED
))
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
) {
409 urb
->actual_length
+= PTD_GET_COUNT(ptd
);
410 if (PTD_GET_ACTIVE(ptd
)
411 || (cc
!= TD_CC_NOERROR
&& cc
< 0x0E))
413 if (urb
->transfer_buffer_length
!= urb
->actual_length
) {
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");
424 /* All data for this URB is transferred, let's finish */
425 if (usb_pipecontrol(urb
->pipe
))
426 ep
->nextpid
= USB_PID_ACK
;
431 if (PTD_GET_ACTIVE(ptd
)
432 || (cc
!= TD_CC_NOERROR
&& cc
< 0x0E))
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
;
440 usb_settoggle(udev
, 0, 0, 1);
441 ep
->nextpid
= USB_PID_IN
;
445 if (PTD_GET_ACTIVE(ptd
)
446 || (cc
!= TD_CC_NOERROR
&& cc
< 0x0E))
456 if (status
!= -EINPROGRESS
|| urb
->unlinked
)
457 finish_request(isp116x
, ep
, urb
, status
);
462 Scan transfer lists, schedule transfers, send data off
465 static void start_atl_transfers(struct isp116x
*isp116x
)
467 struct isp116x_ep
*last_ep
= NULL
, *ep
;
470 int len
, index
, speed
, byte_time
;
472 if (atomic_read(&isp116x
->atl_finishing
))
475 if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x
)->state
))
478 /* FIFO not empty? */
479 if (isp116x_read_reg16(isp116x
, HCBUFSTAT
) & HCBUFSTAT_ATL_FULL
)
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
) {
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. */
524 (urb
->transfer_buffer_length
-
525 urb
->actual_length
)) {
526 len
-= len
% ep
->maxpacket
;
530 len
= urb
->transfer_buffer_length
-
535 load
+= len
* byte_time
;
536 if (load
> MAX_LOAD_LIMIT
)
542 last_ep
->active
= ep
;
544 isp116x
->atl_active
= 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
);
559 Finish the processed transfers
561 static void finish_atl_transfers(struct isp116x
*isp116x
)
563 if (!isp116x
->atl_active
)
565 /* Fifo not ready? */
566 if (!(isp116x_read_reg16(isp116x
, HCBUFSTAT
) & HCBUFSTAT_ATL_DONE
))
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
);
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
)) {
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
;
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
;
616 if (irqstat
& (HCuPINT_ATL
| HCuPINT_SOF
)) {
617 start_atl_transfers(isp116x
);
620 isp116x_write_reg16(isp116x
, HCuPINTENB
, isp116x
->irqenb
);
622 spin_unlock(&isp116x
->lock
);
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.
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
]) {
645 for (j
= i
; j
< PERIODIC_SIZE
; j
+= period
) {
646 if ((isp116x
->load
[j
] + load
)
650 if (j
< PERIODIC_SIZE
)
658 /* NB! ALL the code above this point runs with isp116x->lock
662 /*-----------------------------------------------------------------*/
664 static int isp116x_urb_enqueue(struct usb_hcd
*hcd
,
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
;
680 urb_dbg(urb
, "Enqueue");
682 if (type
== PIPE_ISOCHRONOUS
) {
683 ERR("Isochronous transfers not supported\n");
684 urb_dbg(urb
, "Refused to enqueue");
687 /* avoid all allocations within spinlocks: request or endpoint */
689 ep
= kzalloc(sizeof *ep
, mem_flags
);
694 spin_lock_irqsave(&isp116x
->lock
, flags
);
695 if (!HC_IS_RUNNING(hcd
->state
)) {
698 goto fail_not_linked
;
700 ret
= usb_hcd_link_urb_to_ep(hcd
, urb
);
703 goto fail_not_linked
;
709 INIT_LIST_HEAD(&ep
->schedule
);
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
;
718 ep
->nextpid
= USB_PID_OUT
;
720 ep
->nextpid
= USB_PID_IN
;
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)
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
,
742 (type
== PIPE_ISOCHRONOUS
),
743 usb_maxpacket(udev
, pipe
,
751 /* maybe put endpoint into schedule */
755 if (list_empty(&ep
->schedule
))
756 list_add_tail(&ep
->schedule
, &isp116x
->async
);
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
)
767 ep
->branch
= ret
= balance(isp116x
, ep
->period
, ep
->load
);
772 urb
->start_frame
= (isp116x
->fmindex
& (PERIODIC_SIZE
- 1))
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
)
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
,
807 start_atl_transfers(isp116x
);
811 usb_hcd_unlink_urb_from_ep(hcd
, urb
);
813 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
820 static int isp116x_urb_dequeue(struct usb_hcd
*hcd
, struct urb
*urb
,
823 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
824 struct usb_host_endpoint
*hep
;
825 struct isp116x_ep
*ep
, *ep_act
;
829 spin_lock_irqsave(&isp116x
->lock
, flags
);
830 rc
= usb_hcd_check_unlink_urb(hcd
, urb
, status
);
836 WARN_ON(hep
!= ep
->hep
);
838 /* In front of queue? */
839 if (ep
->hep
->urb_list
.next
== &urb
->urb_list
)
841 for (ep_act
= isp116x
->atl_active
; ep_act
;
842 ep_act
= ep_act
->active
)
844 VDBG("dequeue, urb %p active; wait for irq\n",
851 finish_request(isp116x
, ep
, urb
, status
);
853 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
857 static void isp116x_endpoint_disable(struct usb_hcd
*hcd
,
858 struct usb_host_endpoint
*hep
)
861 struct isp116x_ep
*ep
= hep
->hcpriv
;
866 /* assume we'd just wait for the irq */
867 for (i
= 0; i
< 100 && !list_empty(&hep
->urb_list
); i
++)
869 if (!list_empty(&hep
->urb_list
))
870 WARN("ep %p not empty?\n", ep
);
876 static int isp116x_get_frame(struct usb_hcd
*hcd
)
878 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
882 spin_lock_irqsave(&isp116x
->lock
, flags
);
883 fmnum
= isp116x_read_reg32(isp116x
, HCFMNUM
);
884 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
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;
897 if (!HC_IS_RUNNING(hcd
->state
))
900 /* Report no status change now, if we are scheduled to be
902 if (timer_pending(&hcd
->rh_timer
))
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;
913 for (i
= 0; i
< ports
; i
++) {
914 u32 status
= isp116x
->rhport
[i
] =
915 isp116x_read_reg32(isp116x
, i
? HCRHPORT2
: HCRHPORT1
);
917 if (status
& (RH_PS_CSC
| RH_PS_PESC
| RH_PS_PSSC
918 | RH_PS_OCIC
| RH_PS_PRSC
)) {
920 buf
[0] |= 1 << (i
+ 1);
924 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
928 static void isp116x_hub_descriptor(struct isp116x
*isp116x
,
929 struct usb_hub_descriptor
*desc
)
931 u32 reg
= isp116x
->rhdesca
;
933 desc
->bDescriptorType
= 0x29;
934 desc
->bDescLength
= 9;
935 desc
->bHubContrCurrent
= 0;
936 desc
->bNbrPorts
= (u8
) (reg
& 0x3);
937 /* Power switching, device type, overcurrent. */
938 desc
->wHubCharacteristics
= cpu_to_le16((u16
) ((reg
>> 8) & 0x1f));
939 desc
->bPwrOn2PwrGood
= (u8
) ((reg
>> 24) & 0xff);
940 /* two bitmaps: ports removable, and legacy PortPwrCtrlMask */
942 desc
->bitmap
[1] = ~0;
945 /* Perform reset of a given port.
946 It would be great to just start the reset and let the
947 USB core to clear the reset in due time. However,
948 root hub ports should be reset for at least 50 ms, while
949 our chip stays in reset for about 10 ms. I.e., we must
950 repeatedly reset it ourself here.
952 static inline void root_port_reset(struct isp116x
*isp116x
, unsigned port
)
955 unsigned long flags
, t
;
957 /* Root hub reset should be 50 ms, but some devices
958 want it even longer. */
959 t
= jiffies
+ msecs_to_jiffies(100);
961 while (time_before(jiffies
, t
)) {
962 spin_lock_irqsave(&isp116x
->lock
, flags
);
963 /* spin until any current reset finishes */
965 tmp
= isp116x_read_reg32(isp116x
, port
?
966 HCRHPORT2
: HCRHPORT1
);
967 if (!(tmp
& RH_PS_PRS
))
971 /* Don't reset a disconnected port */
972 if (!(tmp
& RH_PS_CCS
)) {
973 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
976 /* Reset lasts 10ms (claims datasheet) */
977 isp116x_write_reg32(isp116x
, port
? HCRHPORT2
:
978 HCRHPORT1
, (RH_PS_PRS
));
979 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
984 /* Adapted from ohci-hub.c */
985 static int isp116x_hub_control(struct usb_hcd
*hcd
,
987 u16 wValue
, u16 wIndex
, char *buf
, u16 wLength
)
989 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
992 int ports
= isp116x
->rhdesca
& RH_A_NDP
;
996 case ClearHubFeature
:
997 DBG("ClearHubFeature: ");
999 case C_HUB_OVER_CURRENT
:
1000 DBG("C_HUB_OVER_CURRENT\n");
1001 spin_lock_irqsave(&isp116x
->lock
, flags
);
1002 isp116x_write_reg32(isp116x
, HCRHSTATUS
, RH_HS_OCIC
);
1003 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1004 case C_HUB_LOCAL_POWER
:
1005 DBG("C_HUB_LOCAL_POWER\n");
1012 DBG("SetHubFeature: ");
1014 case C_HUB_OVER_CURRENT
:
1015 case C_HUB_LOCAL_POWER
:
1016 DBG("C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1022 case GetHubDescriptor
:
1023 DBG("GetHubDescriptor\n");
1024 isp116x_hub_descriptor(isp116x
,
1025 (struct usb_hub_descriptor
*)buf
);
1028 DBG("GetHubStatus\n");
1029 *(__le32
*) buf
= 0;
1032 DBG("GetPortStatus\n");
1033 if (!wIndex
|| wIndex
> ports
)
1035 tmp
= isp116x
->rhport
[--wIndex
];
1036 *(__le32
*) buf
= cpu_to_le32(tmp
);
1037 DBG("GetPortStatus: port[%d] %08x\n", wIndex
+ 1, tmp
);
1039 case ClearPortFeature
:
1040 DBG("ClearPortFeature: ");
1041 if (!wIndex
|| wIndex
> ports
)
1046 case USB_PORT_FEAT_ENABLE
:
1047 DBG("USB_PORT_FEAT_ENABLE\n");
1050 case USB_PORT_FEAT_C_ENABLE
:
1051 DBG("USB_PORT_FEAT_C_ENABLE\n");
1054 case USB_PORT_FEAT_SUSPEND
:
1055 DBG("USB_PORT_FEAT_SUSPEND\n");
1058 case USB_PORT_FEAT_C_SUSPEND
:
1059 DBG("USB_PORT_FEAT_C_SUSPEND\n");
1062 case USB_PORT_FEAT_POWER
:
1063 DBG("USB_PORT_FEAT_POWER\n");
1066 case USB_PORT_FEAT_C_CONNECTION
:
1067 DBG("USB_PORT_FEAT_C_CONNECTION\n");
1070 case USB_PORT_FEAT_C_OVER_CURRENT
:
1071 DBG("USB_PORT_FEAT_C_OVER_CURRENT\n");
1074 case USB_PORT_FEAT_C_RESET
:
1075 DBG("USB_PORT_FEAT_C_RESET\n");
1081 spin_lock_irqsave(&isp116x
->lock
, flags
);
1082 isp116x_write_reg32(isp116x
, wIndex
1083 ? HCRHPORT2
: HCRHPORT1
, tmp
);
1084 isp116x
->rhport
[wIndex
] =
1085 isp116x_read_reg32(isp116x
, wIndex
? HCRHPORT2
: HCRHPORT1
);
1086 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1088 case SetPortFeature
:
1089 DBG("SetPortFeature: ");
1090 if (!wIndex
|| wIndex
> ports
)
1094 case USB_PORT_FEAT_SUSPEND
:
1095 DBG("USB_PORT_FEAT_SUSPEND\n");
1096 spin_lock_irqsave(&isp116x
->lock
, flags
);
1097 isp116x_write_reg32(isp116x
, wIndex
1098 ? HCRHPORT2
: HCRHPORT1
, RH_PS_PSS
);
1100 case USB_PORT_FEAT_POWER
:
1101 DBG("USB_PORT_FEAT_POWER\n");
1102 spin_lock_irqsave(&isp116x
->lock
, flags
);
1103 isp116x_write_reg32(isp116x
, wIndex
1104 ? HCRHPORT2
: HCRHPORT1
, RH_PS_PPS
);
1106 case USB_PORT_FEAT_RESET
:
1107 DBG("USB_PORT_FEAT_RESET\n");
1108 root_port_reset(isp116x
, wIndex
);
1109 spin_lock_irqsave(&isp116x
->lock
, flags
);
1114 isp116x
->rhport
[wIndex
] =
1115 isp116x_read_reg32(isp116x
, wIndex
? HCRHPORT2
: HCRHPORT1
);
1116 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1121 /* "protocol stall" on error */
1122 DBG("PROTOCOL STALL\n");
1128 /*-----------------------------------------------------------------*/
1130 #ifdef CONFIG_DEBUG_FS
1132 static void dump_irq(struct seq_file
*s
, char *label
, u16 mask
)
1134 seq_printf(s
, "%s %04x%s%s%s%s%s%s\n", label
, mask
,
1135 mask
& HCuPINT_CLKRDY
? " clkrdy" : "",
1136 mask
& HCuPINT_SUSP
? " susp" : "",
1137 mask
& HCuPINT_OPR
? " opr" : "",
1138 mask
& HCuPINT_AIIEOT
? " eot" : "",
1139 mask
& HCuPINT_ATL
? " atl" : "",
1140 mask
& HCuPINT_SOF
? " sof" : "");
1143 static void dump_int(struct seq_file
*s
, char *label
, u32 mask
)
1145 seq_printf(s
, "%s %08x%s%s%s%s%s%s%s\n", label
, mask
,
1146 mask
& HCINT_MIE
? " MIE" : "",
1147 mask
& HCINT_RHSC
? " rhsc" : "",
1148 mask
& HCINT_FNO
? " fno" : "",
1149 mask
& HCINT_UE
? " ue" : "",
1150 mask
& HCINT_RD
? " rd" : "",
1151 mask
& HCINT_SF
? " sof" : "", mask
& HCINT_SO
? " so" : "");
1154 static int isp116x_show_dbg(struct seq_file
*s
, void *unused
)
1156 struct isp116x
*isp116x
= s
->private;
1158 seq_printf(s
, "%s\n%s version %s\n",
1159 isp116x_to_hcd(isp116x
)->product_desc
, hcd_name
,
1162 if (HC_IS_SUSPENDED(isp116x_to_hcd(isp116x
)->state
)) {
1163 seq_printf(s
, "HCD is suspended\n");
1166 if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x
)->state
)) {
1167 seq_printf(s
, "HCD not running\n");
1171 spin_lock_irq(&isp116x
->lock
);
1172 dump_irq(s
, "hc_irq_enable", isp116x_read_reg16(isp116x
, HCuPINTENB
));
1173 dump_irq(s
, "hc_irq_status", isp116x_read_reg16(isp116x
, HCuPINT
));
1174 dump_int(s
, "hc_int_enable", isp116x_read_reg32(isp116x
, HCINTENB
));
1175 dump_int(s
, "hc_int_status", isp116x_read_reg32(isp116x
, HCINTSTAT
));
1176 isp116x_show_regs_seq(isp116x
, s
);
1177 spin_unlock_irq(&isp116x
->lock
);
1178 seq_printf(s
, "\n");
1183 static int isp116x_open_seq(struct inode
*inode
, struct file
*file
)
1185 return single_open(file
, isp116x_show_dbg
, inode
->i_private
);
1188 static const struct file_operations isp116x_debug_fops
= {
1189 .open
= isp116x_open_seq
,
1191 .llseek
= seq_lseek
,
1192 .release
= single_release
,
1195 static int create_debug_file(struct isp116x
*isp116x
)
1197 isp116x
->dentry
= debugfs_create_file(hcd_name
,
1198 S_IRUGO
, NULL
, isp116x
,
1199 &isp116x_debug_fops
);
1200 if (!isp116x
->dentry
)
1205 static void remove_debug_file(struct isp116x
*isp116x
)
1207 debugfs_remove(isp116x
->dentry
);
1212 #define create_debug_file(d) 0
1213 #define remove_debug_file(d) do{}while(0)
1215 #endif /* CONFIG_DEBUG_FS */
1217 /*-----------------------------------------------------------------*/
1220 Software reset - can be called from any contect.
1222 static int isp116x_sw_reset(struct isp116x
*isp116x
)
1225 unsigned long flags
;
1228 spin_lock_irqsave(&isp116x
->lock
, flags
);
1229 isp116x_write_reg16(isp116x
, HCSWRES
, HCSWRES_MAGIC
);
1230 isp116x_write_reg32(isp116x
, HCCMDSTAT
, HCCMDSTAT_HCR
);
1232 /* It usually resets within 1 ms */
1234 if (!(isp116x_read_reg32(isp116x
, HCCMDSTAT
) & HCCMDSTAT_HCR
))
1238 ERR("Software reset timeout\n");
1241 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1245 static int isp116x_reset(struct usb_hcd
*hcd
)
1247 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1250 int ret
, timeout
= 15 /* ms */ ;
1252 ret
= isp116x_sw_reset(isp116x
);
1256 t
= jiffies
+ msecs_to_jiffies(timeout
);
1257 while (time_before_eq(jiffies
, t
)) {
1259 spin_lock_irq(&isp116x
->lock
);
1260 clkrdy
= isp116x_read_reg16(isp116x
, HCuPINT
) & HCuPINT_CLKRDY
;
1261 spin_unlock_irq(&isp116x
->lock
);
1266 ERR("Clock not ready after %dms\n", timeout
);
1267 /* After sw_reset the clock won't report to be ready, if
1268 H_WAKEUP pin is high. */
1269 ERR("Please make sure that the H_WAKEUP pin is pulled low!\n");
1275 static void isp116x_stop(struct usb_hcd
*hcd
)
1277 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1278 unsigned long flags
;
1281 spin_lock_irqsave(&isp116x
->lock
, flags
);
1282 isp116x_write_reg16(isp116x
, HCuPINTENB
, 0);
1284 /* Switch off ports' power, some devices don't come up
1285 after next 'insmod' without this */
1286 val
= isp116x_read_reg32(isp116x
, HCRHDESCA
);
1287 val
&= ~(RH_A_NPS
| RH_A_PSM
);
1288 isp116x_write_reg32(isp116x
, HCRHDESCA
, val
);
1289 isp116x_write_reg32(isp116x
, HCRHSTATUS
, RH_HS_LPS
);
1290 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1292 isp116x_sw_reset(isp116x
);
1296 Configure the chip. The chip must be successfully reset by now.
1298 static int isp116x_start(struct usb_hcd
*hcd
)
1300 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1301 struct isp116x_platform_data
*board
= isp116x
->board
;
1303 unsigned long flags
;
1305 spin_lock_irqsave(&isp116x
->lock
, flags
);
1307 /* clear interrupt status and disable all interrupt sources */
1308 isp116x_write_reg16(isp116x
, HCuPINT
, 0xff);
1309 isp116x_write_reg16(isp116x
, HCuPINTENB
, 0);
1311 val
= isp116x_read_reg16(isp116x
, HCCHIPID
);
1312 if ((val
& HCCHIPID_MASK
) != HCCHIPID_MAGIC
) {
1313 ERR("Invalid chip ID %04x\n", val
);
1314 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1318 /* To be removed in future */
1319 hcd
->uses_new_polling
= 1;
1321 isp116x_write_reg16(isp116x
, HCITLBUFLEN
, ISP116x_ITL_BUFSIZE
);
1322 isp116x_write_reg16(isp116x
, HCATLBUFLEN
, ISP116x_ATL_BUFSIZE
);
1325 val
= HCHWCFG_INT_ENABLE
| HCHWCFG_DBWIDTH(1);
1326 if (board
->sel15Kres
)
1327 val
|= HCHWCFG_15KRSEL
;
1328 /* Remote wakeup won't work without working clock */
1329 if (board
->remote_wakeup_enable
)
1330 val
|= HCHWCFG_CLKNOTSTOP
;
1331 if (board
->oc_enable
)
1332 val
|= HCHWCFG_ANALOG_OC
;
1333 if (board
->int_act_high
)
1334 val
|= HCHWCFG_INT_POL
;
1335 if (board
->int_edge_triggered
)
1336 val
|= HCHWCFG_INT_TRIGGER
;
1337 isp116x_write_reg16(isp116x
, HCHWCFG
, val
);
1339 /* ----- Root hub conf */
1340 val
= (25 << 24) & RH_A_POTPGT
;
1341 /* AN10003_1.pdf recommends RH_A_NPS (no power switching) to
1342 be always set. Yet, instead, we request individual port
1345 /* Report overcurrent per port */
1347 isp116x_write_reg32(isp116x
, HCRHDESCA
, val
);
1348 isp116x
->rhdesca
= isp116x_read_reg32(isp116x
, HCRHDESCA
);
1351 isp116x_write_reg32(isp116x
, HCRHDESCB
, val
);
1352 isp116x
->rhdescb
= isp116x_read_reg32(isp116x
, HCRHDESCB
);
1355 if (board
->remote_wakeup_enable
) {
1356 if (!device_can_wakeup(hcd
->self
.controller
))
1357 device_init_wakeup(hcd
->self
.controller
, 1);
1360 isp116x_write_reg32(isp116x
, HCRHSTATUS
, val
);
1361 isp116x
->rhstatus
= isp116x_read_reg32(isp116x
, HCRHSTATUS
);
1363 isp116x_write_reg32(isp116x
, HCFMINTVL
, 0x27782edf);
1365 hcd
->state
= HC_STATE_RUNNING
;
1367 /* Set up interrupts */
1368 isp116x
->intenb
= HCINT_MIE
| HCINT_RHSC
| HCINT_UE
;
1369 if (board
->remote_wakeup_enable
)
1370 isp116x
->intenb
|= HCINT_RD
;
1371 isp116x
->irqenb
= HCuPINT_ATL
| HCuPINT_OPR
; /* | HCuPINT_SUSP; */
1372 isp116x_write_reg32(isp116x
, HCINTENB
, isp116x
->intenb
);
1373 isp116x_write_reg16(isp116x
, HCuPINTENB
, isp116x
->irqenb
);
1375 /* Go operational */
1376 val
= HCCONTROL_USB_OPER
;
1377 if (board
->remote_wakeup_enable
)
1378 val
|= HCCONTROL_RWE
;
1379 isp116x_write_reg32(isp116x
, HCCONTROL
, val
);
1381 /* Disable ports to avoid race in device enumeration */
1382 isp116x_write_reg32(isp116x
, HCRHPORT1
, RH_PS_CCS
);
1383 isp116x_write_reg32(isp116x
, HCRHPORT2
, RH_PS_CCS
);
1385 isp116x_show_regs_log(isp116x
);
1386 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1392 static int isp116x_bus_suspend(struct usb_hcd
*hcd
)
1394 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1395 unsigned long flags
;
1399 spin_lock_irqsave(&isp116x
->lock
, flags
);
1400 val
= isp116x_read_reg32(isp116x
, HCCONTROL
);
1402 switch (val
& HCCONTROL_HCFS
) {
1403 case HCCONTROL_USB_OPER
:
1404 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1405 val
&= (~HCCONTROL_HCFS
& ~HCCONTROL_RWE
);
1406 val
|= HCCONTROL_USB_SUSPEND
;
1407 if (device_may_wakeup(&hcd
->self
.root_hub
->dev
))
1408 val
|= HCCONTROL_RWE
;
1409 /* Wait for usb transfers to finish */
1411 spin_lock_irqsave(&isp116x
->lock
, flags
);
1412 isp116x_write_reg32(isp116x
, HCCONTROL
, val
);
1413 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1414 /* Wait for devices to suspend */
1417 case HCCONTROL_USB_RESUME
:
1418 isp116x_write_reg32(isp116x
, HCCONTROL
,
1419 (val
& ~HCCONTROL_HCFS
) |
1420 HCCONTROL_USB_RESET
);
1421 case HCCONTROL_USB_RESET
:
1423 default: /* HCCONTROL_USB_SUSPEND */
1424 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1431 static int isp116x_bus_resume(struct usb_hcd
*hcd
)
1433 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1437 spin_lock_irq(&isp116x
->lock
);
1439 val
= isp116x_read_reg32(isp116x
, HCCONTROL
);
1440 switch (val
& HCCONTROL_HCFS
) {
1441 case HCCONTROL_USB_SUSPEND
:
1442 val
&= ~HCCONTROL_HCFS
;
1443 val
|= HCCONTROL_USB_RESUME
;
1444 isp116x_write_reg32(isp116x
, HCCONTROL
, val
);
1445 case HCCONTROL_USB_RESUME
:
1447 case HCCONTROL_USB_OPER
:
1448 spin_unlock_irq(&isp116x
->lock
);
1449 /* Without setting power_state here the
1450 SUSPENDED state won't be removed from
1451 sysfs/usbN/power.state as a response to remote
1452 wakeup. Maybe in the future. */
1453 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1456 /* HCCONTROL_USB_RESET: this may happen, when during
1457 suspension the HC lost power. Reinitialize completely */
1458 spin_unlock_irq(&isp116x
->lock
);
1459 DBG("Chip has been reset while suspended. Reinit from scratch.\n");
1462 isp116x_hub_control(hcd
, SetPortFeature
,
1463 USB_PORT_FEAT_POWER
, 1, NULL
, 0);
1464 if ((isp116x
->rhdesca
& RH_A_NDP
) == 2)
1465 isp116x_hub_control(hcd
, SetPortFeature
,
1466 USB_PORT_FEAT_POWER
, 2, NULL
, 0);
1467 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1471 val
= isp116x
->rhdesca
& RH_A_NDP
;
1474 isp116x_read_reg32(isp116x
, val
? HCRHPORT2
: HCRHPORT1
);
1475 /* force global, not selective, resume */
1476 if (!(stat
& RH_PS_PSS
))
1478 DBG("%s: Resuming port %d\n", __func__
, val
);
1479 isp116x_write_reg32(isp116x
, RH_PS_POCI
, val
1480 ? HCRHPORT2
: HCRHPORT1
);
1482 spin_unlock_irq(&isp116x
->lock
);
1484 hcd
->state
= HC_STATE_RESUMING
;
1487 /* Go operational */
1488 spin_lock_irq(&isp116x
->lock
);
1489 val
= isp116x_read_reg32(isp116x
, HCCONTROL
);
1490 isp116x_write_reg32(isp116x
, HCCONTROL
,
1491 (val
& ~HCCONTROL_HCFS
) | HCCONTROL_USB_OPER
);
1492 spin_unlock_irq(&isp116x
->lock
);
1493 /* see analogous comment above */
1494 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1495 hcd
->state
= HC_STATE_RUNNING
;
1502 #define isp116x_bus_suspend NULL
1503 #define isp116x_bus_resume NULL
1507 static struct hc_driver isp116x_hc_driver
= {
1508 .description
= hcd_name
,
1509 .product_desc
= "ISP116x Host Controller",
1510 .hcd_priv_size
= sizeof(struct isp116x
),
1515 .reset
= isp116x_reset
,
1516 .start
= isp116x_start
,
1517 .stop
= isp116x_stop
,
1519 .urb_enqueue
= isp116x_urb_enqueue
,
1520 .urb_dequeue
= isp116x_urb_dequeue
,
1521 .endpoint_disable
= isp116x_endpoint_disable
,
1523 .get_frame_number
= isp116x_get_frame
,
1525 .hub_status_data
= isp116x_hub_status_data
,
1526 .hub_control
= isp116x_hub_control
,
1527 .bus_suspend
= isp116x_bus_suspend
,
1528 .bus_resume
= isp116x_bus_resume
,
1531 /*----------------------------------------------------------------*/
1533 static int isp116x_remove(struct platform_device
*pdev
)
1535 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
1536 struct isp116x
*isp116x
;
1537 struct resource
*res
;
1541 isp116x
= hcd_to_isp116x(hcd
);
1542 remove_debug_file(isp116x
);
1543 usb_remove_hcd(hcd
);
1545 iounmap(isp116x
->data_reg
);
1546 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
1547 release_mem_region(res
->start
, 2);
1548 iounmap(isp116x
->addr_reg
);
1549 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1550 release_mem_region(res
->start
, 2);
1556 #define resource_len(r) (((r)->end - (r)->start) + 1)
1558 static int __devinit
isp116x_probe(struct platform_device
*pdev
)
1560 struct usb_hcd
*hcd
;
1561 struct isp116x
*isp116x
;
1562 struct resource
*addr
, *data
;
1563 void __iomem
*addr_reg
;
1564 void __iomem
*data_reg
;
1568 if (pdev
->num_resources
< 3) {
1573 data
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1574 addr
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
1575 irq
= platform_get_irq(pdev
, 0);
1576 if (!addr
|| !data
|| irq
< 0) {
1581 if (pdev
->dev
.dma_mask
) {
1582 DBG("DMA not supported\n");
1587 if (!request_mem_region(addr
->start
, 2, hcd_name
)) {
1591 addr_reg
= ioremap(addr
->start
, resource_len(addr
));
1592 if (addr_reg
== NULL
) {
1596 if (!request_mem_region(data
->start
, 2, hcd_name
)) {
1600 data_reg
= ioremap(data
->start
, resource_len(data
));
1601 if (data_reg
== NULL
) {
1606 /* allocate and initialize hcd */
1607 hcd
= usb_create_hcd(&isp116x_hc_driver
, &pdev
->dev
, pdev
->dev
.bus_id
);
1612 /* this rsrc_start is bogus */
1613 hcd
->rsrc_start
= addr
->start
;
1614 isp116x
= hcd_to_isp116x(hcd
);
1615 isp116x
->data_reg
= data_reg
;
1616 isp116x
->addr_reg
= addr_reg
;
1617 spin_lock_init(&isp116x
->lock
);
1618 INIT_LIST_HEAD(&isp116x
->async
);
1619 isp116x
->board
= pdev
->dev
.platform_data
;
1621 if (!isp116x
->board
) {
1622 ERR("Platform data structure not initialized\n");
1626 if (isp116x_check_platform_delay(isp116x
)) {
1627 ERR("USE_PLATFORM_DELAY defined, but delay function not "
1629 ERR("See comments in drivers/usb/host/isp116x-hcd.c\n");
1634 ret
= usb_add_hcd(hcd
, irq
, IRQF_DISABLED
);
1638 ret
= create_debug_file(isp116x
);
1640 ERR("Couldn't create debugfs entry\n");
1647 usb_remove_hcd(hcd
);
1653 release_mem_region(data
->start
, 2);
1657 release_mem_region(addr
->start
, 2);
1659 ERR("init error, %d\n", ret
);
1665 Suspend of platform device
1667 static int isp116x_suspend(struct platform_device
*dev
, pm_message_t state
)
1669 VDBG("%s: state %x\n", __func__
, state
.event
);
1670 dev
->dev
.power
.power_state
= state
;
1675 Resume platform device
1677 static int isp116x_resume(struct platform_device
*dev
)
1679 VDBG("%s: state %x\n", __func__
, dev
->power
.power_state
.event
);
1680 dev
->dev
.power
.power_state
= PMSG_ON
;
1686 #define isp116x_suspend NULL
1687 #define isp116x_resume NULL
1691 static struct platform_driver isp116x_driver
= {
1692 .probe
= isp116x_probe
,
1693 .remove
= isp116x_remove
,
1694 .suspend
= isp116x_suspend
,
1695 .resume
= isp116x_resume
,
1697 .name
= (char *)hcd_name
,
1701 /*-----------------------------------------------------------------*/
1703 static int __init
isp116x_init(void)
1708 INFO("driver %s, %s\n", hcd_name
, DRIVER_VERSION
);
1709 return platform_driver_register(&isp116x_driver
);
1712 module_init(isp116x_init
);
1714 static void __exit
isp116x_cleanup(void)
1716 platform_driver_unregister(&isp116x_driver
);
1719 module_exit(isp116x_cleanup
);