平台:MT6739
原因:因开机阶段屏幕漏光比较明显,项目要求开机时背光亮度调低
问题:在进入到kernel后,背光突然被关掉1-2s(eng版本,user版本没那么长时间)
1.背光亮度调低的方法
(1)lk调低背光亮度,默认为255,改为102
diff --git a/vendor/mediatek/proprietary/bootable/bootloader/lk/target/rs508_39_1g/cust_leds.c b/vendor/mediatek/proprietary/bootable/bootloader/lk/target/rs508_39_1g/cust_leds.c
index e668bca..f8b1ee5 100755
--- a/vendor/mediatek/proprietary/bootable/bootloader/lk/target/rs508_39_1g/cust_leds.c
+++ b/vendor/mediatek/proprietary/bootable/bootloader/lk/target/rs508_39_1g/cust_leds.c
@@ -6,8 +6,12 @@
//extern int DISP_SetBacklight(int level);
extern int disp_bls_set_backlight(unsigned int level);
+// shark add for backlight too brightness .
+#ifdef CONFIG_RS508_39_1G_COMMON
+enum led_brightness backlight_default_level = 102;//LED_FULL;
+#else
enum led_brightness backlight_default_level = LED_FULL;
+#endif//
(2)kernel默认背光,同样改为102(支持AAL的版本是用此方法修改)
diff --git a/vendor/mediatek/proprietary/custom/rs508_39_1g/hal/aal/cust_aal.cpp b/vendor/mediatek/proprietary/custom/rs508_39_1g/hal/aal/cust_aal.cpp
index 4e1913e..d0d3afa 100755
--- a/vendor/mediatek/proprietary/custom/rs508_39_1g/hal/aal/cust_aal.cpp
+++ b/vendor/mediatek/proprietary/custom/rs508_39_1g/hal/aal/cust_aal.cpp
@@ -41,6 +41,8 @@ int SmartBacklightStrength[] = { 128 };
// Supports multiple LCM. The number of elements must equal to LCM_COUNT.
int SmartBacklightRange[] = { 128 };
+int InitBrightness = 102*4;
+
该方法参考mtk的FAQ12473,至于原因只能呵呵了,看不到源码
插播以下AAL的调用流程:
2.kernel黑屏的调查流程
(1)需要储备的知识参见FAQ18016
(2)排查过程
(2.1)按上述方法,先确认是否是kernel logo黑屏,
adb shell 下执行如下命令
-->./system/bin/boot_logo_updater
发现并没有黑屏
(2.2)问题锁定在kernel logo之前的两个阶段lk logo,lk切换到kernel并显示kernel logo的阶段
--- a/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
+++ b/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
@@ -1773,7 +1773,7 @@ int boot_linux_fdt(void *kernel, unsigned *tags,
g_is_64bit_kernel ? "64Bit" : "32Bit");
if (Debug_log_EMI_MPU)
Debug_log_EMI_MPU();
-
+#if 0
if (g_is_64bit_kernel)
lk_jump64((u32)entry, (u32)tags, 0, KERNEL_64BITS);
@@ -1784,6 +1784,7 @@ int boot_linux_fdt(void *kernel, unsigned *tags,
entry(0, machtype, tags);
#endif
}
+#endif//0 shark
while (1);
return 0;
}
注释掉lk_jump64((u32)entry, (u32)tags, 0, KERNEL_64BITS);这句,使得lk finish之后没有jump到kernel,发现lk阶段没有任何黑屏;
(2.3)可以肯定是kernel中的某些操作导致的pwm被拉低
在如下代码中的函数中加入log
kernel-4.4/drivers/misc/mediatek/video/common/pwm10/ddp_pwm.c
disp_pwm_set_enabled,disp_pwm_set_backlight_cmdq,ddp_pwm_init
发现相应的log并没有打印出来,说明出现问题的关键与pwm的直接关联性并不大,于是到mtk的eserve上去搜索相关的问题,在此感谢部门老大神来之笔找到了问题的解决方法;
(2.4)请参考https://eservice.mediatek.com/eservice-portal/issue_manager/update/51576740
--- a/kernel-4.4/drivers/clk/mediatek/clk-mt6739.c
+++ b/kernel-4.4/drivers/clk/mediatek/clk-mt6739.c
@@ -376,7 +376,7 @@ void __iomem *venc_base;
#define INFRA_CG0 0x9BBFFF20
#define INFRA_CG1 0x1E8F7F56
-#define INFRA_CG2 0x07FCC7DD
+#define INFRA_CG2 0x0FFCC7D9 // shark modify,low brightness set at lk, cause kernel pwm black
#define INFRA_CG3 0x00000DFF
查了一下datasheet
该寄存器的描述如下
虽然不知道内部的逻辑是什么,折腾了两天,总算解决了,在此记录一下;
有知道原因的朋友,希望留言指教,在此谢过