leds-assabet.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/arch/arm/mach-sa1100/leds-assabet.c
  3.  *
  4.  * Copyright (C) 2000 John Dorsey <john+@cs.cmu.edu>
  5.  *
  6.  * Original (leds-footbridge.c) by Russell King
  7.  *
  8.  * Assabet uses the LEDs as follows:
  9.  *   - Green - toggles state every 50 timer interrupts
  10.  *   - Red   - on if system is not idle
  11.  */
  12. #include <linux/config.h>
  13. #include <linux/init.h>
  14. #include <asm/hardware.h>
  15. #include <asm/leds.h>
  16. #include <asm/system.h>
  17. #include <asm/arch/assabet.h>
  18. #include "leds.h"
  19. #define LED_STATE_ENABLED 1
  20. #define LED_STATE_CLAIMED 2
  21. static unsigned int led_state;
  22. static unsigned int hw_led_state;
  23. #define ASSABET_BCR_LED_MASK (ASSABET_BCR_LED_GREEN | ASSABET_BCR_LED_RED)
  24. void assabet_leds_event(led_event_t evt)
  25. {
  26. unsigned long flags;
  27. local_irq_save(flags);
  28. switch (evt) {
  29. case led_start:
  30. hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN;
  31. led_state = LED_STATE_ENABLED;
  32. break;
  33. case led_stop:
  34. led_state &= ~LED_STATE_ENABLED;
  35. hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN;
  36. ASSABET_BCR_frob(ASSABET_BCR_LED_MASK, hw_led_state);
  37. break;
  38. case led_claim:
  39. led_state |= LED_STATE_CLAIMED;
  40. hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN;
  41. break;
  42. case led_release:
  43. led_state &= ~LED_STATE_CLAIMED;
  44. hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN;
  45. break;
  46. #ifdef CONFIG_LEDS_TIMER
  47. case led_timer:
  48. if (!(led_state & LED_STATE_CLAIMED))
  49. hw_led_state ^= ASSABET_BCR_LED_GREEN;
  50. break;
  51. #endif
  52. #ifdef CONFIG_LEDS_CPU
  53. case led_idle_start:
  54. if (!(led_state & LED_STATE_CLAIMED))
  55. hw_led_state |= ASSABET_BCR_LED_RED;
  56. break;
  57. case led_idle_end:
  58. if (!(led_state & LED_STATE_CLAIMED))
  59. hw_led_state &= ~ASSABET_BCR_LED_RED;
  60. break;
  61. #endif
  62. case led_halted:
  63. break;
  64. case led_green_on:
  65. if (led_state & LED_STATE_CLAIMED)
  66. hw_led_state &= ~ASSABET_BCR_LED_GREEN;
  67. break;
  68. case led_green_off:
  69. if (led_state & LED_STATE_CLAIMED)
  70. hw_led_state |= ASSABET_BCR_LED_GREEN;
  71. break;
  72. case led_amber_on:
  73. break;
  74. case led_amber_off:
  75. break;
  76. case led_red_on:
  77. if (led_state & LED_STATE_CLAIMED)
  78. hw_led_state &= ~ASSABET_BCR_LED_RED;
  79. break;
  80. case led_red_off:
  81. if (led_state & LED_STATE_CLAIMED)
  82. hw_led_state |= ASSABET_BCR_LED_RED;
  83. break;
  84. default:
  85. break;
  86. }
  87. if  (led_state & LED_STATE_ENABLED)
  88. ASSABET_BCR_frob(ASSABET_BCR_LED_MASK, hw_led_state);
  89. local_irq_restore(flags);
  90. }