Hi, On Wed, Sep 24, 2014 at 10:43:21PM +0200, Michal Sojka wrote: > With this patch, USB activity can be signaled by blinking a LED. There > are two triggers, one for activity on USB host and one for USB gadget. > > Both triggers should work with all host/device controllers. Tested only > with musb. > > Performace: I measured performance overheads on ARM Cortex-A8 (TI > AM335x) running on 600 MHz. > > Duration of usb_led_activity(): > - with no LED attached to the trigger: 2 ± 1 µs > - with one GPIO LED attached to the trigger: 2 ± 1 µs or 8 ± 2 µs (two peaks in histogram) > > Duration of functions calling usb_led_activity() (with this patch > applied and no LED attached to the trigger): > - __usb_hcd_giveback_urb(): 10 - 25 µs > - usb_gadget_giveback_request(): 2 - 6 µs > > Signed-off-by: Michal Sojka <sojka@xxxxxxxxx> > --- > drivers/usb/Kconfig | 10 +++++++ > drivers/usb/common/Makefile | 1 + > drivers/usb/common/led.c | 57 +++++++++++++++++++++++++++++++++++++++ > drivers/usb/core/hcd.c | 2 ++ > drivers/usb/gadget/udc/udc-core.c | 4 +++ > include/linux/usb.h | 12 +++++++++ > 6 files changed, 86 insertions(+) > create mode 100644 drivers/usb/common/led.c > > diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig > index cf1b19b..ae481c3 100644 > --- a/drivers/usb/Kconfig > +++ b/drivers/usb/Kconfig > @@ -149,4 +149,14 @@ source "drivers/usb/phy/Kconfig" > > source "drivers/usb/gadget/Kconfig" > > +config USB_LED_TRIG > + bool "USB LED Triggers" > + depends on LEDS_CLASS && USB_COMMON && LEDS_TRIGGERS > + help > + This option adds LED triggers for USB host and/or gadget activity. > + > + Say Y here if you are working on a system with led-class supported > + LEDs and you want to use them as activity indicators for USB host or > + gadget. > + > endif # USB_SUPPORT > diff --git a/drivers/usb/common/Makefile b/drivers/usb/common/Makefile > index 052c120..ca2f8bd 100644 > --- a/drivers/usb/common/Makefile > +++ b/drivers/usb/common/Makefile > @@ -4,5 +4,6 @@ > > obj-$(CONFIG_USB_COMMON) += usb-common.o > usb-common-y += common.o > +usb-common-$(CONFIG_USB_LED_TRIG) += led.o > > obj-$(CONFIG_USB_OTG_FSM) += usb-otg-fsm.o > diff --git a/drivers/usb/common/led.c b/drivers/usb/common/led.c > new file mode 100644 > index 0000000..df23da0 > --- /dev/null > +++ b/drivers/usb/common/led.c > @@ -0,0 +1,57 @@ > +/* > + * LED Triggers for USB Activity > + * > + * Copyright 2014 Michal Sojka <sojka@xxxxxxxxx> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + */ > + > +#include <linux/module.h> > +#include <linux/kernel.h> > +#include <linux/init.h> > +#include <linux/leds.h> > +#include <linux/usb.h> > + > +#define BLINK_DELAY 30 > + > +static unsigned long usb_blink_delay = BLINK_DELAY; > + > +DEFINE_LED_TRIGGER(ledtrig_usb_gadget); > +DEFINE_LED_TRIGGER(ledtrig_usb_host); > + > +void usb_led_activity(enum usb_led_event ev) > +{ > + struct led_trigger *trig = NULL; > + > + switch (ev) { > + case USB_LED_EVENT_GADGET: > + trig = ledtrig_usb_gadget; > + break; > + case USB_LED_EVENT_HOST: > + trig = ledtrig_usb_host; > + break; > + } > + /* led_trigger_blink_oneshot() handles trig == NULL gracefully */ > + led_trigger_blink_oneshot(trig, &usb_blink_delay, &usb_blink_delay, 0); > +} > +EXPORT_SYMBOL_GPL(usb_led_activity); > + > + minor nit: one blank line only. other than that, this looks pretty good to me: Acked-by: Felipe Balbi <balbi@xxxxxx> -- balbi
Attachment:
signature.asc
Description: Digital signature