usb: gadget: composite: Use SSP sublink speed macros
authorThinh Nguyen <Thinh.Nguyen@synopsys.com>
Thu, 14 Jan 2021 02:52:54 +0000 (18:52 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 18 Jan 2021 17:39:53 +0000 (18:39 +0100)
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: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/6f74d446aa164f66fbe4161e28547e28851f6a02.1610592135.git.Thinh.Nguyen@synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/composite.c

index 9a7cc08d6593e39b90bc4b06ba3616de28f3fd3b..bc17302a9e85c8385046322857b91bd8c7cb784a 100644 (file)
@@ -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);