usb: fix: Fixing Port status and feature number constants

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>
This commit is contained in:
Vivek Gautam 2013-04-24 02:50:12 +00:00 committed by Marek Vasut
parent 0bf796f7ae
commit 55f4b57542
2 changed files with 51 additions and 28 deletions

View File

@ -170,14 +170,24 @@ static struct usb_hub_device *usb_hub_allocate(void)
static inline char *portspeed(int portstatus) static inline char *portspeed(int portstatus)
{ {
if (portstatus & (1 << USB_PORT_FEAT_SUPERSPEED)) char *speed_str;
return "5 Gb/s";
else if (portstatus & (1 << USB_PORT_FEAT_HIGHSPEED)) switch (portstatus & USB_PORT_STAT_SPEED_MASK) {
return "480 Mb/s"; case USB_PORT_STAT_SUPER_SPEED:
else if (portstatus & (1 << USB_PORT_FEAT_LOWSPEED)) speed_str = "5 Gb/s";
return "1.5 Mb/s"; break;
else case USB_PORT_STAT_HIGH_SPEED:
return "12 Mb/s"; 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, 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 */ /* Allocate a new device struct for it */
usb = usb_alloc_new_device(dev->controller); 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; 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; 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; usb->speed = USB_SPEED_LOW;
else break;
default:
usb->speed = USB_SPEED_FULL; usb->speed = USB_SPEED_FULL;
break;
}
dev->children[port] = usb; dev->children[port] = usb;
usb->parent = dev; usb->parent = dev;

View File

@ -215,8 +215,6 @@
#define USB_PORT_FEAT_POWER 8 #define USB_PORT_FEAT_POWER 8
#define USB_PORT_FEAT_LOWSPEED 9 #define USB_PORT_FEAT_LOWSPEED 9
#define USB_PORT_FEAT_HIGHSPEED 10 #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_CONNECTION 16
#define USB_PORT_FEAT_C_ENABLE 17 #define USB_PORT_FEAT_C_ENABLE 17
#define USB_PORT_FEAT_C_SUSPEND 18 #define USB_PORT_FEAT_C_SUSPEND 18
@ -224,6 +222,17 @@
#define USB_PORT_FEAT_C_RESET 20 #define USB_PORT_FEAT_C_RESET 20
#define USB_PORT_FEAT_TEST 21 #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 */ /* wPortStatus bits */
#define USB_PORT_STAT_CONNECTION 0x0001 #define USB_PORT_STAT_CONNECTION 0x0001
#define USB_PORT_STAT_ENABLE 0x0002 #define USB_PORT_STAT_ENABLE 0x0002
@ -233,20 +242,18 @@
#define USB_PORT_STAT_POWER 0x0100 #define USB_PORT_STAT_POWER 0x0100
#define USB_PORT_STAT_LOW_SPEED 0x0200 #define USB_PORT_STAT_LOW_SPEED 0x0200
#define USB_PORT_STAT_HIGH_SPEED 0x0400 /* support for EHCI */ #define USB_PORT_STAT_HIGH_SPEED 0x0400 /* support for EHCI */
#define USB_PORT_STAT_FULL_SPEED 0x0800 #define USB_PORT_STAT_SUPER_SPEED 0x0600 /* faking support to XHCI */
#define USB_PORT_STAT_SUPER_SPEED 0x1000 /* support for XHCI */ #define USB_PORT_STAT_SPEED_MASK \
#define USB_PORT_STAT_SPEED \ (USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED)
(USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED | \
USB_PORT_STAT_FULL_SPEED | USB_PORT_STAT_SUPER_SPEED)
/* /*
* Additions to wPortStatus bit field from USB 3.0 * Changes to wPortStatus bit field in USB 3.0
* See USB 3.0 spec Table 10-10 * 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_POWER 0x0200
#define USB_SS_PORT_STAT_SPEED 0x1c00 #define USB_SS_PORT_STAT_SPEED 0x1c00
#define USB_PORT_STAT_SPEED_5GBPS 0x0000 #define USB_SS_PORT_STAT_SPEED_5GBPS 0x0000
/* wPortChange bits */ /* wPortChange bits */
#define USB_PORT_STAT_C_CONNECTION 0x0001 #define USB_PORT_STAT_C_CONNECTION 0x0001
@ -256,12 +263,12 @@
#define USB_PORT_STAT_C_RESET 0x0010 #define USB_PORT_STAT_C_RESET 0x0010
/* /*
* Addition to wPortChange bit fields form USB 3.0 * Changes to wPortChange bit fields in USB 3.0
* See USB 3.0 spec Table 10-11 * See USB 3.0 spec Table 10-12
*/ */
#define USB_PORT_STAT_C_BH_RESET 0x0020 #define USB_SS_PORT_STAT_C_BH_RESET 0x0020
#define USB_PORT_STAT_C_LINK_STATE 0x0040 #define USB_SS_PORT_STAT_C_LINK_STATE 0x0040
#define USB_PORT_STAT_C_CONFIG_ERROR 0x0080 #define USB_SS_PORT_STAT_C_CONFIG_ERROR 0x0080
/* wHubCharacteristics (masks) */ /* wHubCharacteristics (masks) */
#define HUB_CHAR_LPSM 0x0003 #define HUB_CHAR_LPSM 0x0003