usb: fix: Fixing Port status and feature number constants
authorVivek Gautam <gautam.vivek@samsung.com>
Wed, 24 Apr 2013 02:50:12 +0000 (02:50 +0000)
committerMarek Vasut <marex@denx.de>
Mon, 6 May 2013 00:16:36 +0000 (02:16 +0200)
Fix the Port status bit constants and Port feature number
constants as a part of USB 2.0 and USB 3.0 Hub class.

Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
common/usb_hub.c
include/usb_defs.h

index 4fbfacf2491eb9c4e9bc8092fce9f4d6a7a00bb0..0d79ec3ea84abfc8d61988cbfc30c8ba17cec60e 100644 (file)
@@ -170,14 +170,24 @@ static struct usb_hub_device *usb_hub_allocate(void)
 
 static inline char *portspeed(int portstatus)
 {
-       if (portstatus & (1 << USB_PORT_FEAT_SUPERSPEED))
-               return "5 Gb/s";
-       else if (portstatus & (1 << USB_PORT_FEAT_HIGHSPEED))
-               return "480 Mb/s";
-       else if (portstatus & (1 << USB_PORT_FEAT_LOWSPEED))
-               return "1.5 Mb/s";
-       else
-               return "12 Mb/s";
+       char *speed_str;
+
+       switch (portstatus & USB_PORT_STAT_SPEED_MASK) {
+       case USB_PORT_STAT_SUPER_SPEED:
+               speed_str = "5 Gb/s";
+               break;
+       case USB_PORT_STAT_HIGH_SPEED:
+               speed_str = "480 Mb/s";
+               break;
+       case USB_PORT_STAT_LOW_SPEED:
+               speed_str = "1.5 Mb/s";
+               break;
+       default:
+               speed_str = "12 Mb/s";
+               break;
+       }
+
+       return speed_str;
 }
 
 int hub_port_reset(struct usb_device *dev, int port,
@@ -275,14 +285,20 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
        /* Allocate a new device struct for it */
        usb = usb_alloc_new_device(dev->controller);
 
-       if (portstatus & USB_PORT_STAT_SUPER_SPEED)
+       switch (portstatus & USB_PORT_STAT_SPEED_MASK) {
+       case USB_PORT_STAT_SUPER_SPEED:
                usb->speed = USB_SPEED_SUPER;
-       else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
+               break;
+       case USB_PORT_STAT_HIGH_SPEED:
                usb->speed = USB_SPEED_HIGH;
-       else if (portstatus & USB_PORT_STAT_LOW_SPEED)
+               break;
+       case USB_PORT_STAT_LOW_SPEED:
                usb->speed = USB_SPEED_LOW;
-       else
+               break;
+       default:
                usb->speed = USB_SPEED_FULL;
+               break;
+       }
 
        dev->children[port] = usb;
        usb->parent = dev;
index 6ce67914071fef77004f9c20d392ba669dd252eb..4f3601a16c3a487a05b6bcf8c31cda2d3bc27894 100644 (file)
 #define USB_PORT_FEAT_POWER          8
 #define USB_PORT_FEAT_LOWSPEED       9
 #define USB_PORT_FEAT_HIGHSPEED      10
-#define USB_PORT_FEAT_FULLSPEED      11
-#define USB_PORT_FEAT_SUPERSPEED     12
 #define USB_PORT_FEAT_C_CONNECTION   16
 #define USB_PORT_FEAT_C_ENABLE       17
 #define USB_PORT_FEAT_C_SUSPEND      18
 #define USB_PORT_FEAT_C_RESET        20
 #define USB_PORT_FEAT_TEST           21
 
+/*
+ * Changes to Port feature numbers for Super speed,
+ * from USB 3.0 spec Table 10-8
+ */
+#define USB_SS_PORT_FEAT_U1_TIMEOUT    23
+#define USB_SS_PORT_FEAT_U2_TIMEOUT    24
+#define USB_SS_PORT_FEAT_C_LINK_STATE  25
+#define USB_SS_PORT_FEAT_C_CONFIG_ERROR        26
+#define USB_SS_PORT_FEAT_BH_RESET      28
+#define USB_SS_PORT_FEAT_C_BH_RESET    29
+
 /* wPortStatus bits */
 #define USB_PORT_STAT_CONNECTION    0x0001
 #define USB_PORT_STAT_ENABLE        0x0002
 #define USB_PORT_STAT_POWER         0x0100
 #define USB_PORT_STAT_LOW_SPEED     0x0200
 #define USB_PORT_STAT_HIGH_SPEED    0x0400     /* support for EHCI */
-#define USB_PORT_STAT_FULL_SPEED    0x0800
-#define USB_PORT_STAT_SUPER_SPEED   0x1000     /* support for XHCI */
-#define USB_PORT_STAT_SPEED    \
-       (USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED | \
-       USB_PORT_STAT_FULL_SPEED | USB_PORT_STAT_SUPER_SPEED)
+#define USB_PORT_STAT_SUPER_SPEED   0x0600     /* faking support to XHCI */
+#define USB_PORT_STAT_SPEED_MASK       \
+       (USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED)
 
 /*
- * Additions to wPortStatus bit field from USB 3.0
- * See USB 3.0 spec Table 10-10
+ * Changes to wPortStatus bit field in USB 3.0
+ * See USB 3.0 spec Table 10-11
  */
-#define USB_PORT_STAT_LINK_STATE       0x01e0
+#define USB_SS_PORT_STAT_LINK_STATE    0x01e0
 #define USB_SS_PORT_STAT_POWER         0x0200
 #define USB_SS_PORT_STAT_SPEED         0x1c00
-#define USB_PORT_STAT_SPEED_5GBPS      0x0000
+#define USB_SS_PORT_STAT_SPEED_5GBPS   0x0000
 
 /* wPortChange bits */
 #define USB_PORT_STAT_C_CONNECTION  0x0001
 #define USB_PORT_STAT_C_RESET       0x0010
 
 /*
- * Addition to wPortChange bit fields form USB 3.0
- * See USB 3.0 spec Table 10-11
+ * Changes to wPortChange bit fields in USB 3.0
+ * See USB 3.0 spec Table 10-12
  */
-#define USB_PORT_STAT_C_BH_RESET       0x0020
-#define USB_PORT_STAT_C_LINK_STATE     0x0040
-#define USB_PORT_STAT_C_CONFIG_ERROR   0x0080
+#define USB_SS_PORT_STAT_C_BH_RESET    0x0020
+#define USB_SS_PORT_STAT_C_LINK_STATE  0x0040
+#define USB_SS_PORT_STAT_C_CONFIG_ERROR        0x0080
 
 /* wHubCharacteristics (masks) */
 #define HUB_CHAR_LPSM               0x0003