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 spin_lock(&urb
->lock
);
232 ep
->data
= (unsigned char *)urb
->transfer_buffer
233 + urb
->actual_length
;
235 switch (ep
->nextpid
) {
237 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 0);
241 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 1);
245 len
= sizeof(struct usb_ctrlrequest
);
246 ep
->data
= urb
->setup_packet
;
251 dir
= (urb
->transfer_buffer_length
252 && usb_pipein(urb
->pipe
))
253 ? PTD_DIR_OUT
: PTD_DIR_IN
;
256 ERR("%s %d: ep->nextpid %d\n", __func__
, __LINE__
,
261 ptd
->count
= PTD_CC_MSK
| PTD_ACTIVE_MSK
| PTD_TOGGLE(toggle
);
262 ptd
->mps
= PTD_MPS(ep
->maxpacket
)
263 | PTD_SPD(urb
->dev
->speed
== USB_SPEED_LOW
)
265 ptd
->len
= PTD_LEN(len
) | PTD_DIR(dir
);
266 ptd
->faddr
= PTD_FA(usb_pipedevice(urb
->pipe
));
267 spin_unlock(&urb
->lock
);
269 ptd
->mps
|= PTD_LAST_MSK
;
270 isp116x
->atl_last_dir
= dir
;
272 isp116x
->atl_bufshrt
= sizeof(struct ptd
) + isp116x
->atl_buflen
;
273 isp116x
->atl_buflen
= isp116x
->atl_bufshrt
+ ALIGN(len
, 4);
278 Analyze transfer results, handle partial transfers and errors
280 static void postproc_atl_queue(struct isp116x
*isp116x
)
282 struct isp116x_ep
*ep
;
284 struct usb_device
*udev
;
289 for (ep
= isp116x
->atl_active
; ep
; ep
= ep
->active
) {
290 BUG_ON(list_empty(&ep
->hep
->urb_list
));
292 container_of(ep
->hep
->urb_list
.next
, struct urb
, urb_list
);
295 cc
= PTD_GET_CC(ptd
);
297 spin_lock(&urb
->lock
);
299 /* Data underrun is special. For allowed underrun
300 we clear the error and continue as normal. For
301 forbidden underrun we finish the DATA stage
302 immediately while for control transfer,
303 we do a STATUS stage. */
304 if (cc
== TD_DATAUNDERRUN
) {
305 if (!(urb
->transfer_flags
& URB_SHORT_NOT_OK
)) {
306 DBG("Allowed data underrun\n");
311 if (usb_pipecontrol(urb
->pipe
))
312 ep
->nextpid
= USB_PID_ACK
;
314 usb_settoggle(udev
, ep
->epnum
,
317 PTD_GET_TOGGLE(ptd
));
318 urb
->actual_length
+= PTD_GET_COUNT(ptd
);
319 urb
->status
= cc_to_error
[TD_DATAUNDERRUN
];
320 spin_unlock(&urb
->lock
);
324 /* Keep underrun error through the STATUS stage */
325 if (urb
->status
== cc_to_error
[TD_DATAUNDERRUN
])
326 cc
= TD_DATAUNDERRUN
;
328 if (cc
!= TD_CC_NOERROR
&& cc
!= TD_NOTACCESSED
329 && (++ep
->error_count
>= 3 || cc
== TD_CC_STALL
330 || cc
== TD_DATAOVERRUN
)) {
331 if (urb
->status
== -EINPROGRESS
)
332 urb
->status
= cc_to_error
[cc
];
333 if (ep
->nextpid
== USB_PID_ACK
)
335 spin_unlock(&urb
->lock
);
338 /* According to usb spec, zero-length Int transfer signals
339 finishing of the urb. Hey, does this apply only
341 if (usb_pipeint(urb
->pipe
) && !PTD_GET_LEN(ptd
)) {
342 if (urb
->status
== -EINPROGRESS
)
344 spin_unlock(&urb
->lock
);
348 /* Relax after previously failed, but later succeeded
349 or correctly NAK'ed retransmission attempt */
351 && (cc
== TD_CC_NOERROR
|| cc
== TD_NOTACCESSED
))
354 /* Take into account idiosyncracies of the isp116x chip
355 regarding toggle bit for failed transfers */
356 if (ep
->nextpid
== USB_PID_OUT
)
357 usb_settoggle(udev
, ep
->epnum
, 1, PTD_GET_TOGGLE(ptd
)
358 ^ (ep
->error_count
> 0));
359 else if (ep
->nextpid
== USB_PID_IN
)
360 usb_settoggle(udev
, ep
->epnum
, 0, PTD_GET_TOGGLE(ptd
)
361 ^ (ep
->error_count
> 0));
363 switch (ep
->nextpid
) {
366 urb
->actual_length
+= PTD_GET_COUNT(ptd
);
367 if (PTD_GET_ACTIVE(ptd
)
368 || (cc
!= TD_CC_NOERROR
&& cc
< 0x0E))
370 if (urb
->transfer_buffer_length
!= urb
->actual_length
) {
374 if (urb
->transfer_flags
& URB_ZERO_PACKET
375 && ep
->nextpid
== USB_PID_OUT
376 && !(PTD_GET_COUNT(ptd
) % ep
->maxpacket
)) {
377 DBG("Zero packet requested\n");
381 /* All data for this URB is transferred, let's finish */
382 if (usb_pipecontrol(urb
->pipe
))
383 ep
->nextpid
= USB_PID_ACK
;
384 else if (urb
->status
== -EINPROGRESS
)
388 if (PTD_GET_ACTIVE(ptd
)
389 || (cc
!= TD_CC_NOERROR
&& cc
< 0x0E))
391 if (urb
->transfer_buffer_length
== urb
->actual_length
)
392 ep
->nextpid
= USB_PID_ACK
;
393 else if (usb_pipeout(urb
->pipe
)) {
394 usb_settoggle(udev
, 0, 1, 1);
395 ep
->nextpid
= USB_PID_OUT
;
397 usb_settoggle(udev
, 0, 0, 1);
398 ep
->nextpid
= USB_PID_IN
;
402 if (PTD_GET_ACTIVE(ptd
)
403 || (cc
!= TD_CC_NOERROR
&& cc
< 0x0E))
405 if (urb
->status
== -EINPROGRESS
)
412 spin_unlock(&urb
->lock
);
417 Take done or failed requests out of schedule. Give back
420 static void finish_request(struct isp116x
*isp116x
, struct isp116x_ep
*ep
,
421 struct urb
*urb
, struct pt_regs
*regs
)
422 __releases(isp116x
->lock
) __acquires(isp116x
->lock
)
429 if (usb_pipecontrol(urb
->pipe
))
430 ep
->nextpid
= USB_PID_SETUP
;
432 urb_dbg(urb
, "Finish");
434 spin_unlock(&isp116x
->lock
);
435 usb_hcd_giveback_urb(isp116x_to_hcd(isp116x
), urb
, regs
);
436 spin_lock(&isp116x
->lock
);
438 /* take idle endpoints out of the schedule */
439 if (!list_empty(&ep
->hep
->urb_list
))
442 /* async deschedule */
443 if (!list_empty(&ep
->schedule
)) {
444 list_del_init(&ep
->schedule
);
448 /* periodic deschedule */
449 DBG("deschedule qh%d/%p branch %d\n", ep
->period
, ep
, ep
->branch
);
450 for (i
= ep
->branch
; i
< PERIODIC_SIZE
; i
+= ep
->period
) {
451 struct isp116x_ep
*temp
;
452 struct isp116x_ep
**prev
= &isp116x
->periodic
[i
];
454 while (*prev
&& ((temp
= *prev
) != ep
))
458 isp116x
->load
[i
] -= ep
->load
;
460 ep
->branch
= PERIODIC_SIZE
;
461 isp116x_to_hcd(isp116x
)->self
.bandwidth_allocated
-=
462 ep
->load
/ ep
->period
;
464 /* switch irq type? */
465 if (!--isp116x
->periodic_count
) {
466 isp116x
->irqenb
&= ~HCuPINT_SOF
;
467 isp116x
->irqenb
|= HCuPINT_ATL
;
472 Scan transfer lists, schedule transfers, send data off
475 static void start_atl_transfers(struct isp116x
*isp116x
)
477 struct isp116x_ep
*last_ep
= NULL
, *ep
;
480 int len
, index
, speed
, byte_time
;
482 if (atomic_read(&isp116x
->atl_finishing
))
485 if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x
)->state
))
488 /* FIFO not empty? */
489 if (isp116x_read_reg16(isp116x
, HCBUFSTAT
) & HCBUFSTAT_ATL_FULL
)
492 isp116x
->atl_active
= NULL
;
493 isp116x
->atl_buflen
= isp116x
->atl_bufshrt
= 0;
495 /* Schedule int transfers */
496 if (isp116x
->periodic_count
) {
497 isp116x
->fmindex
= index
=
498 (isp116x
->fmindex
+ 1) & (PERIODIC_SIZE
- 1);
499 if ((load
= isp116x
->load
[index
])) {
500 /* Bring all int transfers for this frame
501 into the active queue */
502 isp116x
->atl_active
= last_ep
=
503 isp116x
->periodic
[index
];
504 while (last_ep
->next
)
505 last_ep
= (last_ep
->active
= last_ep
->next
);
506 last_ep
->active
= NULL
;
510 /* Schedule control/bulk transfers */
511 list_for_each_entry(ep
, &isp116x
->async
, schedule
) {
512 urb
= container_of(ep
->hep
->urb_list
.next
,
513 struct urb
, urb_list
);
514 speed
= urb
->dev
->speed
;
515 byte_time
= speed
== USB_SPEED_LOW
516 ? BYTE_TIME_LOWSPEED
: BYTE_TIME_FULLSPEED
;
518 if (ep
->nextpid
== USB_PID_SETUP
) {
519 len
= sizeof(struct usb_ctrlrequest
);
520 } else if (ep
->nextpid
== USB_PID_ACK
) {
523 /* Find current free length ... */
524 len
= (MAX_LOAD_LIMIT
- load
) / byte_time
;
526 /* ... then limit it to configured max size ... */
527 len
= min(len
, speed
== USB_SPEED_LOW
?
528 MAX_TRANSFER_SIZE_LOWSPEED
:
529 MAX_TRANSFER_SIZE_FULLSPEED
);
531 /* ... and finally cut to the multiple of MaxPacketSize,
532 or to the real length if there's enough room. */
534 (urb
->transfer_buffer_length
-
535 urb
->actual_length
)) {
536 len
-= len
% ep
->maxpacket
;
540 len
= urb
->transfer_buffer_length
-
545 load
+= len
* byte_time
;
546 if (load
> MAX_LOAD_LIMIT
)
552 last_ep
->active
= ep
;
554 isp116x
->atl_active
= ep
;
558 /* Avoid starving of endpoints */
559 if ((&isp116x
->async
)->next
!= (&isp116x
->async
)->prev
)
560 list_move(&isp116x
->async
, (&isp116x
->async
)->next
);
562 if (isp116x
->atl_active
) {
563 preproc_atl_queue(isp116x
);
569 Finish the processed transfers
571 static void finish_atl_transfers(struct isp116x
*isp116x
, struct pt_regs
*regs
)
573 struct isp116x_ep
*ep
;
576 if (!isp116x
->atl_active
)
578 /* Fifo not ready? */
579 if (!(isp116x_read_reg16(isp116x
, HCBUFSTAT
) & HCBUFSTAT_ATL_DONE
))
582 atomic_inc(&isp116x
->atl_finishing
);
583 unpack_fifo(isp116x
);
584 postproc_atl_queue(isp116x
);
585 for (ep
= isp116x
->atl_active
; ep
; ep
= ep
->active
) {
587 container_of(ep
->hep
->urb_list
.next
, struct urb
, urb_list
);
588 /* USB_PID_ACK check here avoids finishing of
589 control transfers, for which TD_DATAUNDERRUN
590 occured, while URB_SHORT_NOT_OK was set */
591 if (urb
&& urb
->status
!= -EINPROGRESS
592 && ep
->nextpid
!= USB_PID_ACK
)
593 finish_request(isp116x
, ep
, urb
, regs
);
595 atomic_dec(&isp116x
->atl_finishing
);
598 static irqreturn_t
isp116x_irq(struct usb_hcd
*hcd
, struct pt_regs
*regs
)
600 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
602 irqreturn_t ret
= IRQ_NONE
;
604 spin_lock(&isp116x
->lock
);
605 isp116x_write_reg16(isp116x
, HCuPINTENB
, 0);
606 irqstat
= isp116x_read_reg16(isp116x
, HCuPINT
);
607 isp116x_write_reg16(isp116x
, HCuPINT
, irqstat
);
609 if (irqstat
& (HCuPINT_ATL
| HCuPINT_SOF
)) {
611 finish_atl_transfers(isp116x
, regs
);
614 if (irqstat
& HCuPINT_OPR
) {
615 u32 intstat
= isp116x_read_reg32(isp116x
, HCINTSTAT
);
616 isp116x_write_reg32(isp116x
, HCINTSTAT
, intstat
);
617 if (intstat
& HCINT_UE
) {
618 ERR("Unrecoverable error, HC is dead!\n");
619 /* IRQ's are off, we do no DMA,
620 perfectly ready to die ... */
621 hcd
->state
= HC_STATE_HALT
;
625 if (intstat
& HCINT_RHSC
)
626 /* When root hub or any of its ports is going
627 to come out of suspend, it may take more
628 than 10ms for status bits to stabilize. */
629 mod_timer(&hcd
->rh_timer
, jiffies
630 + msecs_to_jiffies(20) + 1);
631 if (intstat
& HCINT_RD
) {
632 DBG("---- remote wakeup\n");
633 usb_hcd_resume_root_hub(hcd
);
635 irqstat
&= ~HCuPINT_OPR
;
639 if (irqstat
& (HCuPINT_ATL
| HCuPINT_SOF
)) {
640 start_atl_transfers(isp116x
);
643 isp116x_write_reg16(isp116x
, HCuPINTENB
, isp116x
->irqenb
);
645 spin_unlock(&isp116x
->lock
);
649 /*-----------------------------------------------------------------*/
651 /* usb 1.1 says max 90% of a frame is available for periodic transfers.
652 * this driver doesn't promise that much since it's got to handle an
653 * IRQ per packet; irq handling latencies also use up that time.
657 #define MAX_PERIODIC_LOAD 600
658 static int balance(struct isp116x
*isp116x
, u16 period
, u16 load
)
660 int i
, branch
= -ENOSPC
;
662 /* search for the least loaded schedule branch of that period
663 which has enough bandwidth left unreserved. */
664 for (i
= 0; i
< period
; i
++) {
665 if (branch
< 0 || isp116x
->load
[branch
] > isp116x
->load
[i
]) {
668 for (j
= i
; j
< PERIODIC_SIZE
; j
+= period
) {
669 if ((isp116x
->load
[j
] + load
)
673 if (j
< PERIODIC_SIZE
)
681 /* NB! ALL the code above this point runs with isp116x->lock
685 /*-----------------------------------------------------------------*/
687 static int isp116x_urb_enqueue(struct usb_hcd
*hcd
,
688 struct usb_host_endpoint
*hep
, struct urb
*urb
,
691 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
692 struct usb_device
*udev
= urb
->dev
;
693 unsigned int pipe
= urb
->pipe
;
694 int is_out
= !usb_pipein(pipe
);
695 int type
= usb_pipetype(pipe
);
696 int epnum
= usb_pipeendpoint(pipe
);
697 struct isp116x_ep
*ep
= NULL
;
702 urb_dbg(urb
, "Enqueue");
704 if (type
== PIPE_ISOCHRONOUS
) {
705 ERR("Isochronous transfers not supported\n");
706 urb_dbg(urb
, "Refused to enqueue");
709 /* avoid all allocations within spinlocks: request or endpoint */
711 ep
= kzalloc(sizeof *ep
, mem_flags
);
716 spin_lock_irqsave(&isp116x
->lock
, flags
);
717 if (!HC_IS_RUNNING(hcd
->state
)) {
726 INIT_LIST_HEAD(&ep
->schedule
);
729 ep
->maxpacket
= usb_maxpacket(udev
, urb
->pipe
, is_out
);
730 usb_settoggle(udev
, epnum
, is_out
, 0);
732 if (type
== PIPE_CONTROL
) {
733 ep
->nextpid
= USB_PID_SETUP
;
735 ep
->nextpid
= USB_PID_OUT
;
737 ep
->nextpid
= USB_PID_IN
;
742 With INT URBs submitted, the driver works with SOF
743 interrupt enabled and ATL interrupt disabled. After
744 the PTDs are written to fifo ram, the chip starts
745 fifo processing and usb transfers after the next
746 SOF and continues until the transfers are finished
747 (succeeded or failed) or the frame ends. Therefore,
748 the transfers occur only in every second frame,
749 while fifo reading/writing and data processing
750 occur in every other second frame. */
751 if (urb
->interval
< 2)
753 if (urb
->interval
> 2 * PERIODIC_SIZE
)
754 urb
->interval
= 2 * PERIODIC_SIZE
;
755 ep
->period
= urb
->interval
>> 1;
756 ep
->branch
= PERIODIC_SIZE
;
757 ep
->load
= usb_calc_bus_time(udev
->speed
,
759 (type
== PIPE_ISOCHRONOUS
),
760 usb_maxpacket(udev
, pipe
,
768 /* maybe put endpoint into schedule */
772 if (list_empty(&ep
->schedule
))
773 list_add_tail(&ep
->schedule
, &isp116x
->async
);
776 urb
->interval
= ep
->period
;
777 ep
->length
= min((int)ep
->maxpacket
,
778 urb
->transfer_buffer_length
);
780 /* urb submitted for already existing endpoint */
781 if (ep
->branch
< PERIODIC_SIZE
)
784 ret
= ep
->branch
= balance(isp116x
, ep
->period
, ep
->load
);
789 urb
->start_frame
= (isp116x
->fmindex
& (PERIODIC_SIZE
- 1))
792 /* sort each schedule branch by period (slow before fast)
793 to share the faster parts of the tree without needing
794 dummy/placeholder nodes */
795 DBG("schedule qh%d/%p branch %d\n", ep
->period
, ep
, ep
->branch
);
796 for (i
= ep
->branch
; i
< PERIODIC_SIZE
; i
+= ep
->period
) {
797 struct isp116x_ep
**prev
= &isp116x
->periodic
[i
];
798 struct isp116x_ep
*here
= *prev
;
800 while (here
&& ep
!= here
) {
801 if (ep
->period
> here
->period
)
810 isp116x
->load
[i
] += ep
->load
;
812 hcd
->self
.bandwidth_allocated
+= ep
->load
/ ep
->period
;
814 /* switch over to SOFint */
815 if (!isp116x
->periodic_count
++) {
816 isp116x
->irqenb
&= ~HCuPINT_ATL
;
817 isp116x
->irqenb
|= HCuPINT_SOF
;
818 isp116x_write_reg16(isp116x
, HCuPINTENB
,
823 /* in case of unlink-during-submit */
824 spin_lock(&urb
->lock
);
825 if (urb
->status
!= -EINPROGRESS
) {
826 spin_unlock(&urb
->lock
);
827 finish_request(isp116x
, ep
, urb
, NULL
);
832 spin_unlock(&urb
->lock
);
833 start_atl_transfers(isp116x
);
836 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
843 static int isp116x_urb_dequeue(struct usb_hcd
*hcd
, struct urb
*urb
)
845 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
846 struct usb_host_endpoint
*hep
;
847 struct isp116x_ep
*ep
, *ep_act
;
850 spin_lock_irqsave(&isp116x
->lock
, flags
);
852 /* URB already unlinked (or never linked)? */
854 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
858 WARN_ON(hep
!= ep
->hep
);
860 /* In front of queue? */
861 if (ep
->hep
->urb_list
.next
== &urb
->urb_list
)
863 for (ep_act
= isp116x
->atl_active
; ep_act
;
864 ep_act
= ep_act
->active
)
866 VDBG("dequeue, urb %p active; wait for irq\n",
873 finish_request(isp116x
, ep
, urb
, NULL
);
875 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
879 static void isp116x_endpoint_disable(struct usb_hcd
*hcd
,
880 struct usb_host_endpoint
*hep
)
883 struct isp116x_ep
*ep
= hep
->hcpriv
;
888 /* assume we'd just wait for the irq */
889 for (i
= 0; i
< 100 && !list_empty(&hep
->urb_list
); i
++)
891 if (!list_empty(&hep
->urb_list
))
892 WARN("ep %p not empty?\n", ep
);
898 static int isp116x_get_frame(struct usb_hcd
*hcd
)
900 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
904 spin_lock_irqsave(&isp116x
->lock
, flags
);
905 fmnum
= isp116x_read_reg32(isp116x
, HCFMNUM
);
906 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
911 Adapted from ohci-hub.c. Currently we don't support autosuspend.
913 static int isp116x_hub_status_data(struct usb_hcd
*hcd
, char *buf
)
915 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
916 int ports
, i
, changed
= 0;
919 if (!HC_IS_RUNNING(hcd
->state
))
922 /* Report no status change now, if we are scheduled to be
924 if (timer_pending(&hcd
->rh_timer
))
927 ports
= isp116x
->rhdesca
& RH_A_NDP
;
928 spin_lock_irqsave(&isp116x
->lock
, flags
);
929 isp116x
->rhstatus
= isp116x_read_reg32(isp116x
, HCRHSTATUS
);
930 if (isp116x
->rhstatus
& (RH_HS_LPSC
| RH_HS_OCIC
))
931 buf
[0] = changed
= 1;
935 for (i
= 0; i
< ports
; i
++) {
936 u32 status
= isp116x
->rhport
[i
] =
937 isp116x_read_reg32(isp116x
, i
? HCRHPORT2
: HCRHPORT1
);
939 if (status
& (RH_PS_CSC
| RH_PS_PESC
| RH_PS_PSSC
940 | RH_PS_OCIC
| RH_PS_PRSC
)) {
942 buf
[0] |= 1 << (i
+ 1);
946 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
950 static void isp116x_hub_descriptor(struct isp116x
*isp116x
,
951 struct usb_hub_descriptor
*desc
)
953 u32 reg
= isp116x
->rhdesca
;
955 desc
->bDescriptorType
= 0x29;
956 desc
->bDescLength
= 9;
957 desc
->bHubContrCurrent
= 0;
958 desc
->bNbrPorts
= (u8
) (reg
& 0x3);
959 /* Power switching, device type, overcurrent. */
960 desc
->wHubCharacteristics
= cpu_to_le16((u16
) ((reg
>> 8) & 0x1f));
961 desc
->bPwrOn2PwrGood
= (u8
) ((reg
>> 24) & 0xff);
962 /* two bitmaps: ports removable, and legacy PortPwrCtrlMask */
964 desc
->bitmap
[1] = ~0;
967 /* Perform reset of a given port.
968 It would be great to just start the reset and let the
969 USB core to clear the reset in due time. However,
970 root hub ports should be reset for at least 50 ms, while
971 our chip stays in reset for about 10 ms. I.e., we must
972 repeatedly reset it ourself here.
974 static inline void root_port_reset(struct isp116x
*isp116x
, unsigned port
)
977 unsigned long flags
, t
;
979 /* Root hub reset should be 50 ms, but some devices
980 want it even longer. */
981 t
= jiffies
+ msecs_to_jiffies(100);
983 while (time_before(jiffies
, t
)) {
984 spin_lock_irqsave(&isp116x
->lock
, flags
);
985 /* spin until any current reset finishes */
987 tmp
= isp116x_read_reg32(isp116x
, port
?
988 HCRHPORT2
: HCRHPORT1
);
989 if (!(tmp
& RH_PS_PRS
))
993 /* Don't reset a disconnected port */
994 if (!(tmp
& RH_PS_CCS
)) {
995 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
998 /* Reset lasts 10ms (claims datasheet) */
999 isp116x_write_reg32(isp116x
, port
? HCRHPORT2
:
1000 HCRHPORT1
, (RH_PS_PRS
));
1001 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1006 /* Adapted from ohci-hub.c */
1007 static int isp116x_hub_control(struct usb_hcd
*hcd
,
1009 u16 wValue
, u16 wIndex
, char *buf
, u16 wLength
)
1011 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1013 unsigned long flags
;
1014 int ports
= isp116x
->rhdesca
& RH_A_NDP
;
1018 case ClearHubFeature
:
1019 DBG("ClearHubFeature: ");
1021 case C_HUB_OVER_CURRENT
:
1022 DBG("C_HUB_OVER_CURRENT\n");
1023 spin_lock_irqsave(&isp116x
->lock
, flags
);
1024 isp116x_write_reg32(isp116x
, HCRHSTATUS
, RH_HS_OCIC
);
1025 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1026 case C_HUB_LOCAL_POWER
:
1027 DBG("C_HUB_LOCAL_POWER\n");
1034 DBG("SetHubFeature: ");
1036 case C_HUB_OVER_CURRENT
:
1037 case C_HUB_LOCAL_POWER
:
1038 DBG("C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1044 case GetHubDescriptor
:
1045 DBG("GetHubDescriptor\n");
1046 isp116x_hub_descriptor(isp116x
,
1047 (struct usb_hub_descriptor
*)buf
);
1050 DBG("GetHubStatus\n");
1051 *(__le32
*) buf
= 0;
1054 DBG("GetPortStatus\n");
1055 if (!wIndex
|| wIndex
> ports
)
1057 tmp
= isp116x
->rhport
[--wIndex
];
1058 *(__le32
*) buf
= cpu_to_le32(tmp
);
1059 DBG("GetPortStatus: port[%d] %08x\n", wIndex
+ 1, tmp
);
1061 case ClearPortFeature
:
1062 DBG("ClearPortFeature: ");
1063 if (!wIndex
|| wIndex
> ports
)
1068 case USB_PORT_FEAT_ENABLE
:
1069 DBG("USB_PORT_FEAT_ENABLE\n");
1072 case USB_PORT_FEAT_C_ENABLE
:
1073 DBG("USB_PORT_FEAT_C_ENABLE\n");
1076 case USB_PORT_FEAT_SUSPEND
:
1077 DBG("USB_PORT_FEAT_SUSPEND\n");
1080 case USB_PORT_FEAT_C_SUSPEND
:
1081 DBG("USB_PORT_FEAT_C_SUSPEND\n");
1084 case USB_PORT_FEAT_POWER
:
1085 DBG("USB_PORT_FEAT_POWER\n");
1088 case USB_PORT_FEAT_C_CONNECTION
:
1089 DBG("USB_PORT_FEAT_C_CONNECTION\n");
1092 case USB_PORT_FEAT_C_OVER_CURRENT
:
1093 DBG("USB_PORT_FEAT_C_OVER_CURRENT\n");
1096 case USB_PORT_FEAT_C_RESET
:
1097 DBG("USB_PORT_FEAT_C_RESET\n");
1103 spin_lock_irqsave(&isp116x
->lock
, flags
);
1104 isp116x_write_reg32(isp116x
, wIndex
1105 ? HCRHPORT2
: HCRHPORT1
, tmp
);
1106 isp116x
->rhport
[wIndex
] =
1107 isp116x_read_reg32(isp116x
, wIndex
? HCRHPORT2
: HCRHPORT1
);
1108 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1110 case SetPortFeature
:
1111 DBG("SetPortFeature: ");
1112 if (!wIndex
|| wIndex
> ports
)
1116 case USB_PORT_FEAT_SUSPEND
:
1117 DBG("USB_PORT_FEAT_SUSPEND\n");
1118 spin_lock_irqsave(&isp116x
->lock
, flags
);
1119 isp116x_write_reg32(isp116x
, wIndex
1120 ? HCRHPORT2
: HCRHPORT1
, RH_PS_PSS
);
1122 case USB_PORT_FEAT_POWER
:
1123 DBG("USB_PORT_FEAT_POWER\n");
1124 spin_lock_irqsave(&isp116x
->lock
, flags
);
1125 isp116x_write_reg32(isp116x
, wIndex
1126 ? HCRHPORT2
: HCRHPORT1
, RH_PS_PPS
);
1128 case USB_PORT_FEAT_RESET
:
1129 DBG("USB_PORT_FEAT_RESET\n");
1130 root_port_reset(isp116x
, wIndex
);
1131 spin_lock_irqsave(&isp116x
->lock
, flags
);
1136 isp116x
->rhport
[wIndex
] =
1137 isp116x_read_reg32(isp116x
, wIndex
? HCRHPORT2
: HCRHPORT1
);
1138 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1143 /* "protocol stall" on error */
1144 DBG("PROTOCOL STALL\n");
1150 /*-----------------------------------------------------------------*/
1152 #ifdef CONFIG_DEBUG_FS
1154 static void dump_irq(struct seq_file
*s
, char *label
, u16 mask
)
1156 seq_printf(s
, "%s %04x%s%s%s%s%s%s\n", label
, mask
,
1157 mask
& HCuPINT_CLKRDY
? " clkrdy" : "",
1158 mask
& HCuPINT_SUSP
? " susp" : "",
1159 mask
& HCuPINT_OPR
? " opr" : "",
1160 mask
& HCuPINT_AIIEOT
? " eot" : "",
1161 mask
& HCuPINT_ATL
? " atl" : "",
1162 mask
& HCuPINT_SOF
? " sof" : "");
1165 static void dump_int(struct seq_file
*s
, char *label
, u32 mask
)
1167 seq_printf(s
, "%s %08x%s%s%s%s%s%s%s\n", label
, mask
,
1168 mask
& HCINT_MIE
? " MIE" : "",
1169 mask
& HCINT_RHSC
? " rhsc" : "",
1170 mask
& HCINT_FNO
? " fno" : "",
1171 mask
& HCINT_UE
? " ue" : "",
1172 mask
& HCINT_RD
? " rd" : "",
1173 mask
& HCINT_SF
? " sof" : "", mask
& HCINT_SO
? " so" : "");
1176 static int isp116x_show_dbg(struct seq_file
*s
, void *unused
)
1178 struct isp116x
*isp116x
= s
->private;
1180 seq_printf(s
, "%s\n%s version %s\n",
1181 isp116x_to_hcd(isp116x
)->product_desc
, hcd_name
,
1184 if (HC_IS_SUSPENDED(isp116x_to_hcd(isp116x
)->state
)) {
1185 seq_printf(s
, "HCD is suspended\n");
1188 if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x
)->state
)) {
1189 seq_printf(s
, "HCD not running\n");
1193 spin_lock_irq(&isp116x
->lock
);
1194 dump_irq(s
, "hc_irq_enable", isp116x_read_reg16(isp116x
, HCuPINTENB
));
1195 dump_irq(s
, "hc_irq_status", isp116x_read_reg16(isp116x
, HCuPINT
));
1196 dump_int(s
, "hc_int_enable", isp116x_read_reg32(isp116x
, HCINTENB
));
1197 dump_int(s
, "hc_int_status", isp116x_read_reg32(isp116x
, HCINTSTAT
));
1198 isp116x_show_regs_seq(isp116x
, s
);
1199 spin_unlock_irq(&isp116x
->lock
);
1200 seq_printf(s
, "\n");
1205 static int isp116x_open_seq(struct inode
*inode
, struct file
*file
)
1207 return single_open(file
, isp116x_show_dbg
, inode
->u
.generic_ip
);
1210 static struct file_operations isp116x_debug_fops
= {
1211 .open
= isp116x_open_seq
,
1213 .llseek
= seq_lseek
,
1214 .release
= single_release
,
1217 static int create_debug_file(struct isp116x
*isp116x
)
1219 isp116x
->dentry
= debugfs_create_file(hcd_name
,
1220 S_IRUGO
, NULL
, isp116x
,
1221 &isp116x_debug_fops
);
1222 if (!isp116x
->dentry
)
1227 static void remove_debug_file(struct isp116x
*isp116x
)
1229 debugfs_remove(isp116x
->dentry
);
1234 #define create_debug_file(d) 0
1235 #define remove_debug_file(d) do{}while(0)
1237 #endif /* CONFIG_DEBUG_FS */
1239 /*-----------------------------------------------------------------*/
1242 Software reset - can be called from any contect.
1244 static int isp116x_sw_reset(struct isp116x
*isp116x
)
1247 unsigned long flags
;
1250 spin_lock_irqsave(&isp116x
->lock
, flags
);
1251 isp116x_write_reg16(isp116x
, HCSWRES
, HCSWRES_MAGIC
);
1252 isp116x_write_reg32(isp116x
, HCCMDSTAT
, HCCMDSTAT_HCR
);
1254 /* It usually resets within 1 ms */
1256 if (!(isp116x_read_reg32(isp116x
, HCCMDSTAT
) & HCCMDSTAT_HCR
))
1260 ERR("Software reset timeout\n");
1263 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1267 static int isp116x_reset(struct usb_hcd
*hcd
)
1269 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1272 int ret
, timeout
= 15 /* ms */ ;
1274 ret
= isp116x_sw_reset(isp116x
);
1278 t
= jiffies
+ msecs_to_jiffies(timeout
);
1279 while (time_before_eq(jiffies
, t
)) {
1281 spin_lock_irq(&isp116x
->lock
);
1282 clkrdy
= isp116x_read_reg16(isp116x
, HCuPINT
) & HCuPINT_CLKRDY
;
1283 spin_unlock_irq(&isp116x
->lock
);
1288 ERR("Clock not ready after %dms\n", timeout
);
1289 /* After sw_reset the clock won't report to be ready, if
1290 H_WAKEUP pin is high. */
1291 ERR("Please make sure that the H_WAKEUP pin is pulled low!\n");
1297 static void isp116x_stop(struct usb_hcd
*hcd
)
1299 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1300 unsigned long flags
;
1303 spin_lock_irqsave(&isp116x
->lock
, flags
);
1304 isp116x_write_reg16(isp116x
, HCuPINTENB
, 0);
1306 /* Switch off ports' power, some devices don't come up
1307 after next 'insmod' without this */
1308 val
= isp116x_read_reg32(isp116x
, HCRHDESCA
);
1309 val
&= ~(RH_A_NPS
| RH_A_PSM
);
1310 isp116x_write_reg32(isp116x
, HCRHDESCA
, val
);
1311 isp116x_write_reg32(isp116x
, HCRHSTATUS
, RH_HS_LPS
);
1312 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1314 isp116x_sw_reset(isp116x
);
1318 Configure the chip. The chip must be successfully reset by now.
1320 static int isp116x_start(struct usb_hcd
*hcd
)
1322 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1323 struct isp116x_platform_data
*board
= isp116x
->board
;
1325 unsigned long flags
;
1327 spin_lock_irqsave(&isp116x
->lock
, flags
);
1329 /* clear interrupt status and disable all interrupt sources */
1330 isp116x_write_reg16(isp116x
, HCuPINT
, 0xff);
1331 isp116x_write_reg16(isp116x
, HCuPINTENB
, 0);
1333 val
= isp116x_read_reg16(isp116x
, HCCHIPID
);
1334 if ((val
& HCCHIPID_MASK
) != HCCHIPID_MAGIC
) {
1335 ERR("Invalid chip ID %04x\n", val
);
1336 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1340 /* To be removed in future */
1341 hcd
->uses_new_polling
= 1;
1343 isp116x_write_reg16(isp116x
, HCITLBUFLEN
, ISP116x_ITL_BUFSIZE
);
1344 isp116x_write_reg16(isp116x
, HCATLBUFLEN
, ISP116x_ATL_BUFSIZE
);
1347 val
= HCHWCFG_INT_ENABLE
| HCHWCFG_DBWIDTH(1);
1348 if (board
->sel15Kres
)
1349 val
|= HCHWCFG_15KRSEL
;
1350 /* Remote wakeup won't work without working clock */
1351 if (board
->remote_wakeup_enable
)
1352 val
|= HCHWCFG_CLKNOTSTOP
;
1353 if (board
->oc_enable
)
1354 val
|= HCHWCFG_ANALOG_OC
;
1355 if (board
->int_act_high
)
1356 val
|= HCHWCFG_INT_POL
;
1357 if (board
->int_edge_triggered
)
1358 val
|= HCHWCFG_INT_TRIGGER
;
1359 isp116x_write_reg16(isp116x
, HCHWCFG
, val
);
1361 /* ----- Root hub conf */
1362 val
= (25 << 24) & RH_A_POTPGT
;
1363 /* AN10003_1.pdf recommends RH_A_NPS (no power switching) to
1364 be always set. Yet, instead, we request individual port
1367 /* Report overcurrent per port */
1369 isp116x_write_reg32(isp116x
, HCRHDESCA
, val
);
1370 isp116x
->rhdesca
= isp116x_read_reg32(isp116x
, HCRHDESCA
);
1373 isp116x_write_reg32(isp116x
, HCRHDESCB
, val
);
1374 isp116x
->rhdescb
= isp116x_read_reg32(isp116x
, HCRHDESCB
);
1377 if (board
->remote_wakeup_enable
) {
1378 if (!device_can_wakeup(hcd
->self
.controller
))
1379 device_init_wakeup(hcd
->self
.controller
, 1);
1382 isp116x_write_reg32(isp116x
, HCRHSTATUS
, val
);
1383 isp116x
->rhstatus
= isp116x_read_reg32(isp116x
, HCRHSTATUS
);
1385 isp116x_write_reg32(isp116x
, HCFMINTVL
, 0x27782edf);
1387 hcd
->state
= HC_STATE_RUNNING
;
1389 /* Set up interrupts */
1390 isp116x
->intenb
= HCINT_MIE
| HCINT_RHSC
| HCINT_UE
;
1391 if (board
->remote_wakeup_enable
)
1392 isp116x
->intenb
|= HCINT_RD
;
1393 isp116x
->irqenb
= HCuPINT_ATL
| HCuPINT_OPR
; /* | HCuPINT_SUSP; */
1394 isp116x_write_reg32(isp116x
, HCINTENB
, isp116x
->intenb
);
1395 isp116x_write_reg16(isp116x
, HCuPINTENB
, isp116x
->irqenb
);
1397 /* Go operational */
1398 val
= HCCONTROL_USB_OPER
;
1399 if (board
->remote_wakeup_enable
)
1400 val
|= HCCONTROL_RWE
;
1401 isp116x_write_reg32(isp116x
, HCCONTROL
, val
);
1403 /* Disable ports to avoid race in device enumeration */
1404 isp116x_write_reg32(isp116x
, HCRHPORT1
, RH_PS_CCS
);
1405 isp116x_write_reg32(isp116x
, HCRHPORT2
, RH_PS_CCS
);
1407 isp116x_show_regs_log(isp116x
);
1408 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1414 static int isp116x_bus_suspend(struct usb_hcd
*hcd
)
1416 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1417 unsigned long flags
;
1421 spin_lock_irqsave(&isp116x
->lock
, flags
);
1422 val
= isp116x_read_reg32(isp116x
, HCCONTROL
);
1424 switch (val
& HCCONTROL_HCFS
) {
1425 case HCCONTROL_USB_OPER
:
1426 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1427 val
&= (~HCCONTROL_HCFS
& ~HCCONTROL_RWE
);
1428 val
|= HCCONTROL_USB_SUSPEND
;
1429 if (device_may_wakeup(&hcd
->self
.root_hub
->dev
))
1430 val
|= HCCONTROL_RWE
;
1431 /* Wait for usb transfers to finish */
1433 spin_lock_irqsave(&isp116x
->lock
, flags
);
1434 isp116x_write_reg32(isp116x
, HCCONTROL
, val
);
1435 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1436 /* Wait for devices to suspend */
1439 case HCCONTROL_USB_RESUME
:
1440 isp116x_write_reg32(isp116x
, HCCONTROL
,
1441 (val
& ~HCCONTROL_HCFS
) |
1442 HCCONTROL_USB_RESET
);
1443 case HCCONTROL_USB_RESET
:
1445 default: /* HCCONTROL_USB_SUSPEND */
1446 spin_unlock_irqrestore(&isp116x
->lock
, flags
);
1453 static int isp116x_bus_resume(struct usb_hcd
*hcd
)
1455 struct isp116x
*isp116x
= hcd_to_isp116x(hcd
);
1459 spin_lock_irq(&isp116x
->lock
);
1461 val
= isp116x_read_reg32(isp116x
, HCCONTROL
);
1462 switch (val
& HCCONTROL_HCFS
) {
1463 case HCCONTROL_USB_SUSPEND
:
1464 val
&= ~HCCONTROL_HCFS
;
1465 val
|= HCCONTROL_USB_RESUME
;
1466 isp116x_write_reg32(isp116x
, HCCONTROL
, val
);
1467 case HCCONTROL_USB_RESUME
:
1469 case HCCONTROL_USB_OPER
:
1470 spin_unlock_irq(&isp116x
->lock
);
1471 /* Without setting power_state here the
1472 SUSPENDED state won't be removed from
1473 sysfs/usbN/power.state as a response to remote
1474 wakeup. Maybe in the future. */
1475 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1478 /* HCCONTROL_USB_RESET: this may happen, when during
1479 suspension the HC lost power. Reinitialize completely */
1480 spin_unlock_irq(&isp116x
->lock
);
1481 DBG("Chip has been reset while suspended. Reinit from scratch.\n");
1484 isp116x_hub_control(hcd
, SetPortFeature
,
1485 USB_PORT_FEAT_POWER
, 1, NULL
, 0);
1486 if ((isp116x
->rhdesca
& RH_A_NDP
) == 2)
1487 isp116x_hub_control(hcd
, SetPortFeature
,
1488 USB_PORT_FEAT_POWER
, 2, NULL
, 0);
1489 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1493 val
= isp116x
->rhdesca
& RH_A_NDP
;
1496 isp116x_read_reg32(isp116x
, val
? HCRHPORT2
: HCRHPORT1
);
1497 /* force global, not selective, resume */
1498 if (!(stat
& RH_PS_PSS
))
1500 DBG("%s: Resuming port %d\n", __func__
, val
);
1501 isp116x_write_reg32(isp116x
, RH_PS_POCI
, val
1502 ? HCRHPORT2
: HCRHPORT1
);
1504 spin_unlock_irq(&isp116x
->lock
);
1506 hcd
->state
= HC_STATE_RESUMING
;
1509 /* Go operational */
1510 spin_lock_irq(&isp116x
->lock
);
1511 val
= isp116x_read_reg32(isp116x
, HCCONTROL
);
1512 isp116x_write_reg32(isp116x
, HCCONTROL
,
1513 (val
& ~HCCONTROL_HCFS
) | HCCONTROL_USB_OPER
);
1514 spin_unlock_irq(&isp116x
->lock
);
1515 /* see analogous comment above */
1516 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1517 hcd
->state
= HC_STATE_RUNNING
;
1524 #define isp116x_bus_suspend NULL
1525 #define isp116x_bus_resume NULL
1529 static struct hc_driver isp116x_hc_driver
= {
1530 .description
= hcd_name
,
1531 .product_desc
= "ISP116x Host Controller",
1532 .hcd_priv_size
= sizeof(struct isp116x
),
1537 .reset
= isp116x_reset
,
1538 .start
= isp116x_start
,
1539 .stop
= isp116x_stop
,
1541 .urb_enqueue
= isp116x_urb_enqueue
,
1542 .urb_dequeue
= isp116x_urb_dequeue
,
1543 .endpoint_disable
= isp116x_endpoint_disable
,
1545 .get_frame_number
= isp116x_get_frame
,
1547 .hub_status_data
= isp116x_hub_status_data
,
1548 .hub_control
= isp116x_hub_control
,
1549 .bus_suspend
= isp116x_bus_suspend
,
1550 .bus_resume
= isp116x_bus_resume
,
1553 /*----------------------------------------------------------------*/
1555 static int isp116x_remove(struct platform_device
*pdev
)
1557 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
1558 struct isp116x
*isp116x
;
1559 struct resource
*res
;
1563 isp116x
= hcd_to_isp116x(hcd
);
1564 remove_debug_file(isp116x
);
1565 usb_remove_hcd(hcd
);
1567 iounmap(isp116x
->data_reg
);
1568 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
1569 release_mem_region(res
->start
, 2);
1570 iounmap(isp116x
->addr_reg
);
1571 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1572 release_mem_region(res
->start
, 2);
1578 #define resource_len(r) (((r)->end - (r)->start) + 1)
1580 static int __init
isp116x_probe(struct platform_device
*pdev
)
1582 struct usb_hcd
*hcd
;
1583 struct isp116x
*isp116x
;
1584 struct resource
*addr
, *data
;
1585 void __iomem
*addr_reg
;
1586 void __iomem
*data_reg
;
1590 if (pdev
->num_resources
< 3) {
1595 data
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1596 addr
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
1597 irq
= platform_get_irq(pdev
, 0);
1598 if (!addr
|| !data
|| irq
< 0) {
1603 if (pdev
->dev
.dma_mask
) {
1604 DBG("DMA not supported\n");
1609 if (!request_mem_region(addr
->start
, 2, hcd_name
)) {
1613 addr_reg
= ioremap(addr
->start
, resource_len(addr
));
1614 if (addr_reg
== NULL
) {
1618 if (!request_mem_region(data
->start
, 2, hcd_name
)) {
1622 data_reg
= ioremap(data
->start
, resource_len(data
));
1623 if (data_reg
== NULL
) {
1628 /* allocate and initialize hcd */
1629 hcd
= usb_create_hcd(&isp116x_hc_driver
, &pdev
->dev
, pdev
->dev
.bus_id
);
1634 /* this rsrc_start is bogus */
1635 hcd
->rsrc_start
= addr
->start
;
1636 isp116x
= hcd_to_isp116x(hcd
);
1637 isp116x
->data_reg
= data_reg
;
1638 isp116x
->addr_reg
= addr_reg
;
1639 spin_lock_init(&isp116x
->lock
);
1640 INIT_LIST_HEAD(&isp116x
->async
);
1641 isp116x
->board
= pdev
->dev
.platform_data
;
1643 if (!isp116x
->board
) {
1644 ERR("Platform data structure not initialized\n");
1648 if (isp116x_check_platform_delay(isp116x
)) {
1649 ERR("USE_PLATFORM_DELAY defined, but delay function not "
1651 ERR("See comments in drivers/usb/host/isp116x-hcd.c\n");
1656 ret
= usb_add_hcd(hcd
, irq
, SA_INTERRUPT
);
1660 ret
= create_debug_file(isp116x
);
1662 ERR("Couldn't create debugfs entry\n");
1669 usb_remove_hcd(hcd
);
1675 release_mem_region(data
->start
, 2);
1679 release_mem_region(addr
->start
, 2);
1681 ERR("init error, %d\n", ret
);
1687 Suspend of platform device
1689 static int isp116x_suspend(struct platform_device
*dev
, pm_message_t state
)
1691 VDBG("%s: state %x\n", __func__
, state
.event
);
1692 dev
->dev
.power
.power_state
= state
;
1697 Resume platform device
1699 static int isp116x_resume(struct platform_device
*dev
)
1701 VDBG("%s: state %x\n", __func__
, dev
->power
.power_state
.event
);
1702 dev
->dev
.power
.power_state
= PMSG_ON
;
1708 #define isp116x_suspend NULL
1709 #define isp116x_resume NULL
1713 static struct platform_driver isp116x_driver
= {
1714 .probe
= isp116x_probe
,
1715 .remove
= isp116x_remove
,
1716 .suspend
= isp116x_suspend
,
1717 .resume
= isp116x_resume
,
1719 .name
= (char *)hcd_name
,
1723 /*-----------------------------------------------------------------*/
1725 static int __init
isp116x_init(void)
1730 INFO("driver %s, %s\n", hcd_name
, DRIVER_VERSION
);
1731 return platform_driver_register(&isp116x_driver
);
1734 module_init(isp116x_init
);
1736 static void __exit
isp116x_cleanup(void)
1738 platform_driver_unregister(&isp116x_driver
);
1741 module_exit(isp116x_cleanup
);