led.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * LED Triggers for USB Activity
  3. *
  4. * Copyright 2014 Michal Sojka <sojka@merica.cz>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. *
  10. */
  11. #include <linux/module.h>
  12. #include <linux/kernel.h>
  13. #include <linux/init.h>
  14. #include <linux/leds.h>
  15. #include <linux/usb.h>
  16. #define BLINK_DELAY 30
  17. static unsigned long usb_blink_delay = BLINK_DELAY;
  18. DEFINE_LED_TRIGGER(ledtrig_usb_gadget);
  19. DEFINE_LED_TRIGGER(ledtrig_usb_host);
  20. void usb_led_activity(enum usb_led_event ev)
  21. {
  22. struct led_trigger *trig = NULL;
  23. switch (ev) {
  24. case USB_LED_EVENT_GADGET:
  25. trig = ledtrig_usb_gadget;
  26. break;
  27. case USB_LED_EVENT_HOST:
  28. trig = ledtrig_usb_host;
  29. break;
  30. }
  31. /* led_trigger_blink_oneshot() handles trig == NULL gracefully */
  32. led_trigger_blink_oneshot(trig, &usb_blink_delay, &usb_blink_delay, 0);
  33. }
  34. EXPORT_SYMBOL_GPL(usb_led_activity);
  35. static int __init ledtrig_usb_init(void)
  36. {
  37. led_trigger_register_simple("usb-gadget", &ledtrig_usb_gadget);
  38. led_trigger_register_simple("usb-host", &ledtrig_usb_host);
  39. return 0;
  40. }
  41. static void __exit ledtrig_usb_exit(void)
  42. {
  43. led_trigger_unregister_simple(ledtrig_usb_gadget);
  44. led_trigger_unregister_simple(ledtrig_usb_host);
  45. }
  46. module_init(ledtrig_usb_init);
  47. module_exit(ledtrig_usb_exit);