|  | @@ -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,
 |