diff options
Diffstat (limited to 'drivers/usb/core/hcd.c')
| -rw-r--r-- | drivers/usb/core/hcd.c | 28 | 
1 files changed, 28 insertions, 0 deletions
| diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index d53547d2e4c7..014dc996b4f6 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -149,6 +149,27 @@ static const u8 usb3_rh_dev_descriptor[18] = {  	0x01        /*  __u8  bNumConfigurations; */  }; +/* usb 2.5 (wireless USB 1.0) root hub device descriptor */ +static const u8 usb25_rh_dev_descriptor[18] = { +	0x12,       /*  __u8  bLength; */ +	0x01,       /*  __u8  bDescriptorType; Device */ +	0x50, 0x02, /*  __le16 bcdUSB; v2.5 */ + +	0x09,	    /*  __u8  bDeviceClass; HUB_CLASSCODE */ +	0x00,	    /*  __u8  bDeviceSubClass; */ +	0x00,       /*  __u8  bDeviceProtocol; [ usb 2.0 no TT ] */ +	0xFF,       /*  __u8  bMaxPacketSize0; always 0xFF (WUSB Spec 7.4.1). */ + +	0x6b, 0x1d, /*  __le16 idVendor; Linux Foundation 0x1d6b */ +	0x02, 0x00, /*  __le16 idProduct; device 0x0002 */ +	KERNEL_VER, KERNEL_REL, /*  __le16 bcdDevice */ + +	0x03,       /*  __u8  iManufacturer; */ +	0x02,       /*  __u8  iProduct; */ +	0x01,       /*  __u8  iSerialNumber; */ +	0x01        /*  __u8  bNumConfigurations; */ +}; +  /* usb 2.0 root hub device descriptor */  static const u8 usb2_rh_dev_descriptor [18] = {  	0x12,       /*  __u8  bLength; */ @@ -527,6 +548,9 @@ static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)  			case HCD_USB3:  				bufp = usb3_rh_dev_descriptor;  				break; +			case HCD_USB25: +				bufp = usb25_rh_dev_descriptor; +				break;  			case HCD_USB2:  				bufp = usb2_rh_dev_descriptor;  				break; @@ -546,6 +570,7 @@ static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)  				bufp = ss_rh_config_descriptor;  				len = sizeof ss_rh_config_descriptor;  				break; +			case HCD_USB25:  			case HCD_USB2:  				bufp = hs_rh_config_descriptor;  				len = sizeof hs_rh_config_descriptor; @@ -2511,6 +2536,9 @@ int usb_add_hcd(struct usb_hcd *hcd,  	case HCD_USB2:  		rhdev->speed = USB_SPEED_HIGH;  		break; +	case HCD_USB25: +		rhdev->speed = USB_SPEED_WIRELESS; +		break;  	case HCD_USB3:  		rhdev->speed = USB_SPEED_SUPER;  		break; |