RK3588 添加分辨率的方法
RK3588是一款高性能的应用处理器,支持多种视频输出格式和分辨率。在开发或调试过程中,可能需要为RK3588添加新的分辨率支持。这通常涉及对驱动程序和设备树(DTS)文件的修改。以下是添加分辨率的一般步骤:
一、添加正常分辨率
-
修改EDID驱动
- 目的:使HDMI屏在开机时能够自动识别到合适的分辨率并显示。
- 代码路径:
kernel/drivers/gpu/drm/drm_edid.c - 修改内容:在
edid_cea_modes_1[]分辨率数组中添加一个新的分辨率。由于该数组的大小限制为127,添加一个分辨率后可能需要移除或替换一个现有的分辨率。
static const struct drm_display_mode edid_cea_modes_1[] = { /* 现有分辨率... */ /* 添加新的分辨率,例如 1280x720@60Hz */ { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390, 1430, 1650, 0, 720, 725, 730, 750, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, /* ...其他分辨率 */ }; -
重新编译内核
- 修改完代码后,需要重新编译内核以应用更改。
- 将编译好的内核镜像烧写到开发板上。
二、添加特殊分辨率
-
修改HDMI驱动
- 目的:在需要特定分辨率时,强制使用指定的分辨率,而不是通过EDID自动获取。
- 代码路径:
kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c - 修改内容:在
dw_hdmi_default_modes[]中添加特殊的分辨率,并关闭EDID识别。
static const struct drm_display_mode dw_hdmi_default_modes[] = { /* 现有分辨率... */ /* 添加新的特殊分辨率,例如 1024x768@60Hz */ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048, 1184, 1344, 0, 768, 771, 777, 806, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, /* ...其他分辨率 */ };- 关闭EDID识别:在HDMI驱动代码中,找到EDID识别的部分,将其禁用,以强制使用
dw_hdmi_default_modes[]中的分辨率。
-
修改设备树
- 根据需要,可能还需要在设备树(DTS)文件中进行相应的配置,以确保新的分辨率能够被正确应用。
- 打开对应的DTS文件,例如
rockchip/your_board_name.dtsi,配置HDMI输出端口和显示控制器。
&hdmi0 { status = "okay"; /* 其他配置... */ }; &hdmi0_in_vp0 { status = "okay"; /* 其他配置... */ }; -
重新编译设备树
- 修改完DTS文件后,需要重新编译设备树。
- 使用
dtc工具编译DTS文件,生成DTB文件。
-
烧写设备树
- 将编译好的DTB文件烧写到开发板上。
三、注意事项
- 分辨率支持:确保新的分辨率被硬件支持。例如,如果HDMI接口仅支持到4K分辨率,则无法添加8K分辨率。
- 刷新率:除了分辨率外,还需要设置合适的刷新率。
- 时序参数:对于特殊分辨率,可能需要手动设置行、场参数(如hsync_start、vsync_start等),以确保信号的正确传输。
- 测试和验证:在添加新的分辨率后,务必进行充分的测试,以确保显示正常,没有花屏、黑屏等问题。
通过以上步骤,您可以在RK3588上添加新的分辨率支持。在实际操作中,建议根据具体的应用场景和需求进行调整和优化。
188

被折叠的 条评论
为什么被折叠?



