xref: /rk3399_rockchip-uboot/board/ti/beagle/led.c (revision b8bc8973a1830bb92e7a9bf3356dc209afb2f4e8)
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 /* GPIO pins for the LEDs */
28f87824efSJason Kridner #define BEAGLE_LED_USR0	150
29f87824efSJason Kridner #define BEAGLE_LED_USR1	149
3070d8c944SJason Kridner 
3170d8c944SJason Kridner #ifdef STATUS_LED_GREEN
3270d8c944SJason Kridner void green_LED_off (void)
3370d8c944SJason Kridner {
3470d8c944SJason Kridner 	__led_set (STATUS_LED_GREEN, 0);
3570d8c944SJason Kridner }
3670d8c944SJason Kridner 
3770d8c944SJason Kridner void green_LED_on (void)
3870d8c944SJason Kridner {
3970d8c944SJason Kridner 	__led_set (STATUS_LED_GREEN, 1);
4070d8c944SJason Kridner }
4170d8c944SJason Kridner #endif
4270d8c944SJason Kridner 
4370d8c944SJason Kridner void __led_init (led_id_t mask, int state)
4470d8c944SJason Kridner {
4570d8c944SJason Kridner 	__led_set (mask, state);
4670d8c944SJason Kridner }
4770d8c944SJason Kridner 
4870d8c944SJason Kridner void __led_toggle (led_id_t mask)
4970d8c944SJason Kridner {
50*b8bc8973SJoel A Fernandes 	int state, toggle_gpio = 0;
5170d8c944SJason Kridner #ifdef STATUS_LED_BIT
52*b8bc8973SJoel A Fernandes 	if (!toggle_gpio && STATUS_LED_BIT & mask)
53*b8bc8973SJoel A Fernandes 		toggle_gpio = BEAGLE_LED_USR0;
5470d8c944SJason Kridner #endif
5570d8c944SJason Kridner #ifdef STATUS_LED_BIT1
56*b8bc8973SJoel A Fernandes 	if (!toggle_gpio && STATUS_LED_BIT1 & mask)
57*b8bc8973SJoel A Fernandes 		toggle_gpio = BEAGLE_LED_USR1;
5870d8c944SJason Kridner #endif
59*b8bc8973SJoel A Fernandes 	if (toggle_gpio) {
60*b8bc8973SJoel A Fernandes 		if (!omap_request_gpio(toggle_gpio)) {
61*b8bc8973SJoel A Fernandes 			omap_set_gpio_direction(toggle_gpio, 0);
62*b8bc8973SJoel A Fernandes 			state = omap_get_gpio_dataout(toggle_gpio);
63*b8bc8973SJoel A Fernandes 			omap_set_gpio_dataout(toggle_gpio, !state);
64*b8bc8973SJoel A Fernandes 		}
65*b8bc8973SJoel A Fernandes 	}
6670d8c944SJason Kridner }
6770d8c944SJason Kridner 
6870d8c944SJason Kridner void __led_set (led_id_t mask, int state)
6970d8c944SJason Kridner {
7070d8c944SJason Kridner #ifdef STATUS_LED_BIT
7170d8c944SJason Kridner 	if (STATUS_LED_BIT & mask) {
7270d8c944SJason Kridner 		if (!omap_request_gpio(BEAGLE_LED_USR0)) {
7370d8c944SJason Kridner 			omap_set_gpio_direction(BEAGLE_LED_USR0, 0);
7470d8c944SJason Kridner 			omap_set_gpio_dataout(BEAGLE_LED_USR0, state);
7570d8c944SJason Kridner 		}
7670d8c944SJason Kridner 	}
7770d8c944SJason Kridner #endif
7870d8c944SJason Kridner #ifdef STATUS_LED_BIT1
7970d8c944SJason Kridner 	if (STATUS_LED_BIT1 & mask) {
8070d8c944SJason Kridner 		if (!omap_request_gpio(BEAGLE_LED_USR1)) {
8170d8c944SJason Kridner 			omap_set_gpio_direction(BEAGLE_LED_USR1, 0);
8270d8c944SJason Kridner 			omap_set_gpio_dataout(BEAGLE_LED_USR1, state);
8370d8c944SJason Kridner 		}
8470d8c944SJason Kridner 	}
8570d8c944SJason Kridner #endif
8670d8c944SJason Kridner }
87