目录
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