Firefly开源社区

标题: 关于VGA和HDMI同时显示的问题 [打印本页]

作者: ggstone    时间: 2015-3-2 15:56
标题: 关于VGA和HDMI同时显示的问题
版主你好,
我们用fb0作为lcdc0的hdmi输出,fb5作为lcdc1的vga输出,
请问fb5和fb0在rk_fb_alloc_buffer_by_ion中如何处理?两个fb能否公用一个dma buffer或者screen_base呢?
也就是说上层往fb0的screen_base写了数据触发了lcdc0的dma,能否有方法也立刻触发lcdc1的 dma呢?
只有两个fb公用一个内存池,双显才能流畅。我们目前做了两套dma和screen_base,然后在kernel中用memcpy拷贝,可以双显,但是很卡!

感谢版主!

作者: zhansb    时间: 2015-3-2 16:41
同屏同显,还是?
作者: ggstone    时间: 2015-3-2 17:07
本帖最后由 ggstone 于 2015-3-2 17:40 编辑

首先谢谢版主!
是两个屏幕显示一样的画面,我在想 dma_buf 能不能用一样的,这是rk_fb_alloc_buffer_by_ion的代码:
win->area[0].dma_buf = ion_share_dma_buf(rk_fb->ion_client, handle);
win->area[0].ion_hdl = handle;
fbi->screen_base = ion_map_kernel(rk_fb->ion_client, handle);
作者: isle    时间: 2015-3-2 18:05
lcdc0的hdmi输出 ?lcdc1的vga输出?
是你们自己做的板子吗?目前firefly的VGA是接lcdc0的 无法切换到lcdc1.
另外 ,rk本身就是fb共享一个内存池。应该是你们自己改的问题。
仅仅同显,做双显是不需要两套dma和screen_base。你们改复杂了。
作者: ggstone    时间: 2015-3-3 10:35
isle 发表于 2015-3-2 18:05
lcdc0的hdmi输出 ?lcdc1的vga输出?
是你们自己做的板子吗?目前firefly的VGA是接lcdc0的 无法切换到lcdc1 ...

感谢你的回复。
我们是lcdc0做hdmi,lcdc1做vga。
板子用你的你们的firefly 3288 box。
你们默认代码是lcdc0可以切换显示hdmi和vga,但是只能显示一个。
我们需要同时显示,必须启用lcdc1来控制vga通道。
那么lcdc1和lcdc0共享内存池吗? 如果不需要两套dma和screen_base,那么同显如何让hdmi的数据 给到vga上呢?
还请指点,谢谢!
作者: ggstone    时间: 2015-3-3 14:15
我看到rk_fb_alloc_buffer()函数,应该只给lcdc0的fb0分配物理地址和dma地址
如何能让lcdc1也关联到fb0呢?
作者: zhansb    时间: 2015-3-3 14:31
可以参考PAD版的代码做一些移植,PAD版支持同显
作者: ggstone    时间: 2015-3-3 15:38
zhansb 发表于 2015-3-3 14:31
可以参考PAD版的代码做一些移植,PAD版支持同显

感谢版主回复。
我们现在做成这样,基本也是参照pad版做的。
我们现在lcdc1 始终无法和lcdc0共享fb0,只能用lcdc1自己的一套fb,然后fb到fb的内容copy,导致卡顿。
还请版主能指点一下。
作者: zhansb    时间: 2015-3-3 18:31
本帖最后由 zhansb 于 2015-3-3 20:27 编辑

试过直接在PAD上做,还是很流畅。
应该是FB哪里移植的有问题,做一下分析
作者: isle    时间: 2015-3-4 09:21
首先告诉你的是  控制VGA通道 是硬件决定的,软件无法改。如果你用我们的开发板。这个是实现不了的 。
另外不明白 你们为什么一定要lcdc1去控制VGA?能说明缘由么?
作者: ggstone    时间: 2015-3-9 13:45
isle 发表于 2015-3-4 09:21
首先告诉你的是  控制VGA通道 是硬件决定的,软件无法改。如果你用我们的开发板。这个是实现不了的 。
另 ...

firefly的vga显示,在box方案上是和hdmi共享lcdc0,切换显示。
我们要让vga单独工作,必然要enable lcdc1,必然要为lcdc1创建一套fb。
但是fb上报给Android的节点又只能是fb0(系统默认的,当然这里可以扩展,修改Android就复杂了。)
所以我lcdc1的fb5 想显示fb0同样的内容,要么从fb0拷贝所有内容到fb5,然后显示。(拷贝效率较低)
要么lcdc1直接从fb0内存池取数据(直接触发lcdc1的DMA),然后显示。

作者: ggstone    时间: 2015-3-11 09:15
所以问题就是VGA如何触发DMA操作呢?
作者: isle    时间: 2015-3-11 10:54
正确的设置是VGA用lcdc0 。HDMI用lcdc1.
如何同时显示 请参考pad版本的代码。原理是一样的。
作者: ggstone    时间: 2015-3-16 18:20
原来是这样啊!这是很重要的线索!
谢谢版主的回复!!
必须是VGA用lcdc0 。HDMI用lcdc1对吧?
如果我设置HDMI lcdc0,VGA LCDC1,硬件上是无法实现的,是这样吗?

作者: ggstone    时间: 2015-3-16 18:20
本帖最后由 ggstone 于 2015-3-16 20:27 编辑
isle 发表于 2015-3-11 10:54
正确的设置是VGA用lcdc0 。HDMI用lcdc1.
如何同时显示 请参考pad版本的代码。原理是一样的。

原来是这样啊!这是很重要的线索!!
谢谢版主的回复!!
必须是VGA(lvds或者edp)用lcdc0 。HDMI用lcdc1对吧?
如果我设置HDMI lcdc0,VGA LCDC1,硬件上是无法实现的,是这样吗?
作者: isle    时间: 2015-3-17 09:03
是的,
VGA  是外部设备,通道是硬件选择的,软件无法改。
HDMI,内部设备,通道可以由软件选择。
作者: ggstone    时间: 2015-3-17 09:31
isle 发表于 2015-3-17 09:03
是的,
VGA  是外部设备,通道是硬件选择的,软件无法改。
HDMI,内部设备,通道可以由软件选择。

感谢isle!!!
支持firefly!
作者: ggstone    时间: 2015-3-17 18:04
isle 发表于 2015-3-17 09:03
是的,
VGA  是外部设备,通道是硬件选择的,软件无法改。
HDMI,内部设备,通道可以由软件选择。

目前我把VGA的driver从box bsp移植到了pad bsp,双显已经ok了。
但是我有点疑问,我当时在box bsp开发的时候,lcdc0 控制hdmi,lcdc1控制vga,也分别输出数据了,
只是没有共享同一个buffer而已,比较卡顿。(也是我当时发这个帖子的原因。)
你说硬件上已经做固定了,照理说lcdc1应该无法显示vga吧?
作者: isle    时间: 2015-3-18 09:35
你虽然设置了VGA 选择lcdc1。 但实际上VGA的信号还是从lcdc0来的。卡顿应该是同步的问题。
作者: ggstone    时间: 2015-3-18 11:32
版主,这个是3288datasheet中,lvds的说明,
说明vop0和vop1都可以做lvds的输入哦,
那就是说vga应该既可以用lcdc0控制也可以用lcdc1控制吧?

lvds.png (51.3 KB, 下载次数: 1212)

lvds.png

作者: ggstone    时间: 2015-3-18 11:37
isle 发表于 2015-3-18 09:35
你虽然设置了VGA 选择lcdc1。 但实际上VGA的信号还是从lcdc0来的。卡顿应该是同步的问题。

lvds控制模块也是在cpu内部,应该可以由软件配置lcdc1和lcdc0吧?和hdmi一样的。
作者: ggstone    时间: 2015-3-18 14:01
isle 发表于 2015-3-18 09:35
你虽然设置了VGA 选择lcdc1。 但实际上VGA的信号还是从lcdc0来的。卡顿应该是同步的问题。

我查看电路图,看到lvds和lcdc0公用一组pin,硬件已经接到了lvds接口上。所以lvds只能有lcdc0来控制了。
但是内部的edp接口应该就可以由LCDC1来控制了。

作者: danzuiji    时间: 2015-3-25 09:44
楼主,可不可以分享一份你的pad版内核给我。谢谢!
作者: Herman    时间: 2016-12-13 15:24
isle 发表于 2015-3-4 09:21
首先告诉你的是  控制VGA通道 是硬件决定的,软件无法改。如果你用我们的开发板。这个是实现不了的 。
另 ...

版主,请问下3288双屏异显,可以实现两个屏显示不同的分辨率吗?
作者: Norman    时间: 2016-12-15 10:45
lcdc0控制VGA,lcdc1控制HDMI,我这边测试没有问题,是同显,如果想两个都正常显示,需要两个屏幕的比例一样才好!
作者: Norman    时间: 2016-12-15 10:46
我这边如果lcdc1控制VGA,目前我没有办法让它亮,不知楼主如何做到的?学习一下!谢谢!




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1