背景介绍

设置手机默认90帧刷新率,支持用户在设置里面可调整。

方案分析

方案一:修改LCD驱动设备树,配置成默认90帧刷新率。

方案二:应用层适配,首次开机luancher设置一把90帧刷新。

方案验证适配

方案一:修复LCD设备树验证

1.1 使用cat /proc/cmdline查看当前设备lcd驱动名字:LCD_ICNL9922C_JINGTAI_MIPI4

img

1.2查看LCD_ICNL9922C_JINGTAI_MIPI4.dtsi文件

mattli@DESKTOP-1DDLL8C:~/wrokcode/01.4.1release/out$ find -name LCD_ICNL9922C_JINGTAI_MIPI4.dtsi
./oriole/kernel/src_tmp/linux-5.15/arch/arm64/boot/dts/sprd/lcd/LCD_ICNL9922C_JINGTAI_MIPI4.dtsi

通过配置文件可以看到LCD从60开始,默认是60帧刷新率

刷新率计算公式fps = clock-frequency / ((hactive + hfront + hsync-len + hback)* (vactive + vfront + vsync-len + vback))

display-timings {
    native-mode = <&LCD_ICNL9922C_JINGTAI_MIPI4_timing0>; // 选择支持模式,类似switch语句,设置timing0表示从timing0开始支持6090两种模式;设置timing1表示从timing1支持90一种模式。

    LCD_ICNL9922C_JINGTAI_MIPI4_timing0: timing0 { // 60帧刷新率
        clock-frequency = <256000000>; // 提供给lcd的时钟频率,一般屏的规格书都会给出, 也可以通过计算得到。clock-frequency = 水平总周期 * 垂直总周期 * 帧率:
                                       // clock-frequency = (hactive + hfront + hsync-len + hback)* (vactive + vfront + vsync-len + vback) * fps
        hactive = <1080>; // 横向分辨率。
        vactive = <2400>; // 纵向分辨率。
        hback-porch = <28>; // 行同步后肩时间。
        hfront-porch = <36>; // 行同步前肩时间。
        vback-porch = <32>; // 帧同步后肩时间。
        vfront-porch = <1274>; // 帧同步前肩时间。
        hsync-len = <4>; // 行同步回扫时间。
        vsync-len = <4>; // 帧同步回扫时间。
    };

    LCD_ICNL9922C_JINGTAI_MIPI4_timing1: timing1 { // 90帧刷新率
        clock-frequency = <256000000>;
        hactive = <1080>;
        vactive = <2400>;
        hback-porch = <28>;
        hfront-porch = <36>;
        vback-porch = <32>;
        vfront-porch = <38>;
        hsync-len = <4>;
        vsync-len = <4>;
    };
};

1.3 lcd配置文件源码是通过kernel.patch自动生成,以下通过打patch修改验证方法:

1. 下载kernel单仓代码:
git clone -b OpenHarmony-4.1-Release  https://gitee.com/cooperation-team-7885/kernel_linux_5.15.git
2.把patch文件device/board/hys/oriole/kernel/kernel.patch拷贝到 已下载kernel单仓目录
3. 打patch 
patch -p1 < ./kernel.patch  
4. 生成patch 
修改arch/arm64/boot/dts/sprd/lcd/LCD_ICNL9922C_JINGTAI_MIPI4.dtsi 交换timing0和timing1大括号里面内容。
LCD_ICNL9922C_JINGTAI_MIPI4_timing0: timing0 { // 90帧刷新率
    clock-frequency = <256000000>;
    hactive = <1080>;
    vactive = <2400>;
    hback-porch = <28>;
    hfront-porch = <36>;
    vback-porch = <32>;
    vfront-porch = <38>;
    hsync-len = <4>;
    vsync-len = <4>;
};
LCD_ICNL9922C_JINGTAI_MIPI4_timing1: timing1 { // 60帧刷新率
    clock-frequency = <256000000>;
    hactive = <1080>; // 横向分辨率。
    vactive = <2400>; // 纵向分辨率。
    hback-porch = <28>; // 行同步后肩时间。
    hfront-porch = <36>; // 行同步前肩时间。
    vback-porch = <32>; // 帧同步后肩时间。
    vfront-porch = <1274>; // 帧同步前肩时间。
    hsync-len = <4>; // 行同步回扫时间。
    vsync-len = <4>; // 帧同步回扫时间。
};
rm -rf kernel.patch  
git add .
git diff --staged > kernelnew.patch
5. 把生成kernelnew.patch和工程目录kernel.patch 对比,只改自己修改文件差异
6. 删除out目录kernel,编译整个工程。
7. 刷机验证:
# cat /proc/kmsg |grep mode_valid
<6>[ 4258.520382][T26030@C0] [drm] sprd_dpu_mode_valid() mode: "1080x2400": 90 256000 1080 1116 1120 1148 2400 2438 2442 2474 0x40 0x0
<6>[ 4296.778534][T26030@C0] [drm] sprd_dpu_mode_valid() mode: "1080x2400": 60 256000 1080 1116 1120 1148 2400 3674 3678 3710 0x48 0x0
8. 遗留问题:开机重启概率出现开机动效花屏。

方案二:上层应用修改验证:

2.1 分析设计方案,需要launcher, settingsdata, settings三个模块修改

img

2.2 方案修改:

  1. launcher启动时,设置默认90帧;

img

  1. settingsdata数据库,增加默认刷新率配置

img

  1. settings同步更新数据库:

img

  1. 替换launcher, settingsdata, settings三个模块修改后,可以实现默认90帧刷新率效果,没有出现开机花屏等问题。
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐