mt6739 lk设置背光低于255 kernel黑屏

平台: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

该寄存器的描述如下

虽然不知道内部的逻辑是什么,折腾了两天,总算解决了,在此记录一下;

有知道原因的朋友,希望留言指教,在此谢过

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值