leds-frodo.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * linux/arch/arm/mach-sa1100/leds-frodo.c
  3.  *
  4.  * Author: Abraham van der Merwe <abraham@2d3d.co.za>
  5.  *
  6.  * This file contains the 2d3D, Inc. SA-1110 Development Board LED
  7.  * event handler.
  8.  *
  9.  * Frodo LEDs
  10.  *
  11.  *   - led6 - toggles state every 50 timer interrupts (Heartbeat)
  12.  *   - led7 - on if system is not idle (CPU load)
  13.  */
  14. #include <linux/config.h>
  15. #include <linux/init.h>
  16. #include <asm/hardware.h>
  17. #include <asm/leds.h>
  18. #include <asm/system.h>
  19. #include "leds.h"
  20. #define led6_on() FRODO_CPLD_GENERAL |= FRODO_LED2
  21. #define led6_off() FRODO_CPLD_GENERAL &= ~FRODO_LED2
  22. #define led6_invert() do {
  23. if ((FRODO_CPLD_GENERAL & FRODO_LED2))
  24. led6_off ();
  25. else
  26. led6_on ();
  27. } while (0)
  28. #define led7_on() FRODO_CPLD_GENERAL |= FRODO_LED1
  29. #define led7_off() FRODO_CPLD_GENERAL &= ~FRODO_LED1
  30. #define led7_invert() do {
  31. if ((FRODO_CPLD_GENERAL & FRODO_LED1))
  32. led7_off ();
  33. else
  34. led7_on ();
  35. } while (0)
  36. static int claimed;
  37. void frodo_leds_event (led_event_t evt)
  38. {
  39.    unsigned long flags;
  40.    local_irq_save (flags);
  41.    switch (evt)
  42.  {
  43. #ifdef CONFIG_LEDS_CPU
  44. /* turn off CPU load LED */
  45.   case led_idle_start:
  46. if (!claimed) led7_off ();
  47. break;
  48. /* turn on CPU load LED */
  49.   case led_idle_end:
  50. if (!claimed) led7_on ();
  51. break;
  52. #endif
  53. #ifdef CONFIG_LEDS_TIMER
  54. /* toggle heartbeat LED */
  55.   case led_timer:
  56. if (!claimed) led6_invert ();
  57. break;
  58. #endif
  59. /* start: turn on LEDs and set claimed to 0 */
  60.   case led_start:
  61. led6_on ();
  62. led7_on ();
  63. claimed = 0;
  64. break;
  65. /* stop: turn off LEDs */
  66.   case led_stop:
  67. led6_off ();
  68. led7_off ();
  69. break;
  70. /* override CPU load & timer LEDs */
  71.   case led_claim:
  72. claimed = 1;
  73. break;
  74. /* restore CPU load & timer LEDs */
  75.   case led_release:
  76. claimed = 0;
  77. break;
  78. /* direct LED access (must be previously claimed) */
  79. /* led7 */
  80.   case led_green_on:
  81. if (claimed) led7_on ();
  82. break;
  83.   case led_green_off:
  84. if (claimed) led7_off ();
  85. break;
  86. /* led6 -- at the moment this is actually also green */
  87.   case led_red_on:
  88. if (claimed) led6_on ();
  89. break;
  90.   case led_red_off:
  91. if (claimed) led6_off ();
  92. break;
  93.   default:
  94. break;
  95. }
  96.    local_irq_restore (flags);
  97. }