Commit 121fc3ac authored by Thinh Nguyen's avatar Thinh Nguyen Committed by Greg Kroah-Hartman
Browse files

usb: gadget: composite: Use SSP sublink speed macros



Use SuperSpeed Plus sublink speed macros to fill the BOS descriptor
sublink speed attributes in the composite driver. They're
self-documented so we can remove some of the comments, and this helps
with readability by removing the magic numbers.

Signed-off-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/6f74d446aa164f66fbe4161e28547e28851f6a02.1610592135.git.Thinh.Nguyen@synopsys.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f2fc9ff2
Loading
Loading
Loading
Loading
+24 −21
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include <linux/module.h>
#include <linux/device.h>
#include <linux/utsname.h>
#include <linux/bitfield.h>

#include <linux/usb/composite.h>
#include <linux/usb/otg.h>
@@ -749,32 +750,34 @@ static int bos_desc(struct usb_composite_dev *cdev)
		ssp_cap->bReserved = 0;
		ssp_cap->wReserved = 0;

		/* SSAC = 1 (2 attributes) */
		ssp_cap->bmAttributes = cpu_to_le32(1);
		ssp_cap->bmAttributes =
			cpu_to_le32(FIELD_PREP(USB_SSP_SUBLINK_SPEED_ATTRIBS, 1) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_IDS, 0));

		/* Min RX/TX Lane Count = 1 */
		ssp_cap->wFunctionalitySupport =
			cpu_to_le16((1 << 8) | (1 << 12));
			cpu_to_le16(FIELD_PREP(USB_SSP_MIN_SUBLINK_SPEED_ATTRIBUTE_ID, 0) |
				    FIELD_PREP(USB_SSP_MIN_RX_LANE_COUNT, 1) |
				    FIELD_PREP(USB_SSP_MIN_TX_LANE_COUNT, 1));

		/*
		 * bmSublinkSpeedAttr[0]:
		 *   ST  = Symmetric, RX
		 *   LSE =  3 (Gbps)
		 *   LP  =  1 (SuperSpeedPlus)
		 *   LSM = 10 (10 Gbps)
		 */
		ssp_cap->bmSublinkSpeedAttr[0] =
			cpu_to_le32((3 << 4) | (1 << 14) | (0xa << 16));
		/*
		 * bmSublinkSpeedAttr[1] =
		 *   ST  = Symmetric, TX
		 *   LSE =  3 (Gbps)
		 *   LP  =  1 (SuperSpeedPlus)
		 *   LSM = 10 (10 Gbps)
		 */
			cpu_to_le32(FIELD_PREP(USB_SSP_SUBLINK_SPEED_SSID, 0) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_LSE,
					       USB_SSP_SUBLINK_SPEED_LSE_GBPS) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_ST,
					       USB_SSP_SUBLINK_SPEED_ST_SYM_RX) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_LP,
					       USB_SSP_SUBLINK_SPEED_LP_SSP) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_LSM, 10));

		ssp_cap->bmSublinkSpeedAttr[1] =
			cpu_to_le32((3 << 4) | (1 << 14) |
				    (0xa << 16) | (1 << 7));
			cpu_to_le32(FIELD_PREP(USB_SSP_SUBLINK_SPEED_SSID, 0) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_LSE,
					       USB_SSP_SUBLINK_SPEED_LSE_GBPS) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_ST,
					       USB_SSP_SUBLINK_SPEED_ST_SYM_TX) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_LP,
					       USB_SSP_SUBLINK_SPEED_LP_SSP) |
				    FIELD_PREP(USB_SSP_SUBLINK_SPEED_LSM, 10));
	}

	return le16_to_cpu(bos->wTotalLength);