[U-Boot] [PATCH 2/3] usb: fix: Fixing Port status and feature number constants
Julius Werner
jwerner at chromium.org
Wed Apr 24 19:52:51 CEST 2013
On Wed, Apr 24, 2013 at 5:50 AM, Vivek Gautam <gautam.vivek at 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 at 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
>
More information about the U-Boot
mailing list