主题中讨论的其他器件:DS90C385A
工具/软件:Linux
LVDS 视频工作时出现问题。
背景:我们有一个支持 LVDS 和 HDMI 视频输出的定制 AM335x 板(注:我们根据电路板所放置的产品,一次只使用这两个视频输出中的一个–无需在输出之间切换;编辑: 使用 LVDS 时、器件树中甚至没有 HDMI 配置)。 我们已经让 HDMI 工作了一段时间,现在正在尝试让 LVDS 工作。
CPU 的 LCD 视频引脚连接到三个多路复用器芯片(一个用于红色引脚和视频控制信号,例如 VSYNC),一个用于绿色引脚,一个用于蓝色引脚), 然后、多路复用器被切换为将视频信号发送到 LVDS 发送器芯片或 HDMI 发送器芯片。 其结果是、对于 HDMI 和 LVDS、从 CPU 流出的 LCD 引脚映射是相同的。
问题:在设备树中显示计时设置正确–我为测试显示的简单 QT GUI 稳定且位置正确–但我似乎有颜色问题。 更具体地说:
- 交换红色和蓝色。
- LVDS 显示屏需要 RGB888、CPU 和 LVDS 显示屏之间的数据路径为此布线。 我已经将一些打印稿放入 DRM 和 TILCDC 代码中,它报告的像素格式为 DRM_MODE_RGB888。 但是、不仅交换了红色和蓝色、似乎已将某项设置为6位色深(可能是 RGB565?)。
我知道以上内容是因为 使用我的测试 GUI、我将 Qt 斜升窗口背景的红色通道从0-255、但我看到的不是稳定闪烁的红色、而是当值从0–63阶跃时、我看到一个蓝色、 然后以64的频率变为黑色、亮度上升到127、以128的频率变为黑色、以191为斜升、以192为黑色、然后以255为斜升。
此时,我应该指出,我知道使用24bpp 时交换的红色和蓝色引脚的 AM335x LCD 引脚勘误表(请参阅 https://tinyurl.com/y8y48dk9上的 AM335x 勘误表文档,第8页) 我们的板已按照文档中的说明交换了红色和蓝色引脚、以支持 HDMI 显示屏上的 RGB888。 鉴于发送到 HDMI 显示屏的视频显示正常、我认为交换操作已正确完成(我们的原理图显示了这一点)。
我花了几天时间处理此问题,可以提供任何响应者可能需要的各种信息,但我将从以下内容开始。
设备树:
相关设备树节点。
面板{
兼容="ti、tilcdc、panel ";
pinctrl-names ="default"、"sleep";
pinctrl-0 =<&LCD_PINS_DEFAULT>;
/*pinctrl-1 =<&LCD_PINS_SLEEP>;*/
状态="正常";
面板信息{
交流偏置 =<255>;
AC-BIAS-INtrpt =<0>;
dma-burse-SZ =<16>;
bpp =<24>;
FDD =<0x80>;
同步边沿 =<0>;
SYNC-Ctrl =<1>;
栅格顺序 =<0>;
FIFO-TH =<0>;
};
显示时序{
800x600{
时钟频率=<40000000>;
hactive =<800>;
Vactive =<600>;
前沿=<40>;
后沿=<88>;
HSYNC-LEN =<128>;
后沿=<23>;
垂直前沿=<1>;
vsync-len =<4>;
HSYNC-ACTIVE =<1>;
vsync-active =<1>;
停用=<1>;
像素时钟激活=<1>;
};
};
};
LCDC{
状态="正常";
};
注:我省略了 pinctrl 映射。
我还尝试将器件树中的 bpp 设置为16、仅用于 giggles、并且在行为上没有差别。
莫代特:
另一件事是,在我至少运行一次模式检测之前,LVDS 显示屏根本不会显示任何视频。 在使用 HDMI 显示屏时不需要这样做。
说到 motetest,我还使用它来显示其色条测试图像。 这在使用 HDMI 显示屏时显示正常、 但是,使用 LVDS 显示时,不仅颜色会关闭(根据我看到的其他颜色问题的预期),而且色条会偏移到屏幕底部,只显示一小部分。 这意味着显示分辨率或时序可能不正确、但当我显示专为显示屏设置大小的 Qt 测试 GUI 时、所有内容都显示在正确的位置。
还有一些我可能涉及的其他信息–我在驱动程序打印中看到的一些对我来说并不重要的内容,但我完全不熟悉 DRM 视频子系统, 因此,我不知道我认为的错误是否真的是错误的,现在我将继续讨论这一问题。
如果有任何帮助,将不胜感激。
