大家好,
问题1:
我正在内核 lf-6.12y 中开发单端口 LVDS 显示功能。我在 driver/gpu/drm/panel/panel-simple.c 中添加了自己的面板配置,但是当我测量时钟引脚时,时钟频率始终在 150Mhz 左右。但其他信号都正常。
但是,在 lf-6.18y 中,时钟可以正确输出,并且在双端口模式下,两个版本的时钟切换也都可以。这是已知问题还是我的操作失误?由于某些原因,我希望能在lf-6.12y版本中解决这个问题。
以下是我的设置
panel-simple.c:
static const struct display_timing lt9211_test_timing = {
像素时钟= { 35916000, 35916000, 35916000 },
.hactive= { 280, 280, 280 },
.hfront_porch= { 40, 40, 40, },
.hback_porch= { 60, 60, 60 },
.hsync_len= { 30, 30, 30 },
.vactive= { 1424, 1424, 1424 },
.vfront_porch= { 15, 15, 15 },
.vback_porch= { 17, 17, 17},
.vsync_len= { 4, 4, 4 },
.flags= DISPLAY_FLAGS_DE_HIGH,
};
static const struct panel_desc lt9211_test = {
时间= <9211_test_timing,
.bpc= 8,
.num_timings= 1,
。尺寸= {
。宽度= 292,
。高度= 111,
},
.bus_format= MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA,
.bus_flags= DRM_BUS_FLAG_DE_HIGH,
.连接器类型= DRM_MODE_CONNECTOR_LVDS,
};
设备树中的 lvds 配置
&{/}{
lvds1_panel {
//兼容 = "3ascreen,sa123hwv-l51";
兼容 = "lt9211_test";
背光 = <&lvds_backlight>;
状态 = "正常";
港口 {
panel_in: 端点 {
远程端点 = <&lvds1_out>;
};
};
};
Q2:
在某些情况下,同一硬件中的数据通道和时钟之间的 LVDS 公共电压将无法对齐。或者某些信号缺失,例如 LVDS1 D3P 有信号但 D3N 没有信号。你知道这是为什么吗?某些程序会导致这种情况吗?
Q3:
是否有任何配置可以改变LVDS时钟相位?
谢谢!
问题1:这很可能是LF-6.12Y LVDS时钟驱动程序的一个已知限制/错误,而不是你的panel-simple.c文件的问题。时机把握失误。在单端口LVDS中,驱动/时钟路径很可能强制或四舍五入到大约148.5/150。MHz。由于 lf-6.18y 可以正常工作,实际的解决方法是将 lf-6.18y 的 LVDS/LDB 时钟更改向后移植到 lf-6.12y,或者修补 6.12y LVDS 驱动程序/PLL 时钟表,以允许使用您的 35.916 MHz 像素时钟。
git diff lf-6.12.y..lf-6.18.y -- \
drivers/gpu/drm/bridge/imx/imx95-ldb.c
drivers/phy/freescale/phy-fsl-imx8mp-lvds.c
drivers/clk/imx/clk-imx95-blk-ctl.c \
arch/arm64/boot/dts/freescale/imx95.dtsi \
arch/arm64/boot/dts/freescale/imx95-*-lvds*
Q2:如果 LVDS 对中的一侧缺失,例如 D3P 有信号但 D3N 没有信号,这通常不是面板时序造成的。查看:
软件可能会导致错误的通道/线路/数据宽度设置,但差分对的一侧缺失强烈表明存在硬件、焊盘、布线、端接或测量问题。
Q3:对于 i.MX8MP LVDS,没有常规的设备树配置来改变 LVDS 时钟相位。改为修复时钟频率/时序/PHY设置。