]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arm/cpu/arm920t/ep93xx/led.c
karo: fdt: fix panel-dpi support
[karo-tx-uboot.git] / arch / arm / cpu / arm920t / ep93xx / led.c
1 /*
2  * Copyright (C) 2010, 2009 Matthias Kaehlcke <matthias@kaehlcke.net>
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6
7 #include <asm/io.h>
8 #include <asm/arch/ep93xx.h>
9 #include <config.h>
10 #include <status_led.h>
11
12 static uint8_t saved_state[2] = {STATUS_LED_OFF, STATUS_LED_OFF};
13 static uint32_t gpio_pin[2] = {1 << STATUS_LED_GREEN,
14                                1 << STATUS_LED_RED};
15
16 inline void switch_LED_on(uint8_t led)
17 {
18         register struct gpio_regs *gpio = (struct gpio_regs *)GPIO_BASE;
19
20         writel(readl(&gpio->pedr) | gpio_pin[led], &gpio->pedr);
21         saved_state[led] = STATUS_LED_ON;
22 }
23
24 inline void switch_LED_off(uint8_t led)
25 {
26         register struct gpio_regs *gpio = (struct gpio_regs *)GPIO_BASE;
27
28         writel(readl(&gpio->pedr) & ~gpio_pin[led], &gpio->pedr);
29         saved_state[led] = STATUS_LED_OFF;
30 }
31
32 void red_led_on(void)
33 {
34         switch_LED_on(STATUS_LED_RED);
35 }
36
37 void red_led_off(void)
38 {
39         switch_LED_off(STATUS_LED_RED);
40 }
41
42 void green_led_on(void)
43 {
44         switch_LED_on(STATUS_LED_GREEN);
45 }
46
47 void green_led_off(void)
48 {
49         switch_LED_off(STATUS_LED_GREEN);
50 }
51
52 void __led_init(led_id_t mask, int state)
53 {
54         __led_set(mask, state);
55 }
56
57 void __led_toggle(led_id_t mask)
58 {
59         if (STATUS_LED_RED == mask) {
60                 if (STATUS_LED_ON == saved_state[STATUS_LED_RED])
61                         red_led_off();
62                 else
63                         red_led_on();
64         } else if (STATUS_LED_GREEN == mask) {
65                 if (STATUS_LED_ON == saved_state[STATUS_LED_GREEN])
66                         green_led_off();
67                 else
68                         green_led_on();
69         }
70 }
71
72 void __led_set(led_id_t mask, int state)
73 {
74         if (STATUS_LED_RED == mask) {
75                 if (STATUS_LED_ON == state)
76                         red_led_on();
77                 else
78                         red_led_off();
79         } else if (STATUS_LED_GREEN == mask) {
80                 if (STATUS_LED_ON == state)
81                         green_led_on();
82                 else
83                         green_led_off();
84         }
85 }