xref: /openbmc/u-boot/arch/arm/cpu/arm920t/ep93xx/led.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
284ad6884SPeter Tyser /*
384ad6884SPeter Tyser  * Copyright (C) 2010, 2009 Matthias Kaehlcke <matthias@kaehlcke.net>
484ad6884SPeter Tyser  */
584ad6884SPeter Tyser 
684ad6884SPeter Tyser #include <asm/io.h>
784ad6884SPeter Tyser #include <asm/arch/ep93xx.h>
884ad6884SPeter Tyser #include <config.h>
984ad6884SPeter Tyser #include <status_led.h>
1084ad6884SPeter Tyser 
112d8d190cSUri Mashiach static uint8_t saved_state[2] = {CONFIG_LED_STATUS_OFF, CONFIG_LED_STATUS_OFF};
122d8d190cSUri Mashiach static uint32_t gpio_pin[2] = {1 << CONFIG_LED_STATUS_GREEN,
132d8d190cSUri Mashiach 			       1 << CONFIG_LED_STATUS_RED};
1484ad6884SPeter Tyser 
switch_LED_on(uint8_t led)15eada086fSTom Rini static inline void switch_LED_on(uint8_t led)
1684ad6884SPeter Tyser {
1784ad6884SPeter Tyser 	register struct gpio_regs *gpio = (struct gpio_regs *)GPIO_BASE;
1884ad6884SPeter Tyser 
1984ad6884SPeter Tyser 	writel(readl(&gpio->pedr) | gpio_pin[led], &gpio->pedr);
202d8d190cSUri Mashiach 	saved_state[led] = CONFIG_LED_STATUS_ON;
2184ad6884SPeter Tyser }
2284ad6884SPeter Tyser 
switch_LED_off(uint8_t led)23eada086fSTom Rini static inline void switch_LED_off(uint8_t led)
2484ad6884SPeter Tyser {
2584ad6884SPeter Tyser 	register struct gpio_regs *gpio = (struct gpio_regs *)GPIO_BASE;
2684ad6884SPeter Tyser 
2784ad6884SPeter Tyser 	writel(readl(&gpio->pedr) & ~gpio_pin[led], &gpio->pedr);
282d8d190cSUri Mashiach 	saved_state[led] = CONFIG_LED_STATUS_OFF;
2984ad6884SPeter Tyser }
3084ad6884SPeter Tyser 
red_led_on(void)312d3be7c4SJason Kridner void red_led_on(void)
3284ad6884SPeter Tyser {
332d8d190cSUri Mashiach 	switch_LED_on(CONFIG_LED_STATUS_RED);
3484ad6884SPeter Tyser }
3584ad6884SPeter Tyser 
red_led_off(void)362d3be7c4SJason Kridner void red_led_off(void)
3784ad6884SPeter Tyser {
382d8d190cSUri Mashiach 	switch_LED_off(CONFIG_LED_STATUS_RED);
3984ad6884SPeter Tyser }
4084ad6884SPeter Tyser 
green_led_on(void)412d3be7c4SJason Kridner void green_led_on(void)
4284ad6884SPeter Tyser {
432d8d190cSUri Mashiach 	switch_LED_on(CONFIG_LED_STATUS_GREEN);
4484ad6884SPeter Tyser }
4584ad6884SPeter Tyser 
green_led_off(void)462d3be7c4SJason Kridner void green_led_off(void)
4784ad6884SPeter Tyser {
482d8d190cSUri Mashiach 	switch_LED_off(CONFIG_LED_STATUS_GREEN);
4984ad6884SPeter Tyser }
5084ad6884SPeter Tyser 
__led_init(led_id_t mask,int state)5184ad6884SPeter Tyser void __led_init(led_id_t mask, int state)
5284ad6884SPeter Tyser {
5384ad6884SPeter Tyser 	__led_set(mask, state);
5484ad6884SPeter Tyser }
5584ad6884SPeter Tyser 
__led_toggle(led_id_t mask)5684ad6884SPeter Tyser void __led_toggle(led_id_t mask)
5784ad6884SPeter Tyser {
582d8d190cSUri Mashiach 	if (CONFIG_LED_STATUS_RED == mask) {
592d8d190cSUri Mashiach 		if (CONFIG_LED_STATUS_ON == saved_state[CONFIG_LED_STATUS_RED])
602d3be7c4SJason Kridner 			red_led_off();
6184ad6884SPeter Tyser 		else
622d3be7c4SJason Kridner 			red_led_on();
632d8d190cSUri Mashiach 	} else if (CONFIG_LED_STATUS_GREEN == mask) {
642d8d190cSUri Mashiach 		if (CONFIG_LED_STATUS_ON ==
652d8d190cSUri Mashiach 		    saved_state[CONFIG_LED_STATUS_GREEN])
662d3be7c4SJason Kridner 			green_led_off();
6784ad6884SPeter Tyser 		else
682d3be7c4SJason Kridner 			green_led_on();
6984ad6884SPeter Tyser 	}
7084ad6884SPeter Tyser }
7184ad6884SPeter Tyser 
__led_set(led_id_t mask,int state)7284ad6884SPeter Tyser void __led_set(led_id_t mask, int state)
7384ad6884SPeter Tyser {
742d8d190cSUri Mashiach 	if (CONFIG_LED_STATUS_RED == mask) {
752d8d190cSUri Mashiach 		if (CONFIG_LED_STATUS_ON == state)
762d3be7c4SJason Kridner 			red_led_on();
7784ad6884SPeter Tyser 		else
782d3be7c4SJason Kridner 			red_led_off();
792d8d190cSUri Mashiach 	} else if (CONFIG_LED_STATUS_GREEN == mask) {
802d8d190cSUri Mashiach 		if (CONFIG_LED_STATUS_ON == state)
812d3be7c4SJason Kridner 			green_led_on();
8284ad6884SPeter Tyser 		else
832d3be7c4SJason Kridner 			green_led_off();
8484ad6884SPeter Tyser 	}
8584ad6884SPeter Tyser }
86