]>
Commit | Line | Data |
---|---|---|
3e6b86b5 TC |
1 | /* |
2 | * Status LED driver based on GPIO access conventions of Linux | |
3 | * | |
4 | * Copyright (C) 2010 Thomas Chou <[email protected]> | |
ec3b4981 | 5 | * Licensed under the GPL-2 or later. |
3e6b86b5 TC |
6 | */ |
7 | ||
3e6b86b5 TC |
8 | #include <status_led.h> |
9 | #include <asm/gpio.h> | |
10 | ||
6e7df1d1 TR |
11 | #ifndef CFG_GPIO_LED_INVERTED_TABLE |
12 | #define CFG_GPIO_LED_INVERTED_TABLE {} | |
9dfdcdfe IG |
13 | #endif |
14 | ||
6e7df1d1 | 15 | static led_id_t gpio_led_inv[] = CFG_GPIO_LED_INVERTED_TABLE; |
9dfdcdfe IG |
16 | |
17 | static int gpio_led_gpio_value(led_id_t mask, int state) | |
18 | { | |
2d8d190c | 19 | int i, gpio_value = (state == CONFIG_LED_STATUS_ON); |
9dfdcdfe IG |
20 | |
21 | for (i = 0; i < ARRAY_SIZE(gpio_led_inv); i++) { | |
22 | if (gpio_led_inv[i] == mask) | |
23 | gpio_value = !gpio_value; | |
24 | } | |
25 | ||
26 | return gpio_value; | |
27 | } | |
28 | ||
3e6b86b5 TC |
29 | void __led_init(led_id_t mask, int state) |
30 | { | |
9dfdcdfe IG |
31 | int gpio_value; |
32 | ||
6516f81b IG |
33 | if (gpio_request(mask, "gpio_led") != 0) { |
34 | printf("%s: failed requesting GPIO%lu!\n", __func__, mask); | |
35 | return; | |
36 | } | |
37 | ||
9dfdcdfe IG |
38 | gpio_value = gpio_led_gpio_value(mask, state); |
39 | gpio_direction_output(mask, gpio_value); | |
3e6b86b5 TC |
40 | } |
41 | ||
42 | void __led_set(led_id_t mask, int state) | |
43 | { | |
9dfdcdfe IG |
44 | int gpio_value = gpio_led_gpio_value(mask, state); |
45 | ||
46 | gpio_set_value(mask, gpio_value); | |
3e6b86b5 TC |
47 | } |
48 | ||
49 | void __led_toggle(led_id_t mask) | |
50 | { | |
51 | gpio_set_value(mask, !gpio_get_value(mask)); | |
52 | } | |
d375ebbc BN |
53 | |
54 | #ifdef CONFIG_GPIO_LED_STUBS | |
55 | ||
56 | /* 'generic' override of colored LED stubs, to use GPIO functions instead */ | |
57 | ||
2d8d190c | 58 | #ifdef CONFIG_LED_STATUS_RED |
d375ebbc BN |
59 | void red_led_on(void) |
60 | { | |
2d8d190c | 61 | __led_set(CONFIG_LED_STATUS_RED, CONFIG_LED_STATUS_ON); |
d375ebbc BN |
62 | } |
63 | ||
64 | void red_led_off(void) | |
65 | { | |
2d8d190c | 66 | __led_set(CONFIG_LED_STATUS_RED, CONFIG_LED_STATUS_OFF); |
d375ebbc BN |
67 | } |
68 | #endif | |
69 | ||
2d8d190c | 70 | #ifdef CONFIG_LED_STATUS_GREEN |
d375ebbc BN |
71 | void green_led_on(void) |
72 | { | |
2d8d190c | 73 | __led_set(CONFIG_LED_STATUS_GREEN, CONFIG_LED_STATUS_ON); |
d375ebbc BN |
74 | } |
75 | ||
76 | void green_led_off(void) | |
77 | { | |
2d8d190c | 78 | __led_set(CONFIG_LED_STATUS_GREEN, CONFIG_LED_STATUS_OFF); |
d375ebbc BN |
79 | } |
80 | #endif | |
81 | ||
2d8d190c | 82 | #ifdef CONFIG_LED_STATUS_YELLOW |
d375ebbc BN |
83 | void yellow_led_on(void) |
84 | { | |
2d8d190c | 85 | __led_set(CONFIG_LED_STATUS_YELLOW, CONFIG_LED_STATUS_ON); |
d375ebbc BN |
86 | } |
87 | ||
88 | void yellow_led_off(void) | |
89 | { | |
2d8d190c | 90 | __led_set(CONFIG_LED_STATUS_YELLOW, CONFIG_LED_STATUS_OFF); |
d375ebbc BN |
91 | } |
92 | #endif | |
93 | ||
2d8d190c | 94 | #ifdef CONFIG_LED_STATUS_BLUE |
d375ebbc BN |
95 | void blue_led_on(void) |
96 | { | |
2d8d190c | 97 | __led_set(CONFIG_LED_STATUS_BLUE, CONFIG_LED_STATUS_ON); |
d375ebbc BN |
98 | } |
99 | ||
100 | void blue_led_off(void) | |
101 | { | |
2d8d190c | 102 | __led_set(CONFIG_LED_STATUS_BLUE, CONFIG_LED_STATUS_OFF); |
d375ebbc BN |
103 | } |
104 | #endif | |
105 | ||
106 | #endif /* CONFIG_GPIO_LED_STUBS */ |