2013年11月14日 星期四

linux gpio_led framework 用法

1. 先將 menuconfig 裡 LED Trigger support 打開 
Device Drivers  --->  LED Support  --->  LED Trigger support  --->  LED Timer Trigger
                                                                   |->  LED Heartbeat Trigger
                                                                   |->  LED backlight Trigger
                                                                   |->  LED GPIO Trigger
                                                                   |->  LED Default ON Trigger

2. 將 gpio-key 定義好, 並註冊.
struct gpio_led {
const char *name;
const char *default_trigger;
unsigned gpio;
unsigned active_low : 1;
unsigned retain_state_suspended : 1;
unsigned default_state : 2;
/* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
};

struct gpio_led_platform_data {
int num_leds;
struct gpio_led *leds;
int (*gpio_blink_set)(unsigned gpio, int state,
unsigned long *delay_on,
unsigned long *delay_off);
};

#include
#include

static struct gpio_led default_leds[] = {
{
.name = "Heartbeat",
.gpio = CPU_TEST_LED,
.default_trigger = "heartbeat",
.active_low = 1,
},
};

static struct gpio_led_platform_data heartbeat_led_data = {
.num_leds = ARRAY_SIZE(default_leds),
.leds = default_leds,
};

static struct platform_device heartbeat_leds = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &heartbeat_led_data,
}
};

platform_device_register(&heartbeat_leds);


3. 編好 kernel 後, 你會看到 /sys/devices/platform/leds-gpio/leds/Heartbeat, 表示你 ...  成功了 ...

4. cat /sys/devices/platform/leds-gpio/leds/Heartbeat/trigger
none nand-disk timer [heartbeat] gpio default-on
表示目前功能是 [heartbeat]

5. 將 trigger 改成 timer, 可以用來 blinking LED ...
echo timer > sys/devices/platform/leds-gpio/leds/Heartbeat/trigger
   cat /sys/devices/platform/leds-gpio/leds/Heartbeat/trigger
none nand-disk [timer] heartbeat gpio default-on

   echo 50 > sys/devices/platform/leds-gpio/leds/Heartbeat/delay_on
   echo 50 > sys/devices/platform/leds-gpio/leds/Heartbeat/delay_off

沒有留言:

張貼留言