[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110819231459.GB13317@legolas.emea.dhcp.ti.com>
Date: Sat, 20 Aug 2011 02:15:00 +0300
From: Felipe Balbi <balbi@...com>
To: Michal Nazarewicz <mnazarewicz@...gle.com>
Cc: Alan Stern <stern@...land.harvard.edu>,
Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
Yang Rui Rui <ruirui.r.yang@...to.com>,
Dave Young <hidave.darkstar@...il.com>,
Felipe Balbi <balbi@...com>, linux-usb@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCHv3 1/4] usb: Provide usb_device_speed_name() function
Hi,
On Sat, Aug 20, 2011 at 12:32:59AM +0200, Michal Nazarewicz wrote:
> From: Michal Nazarewicz <mina86@...a86.com>
>
> In a few places kernel wants to print a human-readable USB
> device speed name (eg. "high") instead of a raw number
> (eg. 3). Usually a switch is introduced in those places
> leading to code repetition. To mitigate this issue, this
> commit introduces usb_device_speed_name() function, which
> returns a human-readable name of provided speed.
>
> Signed-off-by: Michal Nazarewicz <mina86@...a86.com>
> ---
> drivers/usb/Makefile | 3 +++
> drivers/usb/common.c | 24 ++++++++++++++++++++++++
> drivers/usb/gadget/udc-core.c | 19 ++-----------------
> include/linux/usb/ch9.h | 8 ++++++++
> 4 files changed, 37 insertions(+), 17 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..e9d7141
> --- /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_device_speed_name(enum usb_device_speed speed)
somehow usb_speed_string() sounds better to me.
> +{
> + static const char *const names[] = {
> + "UNKNOWN",
> + "low-speed",
> + "full-speed",
> + "high-speed",
> + "wireless",
> + "super-speed",
> + };
> +
> + if (speed < 0 || speed >= ARRAY_SIZE(names))
> + speed = USB_SPEED_UNKNOWN;
I generally dislike depending on a particular ordering of enumerations.
While's it's highly unlikely that anyone will change that, if someone
does change, then it'll take a long time to actually find the bug on the
print here :-)
I woud rather use a switch in this case.
> diff --git a/drivers/usb/gadget/udc-core.c b/drivers/usb/gadget/udc-core.c
> index 05ba472..e1ecdbc 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_device_speed_name(udc->gadget->speed));
> }
> static DEVICE_ATTR(speed, S_IRUSR, usb_udc_speed_show, NULL);
you said 'several locations', but there's only one ? No other driver is
using something similar ?
--
balbi
Download attachment "signature.asc" of type "application/pgp-signature" (491 bytes)
Powered by blists - more mailing lists