leds-innovator.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * linux/arch/arm/mach-omap1/leds-innovator.c
  3. */
  4. #include <linux/init.h>
  5. #include <mach/hardware.h>
  6. #include <asm/leds.h>
  7. #include "leds.h"
  8. #define LED_STATE_ENABLED 1
  9. #define LED_STATE_CLAIMED 2
  10. static unsigned int led_state;
  11. static unsigned int hw_led_state;
  12. void innovator_leds_event(led_event_t evt)
  13. {
  14. unsigned long flags;
  15. local_irq_save(flags);
  16. switch (evt) {
  17. case led_start:
  18. hw_led_state = 0;
  19. led_state = LED_STATE_ENABLED;
  20. break;
  21. case led_stop:
  22. led_state &= ~LED_STATE_ENABLED;
  23. hw_led_state = 0;
  24. break;
  25. case led_claim:
  26. led_state |= LED_STATE_CLAIMED;
  27. hw_led_state = 0;
  28. break;
  29. case led_release:
  30. led_state &= ~LED_STATE_CLAIMED;
  31. hw_led_state = 0;
  32. break;
  33. #ifdef CONFIG_LEDS_TIMER
  34. case led_timer:
  35. if (!(led_state & LED_STATE_CLAIMED))
  36. hw_led_state ^= 0;
  37. break;
  38. #endif
  39. #ifdef CONFIG_LEDS_CPU
  40. case led_idle_start:
  41. if (!(led_state & LED_STATE_CLAIMED))
  42. hw_led_state |= 0;
  43. break;
  44. case led_idle_end:
  45. if (!(led_state & LED_STATE_CLAIMED))
  46. hw_led_state &= ~0;
  47. break;
  48. #endif
  49. case led_halted:
  50. break;
  51. case led_green_on:
  52. if (led_state & LED_STATE_CLAIMED)
  53. hw_led_state &= ~0;
  54. break;
  55. case led_green_off:
  56. if (led_state & LED_STATE_CLAIMED)
  57. hw_led_state |= 0;
  58. break;
  59. case led_amber_on:
  60. break;
  61. case led_amber_off:
  62. break;
  63. case led_red_on:
  64. if (led_state & LED_STATE_CLAIMED)
  65. hw_led_state &= ~0;
  66. break;
  67. case led_red_off:
  68. if (led_state & LED_STATE_CLAIMED)
  69. hw_led_state |= 0;
  70. break;
  71. default:
  72. break;
  73. }
  74. local_irq_restore(flags);
  75. }