| /* |
| * asm/status_led.h |
| * |
| * MPC8xx/MPC8260/MPC5xx based status led support functions |
| */ |
| |
| #ifndef __ASM_STATUS_LED_H__ |
| #define __ASM_STATUS_LED_H__ |
| |
| /* if not overriden */ |
| #ifndef CONFIG_BOARD_SPECIFIC_LED |
| # if defined(CONFIG_8xx) |
| # include <mpc8xx.h> |
| # elif defined(CONFIG_8260) |
| # include <mpc8260.h> |
| # elif defined(CONFIG_5xx) |
| # include <mpc5xx.h> |
| # else |
| # error CPU specific Status LED header file missing. |
| #endif |
| |
| /* led_id_t is unsigned long mask */ |
| typedef unsigned long led_id_t; |
| |
| static inline void __led_init (led_id_t mask, int state) |
| { |
| volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; |
| |
| #ifdef STATUS_LED_PAR |
| immr->STATUS_LED_PAR &= ~mask; |
| #endif |
| #ifdef STATUS_LED_ODR |
| immr->STATUS_LED_ODR &= ~mask; |
| #endif |
| |
| #if (STATUS_LED_ACTIVE == 0) |
| if (state == STATUS_LED_ON) |
| immr->STATUS_LED_DAT &= ~mask; |
| else |
| immr->STATUS_LED_DAT |= mask; |
| #else |
| if (state == STATUS_LED_ON) |
| immr->STATUS_LED_DAT |= mask; |
| else |
| immr->STATUS_LED_DAT &= ~mask; |
| #endif |
| #ifdef STATUS_LED_DIR |
| immr->STATUS_LED_DIR |= mask; |
| #endif |
| } |
| |
| static inline void __led_toggle (led_id_t mask) |
| { |
| ((immap_t *) CONFIG_SYS_IMMR)->STATUS_LED_DAT ^= mask; |
| } |
| |
| static inline void __led_set (led_id_t mask, int state) |
| { |
| volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; |
| |
| #if (STATUS_LED_ACTIVE == 0) |
| if (state == STATUS_LED_ON) |
| immr->STATUS_LED_DAT &= ~mask; |
| else |
| immr->STATUS_LED_DAT |= mask; |
| #else |
| if (state == STATUS_LED_ON) |
| immr->STATUS_LED_DAT |= mask; |
| else |
| immr->STATUS_LED_DAT &= ~mask; |
| #endif |
| |
| } |
| |
| #endif |
| |
| #endif /* __ASM_STATUS_LED_H__ */ |