status_led.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * asm/status_led.h
  3. *
  4. * MPC8xx/MPC8260/MPC5xx based status led support functions
  5. */
  6. #ifndef __ASM_STATUS_LED_H__
  7. #define __ASM_STATUS_LED_H__
  8. /* if not overridden */
  9. #ifndef CONFIG_LED_STATUS_BOARD_SPECIFIC
  10. # if defined(CONFIG_MPC8260)
  11. # include <mpc8260.h>
  12. # elif defined(CONFIG_5xx)
  13. # include <mpc5xx.h>
  14. # else
  15. # error CPU specific Status LED header file missing.
  16. #endif
  17. /* led_id_t is unsigned long mask */
  18. typedef unsigned long led_id_t;
  19. static inline void __led_init (led_id_t mask, int state)
  20. {
  21. volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
  22. #ifdef STATUS_LED_PAR
  23. immr->STATUS_LED_PAR &= ~mask;
  24. #endif
  25. #ifdef STATUS_LED_ODR
  26. immr->STATUS_LED_ODR &= ~mask;
  27. #endif
  28. #if (STATUS_LED_ACTIVE == 0)
  29. if (state == CONFIG_LED_STATUS_ON)
  30. immr->STATUS_LED_DAT &= ~mask;
  31. else
  32. immr->STATUS_LED_DAT |= mask;
  33. #else
  34. if (state == CONFIG_LED_STATUS_ON)
  35. immr->STATUS_LED_DAT |= mask;
  36. else
  37. immr->STATUS_LED_DAT &= ~mask;
  38. #endif
  39. #ifdef STATUS_LED_DIR
  40. immr->STATUS_LED_DIR |= mask;
  41. #endif
  42. }
  43. static inline void __led_toggle (led_id_t mask)
  44. {
  45. ((immap_t *) CONFIG_SYS_IMMR)->STATUS_LED_DAT ^= mask;
  46. }
  47. static inline void __led_set (led_id_t mask, int state)
  48. {
  49. volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
  50. #if (STATUS_LED_ACTIVE == 0)
  51. if (state == CONFIG_LED_STATUS_ON)
  52. immr->STATUS_LED_DAT &= ~mask;
  53. else
  54. immr->STATUS_LED_DAT |= mask;
  55. #else
  56. if (state == CONFIG_LED_STATUS_ON)
  57. immr->STATUS_LED_DAT |= mask;
  58. else
  59. immr->STATUS_LED_DAT &= ~mask;
  60. #endif
  61. }
  62. #endif
  63. #endif /* __ASM_STATUS_LED_H__ */