xref: /rk3399_rockchip-uboot/board/ti/beagle/led.c (revision f87824efddf3d09d6bb2f01663170f5d7107fd62)
170d8c944SJason Kridner /*
270d8c944SJason Kridner  * Copyright (c) 2010 Texas Instruments, Inc.
370d8c944SJason Kridner  * Jason Kridner <jkridner@beagleboard.org>
470d8c944SJason Kridner  *
570d8c944SJason Kridner  * This program is free software; you can redistribute it and/or
670d8c944SJason Kridner  * modify it under the terms of the GNU General Public License as
770d8c944SJason Kridner  * published by the Free Software Foundation; either version 2 of
870d8c944SJason Kridner  * the License, or (at your option) any later version.
970d8c944SJason Kridner  *
1070d8c944SJason Kridner  * This program is distributed in the hope that it will be useful,
1170d8c944SJason Kridner  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1270d8c944SJason Kridner  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1370d8c944SJason Kridner  * GNU General Public License for more details.
1470d8c944SJason Kridner  *
1570d8c944SJason Kridner  * You should have received a copy of the GNU General Public License
1670d8c944SJason Kridner  * along with this program; if not, write to the Free Software
1770d8c944SJason Kridner  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
1870d8c944SJason Kridner  * MA 02111-1307 USA
1970d8c944SJason Kridner  */
2070d8c944SJason Kridner #include <common.h>
2170d8c944SJason Kridner #include <status_led.h>
2270d8c944SJason Kridner #include <asm/arch/cpu.h>
2370d8c944SJason Kridner #include <asm/io.h>
2470d8c944SJason Kridner #include <asm/arch/sys_proto.h>
2570d8c944SJason Kridner #include <asm/arch/gpio.h>
2670d8c944SJason Kridner 
2770d8c944SJason Kridner static unsigned int saved_state[2] = {STATUS_LED_OFF, STATUS_LED_OFF};
2870d8c944SJason Kridner 
2970d8c944SJason Kridner /* GPIO pins for the LEDs */
30*f87824efSJason Kridner #define BEAGLE_LED_USR0	150
31*f87824efSJason Kridner #define BEAGLE_LED_USR1	149
3270d8c944SJason Kridner 
3370d8c944SJason Kridner #ifdef STATUS_LED_GREEN
3470d8c944SJason Kridner void green_LED_off (void)
3570d8c944SJason Kridner {
3670d8c944SJason Kridner 	__led_set (STATUS_LED_GREEN, 0);
3770d8c944SJason Kridner }
3870d8c944SJason Kridner 
3970d8c944SJason Kridner void green_LED_on (void)
4070d8c944SJason Kridner {
4170d8c944SJason Kridner 	__led_set (STATUS_LED_GREEN, 1);
4270d8c944SJason Kridner }
4370d8c944SJason Kridner #endif
4470d8c944SJason Kridner 
4570d8c944SJason Kridner void __led_init (led_id_t mask, int state)
4670d8c944SJason Kridner {
4770d8c944SJason Kridner 	__led_set (mask, state);
4870d8c944SJason Kridner }
4970d8c944SJason Kridner 
5070d8c944SJason Kridner void __led_toggle (led_id_t mask)
5170d8c944SJason Kridner {
5270d8c944SJason Kridner #ifdef STATUS_LED_BIT
5370d8c944SJason Kridner 	if (STATUS_LED_BIT & mask) {
5470d8c944SJason Kridner 		if (STATUS_LED_ON == saved_state[0])
5570d8c944SJason Kridner 			__led_set(STATUS_LED_BIT, 0);
5670d8c944SJason Kridner 		else
5770d8c944SJason Kridner 			__led_set(STATUS_LED_BIT, 1);
5870d8c944SJason Kridner 	}
5970d8c944SJason Kridner #endif
6070d8c944SJason Kridner #ifdef STATUS_LED_BIT1
6170d8c944SJason Kridner 	if (STATUS_LED_BIT1 & mask) {
6270d8c944SJason Kridner 		if (STATUS_LED_ON == saved_state[1])
6370d8c944SJason Kridner 			__led_set(STATUS_LED_BIT1, 0);
6470d8c944SJason Kridner 		else
6570d8c944SJason Kridner 			__led_set(STATUS_LED_BIT1, 1);
6670d8c944SJason Kridner 	}
6770d8c944SJason Kridner #endif
6870d8c944SJason Kridner }
6970d8c944SJason Kridner 
7070d8c944SJason Kridner void __led_set (led_id_t mask, int state)
7170d8c944SJason Kridner {
7270d8c944SJason Kridner #ifdef STATUS_LED_BIT
7370d8c944SJason Kridner 	if (STATUS_LED_BIT & mask) {
7470d8c944SJason Kridner 		if (!omap_request_gpio(BEAGLE_LED_USR0)) {
7570d8c944SJason Kridner 			omap_set_gpio_direction(BEAGLE_LED_USR0, 0);
7670d8c944SJason Kridner 			omap_set_gpio_dataout(BEAGLE_LED_USR0, state);
7770d8c944SJason Kridner 		}
7870d8c944SJason Kridner 		saved_state[0] = state;
7970d8c944SJason Kridner 	}
8070d8c944SJason Kridner #endif
8170d8c944SJason Kridner #ifdef STATUS_LED_BIT1
8270d8c944SJason Kridner 	if (STATUS_LED_BIT1 & mask) {
8370d8c944SJason Kridner 		if (!omap_request_gpio(BEAGLE_LED_USR1)) {
8470d8c944SJason Kridner 			omap_set_gpio_direction(BEAGLE_LED_USR1, 0);
8570d8c944SJason Kridner 			omap_set_gpio_dataout(BEAGLE_LED_USR1, state);
8670d8c944SJason Kridner 		}
8770d8c944SJason Kridner 		saved_state[1] = state;
8870d8c944SJason Kridner 	}
8970d8c944SJason Kridner #endif
9070d8c944SJason Kridner }
91