RK3568如何固定HDMI 分辨率輸出

原創(chuàng) 2022-09-14 13:34:00 rk3568 rk3568HDMI rk3568固定分辨率

本文主要講解RK3568如何固定HDMI 分辨率,包含如何查詢RK3568如何查詢weston 桌面固定分辨率輸出,如何將將rk3568通過修改源碼固定分辨率輸出。 文主要適用于飛凌OKT3568-C 平臺(tái)Linux4.19.206 操作系統(tǒng),其他平臺(tái)也可以參考,但是不同平臺(tái)之間會(huì)存在差異,需客戶自行修改以適應(yīng)自己的使用。 更多ARM開發(fā)板相關(guān)資訊,關(guān)注飛凌嵌入式。

RK3568開發(fā)板

↑ 硬件平臺(tái):OK3568-C(基于瑞芯微國產(chǎn)處理器 RK3568) OS:Linux4.19.206


正文開始:

1、weston 桌面固定分辨率輸出 

查看顯示設(shè)備:

輸入ls /sys/class/drm命令,以MIPI 屏為例。

RK3568 mipi屏查看

顯示支持分辨率:

查看所用適配器支持的分辨率,以MIPI 屏為例。

rk3568 適配mipi支持分辨率

修改/etc/xdg/weston/weston.ini 文件:

[output]

name=HDMI-A-1 //與上面列表相對(duì)應(yīng),去掉card0 

mode=1024x600 //需為屏幕支持的有效分辨率

scale=2 //需為整數(shù)倍數(shù)

2、 修改源碼固定分辨率輸出 

uboot選屏為hdmi屏幕

修改OK3568-linux-source/kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c文件

 

添加edid = NULL;

static int dw_hdmi_connector_get_modes(struct drm_connector *connector)

{

struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,

connector); struct hdr_static_metadata *metedata =

&connector->hdr_sink_metadata.hdmi_type1; struct edid *edid;

struct drm_display_mode *mode;

struct drm_display_info *info = &connector->display_info; int i, ret = 0;

 

memset(metedata, 0, sizeof(*metedata)); 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);

 

hdmi->support_hdmi = drm_detect_hdmi_monitor(edid); hdmi->sink_has_audio = drm_detect_monitor_audio(edid); drm_connector_update_edid_property(connector, edid);

cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid); ret = drm_add_edid_modes(connector, edid); dw_hdmi_update_hdr_property(connector);

kfree(edid);

} else {

hdmi->support_hdmi = true; hdmi->sink_has_audio = true;

 

for (i = 0; i < ARRAY_SIZE(dw_hdmi_default_modes); i++) { const struct drm_display_mode *ptr =

&dw_hdmi_default_modes[i];

 

mode = drm_mode_duplicate(connector->dev, ptr); if (mode) {

if (!i) {

mode->type = DRM_MODE_TYPE_PREFERRED; mode->picture_aspect_ratio =

HDMI_PICTURE_ASPECT_NONE;

}

drm_mode_probed_add(connector, mode); ret++;

}

}

info->edid_hdmi_dc_modes = 0;

info->hdmi.y420_dc_modes = 0;

info->color_formats = 0;

 

dev_info(hdmi->dev, "failed to get edid\n");

}

dw_hdmi_check_output_type_changed(hdmi);

 

return ret;

}

 

只保留客戶想要的分辨率,將其他分辨率注釋掉,分辨率參數(shù)可查看文件添加:

OK3568-linux-source/kernel/drivers/gpu/drm/drm_edid.c

static const struct drm_display_mode dw_hdmi_default_modes[] = {


/* 108 - 1920x1080@60Hz */

{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,2052, 2200, 0, 1080, 1084, 1089, 1125, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, },

/*

4 - 1280x720@60Hz 16:9

{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1390,1430, 1650, 0, 720, 725, 730, 750, 0, DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, 16 - 1920x1080@60Hz 16:9

{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2008,2052, 2200, 0, 1080, 1084, 1089, 1125, 0, DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, 31 - 1920x1080@50Hz 16:9

{ DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2448,2492, 2640, 0, 1080, 1084, 1089, 1125, 0, DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),

.vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, 19 - 1280x720@50Hz 16:9

{ DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 74250, 1280, 1720,1760, 1980, 0, 720, 725, 730, 750, 0, DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),

.vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, 0x10 - 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) },

17 - 720x576@50Hz 4:3

{ DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732,796, 864, 0, 576, 581, 586, 625, 0,  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),

.vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, }, 2 - 720x480@60Hz 4:3

{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,798, 858, 0, 480, 489, 495, 525, 0,  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),

.vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },

*/

};

使用./build.sh kernel 單獨(dú)編譯生成/kernel/boot.img 文件。單獨(dú)燒寫boot.img 文件。

注:有用戶反饋rk3568如此固定HDMI 分辨率后屏幕顏色有差異,存在挑屏現(xiàn)象,大部分用戶可正常使用。

相關(guān)產(chǎn)品 >

  • FET3568-C核心板

    RK3568性能強(qiáng)而穩(wěn) 國產(chǎn)芯|飛凌嵌入式RK3568系列核心板,采用瑞芯微國產(chǎn)高性能AI處理器RK3568設(shè)計(jì)生產(chǎn),RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性價(jià)比在同類產(chǎn)品中具有較高優(yōu)勢(shì),RK3568處理器是一款定位中高端的通用型SoC, 飛凌RK3568核心板主要面向工業(yè)互聯(lián)網(wǎng)、HMI、NVR存儲(chǔ)、車載中控、工業(yè)網(wǎng)關(guān)等領(lǐng)域。目前RK3568系列已經(jīng)批量穩(wěn)定出貨

    了解詳情
    FET3568-C核心板
  • OK3568-C開發(fā)板

    強(qiáng)而穩(wěn),國產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國產(chǎn)工業(yè)級(jí)AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計(jì)。RK3568作為國產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達(dá)到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊(cè)_原理圖等,


    了解詳情
    OK3568-C開發(fā)板

推薦閱讀 換一批 換一批