|
@@ -155,6 +155,10 @@ static int hub_open ( struct usb_hub *hub ) {
|
155
|
155
|
/* Refill interrupt ring */
|
156
|
156
|
hub_refill ( hubdev );
|
157
|
157
|
|
|
158
|
+ /* Delay to allow ports to stabilise on out-of-spec hubs */
|
|
159
|
+ if ( hubdev->flags & USB_HUB_SLOW_START )
|
|
160
|
+ mdelay ( USB_HUB_SLOW_START_DELAY_MS );
|
|
161
|
+
|
158
|
162
|
return 0;
|
159
|
163
|
|
160
|
164
|
usb_endpoint_close ( &hubdev->intr );
|
|
@@ -410,6 +414,7 @@ static int hub_probe ( struct usb_function *func,
|
410
|
414
|
hubdev->usb = usb;
|
411
|
415
|
hubdev->features =
|
412
|
416
|
( enhanced ? USB_HUB_FEATURES_ENHANCED : USB_HUB_FEATURES );
|
|
417
|
+ hubdev->flags = func->id->driver_data;
|
413
|
418
|
usb_endpoint_init ( &hubdev->intr, usb, &usb_hub_intr_operations );
|
414
|
419
|
usb_refill_init ( &hubdev->intr, 0, USB_HUB_INTR_FILL );
|
415
|
420
|
process_init_stopped ( &hubdev->refill, &hub_refill_desc, NULL );
|
|
@@ -517,6 +522,12 @@ static void hub_remove ( struct usb_function *func ) {
|
517
|
522
|
|
518
|
523
|
/** USB hub device IDs */
|
519
|
524
|
static struct usb_device_id hub_ids[] = {
|
|
525
|
+ {
|
|
526
|
+ .name = "avocent-hub",
|
|
527
|
+ .vendor = 0x0624,
|
|
528
|
+ .product = 0x0248,
|
|
529
|
+ .driver_data = USB_HUB_SLOW_START,
|
|
530
|
+ },
|
520
|
531
|
{
|
521
|
532
|
.name = "hub",
|
522
|
533
|
.vendor = USB_ANY_ID,
|