|  | @@ -227,10 +227,13 @@ int usb_endpoint_described ( struct usb_endpoint *ep,
 | 
		
	
		
			
			| 227 | 227 |  			     struct usb_configuration_descriptor *config,
 | 
		
	
		
			
			| 228 | 228 |  			     struct usb_interface_descriptor *interface,
 | 
		
	
		
			
			| 229 | 229 |  			     unsigned int type, unsigned int index ) {
 | 
		
	
		
			
			|  | 230 | +	struct usb_device *usb = ep->usb;
 | 
		
	
		
			
			|  | 231 | +	struct usb_port *port = usb->port;
 | 
		
	
		
			
			| 230 | 232 |  	struct usb_endpoint_descriptor *desc;
 | 
		
	
		
			
			| 231 | 233 |  	struct usb_endpoint_companion_descriptor *descx;
 | 
		
	
		
			
			| 232 | 234 |  	unsigned int sizes;
 | 
		
	
		
			
			| 233 | 235 |  	unsigned int burst;
 | 
		
	
		
			
			|  | 236 | +	unsigned int interval;
 | 
		
	
		
			
			| 234 | 237 |  	size_t mtu;
 | 
		
	
		
			
			| 235 | 238 |  
 | 
		
	
		
			
			| 236 | 239 |  	/* Locate endpoint descriptor */
 | 
		
	
	
		
			
			|  | @@ -246,9 +249,23 @@ int usb_endpoint_described ( struct usb_endpoint *ep,
 | 
		
	
		
			
			| 246 | 249 |  	mtu = USB_ENDPOINT_MTU ( sizes );
 | 
		
	
		
			
			| 247 | 250 |  	burst = ( descx ? descx->burst : USB_ENDPOINT_BURST ( sizes ) );
 | 
		
	
		
			
			| 248 | 251 |  
 | 
		
	
		
			
			|  | 252 | +	/* Calculate interval */
 | 
		
	
		
			
			|  | 253 | +	if ( type == USB_INTERRUPT ) {
 | 
		
	
		
			
			|  | 254 | +		if ( port->speed >= USB_SPEED_HIGH ) {
 | 
		
	
		
			
			|  | 255 | +			/* 2^(desc->interval-1) is a microframe count */
 | 
		
	
		
			
			|  | 256 | +			interval = ( 1 << ( desc->interval - 1 ) );
 | 
		
	
		
			
			|  | 257 | +		} else {
 | 
		
	
		
			
			|  | 258 | +			/* desc->interval is a (whole) frame count */
 | 
		
	
		
			
			|  | 259 | +			interval = ( desc->interval << 3 );
 | 
		
	
		
			
			|  | 260 | +		}
 | 
		
	
		
			
			|  | 261 | +	} else {
 | 
		
	
		
			
			|  | 262 | +		/* desc->interval is a microframe count */
 | 
		
	
		
			
			|  | 263 | +		interval = desc->interval;
 | 
		
	
		
			
			|  | 264 | +	}
 | 
		
	
		
			
			|  | 265 | +
 | 
		
	
		
			
			| 249 | 266 |  	/* Describe endpoint */
 | 
		
	
		
			
			| 250 | 267 |  	usb_endpoint_describe ( ep, desc->endpoint, desc->attributes,
 | 
		
	
		
			
			| 251 |  | -				mtu, burst );
 | 
		
	
		
			
			|  | 268 | +				mtu, burst, interval );
 | 
		
	
		
			
			| 252 | 269 |  	return 0;
 | 
		
	
		
			
			| 253 | 270 |  }
 | 
		
	
		
			
			| 254 | 271 |  
 | 
		
	
	
		
			
			|  | @@ -286,8 +303,9 @@ int usb_endpoint_open ( struct usb_endpoint *ep ) {
 | 
		
	
		
			
			| 286 | 303 |  	}
 | 
		
	
		
			
			| 287 | 304 |  	ep->open = 1;
 | 
		
	
		
			
			| 288 | 305 |  
 | 
		
	
		
			
			| 289 |  | -	DBGC2 ( usb, "USB %s %s opened with MTU %zd (burst %d)\n", usb->name,
 | 
		
	
		
			
			| 290 |  | -		usb_endpoint_name ( ep->address ), ep->mtu, ep->burst );
 | 
		
	
		
			
			|  | 306 | +	DBGC2 ( usb, "USB %s %s opened with MTU %zd, burst %d, interval %d\n",
 | 
		
	
		
			
			|  | 307 | +		usb->name, usb_endpoint_name ( ep->address ), ep->mtu,
 | 
		
	
		
			
			|  | 308 | +		ep->burst, ep->interval );
 | 
		
	
		
			
			| 291 | 309 |  	return 0;
 | 
		
	
		
			
			| 292 | 310 |  
 | 
		
	
		
			
			| 293 | 311 |  	ep->open = 0;
 | 
		
	
	
		
			
			|  | @@ -1147,7 +1165,8 @@ static int register_usb ( struct usb_device *usb ) {
 | 
		
	
		
			
			| 1147 | 1165 |  	/* Describe control endpoint */
 | 
		
	
		
			
			| 1148 | 1166 |  	mtu = USB_EP0_DEFAULT_MTU ( port->speed );
 | 
		
	
		
			
			| 1149 | 1167 |  	usb_endpoint_describe ( &usb->control, USB_EP0_ADDRESS,
 | 
		
	
		
			
			| 1150 |  | -				USB_EP0_ATTRIBUTES, mtu, USB_EP0_BURST );
 | 
		
	
		
			
			|  | 1168 | +				USB_EP0_ATTRIBUTES, mtu, USB_EP0_BURST,
 | 
		
	
		
			
			|  | 1169 | +				USB_EP0_INTERVAL );
 | 
		
	
		
			
			| 1151 | 1170 |  
 | 
		
	
		
			
			| 1152 | 1171 |  	/* Open control endpoint */
 | 
		
	
		
			
			| 1153 | 1172 |  	if ( ( rc = usb_endpoint_open ( &usb->control ) ) != 0 )
 |