[RK3288][Android7.1]调试笔记

您所在的位置:网站首页 hdmi双屏显示 [RK3288][Android7.1]调试笔记

[RK3288][Android7.1]调试笔记

2023-11-28 03:37| 来源: 网络整理| 查看: 265

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 = ; hactive = ; vactive = ; hback-porch = ; hfront-porch = ; vback-porch = ; vfront-porch = ; hsync-len = ; vsync-len = ; hsync-active = ; vsync-active = ; de-active = ; pixelclk-active = ; };

1.2、panel参数

由上两图可知,该屏支持单路 6BIT和单路 8BIT信号,由于我们主板支持8BIT,故我们采用单路 8BIT信号调试;

bus-format = ; rockchip,data-width = ; 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 @@ 5 102 + + 74250 + 800 + 848 + 880 + 960 + 0 + 1280 + 1300 + 1304 + 1314 + 0 + 60 + 5 + 108 +

参考文档

RK支持文档:Rockchip_Developer_Guide_HDMI_Based_on_DRM_Framework_CN&EN

网友文档:LVDS接口分类,时序,输出格式​​​​​​​



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3