联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:1602036736

RK3566 android13 LED子系统控制

实现过程

kernel的变化

diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c
index c4e780bdb385..89af01db4456 100644
--- a/drivers/leds/led-core.c
+++ b/drivers/leds/led-core.c
@@ -151,8 +151,13 @@ static void led_set_software_blink(struct led_classdev *led_cdev,
 	if (!led_cdev->blink_brightness)
 		led_cdev->blink_brightness = led_cdev->max_brightness;
 
-	led_cdev->blink_delay_on = delay_on;
-	led_cdev->blink_delay_off = delay_off;
+	// led_cdev->blink_delay_on = delay_on;
+	// led_cdev->blink_delay_off = delay_off;
+	//trigger time,wucaicheng,1378913492@qq.com,20230817
+	if(!led_cdev->blink_delay_on && !led_cdev->blink_delay_off){
+		led_cdev->blink_delay_on = delay_on;
+		led_cdev->blink_delay_off = delay_off;
+	}
 
 	/* never on - just set to off */
 	if (!delay_on) {
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
index 93f5b1b60fde..ed2903613fe7 100644
--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
@@ -16,6 +16,7 @@
 #include <linux/platform_device.h>
 #include <linux/property.h>
 #include <linux/slab.h>
+#include <linux/delay.h>
 
 struct gpio_led_data {
 	struct led_classdev cdev;
@@ -117,6 +118,12 @@ static int create_gpio_led(const struct gpio_led *template,
 						     &init_data);
 	}
 
+    //delay trigger,wucaicheng,1378913492@qq.com,20230817
+    // (template = gpio_led)->delay_reg from kernel/include/linux/leds.h custom
+	// msleep form kernel/include/linux/delay.h
+	if (template->delay_reg > 0) {
+        msleep(template->delay_reg);
+    }
 	return ret;
 }
 
@@ -144,7 +151,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
 		struct gpio_led_data *led_dat = &priv->leds[priv->num_leds];
 		struct gpio_led led = {};
 		const char *state = NULL;
-
+		struct device_node *np = to_of_node(child);
 		/*
 		 * Acquire gpiod from DT with uninitialized label, which
 		 * will be updated after LED class device is registered,
@@ -160,6 +167,14 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
 
 		led_dat->gpiod = led.gpiod;
 
+		fwnode_property_read_string(child, "linux,default-trigger",
+			&led.default_trigger);
+
+		//delay trigger,wucaicheng,1378913492@qq.com,20230817
+		of_property_read_u32(np, "linux,delay-reg", &led.delay_reg);
+		of_property_read_u32(np, "linux,blink-delay-on", (u32*)(&led_dat->cdev.blink_delay_on));
+		of_property_read_u32(np, "linux,blink-delay-off", (u32*)(&led_dat->cdev.blink_delay_off));		
+
 		if (!fwnode_property_read_string(child, "default-state",
 						 &state)) {
 			if (!strcmp(state, "keep"))
			
diff --git a/include/linux/leds.h b/include/linux/leds.h
index 6a8d6409c993..71534fc466ce 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -519,6 +519,7 @@ struct gpio_led {
 	unsigned	panic_indicator : 1;
 	unsigned	default_state : 2;
 	unsigned	retain_state_shutdown : 1;
+	unsigned int delay_reg; //delay trigger,wucaicheng,1378913492@qq.com,20230817
 	/* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
 	struct gpio_desc *gpiod;
 };

设备树

/ {
    model = "lckfb tspi V10 Board";
    compatible = "lckfb,tspi-v10", "rockchip,rk3566";

    leds: leds {
        compatible = "gpio-leds";
        rgb_led_r: rgb-led-r {
            gpios = <&gpio1 RK_PB2 GPIO_ACTIVE_LOW>;
            linux,default-trigger = "timer";
            linux,delay-reg = <0>;          // 延时注册
            linux,blink-delay-on = <500>;   // 打开时间
            linux,blink-delay-off = <500>;  // 关闭时间
        };
        rgb_led_g: rgb-led-g {
            gpios = <&gpio1 RK_PB1 GPIO_ACTIVE_LOW>;
            linux,default-trigger = "timer";
            linux,delay-reg = <100>;        // 延时注册
            linux,blink-delay-on = <1000>; 
            linux,blink-delay-off = <1000>;
        };
        rgb_led_b: rgb-led-b {
            gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_LOW>;
            linux,default-trigger = "timer";
            linux,delay-reg = <100>;        // 延时注册
            linux,blink-delay-on = <1500>; 
            linux,blink-delay-off = <1500>;
        };
    };
};
//用户三色灯
&leds {
    status = "okay";
};

 

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册