From 571fede27a127398697e783a06a833e37b5b58c3 Mon Sep 17 00:00:00 2001
From: huangcm <1263938474@qq.com>
Date: Thu, 03 Jul 2025 01:22:12 +0000
Subject: [PATCH] feat(lcd): add lcd_pwm_max_limit

---
 longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.h        |    1 +
 longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c        |   14 +++++++++++---
 longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c |   15 ++++++++++++---
 longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.h |    1 +
 android/device/softwinner/ceres-c3/ceres_c3.mk                                    |    2 +-
 5 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/android/device/softwinner/ceres-c3/ceres_c3.mk b/android/device/softwinner/ceres-c3/ceres_c3.mk
index 2bec556..79b5ef1 100755
--- a/android/device/softwinner/ceres-c3/ceres_c3.mk
+++ b/android/device/softwinner/ceres-c3/ceres_c3.mk
@@ -333,7 +333,7 @@
 
 # holding wake lock
 PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
-    persist.sys.kickpi_holding_wakelock=true
+    persist.sys.kickpi_holding_wakelock=false
 
 # stoarge
 PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
diff --git a/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c b/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c
index acb75fb..c07980d 100755
--- a/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c
+++ b/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c
@@ -15,6 +15,7 @@
  *
  */
 #include "disp_lcd.h"
+#include <linux/delay.h>
 
 struct disp_lcd_private_data
 {
@@ -754,6 +755,14 @@
 		ret = disp_sys_script_get_item(primary_key, sub_name, (int *)lcd_cfg->lcd_pin_power[i], 2);
 	}
 
+    sprintf(sub_name, "lcd_pwm_max_limit");
+    ret = disp_sys_script_get_item(primary_key, sub_name, &value, 1);
+    if (ret == 1) {
+        lcd_cfg->lcd_pwm_max_limit = value;
+    } else {
+        lcd_cfg->lcd_pwm_max_limit = 255;
+    }
+
 #ifdef __LINUX_PLAT__
 //backlight adjust
 	for (i = 0; i < 101; i++) {
@@ -761,12 +770,12 @@
 		lcd_cfg->backlight_curve_adjust[i] = 0;
 
 		if (i == 100)
-			lcd_cfg->backlight_curve_adjust[i] = 255;
+			lcd_cfg->backlight_curve_adjust[i] = lcd_cfg->lcd_pwm_max_limit;
 
 		ret = disp_sys_script_get_item(primary_key, sub_name, &value, 1);
 		if (ret == 1) {
 			value = (value > 100)? 100:value;
-			value = value * 255 / 100;
+			value = value * lcd_cfg->lcd_pwm_max_limit / 100;
 			lcd_cfg->backlight_curve_adjust[i] = value;
 		}
 	}
@@ -774,7 +783,7 @@
 	sprintf(sub_name, "lcd_backlight");
 	ret = disp_sys_script_get_item(primary_key, sub_name, &value, 1);
 	if (ret == 1) {
-		value = (value > 256)? 256:value;
+		value = (value > lcd_cfg->lcd_pwm_max_limit)? lcd_cfg->lcd_pwm_max_limit:value;
 		lcd_cfg->backlight_bright = value;
 	} else {
 		lcd_cfg->backlight_bright = 197;
diff --git a/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.h b/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.h
index 051e357..6dbf350 100755
--- a/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.h
+++ b/longan/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.h
@@ -55,6 +55,7 @@
 	u32                   lcd_contrast;
 	u32                   lcd_saturation;
 	u32                   lcd_hue;
+    u32                   lcd_pwm_max_limit;
 }disp_lcd_cfg;
 
 s32 disp_init_lcd(disp_bsp_init_para * para);
diff --git a/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c b/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c
index ec4b3fb..fcf5e6b 100644
--- a/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c
+++ b/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.c
@@ -456,19 +456,27 @@
 					     2);
 	}
 
+    sprintf(sub_name, "lcd_pwm_max_limit");
+    ret = disp_sys_script_get_item(primary_key, sub_name, &value, 1);
+    if (ret == 1) {
+        lcd_cfg->lcd_pwm_max_limit = value;
+    } else {
+        lcd_cfg->lcd_pwm_max_limit = 255;
+    }
+
 /* backlight adjust */
 	for (i = 0; i < 101; i++) {
 		sprintf(sub_name, "lcd_bl_%d_percent", i);
 		lcd_cfg->backlight_curve_adjust[i] = 0;
 
 		if (i == 100)
-			lcd_cfg->backlight_curve_adjust[i] = 255;
+			lcd_cfg->backlight_curve_adjust[i] = lcd_cfg->lcd_pwm_max_limit;
 
 		ret =
 		    disp_sys_script_get_item(primary_key, sub_name, &value, 1);
 		if (ret == 1) {
 			value = (value > 100) ? 100 : value;
-			value = value * 255 / 100;
+			value = value * lcd_cfg->lcd_pwm_max_limit / 100;
 			lcd_cfg->backlight_curve_adjust[i] = value;
 		}
 	}
@@ -476,7 +484,7 @@
 	sprintf(sub_name, "lcd_backlight");
 	ret = disp_sys_script_get_item(primary_key, sub_name, &value, 1);
 	if (ret == 1) {
-		value = (value > 256) ? 256 : value;
+		value = (value > lcd_cfg->lcd_pwm_max_limit) ? lcd_cfg->lcd_pwm_max_limit : value;
 		lcd_cfg->backlight_bright = value;
 	} else {
 		lcd_cfg->backlight_bright = 197;
diff --git a/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.h b/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.h
index eedba5f..11c904a 100644
--- a/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.h
+++ b/longan/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/de/disp_lcd.h
@@ -55,6 +55,7 @@
 	u32 lcd_contrast;
 	u32 lcd_saturation;
 	u32 lcd_hue;
+    u32 lcd_pwm_max_limit;
 };
 
 s32 disp_init_lcd(struct disp_bsp_init_para *para);

--
Gitblit v1.6.2