Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1632704

[PATCH 7/9] [HSLPM] usb: gadget: composite: Exclude SS Dev Cap Desc

From Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com>
Newsgroups linux.kernel
Subject [PATCH 7/9] [HSLPM] usb: gadget: composite: Exclude SS Dev Cap Desc
Date 2017-04-28 11:00 +0200
Message-ID <tB9UT-53z-43@gated-at.bofh.it> (permalink)
References <tB9Lb-4Zj-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: John Youn <johnyoun@synopsys.com>

Don't send the SuperSpeed USB Device Capability descriptor if
the gadget is not capable of SuperSpeed.

Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Sevak Arakelyan <sevaka@synopsys.com>
---
 drivers/usb/gadget/composite.c | 51 +++++++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 23 deletions(-)

diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 49d685ad0da9..abec93ab81ee 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -607,7 +607,6 @@ static int count_configs(struct usb_composite_dev *cdev, unsigned type)
 static int bos_desc(struct usb_composite_dev *cdev)
 {
 	struct usb_ext_cap_descriptor	*usb_ext;
-	struct usb_ss_cap_descriptor	*ss_cap;
 	struct usb_dcd_config_params	dcd_config_params;
 	struct usb_bos_descriptor	*bos = cdev->req->buf;
 
@@ -633,29 +632,35 @@ static int bos_desc(struct usb_composite_dev *cdev)
 	 * The Superspeed USB Capability descriptor shall be implemented by all
 	 * SuperSpeed devices.
 	 */
-	ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
-	bos->bNumDeviceCaps++;
-	le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SS_CAP_SIZE);
-	ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE;
-	ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
-	ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE;
-	ss_cap->bmAttributes = 0; /* LTM is not supported yet */
-	ss_cap->wSpeedSupported = cpu_to_le16(USB_LOW_SPEED_OPERATION |
-				USB_FULL_SPEED_OPERATION |
-				USB_HIGH_SPEED_OPERATION |
-				USB_5GBPS_OPERATION);
-	ss_cap->bFunctionalitySupport = USB_LOW_SPEED_OPERATION;
-
-	/* Get Controller configuration */
-	if (cdev->gadget->ops->get_config_params)
-		cdev->gadget->ops->get_config_params(&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);
+	if (gadget_is_superspeed(cdev->gadget)) {
+		struct usb_ss_cap_descriptor *ss_cap;
+
+		ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
+		bos->bNumDeviceCaps++;
+		le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SS_CAP_SIZE);
+		ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE;
+		ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
+		ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE;
+		ss_cap->bmAttributes = 0; /* LTM is not supported yet */
+		ss_cap->wSpeedSupported = cpu_to_le16(USB_LOW_SPEED_OPERATION |
+						      USB_FULL_SPEED_OPERATION |
+						      USB_HIGH_SPEED_OPERATION |
+						      USB_5GBPS_OPERATION);
+		ss_cap->bFunctionalitySupport = USB_LOW_SPEED_OPERATION;
+
+		/* Get Controller configuration */
+		if (cdev->gadget->ops->get_config_params) {
+			cdev->gadget->ops->get_config_params(
+				&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 */
 	if (gadget_is_superspeed_plus(cdev->gadget)) {
-- 
2.11.0

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

[PATCH 0/9] usb: dwc2: gadget: Add LPM functionality Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 10:50 +0200
  [PATCH 1/9] usb: dwc2: Fix GLPMCFG... definitions Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 10:50 +0200
  [PATCH 2/9] usb: dwc2: Add core parameters for LPM support Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 10:50 +0200
  [PATCH 9/9] [HSLPM] usb: dwc2: Enable LPM Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 11:00 +0200
    Re: [PATCH 9/9] [HSLPM] usb: dwc2: Enable LPM Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2017-04-28 11:30 +0200
  [PATCH 5/9] usb: dwc2: Enable LPM Transaction Received interrupt. Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 11:00 +0200
  [PATCH 3/9] usb: dwc2: gadget: Add functionality to exit from LPM L1 state Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 11:00 +0200
  [PATCH 6/9] usb: dwc2: gadget: Configure the core to enable LPM. Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 11:00 +0200
  [PATCH 8/9] [HSLPM] usb: gadget: Allow a non-SuperSpeed gadget to support LPM Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 11:00 +0200
  [PATCH 4/9] usb: dwc2: gadget: LPM interrupt handler Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 11:00 +0200
  [PATCH 7/9] [HSLPM] usb: gadget: composite: Exclude SS Dev Cap Desc Sevak Arakelyan <SEVAK.ARAKELYAN@synopsys.com> - 2017-04-28 11:00 +0200

csiph-web