修改leds-gpio.c 让GPIO LED在kernel启动时就开始闪烁

内容提要:

客户需要在开机时就闪烁LED,并要求越快越好

 

复制代码
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
index 764c313..9276e99 100644
--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
@@ -194,6 +194,10 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
 
                fwnode_property_read_string(child, "linux,default-trigger",
                                            &led.default_trigger);
+               fwnode_property_read_u32(child, "blink-delay-on",
+                                           (unsigned int *)&led_dat->cdev.blink_delay_on);
+               fwnode_property_read_u32(child, "blink-delay-off",
+                                           (unsigned int *)&led_dat->cdev.blink_delay_off);
 
                if (!fwnode_property_read_string(child, "default-state",
                                                 &state)) {
复制代码

 

设备树配置参考

复制代码
        boot_led {
            label = "boot_led";
            gpios = <&tlmm 36 0>;
            default-state = "off";
            linux,default-trigger = "timer";
            blink-delay-on = <0>;
            blink-delay-off = <500>;
        };

        work_led {
            label = "work_led";
            gpios = <&tlmm 34 0>;
            default-state = "off";
            linux,default-trigger = "timer";
            blink-delay-on = <2000>;
            blink-delay-off = <1000>;
        };
复制代码

 

总结。leds-gpio.c提供了在sysfs操作 blink_delay_on 和 blink_delay_off 的节点,但是默认情况下这两个属性在驱动中都初始化为0,导致驱动加载后无法开始闪烁,必须等kernel起来后,通过应用程序进行设置后才开始闪烁。通过在驱动中增加这两个方法,可以对这两个属性进行初始化配置,让闪烁在驱动加载完成后就进行。

 

posted @   PYPYN  阅读(115)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示