Commit 0b67a6be authored by John Youn's avatar John Youn Committed by Felipe Balbi

usb: gadget: composite: Exclude SS Dev Cap Desc

Don't send the SuperSpeed USB Device Capability descriptor if
the gadget is not capable of SuperSpeed.
Signed-off-by: default avatarJohn Youn <johnyoun@synopsys.com>
Signed-off-by: default avatarSevak Arakelyan <sevaka@synopsys.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent e16828cf
...@@ -607,7 +607,6 @@ static int count_configs(struct usb_composite_dev *cdev, unsigned type) ...@@ -607,7 +607,6 @@ static int count_configs(struct usb_composite_dev *cdev, unsigned type)
static int bos_desc(struct usb_composite_dev *cdev) static int bos_desc(struct usb_composite_dev *cdev)
{ {
struct usb_ext_cap_descriptor *usb_ext; struct usb_ext_cap_descriptor *usb_ext;
struct usb_ss_cap_descriptor *ss_cap;
struct usb_dcd_config_params dcd_config_params; struct usb_dcd_config_params dcd_config_params;
struct usb_bos_descriptor *bos = cdev->req->buf; struct usb_bos_descriptor *bos = cdev->req->buf;
...@@ -633,29 +632,35 @@ static int bos_desc(struct usb_composite_dev *cdev) ...@@ -633,29 +632,35 @@ static int bos_desc(struct usb_composite_dev *cdev)
* The Superspeed USB Capability descriptor shall be implemented by all * The Superspeed USB Capability descriptor shall be implemented by all
* SuperSpeed devices. * SuperSpeed devices.
*/ */
ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); if (gadget_is_superspeed(cdev->gadget)) {
bos->bNumDeviceCaps++; struct usb_ss_cap_descriptor *ss_cap;
le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SS_CAP_SIZE);
ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE; ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY; bos->bNumDeviceCaps++;
ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE; le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SS_CAP_SIZE);
ss_cap->bmAttributes = 0; /* LTM is not supported yet */ ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE;
ss_cap->wSpeedSupported = cpu_to_le16(USB_LOW_SPEED_OPERATION | ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
USB_FULL_SPEED_OPERATION | ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE;
USB_HIGH_SPEED_OPERATION | ss_cap->bmAttributes = 0; /* LTM is not supported yet */
USB_5GBPS_OPERATION); ss_cap->wSpeedSupported = cpu_to_le16(USB_LOW_SPEED_OPERATION |
ss_cap->bFunctionalitySupport = USB_LOW_SPEED_OPERATION; USB_FULL_SPEED_OPERATION |
USB_HIGH_SPEED_OPERATION |
/* Get Controller configuration */ USB_5GBPS_OPERATION);
if (cdev->gadget->ops->get_config_params) ss_cap->bFunctionalitySupport = USB_LOW_SPEED_OPERATION;
cdev->gadget->ops->get_config_params(&dcd_config_params);
else { /* Get Controller configuration */
dcd_config_params.bU1devExitLat = USB_DEFAULT_U1_DEV_EXIT_LAT; if (cdev->gadget->ops->get_config_params) {
dcd_config_params.bU2DevExitLat = cdev->gadget->ops->get_config_params(
cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT); &dcd_config_params);
} else {
dcd_config_params.bU1devExitLat =
USB_DEFAULT_U1_DEV_EXIT_LAT;
dcd_config_params.bU2DevExitLat =
cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT);
}
ss_cap->bU1devExitLat = dcd_config_params.bU1devExitLat;
ss_cap->bU2DevExitLat = dcd_config_params.bU2DevExitLat;
} }
ss_cap->bU1devExitLat = dcd_config_params.bU1devExitLat;
ss_cap->bU2DevExitLat = dcd_config_params.bU2DevExitLat;
/* The SuperSpeedPlus USB Device Capability descriptor */ /* The SuperSpeedPlus USB Device Capability descriptor */
if (gadget_is_superspeed_plus(cdev->gadget)) { if (gadget_is_superspeed_plus(cdev->gadget)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment