We have been struggling with screen flickering issues with a 1024x600 LVDS panel on an imx8mq based SOM.
This issue appears both with the DCSS controller as well as the LCDIF controller. The conversion from MIPI-DSI to LVDS is done through the sn65dsi83 chip from TI.
The issues exists both when using the 4.14.78 as well as the 4.14.98 BSP release. The official 4.14.98 release refuses to set the proper clocks, but after receiving a set of patches from NXP we were able to get the Linux DRM subsystem to initialise properly, however even with the provided patches the screen flickering persisted.
After a long investigation, we found out that by applying the following patch to 4.14.98, the screen flicker disappears completely:
diff --git a/drivers/clk/imx/clk-imx8mq.c b/drivers/clk/imx/clk-imx8mq.c index 8ab58946c379..b0dc538c8554 100644 --- a/drivers/clk/imx/clk-imx8mq.c +++ b/drivers/clk/imx/clk-imx8mq.c @@ -602,8 +602,9 @@ static void __init imx8mq_clocks_init(struct device_node *ccm_node) clk_set_parent(clks[IMX8MQ_CLK_AUDIO_AHB], clks[IMX8MQ_SYS2_PLL_500M]); /* config video_pll1 clock */ - clk_set_parent(clks[IMX8MQ_VIDEO_PLL1_REF_SEL], clks[IMX8MQ_CLK_27M]); - clk_set_rate(clks[IMX8MQ_VIDEO_PLL1], 593999999); + clk_set_parent(clks[IMX8MQ_VIDEO_PLL1_REF_SEL], clks[IMX8MQ_CLK_25M]); + clk_set_rate(clks[IMX8MQ_VIDEO_PLL1], 500000000);
We are unsure about this change and why it would be necessary?