weixin_45523769 2024-02-20 14:50 采纳率: 0%
浏览 147
已结题

RK3588+LT9611UXC,mipi转hdmi方案

RK3588+LT9611UXC,mipi转hdmi方案开发:
请问有没有人做过这种项目呢?现在我卡在Linux下lt9611uxc的驱动,原本lt9611uxc驱动是芯片内部自己控制的,但是要实现自动检测后端HDMI显示器,需要在DRM驱动框架下去添加一个bridge的驱动,但是本人没做过DRM相关驱动,有点搞不定,希望有做过的工程师指导下。如果可以能否提供一份源码,有偿
我现在修改Linux下类似驱动,cat /sys/class/drm/card0-HDMI-B-1/modes能有一些分辨率,但是跟屏幕支持的分辨率相差挺多的,很多分辨率没有支持到,而且4K50,4K60分辨率时,LT9611UXC的log显示不能识别到正确的时序。这是输出4K时,RK3588的summary信息

img


这是LT9611UXC的打印信息

img


现在驱动没法识别更换了显示器,还是按的第一次插上的显示器EDID输出的时序。

  • 写回答

20条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-20 14:51
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    在您的描述中,您正在尝试基于RK3588和LT9611UXC芯片开发一个MIPI转HDMI的解决方案,并且在Linux环境下遇到了DRM驱动的相关问题。您需要在DRM框架下编写一个bridge驱动以实现自动检测后端HDMI显示器的功能,同时发现目前输出的分辨率与实际显示器支持的分辨率不符,尤其是在4K分辨率下时序识别不正确。

    从您提供的日志信息来看:

    1. 图1显示了RK3588的两个视频端口状态,其中Video Port2(HDMI-B-1)配置为3840x2160p50的分辨率,但是LT9611UXC的日志提示未能从列表中找到正确的视频模式,这意味着它可能没有正确解析或匹配到当前连接的HDMI显示器的EDID数据中的有效时序信息。

    2. LT9611UXC的日志内容表明,MIPI接口的部分参数如像素宽度、高度、总线时钟频率以及行同步和帧同步信号的设置情况。但存在“Do not find a video from the list!!”的错误信息,这说明LT9611UXC在处理来自RK3588的MIPI信号时无法找到与当前显示器相匹配的视频模式。

    解决这个问题的关键在于正确读取并解析HDMI显示器的EDID数据,并根据这些信息动态调整LT9611UXC的转换参数。以下是一个简化的步骤:

    1. 在Linux DRM驱动中添加对LT9611UXC桥接芯片的支持,通常需要实现drm_bridge_driver结构体,并覆盖必要的方法,比如prepare, commit, 和mode_fixup等,以便在DRM流水线中插入对LT9611UXC芯片进行时序转换的操作。
    static const struct drm_bridge_funcs lt9611uxc_bridge_funcs = {
        .attach = lt9611uxc_attach,
        .detach = lt9611uxc_detach,
        .enable = lt9611uxc_enable,
        .disable = lt9611uxc_disable,
        .mode_fixup = lt9611uxc_mode_fixup, // 根据EDID调整输入输出模式
        // 其他必要函数...
    };
    
    static struct drm_bridge_driver lt9611uxc_bridge_driver = {
        .driver = {
            .name = "lt9611uxc",
        },
        .funcs = &lt9611uxc_bridge_funcs,
    };
    
    1. mode_fixup函数中,应获取连接到HDMI端口的显示器的EDID信息,然后根据EDID数据生成或选择合适的输出时序。这部分代码通常会涉及读取EDID、解析时序、以及将这些时序转换为LT9611UXC所需的MIPI时序格式。
    static int lt9611uxc_mode_fixup(struct drm_bridge *bridge,
                                    struct drm_display_mode *mode,
                                    struct drm_connector *connector)
    {
        struct lt9611uxc_private_data *pdata = bridge->dev->_drvdata;
        struct edid *edid = connector->display_info.raw_edid;
    
        if (edid) {
            // 解析EDID获取所需时序
            // ...
            // 将解析出的HDMI时序转换为MIPI时序,并设置到LT9611UXC寄存器中
            pdata->set_mipi_timing(mode->hdisplay, mode->vdisplay, hsync, vsync, pixel_clock);
        }
    
        return 0;
    }
    

    由于这是一个相当复杂的过程,涉及到具体的硬件寄存器操作和EDID解析算法,这里只能给出大致的思路和伪代码。完整的源码实现需要查阅LT9611UXC的数据手册,理解其工作原理和寄存器布局,同时结合DRM子系统的API来完成。此外,还需要确保MIPI DSI控制器(即RK3588)的输出时序也与LT9611UXC的输入要求一致。

    建议联系瑞芯微(Rockchip)获取更多技术支持和参考代码,或者查找是否有公开的开源项目已经实现了类似功能。对于涉及版权和保密性的源码请求,请遵循相关法律法规及商业合同约束,不宜直接在公开场合索取或提供。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 用Matlab实现图中的光线追迹
  • ¥15 联想笔记本开机出现系统更新界面
  • ¥15 各位帮帮我 我不想重做系统
  • ¥30 微信小程序蓝牙数据透传
  • ¥15 加氢站氢负荷数据集来源
  • ¥15 umi接入sentry遇到问题
  • ¥15 HBuilderX打包H5网页,扫码模块无法使用
  • ¥15 Javascript跳转页面后,无法执行后面代码,如何解决?
  • ¥15 echarts绘制图表
  • ¥15 请教两个关于高德地图定位不准的技术问题