显示模式、EDID 与 Device Tree Timing
1. 数据模型
display_timing每个参数可有min/typ/max:
- pixelclock;
- hactive、hfront porch、hsync、hback porch;
- vactive、vfront porch、vsync、vback porch;
- sync polarity和data enable flags。
videomode是选定后的具体数值。
2. 转换
videomode_from_timing()通常取typ值并转换flags。反向转换用于跨fbdev/DRM/panel helper共享。
3. DT结构
1 | display-timings { |
属性可为单值或范围。
4. OF API
of_get_display_timing();of_get_display_timings();of_get_videomode();- native mode选择;
- timing释放。
Parser必须检查缺失属性、范围顺序和overflow。
5. fbdev ModeDB
modedb.c维护标准video modes,解析video=参数并做最佳匹配。fbcvt.c生成CVT mode。
6. EDID
fbmon.c解析EDID:
- header/checksum;
- established/standard timings;
- detailed timing descriptors;
- monitor range;
- preferred mode。
fb_ddc.c可通过I2C DDC读取EDID。
7. Mode验证
候选mode还必须满足:
- display controller pixel clock;
- output PHY/link bandwidth;
- plane/stride和memory bandwidth;
- panel固定时序;
- bridge限制;
- porch/sync范围。
DT能解析不等于硬件可用。
8. HDMI Helper
hdmi.c提供HDMI相关通用结构/信息处理辅助,但RK3588 HDMI controller、PHY、HDCP和connector状态主要在DRM/vendor驱动中。
9. 时钟误差
实际PLL可能只能近似pixelclock。Driver应检查允许误差并把实际mode反馈给上层,防止面板抖动或音视频不同步。
10. RK3588
固定panel常由DT panel timing/compatible描述;HDMI/DP/eDP通常通过EDID和DRM mode probing。VOP2输出route决定video port连接哪个connector。
11. 常见故障
| 现象 | 检查 |
|---|---|
| 无mode | EDID/DDC、DT timing、connector状态 |
| 花屏 | pixel format、clock、lane/PHY |
| 偏移 | porch/sync polarity |
| 间歇黑屏 | link bandwidth、PLL误差、HPD |
| panel亮但无图 | route/endpoint/VOP plane |
12. 安全
EDID来自外部显示器,应视为不可信:校验长度、extension count、descriptor offset和乘法溢出,避免恶意EDID触发越界。
正在加载留言…