xref: /linux/drivers/usb/host/isp116x-hcd.c (revision 13abf8130139c2ccd4962a7e5a8902be5e6cb5a7)
1 /*
2  * ISP116x HCD (Host Controller Driver) for USB.
3  *
4  * Derived from the SL811 HCD, rewritten for ISP116x.
5  * Copyright (C) 2005 Olav Kongas <ok@artecdesign.ee>
6  *
7  * Portions:
8  * Copyright (C) 2004 Psion Teklogix (for NetBook PRO)
9  * Copyright (C) 2004 David Brownell
10  *
11  * Periodic scheduling is based on Roman's OHCI code
12  * Copyright (C) 1999 Roman Weissgaerber
13  *
14  */
15 
16 /*
17  * The driver basically works. A number of people have used it with a range
18  * of devices.
19  *
20  * The driver passes all usbtests 1-14.
21  *
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.
25  *
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.
29  *
30  * TODO:
31  + More testing of suspend/resume.
32 */
33 
34 /*
35   ISP116x chips require certain delays between accesses to its
36   registers. The following timing options exist.
37 
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.
47 */
48 #define USE_PLATFORM_DELAY
49 //#define USE_NDELAY
50 
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
57 
58 #include <linux/config.h>
59 #include <linux/module.h>
60 #include <linux/moduleparam.h>
61 #include <linux/kernel.h>
62 #include <linux/delay.h>
63 #include <linux/ioport.h>
64 #include <linux/sched.h>
65 #include <linux/slab.h>
66 #include <linux/smp_lock.h>
67 #include <linux/errno.h>
68 #include <linux/init.h>
69 #include <linux/list.h>
70 #include <linux/interrupt.h>
71 #include <linux/usb.h>
72 #include <linux/usb_isp116x.h>
73 
74 #include <asm/io.h>
75 #include <asm/irq.h>
76 #include <asm/system.h>
77 #include <asm/byteorder.h>
78 
79 #ifndef DEBUG
80 #	define	STUB_DEBUG_FILE
81 #endif
82 
83 #include "../core/hcd.h"
84 #include "isp116x.h"
85 
86 #define DRIVER_VERSION	"08 Apr 2005"
87 #define DRIVER_DESC	"ISP116x USB Host Controller Driver"
88 
89 MODULE_DESCRIPTION(DRIVER_DESC);
90 MODULE_LICENSE("GPL");
91 
92 static const char hcd_name[] = "isp116x-hcd";
93 
94 /*-----------------------------------------------------------------*/
95 
96 /*
97   Write len bytes to fifo, pad till 32-bit boundary
98  */
99 static void write_ptddata_to_fifo(struct isp116x *isp116x, void *buf, int len)
100 {
101 	u8 *dp = (u8 *) buf;
102 	u16 *dp2 = (u16 *) buf;
103 	u16 w;
104 	int quot = len % 4;
105 
106 	if ((unsigned long)dp2 & 1) {
107 		/* not aligned */
108 		for (; len > 1; len -= 2) {
109 			w = *dp++;
110 			w |= *dp++ << 8;
111 			isp116x_raw_write_data16(isp116x, w);
112 		}
113 		if (len)
114 			isp116x_write_data16(isp116x, (u16) * dp);
115 	} else {
116 		/* aligned */
117 		for (; len > 1; len -= 2)
118 			isp116x_raw_write_data16(isp116x, *dp2++);
119 		if (len)
120 			isp116x_write_data16(isp116x, 0xff & *((u8 *) dp2));
121 	}
122 	if (quot == 1 || quot == 2)
123 		isp116x_raw_write_data16(isp116x, 0);
124 }
125 
126 /*
127   Read len bytes from fifo and then read till 32-bit boundary.
128  */
129 static void read_ptddata_from_fifo(struct isp116x *isp116x, void *buf, int len)
130 {
131 	u8 *dp = (u8 *) buf;
132 	u16 *dp2 = (u16 *) buf;
133 	u16 w;
134 	int quot = len % 4;
135 
136 	if ((unsigned long)dp2 & 1) {
137 		/* not aligned */
138 		for (; len > 1; len -= 2) {
139 			w = isp116x_raw_read_data16(isp116x);
140 			*dp++ = w & 0xff;
141 			*dp++ = (w >> 8) & 0xff;
142 		}
143 		if (len)
144 			*dp = 0xff & isp116x_read_data16(isp116x);
145 	} else {
146 		/* aligned */
147 		for (; len > 1; len -= 2)
148 			*dp2++ = isp116x_raw_read_data16(isp116x);
149 		if (len)
150 			*(u8 *) dp2 = 0xff & isp116x_read_data16(isp116x);
151 	}
152 	if (quot == 1 || quot == 2)
153 		isp116x_raw_read_data16(isp116x);
154 }
155 
156 /*
157   Write ptd's and data for scheduled transfers into
158   the fifo ram. Fifo must be empty and ready.
159 */
160 static void pack_fifo(struct isp116x *isp116x)
161 {
162 	struct isp116x_ep *ep;
163 	struct ptd *ptd;
164 	int buflen = isp116x->atl_last_dir == PTD_DIR_IN
165 	    ? isp116x->atl_bufshrt : isp116x->atl_buflen;
166 	int ptd_count = 0;
167 
168 	isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
169 	isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
170 	isp116x_write_addr(isp116x, HCATLPORT | ISP116x_WRITE_OFFSET);
171 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
172 		++ptd_count;
173 		ptd = &ep->ptd;
174 		dump_ptd(ptd);
175 		dump_ptd_out_data(ptd, ep->data);
176 		isp116x_write_data16(isp116x, ptd->count);
177 		isp116x_write_data16(isp116x, ptd->mps);
178 		isp116x_write_data16(isp116x, ptd->len);
179 		isp116x_write_data16(isp116x, ptd->faddr);
180 		buflen -= sizeof(struct ptd);
181 		/* Skip writing data for last IN PTD */
182 		if (ep->active || (isp116x->atl_last_dir != PTD_DIR_IN)) {
183 			write_ptddata_to_fifo(isp116x, ep->data, ep->length);
184 			buflen -= ALIGN(ep->length, 4);
185 		}
186 	}
187 	BUG_ON(buflen);
188 }
189 
190 /*
191   Read the processed ptd's and data from fifo ram back to
192   URBs' buffers. Fifo must be full and done
193 */
194 static void unpack_fifo(struct isp116x *isp116x)
195 {
196 	struct isp116x_ep *ep;
197 	struct ptd *ptd;
198 	int buflen = isp116x->atl_last_dir == PTD_DIR_IN
199 	    ? isp116x->atl_buflen : isp116x->atl_bufshrt;
200 
201 	isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);
202 	isp116x_write_reg16(isp116x, HCXFERCTR, buflen);
203 	isp116x_write_addr(isp116x, HCATLPORT);
204 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
205 		ptd = &ep->ptd;
206 		ptd->count = isp116x_read_data16(isp116x);
207 		ptd->mps = isp116x_read_data16(isp116x);
208 		ptd->len = isp116x_read_data16(isp116x);
209 		ptd->faddr = isp116x_read_data16(isp116x);
210 		buflen -= sizeof(struct ptd);
211 		/* Skip reading data for last Setup or Out PTD */
212 		if (ep->active || (isp116x->atl_last_dir == PTD_DIR_IN)) {
213 			read_ptddata_from_fifo(isp116x, ep->data, ep->length);
214 			buflen -= ALIGN(ep->length, 4);
215 		}
216 		dump_ptd(ptd);
217 		dump_ptd_in_data(ptd, ep->data);
218 	}
219 	BUG_ON(buflen);
220 }
221 
222 /*---------------------------------------------------------------*/
223 
224 /*
225   Set up PTD's.
226 */
227 static void preproc_atl_queue(struct isp116x *isp116x)
228 {
229 	struct isp116x_ep *ep;
230 	struct urb *urb;
231 	struct ptd *ptd;
232 	u16 len;
233 
234 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
235 		u16 toggle = 0, dir = PTD_DIR_SETUP;
236 
237 		BUG_ON(list_empty(&ep->hep->urb_list));
238 		urb = container_of(ep->hep->urb_list.next,
239 				   struct urb, urb_list);
240 		ptd = &ep->ptd;
241 		len = ep->length;
242 		spin_lock(&urb->lock);
243 		ep->data = (unsigned char *)urb->transfer_buffer
244 		    + urb->actual_length;
245 
246 		switch (ep->nextpid) {
247 		case USB_PID_IN:
248 			toggle = usb_gettoggle(urb->dev, ep->epnum, 0);
249 			dir = PTD_DIR_IN;
250 			break;
251 		case USB_PID_OUT:
252 			toggle = usb_gettoggle(urb->dev, ep->epnum, 1);
253 			dir = PTD_DIR_OUT;
254 			break;
255 		case USB_PID_SETUP:
256 			len = sizeof(struct usb_ctrlrequest);
257 			ep->data = urb->setup_packet;
258 			break;
259 		case USB_PID_ACK:
260 			toggle = 1;
261 			len = 0;
262 			dir = (urb->transfer_buffer_length
263 			       && usb_pipein(urb->pipe))
264 			    ? PTD_DIR_OUT : PTD_DIR_IN;
265 			break;
266 		default:
267 			ERR("%s %d: ep->nextpid %d\n", __func__, __LINE__,
268 			    ep->nextpid);
269 			BUG();
270 		}
271 
272 		ptd->count = PTD_CC_MSK | PTD_ACTIVE_MSK | PTD_TOGGLE(toggle);
273 		ptd->mps = PTD_MPS(ep->maxpacket)
274 		    | PTD_SPD(urb->dev->speed == USB_SPEED_LOW)
275 		    | PTD_EP(ep->epnum);
276 		ptd->len = PTD_LEN(len) | PTD_DIR(dir);
277 		ptd->faddr = PTD_FA(usb_pipedevice(urb->pipe));
278 		spin_unlock(&urb->lock);
279 		if (!ep->active) {
280 			ptd->mps |= PTD_LAST_MSK;
281 			isp116x->atl_last_dir = dir;
282 		}
283 		isp116x->atl_bufshrt = sizeof(struct ptd) + isp116x->atl_buflen;
284 		isp116x->atl_buflen = isp116x->atl_bufshrt + ALIGN(len, 4);
285 	}
286 }
287 
288 /*
289   Analyze transfer results, handle partial transfers and errors
290 */
291 static void postproc_atl_queue(struct isp116x *isp116x)
292 {
293 	struct isp116x_ep *ep;
294 	struct urb *urb;
295 	struct usb_device *udev;
296 	struct ptd *ptd;
297 	int short_not_ok;
298 	u8 cc;
299 
300 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
301 		BUG_ON(list_empty(&ep->hep->urb_list));
302 		urb =
303 		    container_of(ep->hep->urb_list.next, struct urb, urb_list);
304 		udev = urb->dev;
305 		ptd = &ep->ptd;
306 		cc = PTD_GET_CC(ptd);
307 
308 		spin_lock(&urb->lock);
309 		short_not_ok = 1;
310 
311 		/* Data underrun is special. For allowed underrun
312 		   we clear the error and continue as normal. For
313 		   forbidden underrun we finish the DATA stage
314 		   immediately while for control transfer,
315 		   we do a STATUS stage. */
316 		if (cc == TD_DATAUNDERRUN) {
317 			if (!(urb->transfer_flags & URB_SHORT_NOT_OK)) {
318 				DBG("Allowed data underrun\n");
319 				cc = TD_CC_NOERROR;
320 				short_not_ok = 0;
321 			} else {
322 				ep->error_count = 1;
323 				if (usb_pipecontrol(urb->pipe))
324 					ep->nextpid = USB_PID_ACK;
325 				else
326 					usb_settoggle(udev, ep->epnum,
327 						      ep->nextpid ==
328 						      USB_PID_OUT,
329 						      PTD_GET_TOGGLE(ptd) ^ 1);
330 				urb->status = cc_to_error[TD_DATAUNDERRUN];
331 				spin_unlock(&urb->lock);
332 				continue;
333 			}
334 		}
335 		/* Keep underrun error through the STATUS stage */
336 		if (urb->status == cc_to_error[TD_DATAUNDERRUN])
337 			cc = TD_DATAUNDERRUN;
338 
339 		if (cc != TD_CC_NOERROR && cc != TD_NOTACCESSED
340 		    && (++ep->error_count >= 3 || cc == TD_CC_STALL
341 			|| cc == TD_DATAOVERRUN)) {
342 			if (urb->status == -EINPROGRESS)
343 				urb->status = cc_to_error[cc];
344 			if (ep->nextpid == USB_PID_ACK)
345 				ep->nextpid = 0;
346 			spin_unlock(&urb->lock);
347 			continue;
348 		}
349 		/* According to usb spec, zero-length Int transfer signals
350 		   finishing of the urb. Hey, does this apply only
351 		   for IN endpoints? */
352 		if (usb_pipeint(urb->pipe) && !PTD_GET_LEN(ptd)) {
353 			if (urb->status == -EINPROGRESS)
354 				urb->status = 0;
355 			spin_unlock(&urb->lock);
356 			continue;
357 		}
358 
359 		/* Relax after previously failed, but later succeeded
360 		   or correctly NAK'ed retransmission attempt */
361 		if (ep->error_count
362 		    && (cc == TD_CC_NOERROR || cc == TD_NOTACCESSED))
363 			ep->error_count = 0;
364 
365 		/* Take into account idiosyncracies of the isp116x chip
366 		   regarding toggle bit for failed transfers */
367 		if (ep->nextpid == USB_PID_OUT)
368 			usb_settoggle(udev, ep->epnum, 1, PTD_GET_TOGGLE(ptd)
369 				      ^ (ep->error_count > 0));
370 		else if (ep->nextpid == USB_PID_IN)
371 			usb_settoggle(udev, ep->epnum, 0, PTD_GET_TOGGLE(ptd)
372 				      ^ (ep->error_count > 0));
373 
374 		switch (ep->nextpid) {
375 		case USB_PID_IN:
376 		case USB_PID_OUT:
377 			urb->actual_length += PTD_GET_COUNT(ptd);
378 			if (PTD_GET_ACTIVE(ptd)
379 			    || (cc != TD_CC_NOERROR && cc < 0x0E))
380 				break;
381 			if (urb->transfer_buffer_length != urb->actual_length) {
382 				if (short_not_ok)
383 					break;
384 			} else {
385 				if (urb->transfer_flags & URB_ZERO_PACKET
386 				    && ep->nextpid == USB_PID_OUT
387 				    && !(PTD_GET_COUNT(ptd) % ep->maxpacket)) {
388 					DBG("Zero packet requested\n");
389 					break;
390 				}
391 			}
392 			/* All data for this URB is transferred, let's finish */
393 			if (usb_pipecontrol(urb->pipe))
394 				ep->nextpid = USB_PID_ACK;
395 			else if (urb->status == -EINPROGRESS)
396 				urb->status = 0;
397 			break;
398 		case USB_PID_SETUP:
399 			if (PTD_GET_ACTIVE(ptd)
400 			    || (cc != TD_CC_NOERROR && cc < 0x0E))
401 				break;
402 			if (urb->transfer_buffer_length == urb->actual_length)
403 				ep->nextpid = USB_PID_ACK;
404 			else if (usb_pipeout(urb->pipe)) {
405 				usb_settoggle(udev, 0, 1, 1);
406 				ep->nextpid = USB_PID_OUT;
407 			} else {
408 				usb_settoggle(udev, 0, 0, 1);
409 				ep->nextpid = USB_PID_IN;
410 			}
411 			break;
412 		case USB_PID_ACK:
413 			if (PTD_GET_ACTIVE(ptd)
414 			    || (cc != TD_CC_NOERROR && cc < 0x0E))
415 				break;
416 			if (urb->status == -EINPROGRESS)
417 				urb->status = 0;
418 			ep->nextpid = 0;
419 			break;
420 		default:
421 			BUG_ON(1);
422 		}
423 		spin_unlock(&urb->lock);
424 	}
425 }
426 
427 /*
428   Take done or failed requests out of schedule. Give back
429   processed urbs.
430 */
431 static void finish_request(struct isp116x *isp116x, struct isp116x_ep *ep,
432 			   struct urb *urb, struct pt_regs *regs)
433 __releases(isp116x->lock) __acquires(isp116x->lock)
434 {
435 	unsigned i;
436 
437 	urb->hcpriv = NULL;
438 	ep->error_count = 0;
439 
440 	if (usb_pipecontrol(urb->pipe))
441 		ep->nextpid = USB_PID_SETUP;
442 
443 	urb_dbg(urb, "Finish");
444 
445 	spin_unlock(&isp116x->lock);
446 	usb_hcd_giveback_urb(isp116x_to_hcd(isp116x), urb, regs);
447 	spin_lock(&isp116x->lock);
448 
449 	/* take idle endpoints out of the schedule */
450 	if (!list_empty(&ep->hep->urb_list))
451 		return;
452 
453 	/* async deschedule */
454 	if (!list_empty(&ep->schedule)) {
455 		list_del_init(&ep->schedule);
456 		return;
457 	}
458 
459 	/* periodic deschedule */
460 	DBG("deschedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
461 	for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
462 		struct isp116x_ep *temp;
463 		struct isp116x_ep **prev = &isp116x->periodic[i];
464 
465 		while (*prev && ((temp = *prev) != ep))
466 			prev = &temp->next;
467 		if (*prev)
468 			*prev = ep->next;
469 		isp116x->load[i] -= ep->load;
470 	}
471 	ep->branch = PERIODIC_SIZE;
472 	isp116x_to_hcd(isp116x)->self.bandwidth_allocated -=
473 	    ep->load / ep->period;
474 
475 	/* switch irq type? */
476 	if (!--isp116x->periodic_count) {
477 		isp116x->irqenb &= ~HCuPINT_SOF;
478 		isp116x->irqenb |= HCuPINT_ATL;
479 	}
480 }
481 
482 /*
483   Scan transfer lists, schedule transfers, send data off
484   to chip.
485  */
486 static void start_atl_transfers(struct isp116x *isp116x)
487 {
488 	struct isp116x_ep *last_ep = NULL, *ep;
489 	struct urb *urb;
490 	u16 load = 0;
491 	int len, index, speed, byte_time;
492 
493 	if (atomic_read(&isp116x->atl_finishing))
494 		return;
495 
496 	if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state))
497 		return;
498 
499 	/* FIFO not empty? */
500 	if (isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_FULL)
501 		return;
502 
503 	isp116x->atl_active = NULL;
504 	isp116x->atl_buflen = isp116x->atl_bufshrt = 0;
505 
506 	/* Schedule int transfers */
507 	if (isp116x->periodic_count) {
508 		isp116x->fmindex = index =
509 		    (isp116x->fmindex + 1) & (PERIODIC_SIZE - 1);
510 		if ((load = isp116x->load[index])) {
511 			/* Bring all int transfers for this frame
512 			   into the active queue */
513 			isp116x->atl_active = last_ep =
514 			    isp116x->periodic[index];
515 			while (last_ep->next)
516 				last_ep = (last_ep->active = last_ep->next);
517 			last_ep->active = NULL;
518 		}
519 	}
520 
521 	/* Schedule control/bulk transfers */
522 	list_for_each_entry(ep, &isp116x->async, schedule) {
523 		urb = container_of(ep->hep->urb_list.next,
524 				   struct urb, urb_list);
525 		speed = urb->dev->speed;
526 		byte_time = speed == USB_SPEED_LOW
527 		    ? BYTE_TIME_LOWSPEED : BYTE_TIME_FULLSPEED;
528 
529 		if (ep->nextpid == USB_PID_SETUP) {
530 			len = sizeof(struct usb_ctrlrequest);
531 		} else if (ep->nextpid == USB_PID_ACK) {
532 			len = 0;
533 		} else {
534 			/* Find current free length ... */
535 			len = (MAX_LOAD_LIMIT - load) / byte_time;
536 
537 			/* ... then limit it to configured max size ... */
538 			len = min(len, speed == USB_SPEED_LOW ?
539 				  MAX_TRANSFER_SIZE_LOWSPEED :
540 				  MAX_TRANSFER_SIZE_FULLSPEED);
541 
542 			/* ... and finally cut to the multiple of MaxPacketSize,
543 			   or to the real length if there's enough room. */
544 			if (len <
545 			    (urb->transfer_buffer_length -
546 			     urb->actual_length)) {
547 				len -= len % ep->maxpacket;
548 				if (!len)
549 					continue;
550 			} else
551 				len = urb->transfer_buffer_length -
552 				    urb->actual_length;
553 			BUG_ON(len < 0);
554 		}
555 
556 		load += len * byte_time;
557 		if (load > MAX_LOAD_LIMIT)
558 			break;
559 
560 		ep->active = NULL;
561 		ep->length = len;
562 		if (last_ep)
563 			last_ep->active = ep;
564 		else
565 			isp116x->atl_active = ep;
566 		last_ep = ep;
567 	}
568 
569 	/* Avoid starving of endpoints */
570 	if ((&isp116x->async)->next != (&isp116x->async)->prev)
571 		list_move(&isp116x->async, (&isp116x->async)->next);
572 
573 	if (isp116x->atl_active) {
574 		preproc_atl_queue(isp116x);
575 		pack_fifo(isp116x);
576 	}
577 }
578 
579 /*
580   Finish the processed transfers
581 */
582 static void finish_atl_transfers(struct isp116x *isp116x, struct pt_regs *regs)
583 {
584 	struct isp116x_ep *ep;
585 	struct urb *urb;
586 
587 	if (!isp116x->atl_active)
588 		return;
589 	/* Fifo not ready? */
590 	if (!(isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_DONE))
591 		return;
592 
593 	atomic_inc(&isp116x->atl_finishing);
594 	unpack_fifo(isp116x);
595 	postproc_atl_queue(isp116x);
596 	for (ep = isp116x->atl_active; ep; ep = ep->active) {
597 		urb =
598 		    container_of(ep->hep->urb_list.next, struct urb, urb_list);
599 		/* USB_PID_ACK check here avoids finishing of
600 		   control transfers, for which TD_DATAUNDERRUN
601 		   occured, while URB_SHORT_NOT_OK was set */
602 		if (urb && urb->status != -EINPROGRESS
603 		    && ep->nextpid != USB_PID_ACK)
604 			finish_request(isp116x, ep, urb, regs);
605 	}
606 	atomic_dec(&isp116x->atl_finishing);
607 }
608 
609 static irqreturn_t isp116x_irq(struct usb_hcd *hcd, struct pt_regs *regs)
610 {
611 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
612 	u16 irqstat;
613 	irqreturn_t ret = IRQ_NONE;
614 
615 	spin_lock(&isp116x->lock);
616 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
617 	irqstat = isp116x_read_reg16(isp116x, HCuPINT);
618 	isp116x_write_reg16(isp116x, HCuPINT, irqstat);
619 
620 	if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
621 		ret = IRQ_HANDLED;
622 		finish_atl_transfers(isp116x, regs);
623 	}
624 
625 	if (irqstat & HCuPINT_OPR) {
626 		u32 intstat = isp116x_read_reg32(isp116x, HCINTSTAT);
627 		isp116x_write_reg32(isp116x, HCINTSTAT, intstat);
628 		if (intstat & HCINT_UE) {
629 			ERR("Unrecoverable error\n");
630 			/* What should we do here? Reset?  */
631 		}
632 		if (intstat & HCINT_RHSC) {
633 			isp116x->rhstatus =
634 			    isp116x_read_reg32(isp116x, HCRHSTATUS);
635 			isp116x->rhport[0] =
636 			    isp116x_read_reg32(isp116x, HCRHPORT1);
637 			isp116x->rhport[1] =
638 			    isp116x_read_reg32(isp116x, HCRHPORT2);
639 		}
640 		if (intstat & HCINT_RD) {
641 			DBG("---- remote wakeup\n");
642 			schedule_work(&isp116x->rh_resume);
643 			ret = IRQ_HANDLED;
644 		}
645 		irqstat &= ~HCuPINT_OPR;
646 		ret = IRQ_HANDLED;
647 	}
648 
649 	if (irqstat & (HCuPINT_ATL | HCuPINT_SOF)) {
650 		start_atl_transfers(isp116x);
651 	}
652 
653 	isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
654 	spin_unlock(&isp116x->lock);
655 	return ret;
656 }
657 
658 /*-----------------------------------------------------------------*/
659 
660 /* usb 1.1 says max 90% of a frame is available for periodic transfers.
661  * this driver doesn't promise that much since it's got to handle an
662  * IRQ per packet; irq handling latencies also use up that time.
663  */
664 
665 /* out of 1000 us */
666 #define	MAX_PERIODIC_LOAD	600
667 static int balance(struct isp116x *isp116x, u16 period, u16 load)
668 {
669 	int i, branch = -ENOSPC;
670 
671 	/* search for the least loaded schedule branch of that period
672 	   which has enough bandwidth left unreserved. */
673 	for (i = 0; i < period; i++) {
674 		if (branch < 0 || isp116x->load[branch] > isp116x->load[i]) {
675 			int j;
676 
677 			for (j = i; j < PERIODIC_SIZE; j += period) {
678 				if ((isp116x->load[j] + load)
679 				    > MAX_PERIODIC_LOAD)
680 					break;
681 			}
682 			if (j < PERIODIC_SIZE)
683 				continue;
684 			branch = i;
685 		}
686 	}
687 	return branch;
688 }
689 
690 /* NB! ALL the code above this point runs with isp116x->lock
691    held, irqs off
692 */
693 
694 /*-----------------------------------------------------------------*/
695 
696 static int isp116x_urb_enqueue(struct usb_hcd *hcd,
697 			       struct usb_host_endpoint *hep, struct urb *urb,
698 			       unsigned mem_flags)
699 {
700 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
701 	struct usb_device *udev = urb->dev;
702 	unsigned int pipe = urb->pipe;
703 	int is_out = !usb_pipein(pipe);
704 	int type = usb_pipetype(pipe);
705 	int epnum = usb_pipeendpoint(pipe);
706 	struct isp116x_ep *ep = NULL;
707 	unsigned long flags;
708 	int i;
709 	int ret = 0;
710 
711 	urb_dbg(urb, "Enqueue");
712 
713 	if (type == PIPE_ISOCHRONOUS) {
714 		ERR("Isochronous transfers not supported\n");
715 		urb_dbg(urb, "Refused to enqueue");
716 		return -ENXIO;
717 	}
718 	/* avoid all allocations within spinlocks: request or endpoint */
719 	if (!hep->hcpriv) {
720 		ep = kcalloc(1, sizeof *ep, mem_flags);
721 		if (!ep)
722 			return -ENOMEM;
723 	}
724 
725 	spin_lock_irqsave(&isp116x->lock, flags);
726 	if (!HC_IS_RUNNING(hcd->state)) {
727 		ret = -ENODEV;
728 		goto fail;
729 	}
730 
731 	if (hep->hcpriv)
732 		ep = hep->hcpriv;
733 	else {
734 		INIT_LIST_HEAD(&ep->schedule);
735 		ep->udev = usb_get_dev(udev);
736 		ep->epnum = epnum;
737 		ep->maxpacket = usb_maxpacket(udev, urb->pipe, is_out);
738 		usb_settoggle(udev, epnum, is_out, 0);
739 
740 		if (type == PIPE_CONTROL) {
741 			ep->nextpid = USB_PID_SETUP;
742 		} else if (is_out) {
743 			ep->nextpid = USB_PID_OUT;
744 		} else {
745 			ep->nextpid = USB_PID_IN;
746 		}
747 
748 		if (urb->interval) {
749 			/*
750 			   With INT URBs submitted, the driver works with SOF
751 			   interrupt enabled and ATL interrupt disabled. After
752 			   the PTDs are written to fifo ram, the chip starts
753 			   fifo processing and usb transfers after the next
754 			   SOF and continues until the transfers are finished
755 			   (succeeded or failed) or the frame ends. Therefore,
756 			   the transfers occur only in every second frame,
757 			   while fifo reading/writing and data processing
758 			   occur in every other second frame. */
759 			if (urb->interval < 2)
760 				urb->interval = 2;
761 			if (urb->interval > 2 * PERIODIC_SIZE)
762 				urb->interval = 2 * PERIODIC_SIZE;
763 			ep->period = urb->interval >> 1;
764 			ep->branch = PERIODIC_SIZE;
765 			ep->load = usb_calc_bus_time(udev->speed,
766 						     !is_out,
767 						     (type == PIPE_ISOCHRONOUS),
768 						     usb_maxpacket(udev, pipe,
769 								   is_out)) /
770 			    1000;
771 		}
772 		hep->hcpriv = ep;
773 		ep->hep = hep;
774 	}
775 
776 	/* maybe put endpoint into schedule */
777 	switch (type) {
778 	case PIPE_CONTROL:
779 	case PIPE_BULK:
780 		if (list_empty(&ep->schedule))
781 			list_add_tail(&ep->schedule, &isp116x->async);
782 		break;
783 	case PIPE_INTERRUPT:
784 		urb->interval = ep->period;
785 		ep->length = min((int)ep->maxpacket,
786 				 urb->transfer_buffer_length);
787 
788 		/* urb submitted for already existing endpoint */
789 		if (ep->branch < PERIODIC_SIZE)
790 			break;
791 
792 		ret = ep->branch = balance(isp116x, ep->period, ep->load);
793 		if (ret < 0)
794 			goto fail;
795 		ret = 0;
796 
797 		urb->start_frame = (isp116x->fmindex & (PERIODIC_SIZE - 1))
798 		    + ep->branch;
799 
800 		/* sort each schedule branch by period (slow before fast)
801 		   to share the faster parts of the tree without needing
802 		   dummy/placeholder nodes */
803 		DBG("schedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
804 		for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
805 			struct isp116x_ep **prev = &isp116x->periodic[i];
806 			struct isp116x_ep *here = *prev;
807 
808 			while (here && ep != here) {
809 				if (ep->period > here->period)
810 					break;
811 				prev = &here->next;
812 				here = *prev;
813 			}
814 			if (ep != here) {
815 				ep->next = here;
816 				*prev = ep;
817 			}
818 			isp116x->load[i] += ep->load;
819 		}
820 		hcd->self.bandwidth_allocated += ep->load / ep->period;
821 
822 		/* switch over to SOFint */
823 		if (!isp116x->periodic_count++) {
824 			isp116x->irqenb &= ~HCuPINT_ATL;
825 			isp116x->irqenb |= HCuPINT_SOF;
826 			isp116x_write_reg16(isp116x, HCuPINTENB,
827 					    isp116x->irqenb);
828 		}
829 	}
830 
831 	/* in case of unlink-during-submit */
832 	spin_lock(&urb->lock);
833 	if (urb->status != -EINPROGRESS) {
834 		spin_unlock(&urb->lock);
835 		finish_request(isp116x, ep, urb, NULL);
836 		ret = 0;
837 		goto fail;
838 	}
839 	urb->hcpriv = hep;
840 	spin_unlock(&urb->lock);
841 	start_atl_transfers(isp116x);
842 
843       fail:
844 	spin_unlock_irqrestore(&isp116x->lock, flags);
845 	return ret;
846 }
847 
848 /*
849    Dequeue URBs.
850 */
851 static int isp116x_urb_dequeue(struct usb_hcd *hcd, struct urb *urb)
852 {
853 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
854 	struct usb_host_endpoint *hep;
855 	struct isp116x_ep *ep, *ep_act;
856 	unsigned long flags;
857 
858 	spin_lock_irqsave(&isp116x->lock, flags);
859 	hep = urb->hcpriv;
860 	/* URB already unlinked (or never linked)? */
861 	if (!hep) {
862 		spin_unlock_irqrestore(&isp116x->lock, flags);
863 		return 0;
864 	}
865 	ep = hep->hcpriv;
866 	WARN_ON(hep != ep->hep);
867 
868 	/* In front of queue? */
869 	if (ep->hep->urb_list.next == &urb->urb_list)
870 		/* active? */
871 		for (ep_act = isp116x->atl_active; ep_act;
872 		     ep_act = ep_act->active)
873 			if (ep_act == ep) {
874 				VDBG("dequeue, urb %p active; wait for irq\n",
875 				     urb);
876 				urb = NULL;
877 				break;
878 			}
879 
880 	if (urb)
881 		finish_request(isp116x, ep, urb, NULL);
882 
883 	spin_unlock_irqrestore(&isp116x->lock, flags);
884 	return 0;
885 }
886 
887 static void isp116x_endpoint_disable(struct usb_hcd *hcd,
888 				     struct usb_host_endpoint *hep)
889 {
890 	int i;
891 	struct isp116x_ep *ep = hep->hcpriv;;
892 
893 	if (!ep)
894 		return;
895 
896 	/* assume we'd just wait for the irq */
897 	for (i = 0; i < 100 && !list_empty(&hep->urb_list); i++)
898 		msleep(3);
899 	if (!list_empty(&hep->urb_list))
900 		WARN("ep %p not empty?\n", ep);
901 
902 	usb_put_dev(ep->udev);
903 	kfree(ep);
904 	hep->hcpriv = NULL;
905 }
906 
907 static int isp116x_get_frame(struct usb_hcd *hcd)
908 {
909 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
910 	u32 fmnum;
911 	unsigned long flags;
912 
913 	spin_lock_irqsave(&isp116x->lock, flags);
914 	fmnum = isp116x_read_reg32(isp116x, HCFMNUM);
915 	spin_unlock_irqrestore(&isp116x->lock, flags);
916 	return (int)fmnum;
917 }
918 
919 /*----------------------------------------------------------------*/
920 
921 /*
922   Adapted from ohci-hub.c. Currently we don't support autosuspend.
923 */
924 static int isp116x_hub_status_data(struct usb_hcd *hcd, char *buf)
925 {
926 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
927 	int ports, i, changed = 0;
928 
929 	if (!HC_IS_RUNNING(hcd->state))
930 		return -ESHUTDOWN;
931 
932 	ports = isp116x->rhdesca & RH_A_NDP;
933 
934 	/* init status */
935 	if (isp116x->rhstatus & (RH_HS_LPSC | RH_HS_OCIC))
936 		buf[0] = changed = 1;
937 	else
938 		buf[0] = 0;
939 
940 	for (i = 0; i < ports; i++) {
941 		u32 status = isp116x->rhport[i];
942 
943 		if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
944 			      | RH_PS_OCIC | RH_PS_PRSC)) {
945 			changed = 1;
946 			buf[0] |= 1 << (i + 1);
947 			continue;
948 		}
949 	}
950 	return changed;
951 }
952 
953 static void isp116x_hub_descriptor(struct isp116x *isp116x,
954 				   struct usb_hub_descriptor *desc)
955 {
956 	u32 reg = isp116x->rhdesca;
957 
958 	desc->bDescriptorType = 0x29;
959 	desc->bDescLength = 9;
960 	desc->bHubContrCurrent = 0;
961 	desc->bNbrPorts = (u8) (reg & 0x3);
962 	/* Power switching, device type, overcurrent. */
963 	desc->wHubCharacteristics =
964 	    (__force __u16) cpu_to_le16((u16) ((reg >> 8) & 0x1f));
965 	desc->bPwrOn2PwrGood = (u8) ((reg >> 24) & 0xff);
966 	/* two bitmaps:  ports removable, and legacy PortPwrCtrlMask */
967 	desc->bitmap[0] = desc->bNbrPorts == 1 ? 1 << 1 : 3 << 1;
968 	desc->bitmap[1] = ~0;
969 }
970 
971 /* Perform reset of a given port.
972    It would be great to just start the reset and let the
973    USB core to clear the reset in due time. However,
974    root hub ports should be reset for at least 50 ms, while
975    our chip stays in reset for about 10 ms. I.e., we must
976    repeatedly reset it ourself here.
977 */
978 static inline void root_port_reset(struct isp116x *isp116x, unsigned port)
979 {
980 	u32 tmp;
981 	unsigned long flags, t;
982 
983 	/* Root hub reset should be 50 ms, but some devices
984 	   want it even longer. */
985 	t = jiffies + msecs_to_jiffies(100);
986 
987 	while (time_before(jiffies, t)) {
988 		spin_lock_irqsave(&isp116x->lock, flags);
989 		/* spin until any current reset finishes */
990 		for (;;) {
991 			tmp = isp116x_read_reg32(isp116x, port ?
992 						 HCRHPORT2 : HCRHPORT1);
993 			if (!(tmp & RH_PS_PRS))
994 				break;
995 			udelay(500);
996 		}
997 		/* Don't reset a disconnected port */
998 		if (!(tmp & RH_PS_CCS)) {
999 			spin_unlock_irqrestore(&isp116x->lock, flags);
1000 			break;
1001 		}
1002 		/* Reset lasts 10ms (claims datasheet) */
1003 		isp116x_write_reg32(isp116x, port ? HCRHPORT2 :
1004 				    HCRHPORT1, (RH_PS_PRS));
1005 		spin_unlock_irqrestore(&isp116x->lock, flags);
1006 		msleep(10);
1007 	}
1008 }
1009 
1010 /* Adapted from ohci-hub.c */
1011 static int isp116x_hub_control(struct usb_hcd *hcd,
1012 			       u16 typeReq,
1013 			       u16 wValue, u16 wIndex, char *buf, u16 wLength)
1014 {
1015 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1016 	int ret = 0;
1017 	unsigned long flags;
1018 	int ports = isp116x->rhdesca & RH_A_NDP;
1019 	u32 tmp = 0;
1020 
1021 	switch (typeReq) {
1022 	case ClearHubFeature:
1023 		DBG("ClearHubFeature: ");
1024 		switch (wValue) {
1025 		case C_HUB_OVER_CURRENT:
1026 			DBG("C_HUB_OVER_CURRENT\n");
1027 			spin_lock_irqsave(&isp116x->lock, flags);
1028 			isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_OCIC);
1029 			spin_unlock_irqrestore(&isp116x->lock, flags);
1030 		case C_HUB_LOCAL_POWER:
1031 			DBG("C_HUB_LOCAL_POWER\n");
1032 			break;
1033 		default:
1034 			goto error;
1035 		}
1036 		break;
1037 	case SetHubFeature:
1038 		DBG("SetHubFeature: ");
1039 		switch (wValue) {
1040 		case C_HUB_OVER_CURRENT:
1041 		case C_HUB_LOCAL_POWER:
1042 			DBG("C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1043 			break;
1044 		default:
1045 			goto error;
1046 		}
1047 		break;
1048 	case GetHubDescriptor:
1049 		DBG("GetHubDescriptor\n");
1050 		isp116x_hub_descriptor(isp116x,
1051 				       (struct usb_hub_descriptor *)buf);
1052 		break;
1053 	case GetHubStatus:
1054 		DBG("GetHubStatus\n");
1055 		*(__le32 *) buf = 0;
1056 		break;
1057 	case GetPortStatus:
1058 		DBG("GetPortStatus\n");
1059 		if (!wIndex || wIndex > ports)
1060 			goto error;
1061 		tmp = isp116x->rhport[--wIndex];
1062 		*(__le32 *) buf = cpu_to_le32(tmp);
1063 		DBG("GetPortStatus: port[%d]  %08x\n", wIndex + 1, tmp);
1064 		break;
1065 	case ClearPortFeature:
1066 		DBG("ClearPortFeature: ");
1067 		if (!wIndex || wIndex > ports)
1068 			goto error;
1069 		wIndex--;
1070 
1071 		switch (wValue) {
1072 		case USB_PORT_FEAT_ENABLE:
1073 			DBG("USB_PORT_FEAT_ENABLE\n");
1074 			tmp = RH_PS_CCS;
1075 			break;
1076 		case USB_PORT_FEAT_C_ENABLE:
1077 			DBG("USB_PORT_FEAT_C_ENABLE\n");
1078 			tmp = RH_PS_PESC;
1079 			break;
1080 		case USB_PORT_FEAT_SUSPEND:
1081 			DBG("USB_PORT_FEAT_SUSPEND\n");
1082 			tmp = RH_PS_POCI;
1083 			break;
1084 		case USB_PORT_FEAT_C_SUSPEND:
1085 			DBG("USB_PORT_FEAT_C_SUSPEND\n");
1086 			tmp = RH_PS_PSSC;
1087 			break;
1088 		case USB_PORT_FEAT_POWER:
1089 			DBG("USB_PORT_FEAT_POWER\n");
1090 			tmp = RH_PS_LSDA;
1091 			break;
1092 		case USB_PORT_FEAT_C_CONNECTION:
1093 			DBG("USB_PORT_FEAT_C_CONNECTION\n");
1094 			tmp = RH_PS_CSC;
1095 			break;
1096 		case USB_PORT_FEAT_C_OVER_CURRENT:
1097 			DBG("USB_PORT_FEAT_C_OVER_CURRENT\n");
1098 			tmp = RH_PS_OCIC;
1099 			break;
1100 		case USB_PORT_FEAT_C_RESET:
1101 			DBG("USB_PORT_FEAT_C_RESET\n");
1102 			tmp = RH_PS_PRSC;
1103 			break;
1104 		default:
1105 			goto error;
1106 		}
1107 		spin_lock_irqsave(&isp116x->lock, flags);
1108 		isp116x_write_reg32(isp116x, wIndex
1109 				    ? HCRHPORT2 : HCRHPORT1, tmp);
1110 		isp116x->rhport[wIndex] =
1111 		    isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
1112 		spin_unlock_irqrestore(&isp116x->lock, flags);
1113 		break;
1114 	case SetPortFeature:
1115 		DBG("SetPortFeature: ");
1116 		if (!wIndex || wIndex > ports)
1117 			goto error;
1118 		wIndex--;
1119 		switch (wValue) {
1120 		case USB_PORT_FEAT_SUSPEND:
1121 			DBG("USB_PORT_FEAT_SUSPEND\n");
1122 			spin_lock_irqsave(&isp116x->lock, flags);
1123 			isp116x_write_reg32(isp116x, wIndex
1124 					    ? HCRHPORT2 : HCRHPORT1, RH_PS_PSS);
1125 			break;
1126 		case USB_PORT_FEAT_POWER:
1127 			DBG("USB_PORT_FEAT_POWER\n");
1128 			spin_lock_irqsave(&isp116x->lock, flags);
1129 			isp116x_write_reg32(isp116x, wIndex
1130 					    ? HCRHPORT2 : HCRHPORT1, RH_PS_PPS);
1131 			break;
1132 		case USB_PORT_FEAT_RESET:
1133 			DBG("USB_PORT_FEAT_RESET\n");
1134 			root_port_reset(isp116x, wIndex);
1135 			spin_lock_irqsave(&isp116x->lock, flags);
1136 			break;
1137 		default:
1138 			goto error;
1139 		}
1140 		isp116x->rhport[wIndex] =
1141 		    isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
1142 		spin_unlock_irqrestore(&isp116x->lock, flags);
1143 		break;
1144 
1145 	default:
1146 	      error:
1147 		/* "protocol stall" on error */
1148 		DBG("PROTOCOL STALL\n");
1149 		ret = -EPIPE;
1150 	}
1151 	return ret;
1152 }
1153 
1154 #ifdef	CONFIG_PM
1155 
1156 static int isp116x_hub_suspend(struct usb_hcd *hcd)
1157 {
1158 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1159 	unsigned long flags;
1160 	u32 val;
1161 	int ret = 0;
1162 
1163 	spin_lock_irqsave(&isp116x->lock, flags);
1164 
1165 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1166 	switch (val & HCCONTROL_HCFS) {
1167 	case HCCONTROL_USB_OPER:
1168 		hcd->state = HC_STATE_QUIESCING;
1169 		val &= (~HCCONTROL_HCFS & ~HCCONTROL_RWE);
1170 		val |= HCCONTROL_USB_SUSPEND;
1171 		if (hcd->remote_wakeup)
1172 			val |= HCCONTROL_RWE;
1173 		/* Wait for usb transfers to finish */
1174 		mdelay(2);
1175 		isp116x_write_reg32(isp116x, HCCONTROL, val);
1176 		hcd->state = HC_STATE_SUSPENDED;
1177 		/* Wait for devices to suspend */
1178 		mdelay(5);
1179 	case HCCONTROL_USB_SUSPEND:
1180 		break;
1181 	case HCCONTROL_USB_RESUME:
1182 		isp116x_write_reg32(isp116x, HCCONTROL,
1183 				    (val & ~HCCONTROL_HCFS) |
1184 				    HCCONTROL_USB_RESET);
1185 	case HCCONTROL_USB_RESET:
1186 		ret = -EBUSY;
1187 		break;
1188 	default:
1189 		ret = -EINVAL;
1190 	}
1191 
1192 	spin_unlock_irqrestore(&isp116x->lock, flags);
1193 	return ret;
1194 }
1195 
1196 static int isp116x_hub_resume(struct usb_hcd *hcd)
1197 {
1198 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1199 	u32 val;
1200 	int ret = -EINPROGRESS;
1201 
1202 	msleep(5);
1203 	spin_lock_irq(&isp116x->lock);
1204 
1205 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1206 	switch (val & HCCONTROL_HCFS) {
1207 	case HCCONTROL_USB_SUSPEND:
1208 		val &= ~HCCONTROL_HCFS;
1209 		val |= HCCONTROL_USB_RESUME;
1210 		isp116x_write_reg32(isp116x, HCCONTROL, val);
1211 	case HCCONTROL_USB_RESUME:
1212 		break;
1213 	case HCCONTROL_USB_OPER:
1214 		/* Without setting power_state here the
1215 		   SUSPENDED state won't be removed from
1216 		   sysfs/usbN/power.state as a response to remote
1217 		   wakeup. Maybe in the future. */
1218 		hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1219 		ret = 0;
1220 		break;
1221 	default:
1222 		ret = -EBUSY;
1223 	}
1224 
1225 	if (ret != -EINPROGRESS) {
1226 		spin_unlock_irq(&isp116x->lock);
1227 		return ret;
1228 	}
1229 
1230 	val = isp116x->rhdesca & RH_A_NDP;
1231 	while (val--) {
1232 		u32 stat =
1233 		    isp116x_read_reg32(isp116x, val ? HCRHPORT2 : HCRHPORT1);
1234 		/* force global, not selective, resume */
1235 		if (!(stat & RH_PS_PSS))
1236 			continue;
1237 		DBG("%s: Resuming port %d\n", __func__, val);
1238 		isp116x_write_reg32(isp116x, RH_PS_POCI, val
1239 				    ? HCRHPORT2 : HCRHPORT1);
1240 	}
1241 	spin_unlock_irq(&isp116x->lock);
1242 
1243 	hcd->state = HC_STATE_RESUMING;
1244 	mdelay(20);
1245 
1246 	/* Go operational */
1247 	spin_lock_irq(&isp116x->lock);
1248 	val = isp116x_read_reg32(isp116x, HCCONTROL);
1249 	isp116x_write_reg32(isp116x, HCCONTROL,
1250 			    (val & ~HCCONTROL_HCFS) | HCCONTROL_USB_OPER);
1251 	spin_unlock_irq(&isp116x->lock);
1252 	/* see analogous comment above */
1253 	hcd->self.root_hub->dev.power.power_state = PMSG_ON;
1254 	hcd->state = HC_STATE_RUNNING;
1255 
1256 	return 0;
1257 }
1258 
1259 static void isp116x_rh_resume(void *_hcd)
1260 {
1261 	struct usb_hcd *hcd = _hcd;
1262 
1263 	usb_resume_device(hcd->self.root_hub);
1264 }
1265 
1266 #else
1267 
1268 #define	isp116x_hub_suspend	NULL
1269 #define	isp116x_hub_resume	NULL
1270 
1271 static void isp116x_rh_resume(void *_hcd)
1272 {
1273 }
1274 
1275 #endif
1276 
1277 /*-----------------------------------------------------------------*/
1278 
1279 #ifdef STUB_DEBUG_FILE
1280 
1281 static inline void create_debug_file(struct isp116x *isp116x)
1282 {
1283 }
1284 
1285 static inline void remove_debug_file(struct isp116x *isp116x)
1286 {
1287 }
1288 
1289 #else
1290 
1291 #include <linux/proc_fs.h>
1292 #include <linux/seq_file.h>
1293 
1294 static void dump_irq(struct seq_file *s, char *label, u16 mask)
1295 {
1296 	seq_printf(s, "%s %04x%s%s%s%s%s%s\n", label, mask,
1297 		   mask & HCuPINT_CLKRDY ? " clkrdy" : "",
1298 		   mask & HCuPINT_SUSP ? " susp" : "",
1299 		   mask & HCuPINT_OPR ? " opr" : "",
1300 		   mask & HCuPINT_AIIEOT ? " eot" : "",
1301 		   mask & HCuPINT_ATL ? " atl" : "",
1302 		   mask & HCuPINT_SOF ? " sof" : "");
1303 }
1304 
1305 static void dump_int(struct seq_file *s, char *label, u32 mask)
1306 {
1307 	seq_printf(s, "%s %08x%s%s%s%s%s%s%s\n", label, mask,
1308 		   mask & HCINT_MIE ? " MIE" : "",
1309 		   mask & HCINT_RHSC ? " rhsc" : "",
1310 		   mask & HCINT_FNO ? " fno" : "",
1311 		   mask & HCINT_UE ? " ue" : "",
1312 		   mask & HCINT_RD ? " rd" : "",
1313 		   mask & HCINT_SF ? " sof" : "", mask & HCINT_SO ? " so" : "");
1314 }
1315 
1316 static int proc_isp116x_show(struct seq_file *s, void *unused)
1317 {
1318 	struct isp116x *isp116x = s->private;
1319 	struct isp116x_ep *ep;
1320 	struct urb *urb;
1321 	unsigned i;
1322 	char *str;
1323 
1324 	seq_printf(s, "%s\n%s version %s\n",
1325 		   isp116x_to_hcd(isp116x)->product_desc, hcd_name,
1326 		   DRIVER_VERSION);
1327 
1328 	if (HC_IS_SUSPENDED(isp116x_to_hcd(isp116x)->state)) {
1329 		seq_printf(s, "HCD is suspended\n");
1330 		return 0;
1331 	}
1332 	if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state)) {
1333 		seq_printf(s, "HCD not running\n");
1334 		return 0;
1335 	}
1336 
1337 	spin_lock_irq(&isp116x->lock);
1338 
1339 	dump_irq(s, "hc_irq_enable", isp116x_read_reg16(isp116x, HCuPINTENB));
1340 	dump_irq(s, "hc_irq_status", isp116x_read_reg16(isp116x, HCuPINT));
1341 	dump_int(s, "hc_int_enable", isp116x_read_reg32(isp116x, HCINTENB));
1342 	dump_int(s, "hc_int_status", isp116x_read_reg32(isp116x, HCINTSTAT));
1343 
1344 	list_for_each_entry(ep, &isp116x->async, schedule) {
1345 
1346 		switch (ep->nextpid) {
1347 		case USB_PID_IN:
1348 			str = "in";
1349 			break;
1350 		case USB_PID_OUT:
1351 			str = "out";
1352 			break;
1353 		case USB_PID_SETUP:
1354 			str = "setup";
1355 			break;
1356 		case USB_PID_ACK:
1357 			str = "status";
1358 			break;
1359 		default:
1360 			str = "?";
1361 			break;
1362 		};
1363 		seq_printf(s, "%p, ep%d%s, maxpacket %d:\n", ep,
1364 			   ep->epnum, str, ep->maxpacket);
1365 		list_for_each_entry(urb, &ep->hep->urb_list, urb_list) {
1366 			seq_printf(s, "  urb%p, %d/%d\n", urb,
1367 				   urb->actual_length,
1368 				   urb->transfer_buffer_length);
1369 		}
1370 	}
1371 	if (!list_empty(&isp116x->async))
1372 		seq_printf(s, "\n");
1373 
1374 	seq_printf(s, "periodic size= %d\n", PERIODIC_SIZE);
1375 
1376 	for (i = 0; i < PERIODIC_SIZE; i++) {
1377 		ep = isp116x->periodic[i];
1378 		if (!ep)
1379 			continue;
1380 		seq_printf(s, "%2d [%3d]:\n", i, isp116x->load[i]);
1381 
1382 		/* DUMB: prints shared entries multiple times */
1383 		do {
1384 			seq_printf(s, "   %d/%p (%sdev%d ep%d%s max %d)\n",
1385 				   ep->period, ep,
1386 				   (ep->udev->speed ==
1387 				    USB_SPEED_FULL) ? "" : "ls ",
1388 				   ep->udev->devnum, ep->epnum,
1389 				   (ep->epnum ==
1390 				    0) ? "" : ((ep->nextpid ==
1391 						USB_PID_IN) ? "in" : "out"),
1392 				   ep->maxpacket);
1393 			ep = ep->next;
1394 		} while (ep);
1395 	}
1396 	spin_unlock_irq(&isp116x->lock);
1397 	seq_printf(s, "\n");
1398 
1399 	return 0;
1400 }
1401 
1402 static int proc_isp116x_open(struct inode *inode, struct file *file)
1403 {
1404 	return single_open(file, proc_isp116x_show, PDE(inode)->data);
1405 }
1406 
1407 static struct file_operations proc_ops = {
1408 	.open = proc_isp116x_open,
1409 	.read = seq_read,
1410 	.llseek = seq_lseek,
1411 	.release = single_release,
1412 };
1413 
1414 /* expect just one isp116x per system */
1415 static const char proc_filename[] = "driver/isp116x";
1416 
1417 static void create_debug_file(struct isp116x *isp116x)
1418 {
1419 	struct proc_dir_entry *pde;
1420 
1421 	pde = create_proc_entry(proc_filename, 0, NULL);
1422 	if (pde == NULL)
1423 		return;
1424 
1425 	pde->proc_fops = &proc_ops;
1426 	pde->data = isp116x;
1427 	isp116x->pde = pde;
1428 }
1429 
1430 static void remove_debug_file(struct isp116x *isp116x)
1431 {
1432 	if (isp116x->pde)
1433 		remove_proc_entry(proc_filename, NULL);
1434 }
1435 
1436 #endif
1437 
1438 /*-----------------------------------------------------------------*/
1439 
1440 /*
1441   Software reset - can be called from any contect.
1442 */
1443 static int isp116x_sw_reset(struct isp116x *isp116x)
1444 {
1445 	int retries = 15;
1446 	unsigned long flags;
1447 	int ret = 0;
1448 
1449 	spin_lock_irqsave(&isp116x->lock, flags);
1450 	isp116x_write_reg16(isp116x, HCSWRES, HCSWRES_MAGIC);
1451 	isp116x_write_reg32(isp116x, HCCMDSTAT, HCCMDSTAT_HCR);
1452 	while (--retries) {
1453 		/* It usually resets within 1 ms */
1454 		mdelay(1);
1455 		if (!(isp116x_read_reg32(isp116x, HCCMDSTAT) & HCCMDSTAT_HCR))
1456 			break;
1457 	}
1458 	if (!retries) {
1459 		ERR("Software reset timeout\n");
1460 		ret = -ETIME;
1461 	}
1462 	spin_unlock_irqrestore(&isp116x->lock, flags);
1463 	return ret;
1464 }
1465 
1466 /*
1467   Reset. Tries to perform platform-specific hardware
1468   reset first; falls back to software reset.
1469 */
1470 static int isp116x_reset(struct usb_hcd *hcd)
1471 {
1472 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1473 	unsigned long t;
1474 	u16 clkrdy = 0;
1475 	int ret = 0, timeout = 15 /* ms */ ;
1476 
1477 	if (isp116x->board && isp116x->board->reset) {
1478 		/* Hardware reset */
1479 		isp116x->board->reset(hcd->self.controller, 1);
1480 		msleep(10);
1481 		if (isp116x->board->clock)
1482 			isp116x->board->clock(hcd->self.controller, 1);
1483 		msleep(1);
1484 		isp116x->board->reset(hcd->self.controller, 0);
1485 	} else
1486 		ret = isp116x_sw_reset(isp116x);
1487 
1488 	if (ret)
1489 		return ret;
1490 
1491 	t = jiffies + msecs_to_jiffies(timeout);
1492 	while (time_before_eq(jiffies, t)) {
1493 		msleep(4);
1494 		spin_lock_irq(&isp116x->lock);
1495 		clkrdy = isp116x_read_reg16(isp116x, HCuPINT) & HCuPINT_CLKRDY;
1496 		spin_unlock_irq(&isp116x->lock);
1497 		if (clkrdy)
1498 			break;
1499 	}
1500 	if (!clkrdy) {
1501 		ERR("Clock not ready after 20ms\n");
1502 		/* After sw_reset the clock won't report to be ready, if
1503 		   H_WAKEUP pin is high. */
1504 		if (!isp116x->board || !isp116x->board->reset)
1505 			ERR("The driver does not support hardware wakeup.\n");
1506 			ERR("Please make sure that the H_WAKEUP pin "
1507 				"is pulled low!\n");
1508 		ret = -ENODEV;
1509 	}
1510 	return ret;
1511 }
1512 
1513 static void isp116x_stop(struct usb_hcd *hcd)
1514 {
1515 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1516 	unsigned long flags;
1517 	u32 val;
1518 
1519 	spin_lock_irqsave(&isp116x->lock, flags);
1520 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1521 
1522 	/* Switch off ports' power, some devices don't come up
1523 	   after next 'insmod' without this */
1524 	val = isp116x_read_reg32(isp116x, HCRHDESCA);
1525 	val &= ~(RH_A_NPS | RH_A_PSM);
1526 	isp116x_write_reg32(isp116x, HCRHDESCA, val);
1527 	isp116x_write_reg32(isp116x, HCRHSTATUS, RH_HS_LPS);
1528 	spin_unlock_irqrestore(&isp116x->lock, flags);
1529 
1530 	/* Put the chip into reset state */
1531 	if (isp116x->board && isp116x->board->reset)
1532 		isp116x->board->reset(hcd->self.controller, 0);
1533 	else
1534 		isp116x_sw_reset(isp116x);
1535 
1536 	/* Stop the clock */
1537 	if (isp116x->board && isp116x->board->clock)
1538 		isp116x->board->clock(hcd->self.controller, 0);
1539 }
1540 
1541 /*
1542   Configure the chip. The chip must be successfully reset by now.
1543 */
1544 static int isp116x_start(struct usb_hcd *hcd)
1545 {
1546 	struct isp116x *isp116x = hcd_to_isp116x(hcd);
1547 	struct isp116x_platform_data *board = isp116x->board;
1548 	u32 val;
1549 	unsigned long flags;
1550 
1551 	spin_lock_irqsave(&isp116x->lock, flags);
1552 
1553 	/* clear interrupt status and disable all interrupt sources */
1554 	isp116x_write_reg16(isp116x, HCuPINT, 0xff);
1555 	isp116x_write_reg16(isp116x, HCuPINTENB, 0);
1556 
1557 	val = isp116x_read_reg16(isp116x, HCCHIPID);
1558 	if ((val & HCCHIPID_MASK) != HCCHIPID_MAGIC) {
1559 		ERR("Invalid chip ID %04x\n", val);
1560 		spin_unlock_irqrestore(&isp116x->lock, flags);
1561 		return -ENODEV;
1562 	}
1563 
1564 	isp116x_write_reg16(isp116x, HCITLBUFLEN, ISP116x_ITL_BUFSIZE);
1565 	isp116x_write_reg16(isp116x, HCATLBUFLEN, ISP116x_ATL_BUFSIZE);
1566 
1567 	/* ----- HW conf */
1568 	val = HCHWCFG_INT_ENABLE | HCHWCFG_DBWIDTH(1);
1569 	if (board->sel15Kres)
1570 		val |= HCHWCFG_15KRSEL;
1571 	/* Remote wakeup won't work without working clock */
1572 	if (board->clknotstop || board->remote_wakeup_enable)
1573 		val |= HCHWCFG_CLKNOTSTOP;
1574 	if (board->oc_enable)
1575 		val |= HCHWCFG_ANALOG_OC;
1576 	if (board->int_act_high)
1577 		val |= HCHWCFG_INT_POL;
1578 	if (board->int_edge_triggered)
1579 		val |= HCHWCFG_INT_TRIGGER;
1580 	isp116x_write_reg16(isp116x, HCHWCFG, val);
1581 
1582 	/* ----- Root hub conf */
1583 	val = 0;
1584 	/* AN10003_1.pdf recommends NPS to be always 1 */
1585 	if (board->no_power_switching)
1586 		val |= RH_A_NPS;
1587 	if (board->power_switching_mode)
1588 		val |= RH_A_PSM;
1589 	if (board->potpg)
1590 		val |= (board->potpg << 24) & RH_A_POTPGT;
1591 	else
1592 		val |= (25 << 24) & RH_A_POTPGT;
1593 	isp116x_write_reg32(isp116x, HCRHDESCA, val);
1594 	isp116x->rhdesca = isp116x_read_reg32(isp116x, HCRHDESCA);
1595 
1596 	val = RH_B_PPCM;
1597 	isp116x_write_reg32(isp116x, HCRHDESCB, val);
1598 	isp116x->rhdescb = isp116x_read_reg32(isp116x, HCRHDESCB);
1599 
1600 	val = 0;
1601 	if (board->remote_wakeup_enable) {
1602 		hcd->can_wakeup = 1;
1603 		val |= RH_HS_DRWE;
1604 	}
1605 	isp116x_write_reg32(isp116x, HCRHSTATUS, val);
1606 	isp116x->rhstatus = isp116x_read_reg32(isp116x, HCRHSTATUS);
1607 
1608 	isp116x_write_reg32(isp116x, HCFMINTVL, 0x27782edf);
1609 
1610 	hcd->state = HC_STATE_RUNNING;
1611 
1612 	/* Set up interrupts */
1613 	isp116x->intenb = HCINT_MIE | HCINT_RHSC | HCINT_UE;
1614 	if (board->remote_wakeup_enable)
1615 		isp116x->intenb |= HCINT_RD;
1616 	isp116x->irqenb = HCuPINT_ATL | HCuPINT_OPR;	/* | HCuPINT_SUSP; */
1617 	isp116x_write_reg32(isp116x, HCINTENB, isp116x->intenb);
1618 	isp116x_write_reg16(isp116x, HCuPINTENB, isp116x->irqenb);
1619 
1620 	/* Go operational */
1621 	val = HCCONTROL_USB_OPER;
1622 	/* Remote wakeup connected - NOT SUPPORTED */
1623 	/*  if (board->remote_wakeup_connected)
1624 	   val |= HCCONTROL_RWC;  */
1625 	if (board->remote_wakeup_enable)
1626 		val |= HCCONTROL_RWE;
1627 	isp116x_write_reg32(isp116x, HCCONTROL, val);
1628 
1629 	/* Disable ports to avoid race in device enumeration */
1630 	isp116x_write_reg32(isp116x, HCRHPORT1, RH_PS_CCS);
1631 	isp116x_write_reg32(isp116x, HCRHPORT2, RH_PS_CCS);
1632 
1633 	isp116x_show_regs(isp116x);
1634 	spin_unlock_irqrestore(&isp116x->lock, flags);
1635 	return 0;
1636 }
1637 
1638 /*-----------------------------------------------------------------*/
1639 
1640 static struct hc_driver isp116x_hc_driver = {
1641 	.description = hcd_name,
1642 	.product_desc = "ISP116x Host Controller",
1643 	.hcd_priv_size = sizeof(struct isp116x),
1644 
1645 	.irq = isp116x_irq,
1646 	.flags = HCD_USB11,
1647 
1648 	.reset = isp116x_reset,
1649 	.start = isp116x_start,
1650 	.stop = isp116x_stop,
1651 
1652 	.urb_enqueue = isp116x_urb_enqueue,
1653 	.urb_dequeue = isp116x_urb_dequeue,
1654 	.endpoint_disable = isp116x_endpoint_disable,
1655 
1656 	.get_frame_number = isp116x_get_frame,
1657 
1658 	.hub_status_data = isp116x_hub_status_data,
1659 	.hub_control = isp116x_hub_control,
1660 	.hub_suspend = isp116x_hub_suspend,
1661 	.hub_resume = isp116x_hub_resume,
1662 };
1663 
1664 /*----------------------------------------------------------------*/
1665 
1666 static int __init_or_module isp116x_remove(struct device *dev)
1667 {
1668 	struct usb_hcd *hcd = dev_get_drvdata(dev);
1669 	struct isp116x *isp116x;
1670 	struct platform_device *pdev;
1671 	struct resource *res;
1672 
1673 	if(!hcd)
1674 		return 0;
1675 	isp116x = hcd_to_isp116x(hcd);
1676 	pdev = container_of(dev, struct platform_device, dev);
1677 	remove_debug_file(isp116x);
1678 	usb_remove_hcd(hcd);
1679 
1680 	iounmap(isp116x->data_reg);
1681 	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1682 	release_mem_region(res->start, 2);
1683 	iounmap(isp116x->addr_reg);
1684 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1685 	release_mem_region(res->start, 2);
1686 
1687 	usb_put_hcd(hcd);
1688 	return 0;
1689 }
1690 
1691 #define resource_len(r) (((r)->end - (r)->start) + 1)
1692 
1693 static int __init isp116x_probe(struct device *dev)
1694 {
1695 	struct usb_hcd *hcd;
1696 	struct isp116x *isp116x;
1697 	struct platform_device *pdev;
1698 	struct resource *addr, *data;
1699 	void __iomem *addr_reg;
1700 	void __iomem *data_reg;
1701 	int irq;
1702 	int ret = 0;
1703 
1704 	pdev = container_of(dev, struct platform_device, dev);
1705 	if (pdev->num_resources < 3) {
1706 		ret = -ENODEV;
1707 		goto err1;
1708 	}
1709 
1710 	data = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1711 	addr = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1712 	irq = platform_get_irq(pdev, 0);
1713 	if (!addr || !data || irq < 0) {
1714 		ret = -ENODEV;
1715 		goto err1;
1716 	}
1717 
1718 	if (dev->dma_mask) {
1719 		DBG("DMA not supported\n");
1720 		ret = -EINVAL;
1721 		goto err1;
1722 	}
1723 
1724 	if (!request_mem_region(addr->start, 2, hcd_name)) {
1725 		ret = -EBUSY;
1726 		goto err1;
1727 	}
1728 	addr_reg = ioremap(addr->start, resource_len(addr));
1729 	if (addr_reg == NULL) {
1730 		ret = -ENOMEM;
1731 		goto err2;
1732 	}
1733 	if (!request_mem_region(data->start, 2, hcd_name)) {
1734 		ret = -EBUSY;
1735 		goto err3;
1736 	}
1737 	data_reg = ioremap(data->start, resource_len(data));
1738 	if (data_reg == NULL) {
1739 		ret = -ENOMEM;
1740 		goto err4;
1741 	}
1742 
1743 	/* allocate and initialize hcd */
1744 	hcd = usb_create_hcd(&isp116x_hc_driver, dev, dev->bus_id);
1745 	if (!hcd) {
1746 		ret = -ENOMEM;
1747 		goto err5;
1748 	}
1749 	/* this rsrc_start is bogus */
1750 	hcd->rsrc_start = addr->start;
1751 	isp116x = hcd_to_isp116x(hcd);
1752 	isp116x->data_reg = data_reg;
1753 	isp116x->addr_reg = addr_reg;
1754 	spin_lock_init(&isp116x->lock);
1755 	INIT_LIST_HEAD(&isp116x->async);
1756 	INIT_WORK(&isp116x->rh_resume, isp116x_rh_resume, hcd);
1757 	isp116x->board = dev->platform_data;
1758 
1759 	if (!isp116x->board) {
1760 		ERR("Platform data structure not initialized\n");
1761 		ret = -ENODEV;
1762 		goto err6;
1763 	}
1764 	if (isp116x_check_platform_delay(isp116x)) {
1765 		ERR("USE_PLATFORM_DELAY defined, but delay function not "
1766 		    "implemented.\n");
1767 		ERR("See comments in drivers/usb/host/isp116x-hcd.c\n");
1768 		ret = -ENODEV;
1769 		goto err6;
1770 	}
1771 
1772 	ret = usb_add_hcd(hcd, irq, SA_INTERRUPT);
1773 	if (ret != 0)
1774 		goto err6;
1775 
1776 	create_debug_file(isp116x);
1777 	return 0;
1778 
1779       err6:
1780 	usb_put_hcd(hcd);
1781       err5:
1782 	iounmap(data_reg);
1783       err4:
1784 	release_mem_region(data->start, 2);
1785       err3:
1786 	iounmap(addr_reg);
1787       err2:
1788 	release_mem_region(addr->start, 2);
1789       err1:
1790 	ERR("init error, %d\n", ret);
1791 	return ret;
1792 }
1793 
1794 #ifdef	CONFIG_PM
1795 /*
1796   Suspend of platform device
1797 */
1798 static int isp116x_suspend(struct device *dev, pm_message_t state, u32 phase)
1799 {
1800 	int ret = 0;
1801 	struct usb_hcd *hcd = dev_get_drvdata(dev);
1802 
1803 	VDBG("%s: state %x, phase %x\n", __func__, state, phase);
1804 
1805 	if (phase != SUSPEND_DISABLE && phase != SUSPEND_POWER_DOWN)
1806 		return 0;
1807 
1808 	ret = usb_suspend_device(hcd->self.root_hub, state);
1809 	if (!ret) {
1810 		dev->power.power_state = state;
1811 		INFO("%s suspended\n", hcd_name);
1812 	} else
1813 		ERR("%s suspend failed\n", hcd_name);
1814 
1815 	return ret;
1816 }
1817 
1818 /*
1819   Resume platform device
1820 */
1821 static int isp116x_resume(struct device *dev, u32 phase)
1822 {
1823 	int ret = 0;
1824 	struct usb_hcd *hcd = dev_get_drvdata(dev);
1825 
1826 	VDBG("%s:  state %x, phase %x\n", __func__, dev->power.power_state,
1827 	     phase);
1828 	if (phase != RESUME_POWER_ON)
1829 		return 0;
1830 
1831 	ret = usb_resume_device(hcd->self.root_hub);
1832 	if (!ret) {
1833 		dev->power.power_state = PMSG_ON;
1834 		VDBG("%s resumed\n", (char *)hcd_name);
1835 	}
1836 	return ret;
1837 }
1838 
1839 #else
1840 
1841 #define	isp116x_suspend    NULL
1842 #define	isp116x_resume     NULL
1843 
1844 #endif
1845 
1846 static struct device_driver isp116x_driver = {
1847 	.name = (char *)hcd_name,
1848 	.bus = &platform_bus_type,
1849 	.probe = isp116x_probe,
1850 	.remove = isp116x_remove,
1851 	.suspend = isp116x_suspend,
1852 	.resume = isp116x_resume,
1853 };
1854 
1855 /*-----------------------------------------------------------------*/
1856 
1857 static int __init isp116x_init(void)
1858 {
1859 	if (usb_disabled())
1860 		return -ENODEV;
1861 
1862 	INFO("driver %s, %s\n", hcd_name, DRIVER_VERSION);
1863 	return driver_register(&isp116x_driver);
1864 }
1865 
1866 module_init(isp116x_init);
1867 
1868 static void __exit isp116x_cleanup(void)
1869 {
1870 	driver_unregister(&isp116x_driver);
1871 }
1872 
1873 module_exit(isp116x_cleanup);
1874