lkml.org 
[lkml]   [2011]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv4 1/4] usb: Provide usb_speed_string() function
    Date
    From: Michal Nazarewicz <mina86@mina86.com>

    In a few places in the kernel, the code prints
    a human-readable USB device speed (eg. "high speed").
    This involves a switch statement sometimes wrapped
    around in ({ ... }) block leading to code repetition.

    To mitigate this issue, this commit introduces
    usb_speed_string() function, which returns
    a human-readable name of provided speed.

    It also changes a few places switch was used to use
    this new function. This changes a bit the way the
    speed is printed in few instances at the same time
    standardising it.

    Signed-off-by: Michal Nazarewicz <mina86@mina86.com>
    ---
    drivers/usb/Makefile | 3 ++
    drivers/usb/common.c | 24 ++++++++++++++++
    drivers/usb/core/hub.c | 27 ++++++------------
    drivers/usb/gadget/amd5536udc.c | 9 +----
    drivers/usb/gadget/atmel_usba_udc.c | 9 ++---
    drivers/usb/gadget/composite.c | 22 ++------------
    drivers/usb/gadget/file_storage.c | 15 ++-------
    drivers/usb/gadget/fsl_udc_core.c | 53 ++++++++++++----------------------
    drivers/usb/gadget/gmidi.c | 11 +------
    drivers/usb/gadget/langwell_udc.c | 50 +++++++++++---------------------
    drivers/usb/gadget/net2272.c | 4 +-
    drivers/usb/gadget/net2280.c | 4 +--
    drivers/usb/gadget/printer.c | 14 ++-------
    drivers/usb/gadget/s3c-hsotg.c | 8 +----
    drivers/usb/gadget/udc-core.c | 19 +-----------
    drivers/usb/misc/usbtest.c | 21 +------------
    include/linux/usb/ch9.h | 12 ++++++++
    17 files changed, 110 insertions(+), 195 deletions(-)
    create mode 100644 drivers/usb/common.c

    diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
    index 30ddf8d..a3167cc 100644
    --- a/drivers/usb/Makefile
    +++ b/drivers/usb/Makefile
    @@ -51,3 +51,6 @@ obj-$(CONFIG_USB_MUSB_HDRC) += musb/
    obj-$(CONFIG_USB_RENESAS_USBHS) += renesas_usbhs/
    obj-$(CONFIG_USB_OTG_UTILS) += otg/
    obj-$(CONFIG_USB_GADGET) += gadget/
    +
    +obj-$(CONFIG_USB) += common.o
    +obj-$(CONFIG_USB_GADGET) += common.o
    diff --git a/drivers/usb/common.c b/drivers/usb/common.c
    new file mode 100644
    index 0000000..2f6627c
    --- /dev/null
    +++ b/drivers/usb/common.c
    @@ -0,0 +1,24 @@
    +/*
    + * Provides code common for host and device side USB.
    + */
    +
    +#include <linux/kernel.h> /* for ARRAY_SIZE() */
    +#include <linux/module.h> /* for EXPORT_SYMBOL_GPL() */
    +#include <linux/usb/ch9.h>
    +
    +const char *usb_speed_string(enum usb_device_speed speed)
    +{
    + static const char *const names[] = {
    + [USB_SPEED_UNKNOWN] = "UNKNOWN",
    + [USB_SPEED_LOW] = "low-speed",
    + [USB_SPEED_FULL] = "full-speed",
    + [USB_SPEED_HIGH] = "high-speed",
    + [USB_SPEED_WIRELESS] = "wireless",
    + [USB_SPEED_SUPER] = "super-speed",
    + };
    +
    + if (speed < 0 || speed >= ARRAY_SIZE(names))
    + speed = USB_SPEED_UNKNOWN;
    + return names[speed];
    +}
    +EXPORT_SYMBOL_GPL(usb_speed_string);
    diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
    index a428aa0..8614cbe 100644
    --- a/drivers/usb/core/hub.c
    +++ b/drivers/usb/core/hub.c
    @@ -2798,7 +2798,7 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
    int i, j, retval;
    unsigned delay = HUB_SHORT_RESET_TIME;
    enum usb_device_speed oldspeed = udev->speed;
    - char *speed, *type;
    + const char *speed;
    int devnum = udev->devnum;

    /* root hub ports have a slightly longer reset period
    @@ -2858,25 +2858,16 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
    default:
    goto fail;
    }
    -
    - type = "";
    - switch (udev->speed) {
    - case USB_SPEED_LOW: speed = "low"; break;
    - case USB_SPEED_FULL: speed = "full"; break;
    - case USB_SPEED_HIGH: speed = "high"; break;
    - case USB_SPEED_SUPER:
    - speed = "super";
    - break;
    - case USB_SPEED_WIRELESS:
    - speed = "variable";
    - type = "Wireless ";
    - break;
    - default: speed = "?"; break;
    - }
    +
    + if (udev->speed == USB_SPEED_WIRELESS)
    + speed = "variable speed Wireless";
    + else
    + speed = usb_speed_string(udev->speed);
    +
    if (udev->speed != USB_SPEED_SUPER)
    dev_info(&udev->dev,
    - "%s %s speed %sUSB device number %d using %s\n",
    - (udev->config) ? "reset" : "new", speed, type,
    + "%s %s USB device number %d using %s\n",
    + (udev->config) ? "reset" : "new", speed,
    devnum, udev->bus->controller->driver->name);

    /* Set up TT records, if needed */
    diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
    index 70f2b37..397c9b9 100644
    --- a/drivers/usb/gadget/amd5536udc.c
    +++ b/drivers/usb/gadget/amd5536udc.c
    @@ -3014,13 +3014,8 @@ __acquires(dev->lock)

    /* link up all endpoints */
    udc_setup_endpoints(dev);
    - if (dev->gadget.speed == USB_SPEED_HIGH) {
    - dev_info(&dev->pdev->dev, "Connect: speed = %s\n",
    - "high");
    - } else if (dev->gadget.speed == USB_SPEED_FULL) {
    - dev_info(&dev->pdev->dev, "Connect: speed = %s\n",
    - "full");
    - }
    + dev_info(&dev->pdev->dev, "Connect: %s\n",
    + usb_speed_string(dev->gadget.speed));

    /* init ep 0 */
    activate_control_endpoints(dev);
    diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
    index 5b1665e..2507a34 100644
    --- a/drivers/usb/gadget/atmel_usba_udc.c
    +++ b/drivers/usb/gadget/atmel_usba_udc.c
    @@ -1718,13 +1718,12 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
    spin_lock(&udc->lock);
    }

    - if (status & USBA_HIGH_SPEED) {
    - DBG(DBG_BUS, "High-speed bus reset detected\n");
    + if (status & USBA_HIGH_SPEED)
    udc->gadget.speed = USB_SPEED_HIGH;
    - } else {
    - DBG(DBG_BUS, "Full-speed bus reset detected\n");
    + else
    udc->gadget.speed = USB_SPEED_FULL;
    - }
    + DBG(DBG_BUS, "%s bus reset detected\n",
    + usb_speed_string(udc->gadget.speed));

    ep0 = &usba_ep[0];
    ep0->desc = &usba_ep0_desc;
    diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
    index 5a3461e..0d03936 100644
    --- a/drivers/usb/gadget/composite.c
    +++ b/drivers/usb/gadget/composite.c
    @@ -627,25 +627,9 @@ static int set_config(struct usb_composite_dev *cdev,
    result = 0;
    }

    - INFO(cdev, "%s speed config #%d: %s\n",
    - ({ char *speed;
    - switch (gadget->speed) {
    - case USB_SPEED_LOW:
    - speed = "low";
    - break;
    - case USB_SPEED_FULL:
    - speed = "full";
    - break;
    - case USB_SPEED_HIGH:
    - speed = "high";
    - break;
    - case USB_SPEED_SUPER:
    - speed = "super";
    - break;
    - default:
    - speed = "?";
    - break;
    - } ; speed; }), number, c ? c->label : "unconfigured");
    + INFO(cdev, "%s config #%d: %s\n",
    + usb_speed_string(gadget->speed),
    + number, c ? c->label : "unconfigured");

    if (!c)
    goto done;
    diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
    index cf875be..fede982 100644
    --- a/drivers/usb/gadget/file_storage.c
    +++ b/drivers/usb/gadget/file_storage.c
    @@ -2863,17 +2863,10 @@ static int do_set_config(struct fsg_dev *fsg, u8 new_config)
    fsg->config = new_config;
    if ((rc = do_set_interface(fsg, 0)) != 0)
    fsg->config = 0; // Reset on errors
    - else {
    - char *speed;
    -
    - switch (fsg->gadget->speed) {
    - case USB_SPEED_LOW: speed = "low"; break;
    - case USB_SPEED_FULL: speed = "full"; break;
    - case USB_SPEED_HIGH: speed = "high"; break;
    - default: speed = "?"; break;
    - }
    - INFO(fsg, "%s speed config #%d\n", speed, fsg->config);
    - }
    + else
    + INFO(fsg, "%s config #%d\n",
    + usb_speed_string(fsg->gadget->speed),
    + fsg->config);
    }
    return rc;
    }
    diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
    index de24a42..a3ce075 100644
    --- a/drivers/usb/gadget/fsl_udc_core.c
    +++ b/drivers/usb/gadget/fsl_udc_core.c
    @@ -1715,34 +1715,31 @@ static void dtd_complete_irq(struct fsl_udc *udc)
    }
    }

    +static inline enum usb_device_speed portscx_device_speed(u32 reg)
    +{
    + switch (speed & PORTSCX_PORT_SPEED_MASK) {
    + case PORTSCX_PORT_SPEED_HIGH:
    + return USB_SPEED_HIGH;
    + case PORTSCX_PORT_SPEED_FULL:
    + return USB_SPEED_FULL;
    + case PORTSCX_PORT_SPEED_LOW:
    + return USB_SPEED_LOW;
    + default:
    + return USB_SPEED_UNKNOWN;
    + }
    +}
    +
    /* Process a port change interrupt */
    static void port_change_irq(struct fsl_udc *udc)
    {
    - u32 speed;
    -
    if (udc->bus_reset)
    udc->bus_reset = 0;

    /* Bus resetting is finished */
    - if (!(fsl_readl(&dr_regs->portsc1) & PORTSCX_PORT_RESET)) {
    + if (!(fsl_readl(&dr_regs->portsc1) & PORTSCX_PORT_RESET))
    /* Get the speed */
    - speed = (fsl_readl(&dr_regs->portsc1)
    - & PORTSCX_PORT_SPEED_MASK);
    - switch (speed) {
    - case PORTSCX_PORT_SPEED_HIGH:
    - udc->gadget.speed = USB_SPEED_HIGH;
    - break;
    - case PORTSCX_PORT_SPEED_FULL:
    - udc->gadget.speed = USB_SPEED_FULL;
    - break;
    - case PORTSCX_PORT_SPEED_LOW:
    - udc->gadget.speed = USB_SPEED_LOW;
    - break;
    - default:
    - udc->gadget.speed = USB_SPEED_UNKNOWN;
    - break;
    - }
    - }
    + udc->gadget.speed =
    + portscx_device_speed(fsl_readl(&dr_regs->portsc1));

    /* Update USB state */
    if (!udc->resume_state)
    @@ -2167,20 +2164,8 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
    default:
    s = "None"; break;
    }
    - s;} ), ( {
    - char *s;
    - switch (tmp_reg & PORTSCX_PORT_SPEED_UNDEF) {
    - case PORTSCX_PORT_SPEED_FULL:
    - s = "Full Speed"; break;
    - case PORTSCX_PORT_SPEED_LOW:
    - s = "Low Speed"; break;
    - case PORTSCX_PORT_SPEED_HIGH:
    - s = "High Speed"; break;
    - default:
    - s = "Undefined"; break;
    - }
    - s;
    - } ),
    + s;} ),
    + usb_speed_string(portscx_device_speed(tmp_reg)),
    (tmp_reg & PORTSCX_PHY_LOW_POWER_SPD) ?
    "Normal PHY mode" : "Low power mode",
    (tmp_reg & PORTSCX_PORT_RESET) ? "In Reset" :
    diff --git a/drivers/usb/gadget/gmidi.c b/drivers/usb/gadget/gmidi.c
    index 305a8a8..6c3d213 100644
    --- a/drivers/usb/gadget/gmidi.c
    +++ b/drivers/usb/gadget/gmidi.c
    @@ -641,17 +641,8 @@ gmidi_set_config(struct gmidi_device *dev, unsigned number, gfp_t gfp_flags)
    if (result) {
    gmidi_reset_config(dev);
    } else {
    - char *speed;
    -
    - switch (gadget->speed) {
    - case USB_SPEED_LOW: speed = "low"; break;
    - case USB_SPEED_FULL: speed = "full"; break;
    - case USB_SPEED_HIGH: speed = "high"; break;
    - default: speed = "?"; break;
    - }
    -
    dev->config = number;
    - INFO(dev, "%s speed\n", speed);
    + INFO(dev, "%s speed\n", usb_speed_string(gadget->speed));
    }
    return result;
    }
    diff --git a/drivers/usb/gadget/langwell_udc.c b/drivers/usb/gadget/langwell_udc.c
    index a06e2c2..806a5df 100644
    --- a/drivers/usb/gadget/langwell_udc.c
    +++ b/drivers/usb/gadget/langwell_udc.c
    @@ -1700,20 +1700,7 @@ static ssize_t show_langwell_udc(struct device *_dev,
    "BmAttributes: %d\n\n",
    LPM_PTS(tmp_reg),
    (tmp_reg & LPM_STS) ? 1 : 0,
    - ({
    - char *s;
    - switch (LPM_PSPD(tmp_reg)) {
    - case LPM_SPEED_FULL:
    - s = "Full Speed"; break;
    - case LPM_SPEED_LOW:
    - s = "Low Speed"; break;
    - case LPM_SPEED_HIGH:
    - s = "High Speed"; break;
    - default:
    - s = "Unknown Speed"; break;
    - }
    - s;
    - }),
    + usb_speed_string(lpm_device_speed(tmp_reg)),
    (tmp_reg & LPM_PFSC) ? "Force Full Speed" : "Not Force",
    (tmp_reg & LPM_PHCD) ? "Disabled" : "Enabled",
    LPM_BA(tmp_reg));
    @@ -2657,12 +2644,24 @@ done:
    dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__);
    }

    +static inline enum usb_device_speed lpm_device_speed(u32 reg)
    +{
    + switch (LPM_PSPD(reg)) {
    + case LPM_SPEED_HIGH:
    + return USB_SPEED_HIGH;
    + case LPM_SPEED_FULL:
    + return USB_SPEED_FULL;
    + case LPM_SPEED_LOW:
    + return USB_SPEED_LOW;
    + default:
    + return USB_SPEED_UNKNOWN;
    + }
    +}

    /* port change detect interrupt handler */
    static void handle_port_change(struct langwell_udc *dev)
    {
    u32 portsc1, devlc;
    - u32 speed;

    dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__);

    @@ -2677,24 +2676,9 @@ static void handle_port_change(struct langwell_udc *dev)
    /* bus reset is finished */
    if (!(portsc1 & PORTS_PR)) {
    /* get the speed */
    - speed = LPM_PSPD(devlc);
    - switch (speed) {
    - case LPM_SPEED_HIGH:
    - dev->gadget.speed = USB_SPEED_HIGH;
    - break;
    - case LPM_SPEED_FULL:
    - dev->gadget.speed = USB_SPEED_FULL;
    - break;
    - case LPM_SPEED_LOW:
    - dev->gadget.speed = USB_SPEED_LOW;
    - break;
    - default:
    - dev->gadget.speed = USB_SPEED_UNKNOWN;
    - break;
    - }
    - dev_vdbg(&dev->pdev->dev,
    - "speed = %d, dev->gadget.speed = %d\n",
    - speed, dev->gadget.speed);
    + dev->gadget.speed = lpm_device_speed(devlc);
    + dev_vdbg(&dev->pdev->dev, "dev->gadget.speed = %d\n",
    + dev->gadget.speed);
    }

    /* LPM L0 to L1 */
    diff --git a/drivers/usb/gadget/net2272.c b/drivers/usb/gadget/net2272.c
    index ab98ea9..81d3dfa 100644
    --- a/drivers/usb/gadget/net2272.c
    +++ b/drivers/usb/gadget/net2272.c
    @@ -1764,8 +1764,8 @@ net2272_handle_stat0_irqs(struct net2272 *dev, u8 stat)
    dev->gadget.speed = USB_SPEED_HIGH;
    else
    dev->gadget.speed = USB_SPEED_FULL;
    - dev_dbg(dev->dev, "%s speed\n",
    - (dev->gadget.speed == USB_SPEED_HIGH) ? "high" : "full");
    + dev_dbg(dev->dev, "%s\n",
    + usb_speed_string(dev->gadget.speed));
    }

    ep = &dev->ep[0];
    diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c
    index 3dd40b4..149ade6 100644
    --- a/drivers/usb/gadget/net2280.c
    +++ b/drivers/usb/gadget/net2280.c
    @@ -2266,9 +2266,7 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat)
    else
    dev->gadget.speed = USB_SPEED_FULL;
    net2280_led_speed (dev, dev->gadget.speed);
    - DEBUG (dev, "%s speed\n",
    - (dev->gadget.speed == USB_SPEED_HIGH)
    - ? "high" : "full");
    + DEBUG(dev, "%s\n", usb_speed_string(dev->gadget.speed));
    }

    ep = &dev->ep [0];
    diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
    index a341dde..78fc14b 100644
    --- a/drivers/usb/gadget/printer.c
    +++ b/drivers/usb/gadget/printer.c
    @@ -971,23 +971,15 @@ printer_set_config(struct printer_dev *dev, unsigned number)
    usb_gadget_vbus_draw(dev->gadget,
    dev->gadget->is_otg ? 8 : 100);
    } else {
    - char *speed;
    unsigned power;

    power = 2 * config_desc.bMaxPower;
    usb_gadget_vbus_draw(dev->gadget, power);

    - switch (gadget->speed) {
    - case USB_SPEED_FULL: speed = "full"; break;
    -#ifdef CONFIG_USB_GADGET_DUALSPEED
    - case USB_SPEED_HIGH: speed = "high"; break;
    -#endif
    - default: speed = "?"; break;
    - }
    -
    dev->config = number;
    - INFO(dev, "%s speed config #%d: %d mA, %s\n",
    - speed, number, power, driver_desc);
    + INFO(dev, "%s config #%d: %d mA, %s\n",
    + usb_speed_string(gadget->speed),
    + number, power, driver_desc);
    }
    return result;
    }
    diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
    index 8bdee67..48b5c71 100644
    --- a/drivers/usb/gadget/s3c-hsotg.c
    +++ b/drivers/usb/gadget/s3c-hsotg.c
    @@ -1951,30 +1951,26 @@ static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
    case S3C_DSTS_EnumSpd_FS:
    case S3C_DSTS_EnumSpd_FS48:
    hsotg->gadget.speed = USB_SPEED_FULL;
    - dev_info(hsotg->dev, "new device is full-speed\n");
    -
    ep0_mps = EP0_MPS_LIMIT;
    ep_mps = 64;
    break;

    case S3C_DSTS_EnumSpd_HS:
    - dev_info(hsotg->dev, "new device is high-speed\n");
    hsotg->gadget.speed = USB_SPEED_HIGH;
    -
    ep0_mps = EP0_MPS_LIMIT;
    ep_mps = 512;
    break;

    case S3C_DSTS_EnumSpd_LS:
    hsotg->gadget.speed = USB_SPEED_LOW;
    - dev_info(hsotg->dev, "new device is low-speed\n");
    -
    /* note, we don't actually support LS in this driver at the
    * moment, and the documentation seems to imply that it isn't
    * supported by the PHYs on some of the devices.
    */
    break;
    }
    + dev_info(hsotg->dev, "new device is %s\n",
    + usb_speed_string(hsotg->gadget.speed));

    /* we should now know the maximum packet size for an
    * endpoint, so set the endpoints to a default value. */
    diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c
    index 05ba472..5e77a46 100644
    --- a/drivers/usb/gadget/udc-core.c
    +++ b/drivers/usb/gadget/udc-core.c
    @@ -375,23 +375,8 @@ static ssize_t usb_udc_speed_show(struct device *dev,
    struct device_attribute *attr, char *buf)
    {
    struct usb_udc *udc = container_of(dev, struct usb_udc, dev);
    - struct usb_gadget *gadget = udc->gadget;
    -
    - switch (gadget->speed) {
    - case USB_SPEED_LOW:
    - return snprintf(buf, PAGE_SIZE, "low-speed\n");
    - case USB_SPEED_FULL:
    - return snprintf(buf, PAGE_SIZE, "full-speed\n");
    - case USB_SPEED_HIGH:
    - return snprintf(buf, PAGE_SIZE, "high-speed\n");
    - case USB_SPEED_WIRELESS:
    - return snprintf(buf, PAGE_SIZE, "wireless\n");
    - case USB_SPEED_SUPER:
    - return snprintf(buf, PAGE_SIZE, "super-speed\n");
    - case USB_SPEED_UNKNOWN: /* FALLTHROUGH */
    - default:
    - return snprintf(buf, PAGE_SIZE, "UNKNOWN\n");
    - }
    + return snprintf(buf, PAGE_SIZE, "%s\n",
    + usb_speed_string(udc->gadget->speed));
    }
    static DEVICE_ATTR(speed, S_IRUSR, usb_udc_speed_show, NULL);

    diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
    index bb10846..48b31e6 100644
    --- a/drivers/usb/misc/usbtest.c
    +++ b/drivers/usb/misc/usbtest.c
    @@ -2298,25 +2298,8 @@ usbtest_probe(struct usb_interface *intf, const struct usb_device_id *id)

    usb_set_intfdata(intf, dev);
    dev_info(&intf->dev, "%s\n", info->name);
    - dev_info(&intf->dev, "%s speed {control%s%s%s%s%s} tests%s\n",
    - ({ char *tmp;
    - switch (udev->speed) {
    - case USB_SPEED_LOW:
    - tmp = "low";
    - break;
    - case USB_SPEED_FULL:
    - tmp = "full";
    - break;
    - case USB_SPEED_HIGH:
    - tmp = "high";
    - break;
    - case USB_SPEED_SUPER:
    - tmp = "super";
    - break;
    - default:
    - tmp = "unknown";
    - break;
    - }; tmp; }),
    + dev_info(&intf->dev, "%s {control%s%s%s%s%s} tests%s\n",
    + usb_speed_string(udev->speed),
    info->ctrl_out ? " in/out" : "",
    rtest, wtest,
    irtest, iwtest,
    diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
    index 0fd3fbd..7d4188f 100644
    --- a/include/linux/usb/ch9.h
    +++ b/include/linux/usb/ch9.h
    @@ -851,6 +851,18 @@ enum usb_device_speed {
    USB_SPEED_SUPER, /* usb 3.0 */
    };

    +#ifdef __KERNEL__
    +
    +/**
    + * usb_speed_string() - Returns human readable-name of the speed.
    + * @speed: The speed to return human-readable name for. If it's not
    + * any of the speeds defined in usb_device_speed enum, string for
    + * USB_SPEED_UNKNOWN will be returned.
    + */
    +extern const char *usb_speed_string(enum usb_device_speed speed);
    +
    +#endif
    +
    enum usb_device_state {
    /* NOTATTACHED isn't in the USB spec, and this state acts
    * the same as ATTACHED ... but it's clearer this way.
    --
    1.7.3.1


    \
     
     \ /
      Last update: 2011-08-22 18:07    [W:0.059 / U:0.016 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site