1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2000-2004 3*4882a593Smuzhiyun * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* 9*4882a593Smuzhiyun * The purpose of this code is to signal the operational status of a 10*4882a593Smuzhiyun * target which usually boots over the network; while running in 11*4882a593Smuzhiyun * PCBoot, a status LED is blinking. As soon as a valid BOOTP reply 12*4882a593Smuzhiyun * message has been received, the LED is turned off. The Linux 13*4882a593Smuzhiyun * kernel, once it is running, will start blinking the LED again, 14*4882a593Smuzhiyun * with another frequency. 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #ifndef _STATUS_LED_H_ 18*4882a593Smuzhiyun #define _STATUS_LED_H_ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #ifdef CONFIG_LED_STATUS 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define LED_STATUS_PERIOD (CONFIG_SYS_HZ / CONFIG_LED_STATUS_FREQ) 23*4882a593Smuzhiyun #ifdef CONFIG_LED_STATUS1 24*4882a593Smuzhiyun #define LED_STATUS_PERIOD1 (CONFIG_SYS_HZ / CONFIG_LED_STATUS_FREQ1) 25*4882a593Smuzhiyun #endif /* CONFIG_LED_STATUS1 */ 26*4882a593Smuzhiyun #ifdef CONFIG_LED_STATUS2 27*4882a593Smuzhiyun #define LED_STATUS_PERIOD2 (CONFIG_SYS_HZ / CONFIG_LED_STATUS_FREQ2) 28*4882a593Smuzhiyun #endif /* CONFIG_LED_STATUS2 */ 29*4882a593Smuzhiyun #ifdef CONFIG_LED_STATUS3 30*4882a593Smuzhiyun #define LED_STATUS_PERIOD3 (CONFIG_SYS_HZ / CONFIG_LED_STATUS_FREQ3) 31*4882a593Smuzhiyun #endif /* CONFIG_LED_STATUS3 */ 32*4882a593Smuzhiyun #ifdef CONFIG_LED_STATUS4 33*4882a593Smuzhiyun #define LED_STATUS_PERIOD4 (CONFIG_SYS_HZ / CONFIG_LED_STATUS_FREQ4) 34*4882a593Smuzhiyun #endif /* CONFIG_LED_STATUS4 */ 35*4882a593Smuzhiyun #ifdef CONFIG_LED_STATUS5 36*4882a593Smuzhiyun #define LED_STATUS_PERIOD5 (CONFIG_SYS_HZ / CONFIG_LED_STATUS_FREQ5) 37*4882a593Smuzhiyun #endif /* CONFIG_LED_STATUS5 */ 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun void status_led_init(void); 40*4882a593Smuzhiyun void status_led_tick (unsigned long timestamp); 41*4882a593Smuzhiyun void status_led_set (int led, int state); 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /***** MVS v1 **********************************************************/ 44*4882a593Smuzhiyun #if (defined(CONFIG_MVS) && CONFIG_MVS < 2) 45*4882a593Smuzhiyun # define STATUS_LED_PAR im_ioport.iop_pdpar 46*4882a593Smuzhiyun # define STATUS_LED_DIR im_ioport.iop_pddir 47*4882a593Smuzhiyun # undef STATUS_LED_ODR 48*4882a593Smuzhiyun # define STATUS_LED_DAT im_ioport.iop_pddat 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun # define STATUS_LED_ACTIVE 1 /* LED on for bit == 1 */ 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /***** Someone else defines these *************************************/ 53*4882a593Smuzhiyun #elif defined(STATUS_LED_PAR) 54*4882a593Smuzhiyun /* 55*4882a593Smuzhiyun * ADVICE: Define in your board configuration file rather than 56*4882a593Smuzhiyun * filling this file up with lots of custom board stuff. 57*4882a593Smuzhiyun */ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #elif defined(CONFIG_LED_STATUS_BOARD_SPECIFIC) 60*4882a593Smuzhiyun /* led_id_t is unsigned long mask */ 61*4882a593Smuzhiyun typedef unsigned long led_id_t; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun extern void __led_toggle (led_id_t mask); 64*4882a593Smuzhiyun extern void __led_init (led_id_t mask, int state); 65*4882a593Smuzhiyun extern void __led_set (led_id_t mask, int state); 66*4882a593Smuzhiyun void __led_blink(led_id_t mask, int freq); 67*4882a593Smuzhiyun #else 68*4882a593Smuzhiyun # error Status LED configuration missing 69*4882a593Smuzhiyun #endif 70*4882a593Smuzhiyun /************************************************************************/ 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun #ifndef CONFIG_LED_STATUS_BOARD_SPECIFIC 73*4882a593Smuzhiyun # include <asm/status_led.h> 74*4882a593Smuzhiyun #endif 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #endif /* CONFIG_LED_STATUS */ 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /* 79*4882a593Smuzhiyun * Coloured LEDs API 80*4882a593Smuzhiyun */ 81*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 82*4882a593Smuzhiyun void coloured_LED_init(void); 83*4882a593Smuzhiyun void red_led_on(void); 84*4882a593Smuzhiyun void red_led_off(void); 85*4882a593Smuzhiyun void green_led_on(void); 86*4882a593Smuzhiyun void green_led_off(void); 87*4882a593Smuzhiyun void yellow_led_on(void); 88*4882a593Smuzhiyun void yellow_led_off(void); 89*4882a593Smuzhiyun void blue_led_on(void); 90*4882a593Smuzhiyun void blue_led_off(void); 91*4882a593Smuzhiyun #else 92*4882a593Smuzhiyun .extern LED_init 93*4882a593Smuzhiyun .extern red_led_on 94*4882a593Smuzhiyun .extern red_led_off 95*4882a593Smuzhiyun .extern yellow_led_on 96*4882a593Smuzhiyun .extern yellow_led_off 97*4882a593Smuzhiyun .extern green_led_on 98*4882a593Smuzhiyun .extern green_led_off 99*4882a593Smuzhiyun .extern blue_led_on 100*4882a593Smuzhiyun .extern blue_led_off 101*4882a593Smuzhiyun #endif 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #endif /* _STATUS_LED_H_ */ 104