Android7.1 修改hdmi默认输出分辨率

本文介绍了如何修改Android7.1系统的HDMI默认输出分辨率。主要涉及kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c文件,通过调整def_modes的值来设置不同的分辨率,例如将默认分辨率更改为3840x2160p@30Hz。修改涉及到的分辨率参数和vic值在edid_cea_modes数组中详细列出。
摘要由CSDN通过智能技术生成

相关文件:
kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
kernel/drivers/gpu/drm/drm_edid.c
修改kernel/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c文件如下

修改 def_modes 的值,对应的是 vic 值,如果 4 对应的是
edid_cea_modes 中的:

/* 4 - 1280x720@60Hz */
{ 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, },

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 d57d999c50a5…9a2e086f14e8
— a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
— a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -2497,7 +2497,10 @@ 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};
    
  •   //  20200406 modified by dongshiyi for changing the default hdmi resolution to 3840x2160p@30Hz start 
    

+// const u8 def_modes[6] = {4, 16, 31, 19, 17, 2};

  •   const u8 def_modes[6] = {105, 100, 31, 19, 17, 2};//把def_mode数组的第一个值对应的是默认显示hdmi的分辨率对应的 vic(dw-hdmi.c文件中).我这里修改为105代表选用3840x2160p@30Hz为默认hdmi输出分辨率
    
  •   //  20200406 modified by dongshiyi for changing the default hdmi resolution to 3840x2160p@30Hz end
      struct drm_display_info *info = &connector->display_info;
      struct hdr_static_metadata *metedata =
                      &connector->display_info.hdmi.hdr_panel_metadata;
    

@@ -2506,7 +2509,11 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
if (!hdmi->ddc)
return 0;

  •   edid = drm_get_edid(connector, hdmi->ddc);
    

+// 20200406 modified by dongshiyi for changing the default hdmi resolution to 3840x2160p@30Hz start
+// edid = drm_get_edid(connector, hdmi->ddc);

  •   edid = NULL;//edid = NULL;强制把edid赋为NULL,不管有没有读到edid都强制按def_modes来显示
    

+// 20200406 modified by dongshiyi for changing the default hdmi resolution to 3840x2160p@30Hz end
if (edid) {
dev_dbg(hdmi->dev, “got edid: width[%d] x height[%d]\n”,
edid->width_cm, edid->height_cm);

下面来看看edid_cea_modes数组定义的分辨率,可在最后定义特殊的分辨率(drm_edid.c文件中)

/*

  • Probably taken from CEA-861 spec.
  • This table is converted from xorg’s hw/xfree86/modes/xf86EdidModes.c.
  • Index using the VIC.
    /
    static const struct drm_display_mode edid_cea_modes[] = {
    /
    0 - dummy, VICs start at 1 /
    { },
    /
    1 - 640x480@60Hz /
    { DRM_MODE(“640x480”, DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
    752, 800, 0, 480, 490, 492, 525, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
    /
    2 - 720x480@60Hz /
    { 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, },
    /
    3 - 720x480@60Hz /
    { 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_16_9, },
    /
    4 - 1280x720@60Hz /
    { 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, },
    /
    5 - 1920x1080i@60Hz /
    { DRM_MODE(“1920x1080i”, DRM_MODE_TYPE_DRIVER, 74250, 1920, 2008,
    2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
    DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
    DRM_MODE_FLAG_INTERLACE),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
    /
    6 - 720(1440)x480i@60Hz /
    { DRM_MODE(“720x480i”, DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
    801, 858, 0, 480, 488, 494, 525, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
    DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
    /
    7 - 720(1440)x480i@60Hz /
    { DRM_MODE(“720x480i”, DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
    801, 858, 0, 480, 488, 494, 525, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
    DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
    /
    8 - 720(1440)x240@60Hz /
    { DRM_MODE(“720x240”, DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
    801, 858, 0, 240, 244, 247, 262, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
    DRM_MODE_FLAG_DBLCLK),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
    /
    9 - 720(1440)x240@60Hz /
    { DRM_MODE(“720x240”, DRM_MODE_TYPE_DRIVER, 13500, 720, 739,
    801, 858, 0, 240, 244, 247, 262, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
    DRM_MODE_FLAG_DBLCLK),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
    /
    10 - 2880x480i@60Hz /
    { DRM_MODE(“2880x480i”, DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
    3204, 3432, 0, 480, 488, 494, 525, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
    DRM_MODE_FLAG_INTERLACE),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
    /
    11 - 2880x480i@60Hz /
    { DRM_MODE(“2880x480i”, DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
    3204, 3432, 0, 480, 488, 494, 525, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
    DRM_MODE_FLAG_INTERLACE),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
    /
    12 - 2880x240@60Hz /
    { DRM_MODE(“2880x240”, DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
    3204, 3432, 0, 240, 244, 247, 262, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
    .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
    /
    13 - 2880x240@60Hz /
    { DRM_MODE(“2880x240”, DRM_MODE_TYPE_DRIVER, 54000, 2880, 2956,
    3204, 3432, 0, 240, 244, 247, 262, 0,
    DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
    .vrefresh = 60, .p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android framework

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值