完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Platform: RK3288
OS: Android 7.1.2 Kernel: v4.4.143 需求: RK3288双屏同显,一路LVDS,一路HDMI,其中HDMI经过驱动板点亮同一块LVDS屏,实现RK3288点两路800*1280LVDS屏,驱动板型号为:CY.R8311 V2,LVDS屏为MX1010503081NB;客户由于价格的原因没有采用1280*800横扫描的屏,而采用了800*1280竖扫描的屏; 方法: 1、驱动800*1280LVDS 1.1、TIMING 首先,我们拿到厂商提供的规格书,确认一下屏的时序参数; 由图1、图2时序表,我们确认下以下参数 像素时钟频率clock-frequency =60MHz或者20MHz≤clock-frequency≤85MHz或者通过公式计算H*V(总周期)*fps 水平有效像素Hactive=800 水平总周期=920 根据公式水平总周期 = hback-porch + hfront-porch + hsync-len+Hactive 得出hback-porch + hfront-porch + hsync-len = 水平总周期 - Hactive = 120 垂直有效像素Vactive=1280 垂直总周期=1304 根据公式垂直总周期 = vback-porch + vfront-porch + vsync-len+Vactive 得出vback-porch + vfront-porch + vsync-len = 垂直总周期 - Vactive = 24 各值再按照时序表格中已知的填写,未知的自行分配,一般情况下hbp和vbp取较大值 timing0: timing0 { clock-frequency = <60000000>; hactive = <800>; vactive = <1280>; hback-porch = <24>; hfront-porch = <72>; vback-porch = <10>; vfront-porch = <12>; hsync-len = <24>; vsync-len = <2>; hsync-active = <0>; vsync-active = <0>; de-active = <0>; pixelclk-active = <0>; }; 1.2、panel参数 由上两图可知,该屏支持单路 6BIT和单路 8BIT信号,由于我们主板支持8BIT,故我们采用单路 8BIT信号调试; bus-format = rockchip,data-width = <24>; rockchip,output = "lvds"; 又由上图1可知,具体参考LVDS 数据映射(MappingMapping)标准 rockchip,data-mapping = "vesa"; 2、HDMI强制输出特殊分辨率800*1280 2.1、确定驱动板的edid cat /sys/class/drm/card0-HDMI-A-1/modes 先获取驱动板的edid,若没有800*1280,则需要固件调试强制输出特殊分辨率; 2.2、恢复到原厂的源码 公司以前对HDMI输出分辨率修改过,需要将这部分代码恢复到原厂源码,如果不恢复的话,会导致drm_display_mode edid_cea_modes[]数组不生效; 涉及文件:kernel/drivers/gpu/drm/drm_edid.c 2.3、强制输出800*1280 参考RK的文档:Rockchip_Developer_Guide_HDMI_Based_on_DRM_Framework_CN&EN 刚好文档提供的实例就是800*1280,故就没做更改,正确的做法应该参考上面LVDS的时序进行调试。 ; 2.4、 添加上层白名单resolution_white.xml 涉及文件:device/rockchip/common/resolution_white.xml 这是上层对底层分辨率的过滤,通过resolution_white.xml 定义合法分辨率,只有包含在该 xml 中的分辨率才可以设置;具体的参数值参考2.3,一致即可。 2.5、hdmiphy分频对应的clock 百度了一下,clock必须得在phy-rockchip-inno-hdmi-phy.c的pre_pll_cfg_table[]数组上添加,才能分频出对应的clock; 涉及文件: kernel/drivers/phy/rockchip/phy-rockchip-inno-hdmi-phy.c 下面是数组的原始数据 网上是说把2.3和2.4的clock添加到这个数组里面去,因为不清楚数组里面是具体什么含义,所以我把这里面有的74250000放到2.3和2.4里面去,整体patch如下; 文件1:kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c old mode 100644 new mode 100755 index d57d999..cce9ca3 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2497,7 +2497,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) connector); struct edid *edid; struct drm_display_mode *mode; - const u8 def_modes[6] = {4, 16, 31, 19, 17, 2}; + const u8 def_modes[6] = {108, 16, 31, 19, 17, 2}; struct drm_display_info *info = &connector->display_info; struct hdr_static_metadata *metedata = &connector->display_info.hdmi.hdr_panel_metadata; @@ -2506,7 +2506,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) if (!hdmi->ddc) return 0; - edid = drm_get_edid(connector, hdmi->ddc); + edid = NULL; if (edid) { dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]n", edid->width_cm, edid->height_cm); 文件2:kernel//drivers/gpu/drm/drm_edid.c diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index c225e54..25f5b5e 100755 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -1360,6 +1220,11 @@ static const struct drm_display_mode edid_cea_modes[] = { 4104, 4400, 0, 2160, 2168, 2178, 2250, 0, DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, + /* 108 - 800x1280@60Hz add by OLJ */ + { DRM_MODE("800x1280", DRM_MODE_TYPE_DRIVER, 74250, 800, 848, + 880, 960, 0, 1280, 1300, 1304, 1314, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC), + .vrefresh = 60, }, }; 文件3:device/rockchip/common/resolution_white.xml diff --git a/resolution_white.xml b/resolution_white.xml index 846938a..a1a9f1c 100755 --- a/resolution_white.xml +++ b/resolution_white.xml @@ -416,4 +416,20 @@ + + + + + + + + + + + + + + + + |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1906 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2382 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5175 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 19:05 , Processed in 0.893555 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号