Message ID | 1366807813-10481-3-git-send-email-gautam.vivek@samsung.com |
---|---|
State | Accepted |
Commit | 55f4b57542de9f4bee8dc0b7ca70686bd20e2aa4 |
Headers | show |
On Wed, Apr 24, 2013 at 5:50 AM, Vivek Gautam <gautam.vivek@samsung.com> wrote: > 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 | 40 ++++++++++++++++++++++++++++------------ > include/usb_defs.h | 39 +++++++++++++++++++++++---------------- > 2 files changed, 51 insertions(+), 28 deletions(-) > > diff --git a/common/usb_hub.c b/common/usb_hub.c > index dad0409..d9816e4 100644 > --- a/common/usb_hub.c > +++ b/common/usb_hub.c > @@ -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; > } Just a nitpick... you could save 8 lines here by moving the return into the case blocks. Rest of the patch set LGTM. > > 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; > diff --git a/include/usb_defs.h b/include/usb_defs.h > index 6ce6791..4f3601a 100644 > --- a/include/usb_defs.h > +++ b/include/usb_defs.h > @@ -215,8 +215,6 @@ > #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 > @@ -224,6 +222,17 @@ > #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 > @@ -233,20 +242,18 @@ > #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 > @@ -256,12 +263,12 @@ > #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 > -- > 1.7.6.5 >
diff --git a/common/usb_hub.c b/common/usb_hub.c index dad0409..d9816e4 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -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; diff --git a/include/usb_defs.h b/include/usb_defs.h index 6ce6791..4f3601a 100644 --- a/include/usb_defs.h +++ b/include/usb_defs.h @@ -215,8 +215,6 @@ #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 @@ -224,6 +222,17 @@ #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 @@ -233,20 +242,18 @@ #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 @@ -256,12 +263,12 @@ #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
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 | 40 ++++++++++++++++++++++++++++------------ include/usb_defs.h | 39 +++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 28 deletions(-)