LCD MIPI跳频:驱动层添加MIPI CLK副频
2026/4/25 2:31:53 网站建设 项目流程

目录

1.问题背景

2.问题初步分析

3.解决方法

4.驱动验证方法

5.modem验证方法

6.其他问题

1.问题背景

射频反馈 亮屏干扰

2.问题初步分析

经沟通,射频要求打开LCD MIPI跳频功能,主频299,副频316(射频提供)

(1)modem端修改

(2)屏端驱动修改

3.解决方法

(1)modem端修改

(2)屏端修改 kernel/kernel_device_modules-6.6/drivers/gpu/drm/panel/panel-gc7272-hdplus1600-dsi-vdo.c

注意:为了副频 帧率60,需配置相应porch值(找LCD IC厂的fae提供)

static struct mtk_panel_params ext_params = { …… .dyn = { .switch_en = 1, .pll_clk = 316, //pll_clk .data_rate = 632, // pll_clk*2 .hfp = 96, .hbp = 116, .hsa = 4, .vfp = 140, .vbp = 28, .vsa = 6, }, …… }

4.驱动验证方法

(1)打开log
kernel/kernel_device_modules-6.6/drivers/gpu/drm/mediatek/mediatek_v2/mtk_debug.c

(2)使用如下命令验证功能是否ok:

adb shell "echo mipi_ccci:1> /d/mtkfb" //跳副频 adb shell "echo mipi_ccci:0> /d/mtkfb" //跳主频

(3)观察log

adb shell cat /dev/kmsg | grep "mipi"
6,110566,174377738,-,caller=T404692;sh: [DISP]mtk_mipi_tx_pll_rate_switch_gce+ 632 //(副频*2)--->确认ok 6,110872,186049770,-,caller=T204692;sh: [DISP]mtk_mipi_tx_pll_rate_switch_gce+ 598 //(主频*2)--->确认ok

(4)输入命令切换mipi clk ,apk检查帧率

5.modem验证方法

合入modern patch后,modern那边会call过来,参照如下code flow追下代码,看下哪里没有跑通

mipi 跳频:

(1) /kernel_device_modules-6.6/drivers/misc/mediatek/eccci/port/port_sysmsg.c 搜索关键字"MD_DISPLAY_DYNAMIC_MIPI",这里会调用mtk_disp_mipi_clk_change()函数。

(2)mtk_disp_mipi_clk_change()函数在这里 /kernel_device_modules-6.6/drivers/misc/mediatek/eccci/port/port_sysmsg.h extern声明一下,原型在/kernel_device_modules-6.6/drivers/gpu/drm/mediatek/mediatek_v2/mtk_debug.c中。

(3) call mtk_disp_mipi_ccci_callback()----->mtk_crtc_mipi_freq_switch()

(4) 在文件kernel_device_modules-6.6/drivers/gpu/drm/mediatek/mediatek_v2/mtk_drm_crtc.c 中, 这个函数mtk_crtc_mipi_freq_switch()会调用io cmd(MIPI_HOPPING)

6.其他问题

MIPI跳频后灭屏再亮屏频率自动恢复的问题,为解决此问题,可以尝试以下方法:

(1)在drivers/gpu/drm/mediatek/mediatek_v2/mtk_dsi.c文件中添加如下代码:

@@ -990,6 +990,11 @@ unsigned int mtk_dsi_default_rate(struct mtk_dsi *dsi) && dsi->ext && dsi->ext->params && dsi->ext->params->dyn_fps.data_rate) { data_rate = dsi->ext->params->dyn_fps.data_rate; + } else if (dsi->mipi_hopping_sta && dsi->ext && \ + &(dsi->ext->params->dyn) && (dsi->ext->params->dyn.switch_en==1)) { + data_rate = !!dsi->ext->params->dyn.data_rate ? + dsi->ext->params->dyn.data_rate : + dsi->ext->params->dyn.pll_clk * 2;

(2)确保SSC (Spread Spectrum Clock) 配置正确:

在LK中,设置ssc_disable=1
在KERNEL中,设置ssc_enable=0

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询