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