Difference between revisions of "GPIO LEDS"
From ArmadeusWiki
(→Introduction) |
(→Configuration) |
||
| Line 7: | Line 7: | ||
==Configuration== | ==Configuration== | ||
| − | First, you need to enable the leds-gpio driver in your kernel. | + | First, you need to enable the leds-gpio driver in your kernel and some triggers like the "heartbeat" trigger to make the LED flash like a heartbeat. |
<pre class="config"> | <pre class="config"> | ||
| Line 13: | Line 13: | ||
--- LED support | --- LED support | ||
[*] LED Class Support | [*] LED Class Support | ||
| + | *** LED drivers *** | ||
<*> LED Support for GPIO connected LEDs | <*> LED Support for GPIO connected LEDs | ||
[*] Platform device bindings for GPIO LEDs | [*] Platform device bindings for GPIO LEDs | ||
| + | *** LED Triggers *** | ||
| + | [*] LED Trigger support | ||
| + | <*> LED Timer Trigger | ||
| + | <*> LED Heartbeat Trigger | ||
| + | <*> LED backlight Trigger | ||
| + | <*> LED Default ON Trigger | ||
</pre> | </pre> | ||
| Line 20: | Line 27: | ||
<source lang="c"> | <source lang="c"> | ||
| + | |||
| + | #include <linux/leds.h> | ||
| + | |||
/* GPIO LED */ | /* GPIO LED */ | ||
| − | #if | + | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) |
| − | + | static struct gpio_led apf27dev_led[] = { | |
| − | + | ||
| − | static struct gpio_led | + | |
{ | { | ||
| − | .name = " | + | .name = "apfdev:green:user", |
| − | .default_trigger = " | + | .default_trigger = "heartbeat", |
.gpio = (GPIO_PORTF | 14), | .gpio = (GPIO_PORTF | 14), | ||
| − | + | .active_low = 1, | |
| − | + | ||
| − | + | ||
}, | }, | ||
}; | }; | ||
| − | static struct gpio_led_platform_data | + | static struct gpio_led_platform_data apf27dev_led_data = { |
| − | + | .num_leds = ARRAY_SIZE(apf27dev_led), | |
| − | .num_leds = ARRAY_SIZE( | + | .leds = apf27dev_led |
}; | }; | ||
| − | static struct platform_device | + | static struct platform_device apf27dev_led_dev = { |
| − | .name = "leds-gpio", | + | .name = "leds-gpio", |
| − | .id = | + | .id = -1, |
| − | .dev = { | + | .dev = { |
| − | .platform_data = & | + | .platform_data = &apf27dev_led_data, |
}, | }, | ||
}; | }; | ||
| − | + | #endif /* CONFIG_LEDS_GPIO */ | |
| − | + | ||
| − | + | ||
| − | #endif | + | |
</source> | </source> | ||
| − | Add the | + | Add the LED to get it managed by the kernel. |
<source lang="c"> | <source lang="c"> | ||
static struct platform_device *platform_devices[] __initdata = { | static struct platform_device *platform_devices[] __initdata = { | ||
| + | #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) | ||
| + | &apf27dev_led_dev, | ||
| + | #endif | ||
ALSA_SOUND | ALSA_SOUND | ||
| − | + | ||
}; | }; | ||
</source> | </source> | ||
<pre class="apf"> | <pre class="apf"> | ||
| − | # ls /sys/class/leds/ | + | # ls /sys/class/leds/apfdev\:green\:user/ |
brightness max_brightness subsystem uevent | brightness max_brightness subsystem uevent | ||
device power trigger | device power trigger | ||
</pre> | </pre> | ||
Revision as of 23:44, 15 May 2012
How to use leds-gpio driver to manage states of connected leds of your Armadeus board.
Introduction
You can manage a led connected to a GPIO pin. The managing is similar with the standard GPIO sysfs driver, but you have some new features like triggers (e.g. LED blinks based on disk access) .
Configuration
First, you need to enable the leds-gpio driver in your kernel and some triggers like the "heartbeat" trigger to make the LED flash like a heartbeat.
Device Drivers --->
--- LED support
[*] LED Class Support
*** LED drivers ***
<*> LED Support for GPIO connected LEDs
[*] Platform device bindings for GPIO LEDs
*** LED Triggers ***
[*] LED Trigger support
<*> LED Timer Trigger
<*> LED Heartbeat Trigger
<*> LED backlight Trigger
<*> LED Default ON Trigger
Then, in your apf27-dev.c, you need to define your LED before the variable platform_devices[].
#include <linux/leds.h>
/* GPIO LED */
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
static struct gpio_led apf27dev_led[] = {
{
.name = "apfdev:green:user",
.default_trigger = "heartbeat",
.gpio = (GPIO_PORTF | 14),
.active_low = 1,
},
};
static struct gpio_led_platform_data apf27dev_led_data = {
.num_leds = ARRAY_SIZE(apf27dev_led),
.leds = apf27dev_led
};
static struct platform_device apf27dev_led_dev = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &apf27dev_led_data,
},
};
#endif /* CONFIG_LEDS_GPIO */
Add the LED to get it managed by the kernel.
static struct platform_device *platform_devices[] __initdata = {
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
&apf27dev_led_dev,
#endif
ALSA_SOUND
};
# ls /sys/class/leds/apfdev\:green\:user/ brightness max_brightness subsystem uevent device power trigger