相关文件:
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