| /* | |
| * 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__ */ |