|
@@ -380,8 +380,12 @@ static int get_hub_descriptor(struct usb_device *hdev, void *data)
|
|
|
USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
|
|
|
dtype << 8, 0, data, size,
|
|
|
USB_CTRL_GET_TIMEOUT);
|
|
|
- if (ret >= (USB_DT_HUB_NONVAR_SIZE + 2))
|
|
|
+ if (hub_is_superspeed(hdev)) {
|
|
|
+ if (ret == size)
|
|
|
+ return ret;
|
|
|
+ } else if (ret >= (USB_DT_HUB_NONVAR_SIZE + 2)) {
|
|
|
return ret;
|
|
|
+ }
|
|
|
}
|
|
|
return -EINVAL;
|
|
|
}
|
|
@@ -1321,7 +1325,7 @@ static int hub_configure(struct usb_hub *hub,
|
|
|
|
|
|
/* Request the entire hub descriptor.
|
|
|
* hub->descriptor can handle USB_MAXCHILDREN ports,
|
|
|
- * but the hub can/will return fewer bytes here.
|
|
|
+ * but a (non-SS) hub can/will return fewer bytes here.
|
|
|
*/
|
|
|
ret = get_hub_descriptor(hdev, hub->descriptor);
|
|
|
if (ret < 0) {
|