Commit e538dfdae85244fd2c4231725d82cc1f1bc4942c
Committed by
Greg Kroah-Hartman
1 parent
c58a76cdd7
Exists in
master
and in
6 other branches
usb: Provide usb_speed_string() function
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> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Showing 18 changed files with 125 additions and 195 deletions Side-by-side Diff
- drivers/usb/Kconfig
- drivers/usb/Makefile
- drivers/usb/core/hub.c
- drivers/usb/gadget/amd5536udc.c
- drivers/usb/gadget/atmel_usba_udc.c
- drivers/usb/gadget/composite.c
- drivers/usb/gadget/file_storage.c
- drivers/usb/gadget/fsl_udc_core.c
- drivers/usb/gadget/gmidi.c
- drivers/usb/gadget/langwell_udc.c
- drivers/usb/gadget/net2272.c
- drivers/usb/gadget/net2280.c
- drivers/usb/gadget/printer.c
- drivers/usb/gadget/s3c-hsotg.c
- drivers/usb/gadget/udc-core.c
- drivers/usb/misc/usbtest.c
- drivers/usb/usb-common.c
- include/linux/usb/ch9.h
drivers/usb/Kconfig
... | ... | @@ -12,6 +12,11 @@ |
12 | 12 | |
13 | 13 | if USB_SUPPORT |
14 | 14 | |
15 | +config USB_COMMON | |
16 | + tristate | |
17 | + default y | |
18 | + depends on USB || USB_GADGET | |
19 | + | |
15 | 20 | # Host-side USB depends on having a host controller |
16 | 21 | # NOTE: dummy_hcd is always an option, but it's ignored here ... |
17 | 22 | # NOTE: SL-811 option should be board-specific ... |
drivers/usb/Makefile
drivers/usb/core/hub.c
... | ... | @@ -2793,7 +2793,7 @@ |
2793 | 2793 | int i, j, retval; |
2794 | 2794 | unsigned delay = HUB_SHORT_RESET_TIME; |
2795 | 2795 | enum usb_device_speed oldspeed = udev->speed; |
2796 | - char *speed, *type; | |
2796 | + const char *speed; | |
2797 | 2797 | int devnum = udev->devnum; |
2798 | 2798 | |
2799 | 2799 | /* root hub ports have a slightly longer reset period |
2800 | 2800 | |
... | ... | @@ -2853,25 +2853,16 @@ |
2853 | 2853 | default: |
2854 | 2854 | goto fail; |
2855 | 2855 | } |
2856 | - | |
2857 | - type = ""; | |
2858 | - switch (udev->speed) { | |
2859 | - case USB_SPEED_LOW: speed = "low"; break; | |
2860 | - case USB_SPEED_FULL: speed = "full"; break; | |
2861 | - case USB_SPEED_HIGH: speed = "high"; break; | |
2862 | - case USB_SPEED_SUPER: | |
2863 | - speed = "super"; | |
2864 | - break; | |
2865 | - case USB_SPEED_WIRELESS: | |
2866 | - speed = "variable"; | |
2867 | - type = "Wireless "; | |
2868 | - break; | |
2869 | - default: speed = "?"; break; | |
2870 | - } | |
2856 | + | |
2857 | + if (udev->speed == USB_SPEED_WIRELESS) | |
2858 | + speed = "variable speed Wireless"; | |
2859 | + else | |
2860 | + speed = usb_speed_string(udev->speed); | |
2861 | + | |
2871 | 2862 | if (udev->speed != USB_SPEED_SUPER) |
2872 | 2863 | dev_info(&udev->dev, |
2873 | - "%s %s speed %sUSB device number %d using %s\n", | |
2874 | - (udev->config) ? "reset" : "new", speed, type, | |
2864 | + "%s %s USB device number %d using %s\n", | |
2865 | + (udev->config) ? "reset" : "new", speed, | |
2875 | 2866 | devnum, udev->bus->controller->driver->name); |
2876 | 2867 | |
2877 | 2868 | /* Set up TT records, if needed */ |
drivers/usb/gadget/amd5536udc.c
... | ... | @@ -3005,13 +3005,8 @@ |
3005 | 3005 | |
3006 | 3006 | /* link up all endpoints */ |
3007 | 3007 | udc_setup_endpoints(dev); |
3008 | - if (dev->gadget.speed == USB_SPEED_HIGH) { | |
3009 | - dev_info(&dev->pdev->dev, "Connect: speed = %s\n", | |
3010 | - "high"); | |
3011 | - } else if (dev->gadget.speed == USB_SPEED_FULL) { | |
3012 | - dev_info(&dev->pdev->dev, "Connect: speed = %s\n", | |
3013 | - "full"); | |
3014 | - } | |
3008 | + dev_info(&dev->pdev->dev, "Connect: %s\n", | |
3009 | + usb_speed_string(dev->gadget.speed)); | |
3015 | 3010 | |
3016 | 3011 | /* init ep 0 */ |
3017 | 3012 | activate_control_endpoints(dev); |
drivers/usb/gadget/atmel_usba_udc.c
... | ... | @@ -1718,13 +1718,12 @@ |
1718 | 1718 | spin_lock(&udc->lock); |
1719 | 1719 | } |
1720 | 1720 | |
1721 | - if (status & USBA_HIGH_SPEED) { | |
1722 | - DBG(DBG_BUS, "High-speed bus reset detected\n"); | |
1721 | + if (status & USBA_HIGH_SPEED) | |
1723 | 1722 | udc->gadget.speed = USB_SPEED_HIGH; |
1724 | - } else { | |
1725 | - DBG(DBG_BUS, "Full-speed bus reset detected\n"); | |
1723 | + else | |
1726 | 1724 | udc->gadget.speed = USB_SPEED_FULL; |
1727 | - } | |
1725 | + DBG(DBG_BUS, "%s bus reset detected\n", | |
1726 | + usb_speed_string(udc->gadget.speed)); | |
1728 | 1727 | |
1729 | 1728 | ep0 = &usba_ep[0]; |
1730 | 1729 | ep0->desc = &usba_ep0_desc; |
drivers/usb/gadget/composite.c
... | ... | @@ -617,25 +617,9 @@ |
617 | 617 | result = 0; |
618 | 618 | } |
619 | 619 | |
620 | - INFO(cdev, "%s speed config #%d: %s\n", | |
621 | - ({ char *speed; | |
622 | - switch (gadget->speed) { | |
623 | - case USB_SPEED_LOW: | |
624 | - speed = "low"; | |
625 | - break; | |
626 | - case USB_SPEED_FULL: | |
627 | - speed = "full"; | |
628 | - break; | |
629 | - case USB_SPEED_HIGH: | |
630 | - speed = "high"; | |
631 | - break; | |
632 | - case USB_SPEED_SUPER: | |
633 | - speed = "super"; | |
634 | - break; | |
635 | - default: | |
636 | - speed = "?"; | |
637 | - break; | |
638 | - } ; speed; }), number, c ? c->label : "unconfigured"); | |
620 | + INFO(cdev, "%s config #%d: %s\n", | |
621 | + usb_speed_string(gadget->speed), | |
622 | + number, c ? c->label : "unconfigured"); | |
639 | 623 | |
640 | 624 | if (!c) |
641 | 625 | goto done; |
drivers/usb/gadget/file_storage.c
... | ... | @@ -2862,17 +2862,10 @@ |
2862 | 2862 | fsg->config = new_config; |
2863 | 2863 | if ((rc = do_set_interface(fsg, 0)) != 0) |
2864 | 2864 | fsg->config = 0; // Reset on errors |
2865 | - else { | |
2866 | - char *speed; | |
2867 | - | |
2868 | - switch (fsg->gadget->speed) { | |
2869 | - case USB_SPEED_LOW: speed = "low"; break; | |
2870 | - case USB_SPEED_FULL: speed = "full"; break; | |
2871 | - case USB_SPEED_HIGH: speed = "high"; break; | |
2872 | - default: speed = "?"; break; | |
2873 | - } | |
2874 | - INFO(fsg, "%s speed config #%d\n", speed, fsg->config); | |
2875 | - } | |
2865 | + else | |
2866 | + INFO(fsg, "%s config #%d\n", | |
2867 | + usb_speed_string(fsg->gadget->speed), | |
2868 | + fsg->config); | |
2876 | 2869 | } |
2877 | 2870 | return rc; |
2878 | 2871 | } |
drivers/usb/gadget/fsl_udc_core.c
... | ... | @@ -1715,34 +1715,31 @@ |
1715 | 1715 | } |
1716 | 1716 | } |
1717 | 1717 | |
1718 | +static inline enum usb_device_speed portscx_device_speed(u32 reg) | |
1719 | +{ | |
1720 | + switch (speed & PORTSCX_PORT_SPEED_MASK) { | |
1721 | + case PORTSCX_PORT_SPEED_HIGH: | |
1722 | + return USB_SPEED_HIGH; | |
1723 | + case PORTSCX_PORT_SPEED_FULL: | |
1724 | + return USB_SPEED_FULL; | |
1725 | + case PORTSCX_PORT_SPEED_LOW: | |
1726 | + return USB_SPEED_LOW; | |
1727 | + default: | |
1728 | + return USB_SPEED_UNKNOWN; | |
1729 | + } | |
1730 | +} | |
1731 | + | |
1718 | 1732 | /* Process a port change interrupt */ |
1719 | 1733 | static void port_change_irq(struct fsl_udc *udc) |
1720 | 1734 | { |
1721 | - u32 speed; | |
1722 | - | |
1723 | 1735 | if (udc->bus_reset) |
1724 | 1736 | udc->bus_reset = 0; |
1725 | 1737 | |
1726 | 1738 | /* Bus resetting is finished */ |
1727 | - if (!(fsl_readl(&dr_regs->portsc1) & PORTSCX_PORT_RESET)) { | |
1739 | + if (!(fsl_readl(&dr_regs->portsc1) & PORTSCX_PORT_RESET)) | |
1728 | 1740 | /* Get the speed */ |
1729 | - speed = (fsl_readl(&dr_regs->portsc1) | |
1730 | - & PORTSCX_PORT_SPEED_MASK); | |
1731 | - switch (speed) { | |
1732 | - case PORTSCX_PORT_SPEED_HIGH: | |
1733 | - udc->gadget.speed = USB_SPEED_HIGH; | |
1734 | - break; | |
1735 | - case PORTSCX_PORT_SPEED_FULL: | |
1736 | - udc->gadget.speed = USB_SPEED_FULL; | |
1737 | - break; | |
1738 | - case PORTSCX_PORT_SPEED_LOW: | |
1739 | - udc->gadget.speed = USB_SPEED_LOW; | |
1740 | - break; | |
1741 | - default: | |
1742 | - udc->gadget.speed = USB_SPEED_UNKNOWN; | |
1743 | - break; | |
1744 | - } | |
1745 | - } | |
1741 | + udc->gadget.speed = | |
1742 | + portscx_device_speed(fsl_readl(&dr_regs->portsc1)); | |
1746 | 1743 | |
1747 | 1744 | /* Update USB state */ |
1748 | 1745 | if (!udc->resume_state) |
... | ... | @@ -2167,20 +2164,8 @@ |
2167 | 2164 | default: |
2168 | 2165 | s = "None"; break; |
2169 | 2166 | } |
2170 | - s;} ), ( { | |
2171 | - char *s; | |
2172 | - switch (tmp_reg & PORTSCX_PORT_SPEED_UNDEF) { | |
2173 | - case PORTSCX_PORT_SPEED_FULL: | |
2174 | - s = "Full Speed"; break; | |
2175 | - case PORTSCX_PORT_SPEED_LOW: | |
2176 | - s = "Low Speed"; break; | |
2177 | - case PORTSCX_PORT_SPEED_HIGH: | |
2178 | - s = "High Speed"; break; | |
2179 | - default: | |
2180 | - s = "Undefined"; break; | |
2181 | - } | |
2182 | - s; | |
2183 | - } ), | |
2167 | + s;} ), | |
2168 | + usb_speed_string(portscx_device_speed(tmp_reg)), | |
2184 | 2169 | (tmp_reg & PORTSCX_PHY_LOW_POWER_SPD) ? |
2185 | 2170 | "Normal PHY mode" : "Low power mode", |
2186 | 2171 | (tmp_reg & PORTSCX_PORT_RESET) ? "In Reset" : |
drivers/usb/gadget/gmidi.c
... | ... | @@ -640,17 +640,8 @@ |
640 | 640 | if (result) { |
641 | 641 | gmidi_reset_config(dev); |
642 | 642 | } else { |
643 | - char *speed; | |
644 | - | |
645 | - switch (gadget->speed) { | |
646 | - case USB_SPEED_LOW: speed = "low"; break; | |
647 | - case USB_SPEED_FULL: speed = "full"; break; | |
648 | - case USB_SPEED_HIGH: speed = "high"; break; | |
649 | - default: speed = "?"; break; | |
650 | - } | |
651 | - | |
652 | 643 | dev->config = number; |
653 | - INFO(dev, "%s speed\n", speed); | |
644 | + INFO(dev, "%s speed\n", usb_speed_string(gadget->speed)); | |
654 | 645 | } |
655 | 646 | return result; |
656 | 647 | } |
drivers/usb/gadget/langwell_udc.c
... | ... | @@ -1690,20 +1690,7 @@ |
1690 | 1690 | "BmAttributes: %d\n\n", |
1691 | 1691 | LPM_PTS(tmp_reg), |
1692 | 1692 | (tmp_reg & LPM_STS) ? 1 : 0, |
1693 | - ({ | |
1694 | - char *s; | |
1695 | - switch (LPM_PSPD(tmp_reg)) { | |
1696 | - case LPM_SPEED_FULL: | |
1697 | - s = "Full Speed"; break; | |
1698 | - case LPM_SPEED_LOW: | |
1699 | - s = "Low Speed"; break; | |
1700 | - case LPM_SPEED_HIGH: | |
1701 | - s = "High Speed"; break; | |
1702 | - default: | |
1703 | - s = "Unknown Speed"; break; | |
1704 | - } | |
1705 | - s; | |
1706 | - }), | |
1693 | + usb_speed_string(lpm_device_speed(tmp_reg)), | |
1707 | 1694 | (tmp_reg & LPM_PFSC) ? "Force Full Speed" : "Not Force", |
1708 | 1695 | (tmp_reg & LPM_PHCD) ? "Disabled" : "Enabled", |
1709 | 1696 | LPM_BA(tmp_reg)); |
1710 | 1697 | |
... | ... | @@ -2647,12 +2634,24 @@ |
2647 | 2634 | dev_vdbg(&dev->pdev->dev, "<--- %s()\n", __func__); |
2648 | 2635 | } |
2649 | 2636 | |
2637 | +static inline enum usb_device_speed lpm_device_speed(u32 reg) | |
2638 | +{ | |
2639 | + switch (LPM_PSPD(reg)) { | |
2640 | + case LPM_SPEED_HIGH: | |
2641 | + return USB_SPEED_HIGH; | |
2642 | + case LPM_SPEED_FULL: | |
2643 | + return USB_SPEED_FULL; | |
2644 | + case LPM_SPEED_LOW: | |
2645 | + return USB_SPEED_LOW; | |
2646 | + default: | |
2647 | + return USB_SPEED_UNKNOWN; | |
2648 | + } | |
2649 | +} | |
2650 | 2650 | |
2651 | 2651 | /* port change detect interrupt handler */ |
2652 | 2652 | static void handle_port_change(struct langwell_udc *dev) |
2653 | 2653 | { |
2654 | 2654 | u32 portsc1, devlc; |
2655 | - u32 speed; | |
2656 | 2655 | |
2657 | 2656 | dev_vdbg(&dev->pdev->dev, "---> %s()\n", __func__); |
2658 | 2657 | |
... | ... | @@ -2667,24 +2666,9 @@ |
2667 | 2666 | /* bus reset is finished */ |
2668 | 2667 | if (!(portsc1 & PORTS_PR)) { |
2669 | 2668 | /* get the speed */ |
2670 | - speed = LPM_PSPD(devlc); | |
2671 | - switch (speed) { | |
2672 | - case LPM_SPEED_HIGH: | |
2673 | - dev->gadget.speed = USB_SPEED_HIGH; | |
2674 | - break; | |
2675 | - case LPM_SPEED_FULL: | |
2676 | - dev->gadget.speed = USB_SPEED_FULL; | |
2677 | - break; | |
2678 | - case LPM_SPEED_LOW: | |
2679 | - dev->gadget.speed = USB_SPEED_LOW; | |
2680 | - break; | |
2681 | - default: | |
2682 | - dev->gadget.speed = USB_SPEED_UNKNOWN; | |
2683 | - break; | |
2684 | - } | |
2685 | - dev_vdbg(&dev->pdev->dev, | |
2686 | - "speed = %d, dev->gadget.speed = %d\n", | |
2687 | - speed, dev->gadget.speed); | |
2669 | + dev->gadget.speed = lpm_device_speed(devlc); | |
2670 | + dev_vdbg(&dev->pdev->dev, "dev->gadget.speed = %d\n", | |
2671 | + dev->gadget.speed); | |
2688 | 2672 | } |
2689 | 2673 | |
2690 | 2674 | /* LPM L0 to L1 */ |
drivers/usb/gadget/net2272.c
... | ... | @@ -1764,8 +1764,8 @@ |
1764 | 1764 | dev->gadget.speed = USB_SPEED_HIGH; |
1765 | 1765 | else |
1766 | 1766 | dev->gadget.speed = USB_SPEED_FULL; |
1767 | - dev_dbg(dev->dev, "%s speed\n", | |
1768 | - (dev->gadget.speed == USB_SPEED_HIGH) ? "high" : "full"); | |
1767 | + dev_dbg(dev->dev, "%s\n", | |
1768 | + usb_speed_string(dev->gadget.speed)); | |
1769 | 1769 | } |
1770 | 1770 | |
1771 | 1771 | ep = &dev->ep[0]; |
drivers/usb/gadget/net2280.c
... | ... | @@ -2257,9 +2257,7 @@ |
2257 | 2257 | else |
2258 | 2258 | dev->gadget.speed = USB_SPEED_FULL; |
2259 | 2259 | net2280_led_speed (dev, dev->gadget.speed); |
2260 | - DEBUG (dev, "%s speed\n", | |
2261 | - (dev->gadget.speed == USB_SPEED_HIGH) | |
2262 | - ? "high" : "full"); | |
2260 | + DEBUG(dev, "%s\n", usb_speed_string(dev->gadget.speed)); | |
2263 | 2261 | } |
2264 | 2262 | |
2265 | 2263 | ep = &dev->ep [0]; |
drivers/usb/gadget/printer.c
... | ... | @@ -962,23 +962,15 @@ |
962 | 962 | usb_gadget_vbus_draw(dev->gadget, |
963 | 963 | dev->gadget->is_otg ? 8 : 100); |
964 | 964 | } else { |
965 | - char *speed; | |
966 | 965 | unsigned power; |
967 | 966 | |
968 | 967 | power = 2 * config_desc.bMaxPower; |
969 | 968 | usb_gadget_vbus_draw(dev->gadget, power); |
970 | 969 | |
971 | - switch (gadget->speed) { | |
972 | - case USB_SPEED_FULL: speed = "full"; break; | |
973 | -#ifdef CONFIG_USB_GADGET_DUALSPEED | |
974 | - case USB_SPEED_HIGH: speed = "high"; break; | |
975 | -#endif | |
976 | - default: speed = "?"; break; | |
977 | - } | |
978 | - | |
979 | 970 | dev->config = number; |
980 | - INFO(dev, "%s speed config #%d: %d mA, %s\n", | |
981 | - speed, number, power, driver_desc); | |
971 | + INFO(dev, "%s config #%d: %d mA, %s\n", | |
972 | + usb_speed_string(gadget->speed), | |
973 | + number, power, driver_desc); | |
982 | 974 | } |
983 | 975 | return result; |
984 | 976 | } |
drivers/usb/gadget/s3c-hsotg.c
... | ... | @@ -1951,30 +1951,26 @@ |
1951 | 1951 | case S3C_DSTS_EnumSpd_FS: |
1952 | 1952 | case S3C_DSTS_EnumSpd_FS48: |
1953 | 1953 | hsotg->gadget.speed = USB_SPEED_FULL; |
1954 | - dev_info(hsotg->dev, "new device is full-speed\n"); | |
1955 | - | |
1956 | 1954 | ep0_mps = EP0_MPS_LIMIT; |
1957 | 1955 | ep_mps = 64; |
1958 | 1956 | break; |
1959 | 1957 | |
1960 | 1958 | case S3C_DSTS_EnumSpd_HS: |
1961 | - dev_info(hsotg->dev, "new device is high-speed\n"); | |
1962 | 1959 | hsotg->gadget.speed = USB_SPEED_HIGH; |
1963 | - | |
1964 | 1960 | ep0_mps = EP0_MPS_LIMIT; |
1965 | 1961 | ep_mps = 512; |
1966 | 1962 | break; |
1967 | 1963 | |
1968 | 1964 | case S3C_DSTS_EnumSpd_LS: |
1969 | 1965 | hsotg->gadget.speed = USB_SPEED_LOW; |
1970 | - dev_info(hsotg->dev, "new device is low-speed\n"); | |
1971 | - | |
1972 | 1966 | /* note, we don't actually support LS in this driver at the |
1973 | 1967 | * moment, and the documentation seems to imply that it isn't |
1974 | 1968 | * supported by the PHYs on some of the devices. |
1975 | 1969 | */ |
1976 | 1970 | break; |
1977 | 1971 | } |
1972 | + dev_info(hsotg->dev, "new device is %s\n", | |
1973 | + usb_speed_string(hsotg->gadget.speed)); | |
1978 | 1974 | |
1979 | 1975 | /* we should now know the maximum packet size for an |
1980 | 1976 | * endpoint, so set the endpoints to a default value. */ |
drivers/usb/gadget/udc-core.c
... | ... | @@ -375,23 +375,8 @@ |
375 | 375 | struct device_attribute *attr, char *buf) |
376 | 376 | { |
377 | 377 | struct usb_udc *udc = container_of(dev, struct usb_udc, dev); |
378 | - struct usb_gadget *gadget = udc->gadget; | |
379 | - | |
380 | - switch (gadget->speed) { | |
381 | - case USB_SPEED_LOW: | |
382 | - return snprintf(buf, PAGE_SIZE, "low-speed\n"); | |
383 | - case USB_SPEED_FULL: | |
384 | - return snprintf(buf, PAGE_SIZE, "full-speed\n"); | |
385 | - case USB_SPEED_HIGH: | |
386 | - return snprintf(buf, PAGE_SIZE, "high-speed\n"); | |
387 | - case USB_SPEED_WIRELESS: | |
388 | - return snprintf(buf, PAGE_SIZE, "wireless\n"); | |
389 | - case USB_SPEED_SUPER: | |
390 | - return snprintf(buf, PAGE_SIZE, "super-speed\n"); | |
391 | - case USB_SPEED_UNKNOWN: /* FALLTHROUGH */ | |
392 | - default: | |
393 | - return snprintf(buf, PAGE_SIZE, "UNKNOWN\n"); | |
394 | - } | |
378 | + return snprintf(buf, PAGE_SIZE, "%s\n", | |
379 | + usb_speed_string(udc->gadget->speed)); | |
395 | 380 | } |
396 | 381 | static DEVICE_ATTR(speed, S_IRUSR, usb_udc_speed_show, NULL); |
397 | 382 |
drivers/usb/misc/usbtest.c
... | ... | @@ -2300,25 +2300,8 @@ |
2300 | 2300 | |
2301 | 2301 | usb_set_intfdata(intf, dev); |
2302 | 2302 | dev_info(&intf->dev, "%s\n", info->name); |
2303 | - dev_info(&intf->dev, "%s speed {control%s%s%s%s%s} tests%s\n", | |
2304 | - ({ char *tmp; | |
2305 | - switch (udev->speed) { | |
2306 | - case USB_SPEED_LOW: | |
2307 | - tmp = "low"; | |
2308 | - break; | |
2309 | - case USB_SPEED_FULL: | |
2310 | - tmp = "full"; | |
2311 | - break; | |
2312 | - case USB_SPEED_HIGH: | |
2313 | - tmp = "high"; | |
2314 | - break; | |
2315 | - case USB_SPEED_SUPER: | |
2316 | - tmp = "super"; | |
2317 | - break; | |
2318 | - default: | |
2319 | - tmp = "unknown"; | |
2320 | - break; | |
2321 | - }; tmp; }), | |
2303 | + dev_info(&intf->dev, "%s {control%s%s%s%s%s} tests%s\n", | |
2304 | + usb_speed_string(udev->speed), | |
2322 | 2305 | info->ctrl_out ? " in/out" : "", |
2323 | 2306 | rtest, wtest, |
2324 | 2307 | irtest, iwtest, |
drivers/usb/usb-common.c
1 | +/* | |
2 | + * Provides code common for host and device side USB. | |
3 | + * | |
4 | + * This program is free software; you can redistribute it and/or | |
5 | + * modify it under the terms of the GNU General Public License as | |
6 | + * published by the Free Software Foundation, version 2. | |
7 | + * | |
8 | + * If either host side (ie. CONFIG_USB=y) or device side USB stack | |
9 | + * (ie. CONFIG_USB_GADGET=y) is compiled in the kernel, this module is | |
10 | + * compiled-in as well. Otherwise, if either of the two stacks is | |
11 | + * compiled as module, this file is compiled as module as well. | |
12 | + */ | |
13 | + | |
14 | +#include <linux/kernel.h> | |
15 | +#include <linux/module.h> | |
16 | +#include <linux/usb/ch9.h> | |
17 | + | |
18 | +const char *usb_speed_string(enum usb_device_speed speed) | |
19 | +{ | |
20 | + static const char *const names[] = { | |
21 | + [USB_SPEED_UNKNOWN] = "UNKNOWN", | |
22 | + [USB_SPEED_LOW] = "low-speed", | |
23 | + [USB_SPEED_FULL] = "full-speed", | |
24 | + [USB_SPEED_HIGH] = "high-speed", | |
25 | + [USB_SPEED_WIRELESS] = "wireless", | |
26 | + [USB_SPEED_SUPER] = "super-speed", | |
27 | + }; | |
28 | + | |
29 | + if (speed < 0 || speed >= ARRAY_SIZE(names)) | |
30 | + speed = USB_SPEED_UNKNOWN; | |
31 | + return names[speed]; | |
32 | +} | |
33 | +EXPORT_SYMBOL_GPL(usb_speed_string); | |
34 | + | |
35 | +MODULE_LICENSE("GPL"); |
include/linux/usb/ch9.h
... | ... | @@ -868,6 +868,18 @@ |
868 | 868 | USB_SPEED_SUPER, /* usb 3.0 */ |
869 | 869 | }; |
870 | 870 | |
871 | +#ifdef __KERNEL__ | |
872 | + | |
873 | +/** | |
874 | + * usb_speed_string() - Returns human readable-name of the speed. | |
875 | + * @speed: The speed to return human-readable name for. If it's not | |
876 | + * any of the speeds defined in usb_device_speed enum, string for | |
877 | + * USB_SPEED_UNKNOWN will be returned. | |
878 | + */ | |
879 | +extern const char *usb_speed_string(enum usb_device_speed speed); | |
880 | + | |
881 | +#endif | |
882 | + | |
871 | 883 | enum usb_device_state { |
872 | 884 | /* NOTATTACHED isn't in the USB spec, and this state acts |
873 | 885 | * the same as ATTACHED ... but it's clearer this way. |