status_led.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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_BOARD_SPECIFIC_LED
  10. # if defined(CONFIG_8xx)
  11. # include <mpc8xx.h>
  12. # elif defined(CONFIG_MPC8260)
  13. # include <mpc8260.h>
  14. # elif defined(CONFIG_5xx)
  15. # include <mpc5xx.h>
  16. # else
  17. # error CPU specific Status LED header file missing.
  18. #endif
  19. /* led_id_t is unsigned long mask */
  20. typedef unsigned long led_id_t;
  21. static inline void __led_init (led_id_t mask, int state)
  22. {
  23. volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
  24. #ifdef STATUS_LED_PAR
  25. immr->STATUS_LED_PAR &= ~mask;
  26. #endif
  27. #ifdef STATUS_LED_ODR
  28. immr->STATUS_LED_ODR &= ~mask;
  29. #endif
  30. #if (STATUS_LED_ACTIVE == 0)
  31. if (state == STATUS_LED_ON)
  32. immr->STATUS_LED_DAT &= ~mask;
  33. else
  34. immr->STATUS_LED_DAT |= mask;
  35. #else
  36. if (state == STATUS_LED_ON)
  37. immr->STATUS_LED_DAT |= mask;
  38. else
  39. immr->STATUS_LED_DAT &= ~mask;
  40. #endif
  41. #ifdef STATUS_LED_DIR
  42. immr->STATUS_LED_DIR |= mask;
  43. #endif
  44. }
  45. static inline void __led_toggle (led_id_t mask)
  46. {
  47. ((immap_t *) CONFIG_SYS_IMMR)->STATUS_LED_DAT ^= mask;
  48. }
  49. static inline void __led_set (led_id_t mask, int state)
  50. {
  51. volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
  52. #if (STATUS_LED_ACTIVE == 0)
  53. if (state == STATUS_LED_ON)
  54. immr->STATUS_LED_DAT &= ~mask;
  55. else
  56. immr->STATUS_LED_DAT |= mask;
  57. #else
  58. if (state == STATUS_LED_ON)
  59. immr->STATUS_LED_DAT |= mask;
  60. else
  61. immr->STATUS_LED_DAT &= ~mask;
  62. #endif
  63. }
  64. #endif
  65. #endif /* __ASM_STATUS_LED_H__ */