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