给openwrt添加LED驱动

目前许多嵌入式板的LED都是通过GPIO连接的。所以在初始化LED之前,必须初始化GPIO。

驱动GPIO其实不用自己写,基本上linux的platform Init部分都已经写好了初始化代码了。

linux 下实现LED 驱动非常方便了,基本上要做的事情就是定义一下LED所在的GPIO针脚。


Linux 下通过框架实现LED 大致过程如下
1、实现框架要求的几个函数
int gpio_request(unsigned gpio, const char *label)
void gpio_free(unsigned gpio)
int gpio_direction_input(unsigned gpio)
int gpio_direction_output(unsigned gpio, int value)
int gpio_get_value(unsigned gpio)
void gpio_set_value(unsigned gpio, int value)
int gpio_to_irq(unsigned gpio)
int irq_to_gpio(unsigned irq)
这几个函数是硬件相关的,具体实现就跟硬件管脚有关了
2、在结构 gpio_led 中定义gpio 的名字,并跟gpio 管脚关联起来,然后在初始时用函数platform_add_devices加到系统中
LED的定义,请参考:
platform_device.h
leds.h




3、使用时对 /sys/class/leds 下的文件接口设置相应的值即可


举个例子,例如有1个LED 灯,需要实现如下功能
亮,灭.


首先实现:


int gpio_request(unsigned gpio, const char *label)
void gpio_free(unsigned gpio)
int gpio_direction_input(unsigned gpio)
int gpio_direction_output(unsigned gpio, int value)
int gpio_get_value(unsigned gpio)
void gpio_set_value(unsigned gpio, int value)
int gpio_to_irq(unsigned gpio)
int irq_to_gpio(unsigned irq)
进行初始化。

我用的平台是IXP425,Gemtek GTWX5715 (Linksys WRV54G).


下边是我关于LED的初始化代码:

//加入对LED的支持
+#include <linux/platform_device.h>
+#include <linux/leds.h>

//#if 0

//开始自定义LED
//函数接口: { .name = "LED名称", .active_low = 1, .gpio =LED所在的GPIO, },

static struct gpio_led user_leds[] = {
{ .name = "wrv54g:Power", .active_low = 1, .gpio = GTWX5715_LED1_GPIO, },
{ .name = "wrv54g:Wireless1", .active_low = 1, .gpio = GTWX5715_LED2_GPIO, },
{ .name = "wrv54g:Wireless2", .active_low = 1, .gpio = GTWX5715_LED3_GPIO, },
{ .name = "wrv54g:Internet", .active_low = 1, .gpio = GTWX5715_LED4_GPIO, },
{ .name = "wrv54g:DMZ", .active_low = 1, .gpio = GTWX5715_LED9_GPIO, },
};


static struct gpio_led_platform_data wrv54g_led_data = {
.num_leds = ARRAY_SIZE(user_leds),
.leds = user_leds,
};


static struct platform_device wrv54g_leds = {
.name = "wrv54g_leds",
.id = -1,
.dev = {
  .platform_data = &wrv54g_led_data,
}
};
//#endif





static struct platform_device *gtwx5715_devices[] __initdata = {
&gtwx5715_uart_device,
&gtwx5715_flash,
&gtwx5715_spi_bus,
&gtwx5715_npeb_device,
&gtwx5715_npec_device,
//在platform_device 中加入对LED的注册
+  &wrv54g_leds. //LED Device for WRV54G
};

使用方法:

要常亮 echo 1 > /sys/class/leds/wrv54g:Power/brightness
要熄灭 echo 0 > /sys/class/leds/wrv54g:Power/brightness


在openwrt中可以在LUCI下面设置。

本文章由作者:佐须之男 整理编辑,原文地址: 给openwrt添加LED驱动
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐