From e47fbe6bf2ca083ebd27d24b7e6543b637a6983b Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Wed, 11 Dec 2024 22:34:41 +0100 Subject: [PATCH] mkspi: add 800x480 HDMI modes MKS IPS50 screen --- ...neral-add-hdmi-mks-ips50-resolutions.patch | 102 ++++++++++++++++++ ...neral-add-hdmi-mks-ips50-resolutions.patch | 102 ++++++++++++++++++ ...neral-add-hdmi-mks-ips50-resolutions.patch | 102 ++++++++++++++++++ 3 files changed, 306 insertions(+) create mode 100644 patch/kernel/archive/rockchip64-6.12/general-add-hdmi-mks-ips50-resolutions.patch create mode 100644 patch/kernel/archive/rockchip64-6.6/general-add-hdmi-mks-ips50-resolutions.patch create mode 100644 patch/kernel/archive/rockchip64-6.9/general-add-hdmi-mks-ips50-resolutions.patch diff --git a/patch/kernel/archive/rockchip64-6.12/general-add-hdmi-mks-ips50-resolutions.patch b/patch/kernel/archive/rockchip64-6.12/general-add-hdmi-mks-ips50-resolutions.patch new file mode 100644 index 0000000000..c4da8ab19a --- /dev/null +++ b/patch/kernel/archive/rockchip64-6.12/general-add-hdmi-mks-ips50-resolutions.patch @@ -0,0 +1,102 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Maxim Medvedev +Date: Mon, 1 Jan 2024 21:50:10 +0000 +Subject: HDMI EDID records for 800x480 resolution (a MKS IPS50 screen and similar) + +--- + drivers/gpu/drm/drm_edid.c | 12 +++++++++- + drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 1 + + drivers/video/hdmi.c | 2 ++ + include/linux/hdmi.h | 1 + + 4 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index a491280ca48c..6d74e4b62dcf 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -1536,10 +1536,20 @@ static const struct drm_display_mode edid_cea_modes_193[] = { + /* 219 - 4096x2160@120Hz 256:135 */ + { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 1188000, 4096, 4184, + 4272, 4400, 0, 2160, 2168, 2178, 2250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), + .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135, }, ++ /* 220 - 800x480@60Hz 5:3 */ ++ { DRM_MODE("800x480", DRM_MODE_TYPE_DRIVER, 30240, 800, 850, ++ 920, 960, 0, 480, 510, 513, 525, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), ++ .picture_aspect_ratio = HDMI_PICTURE_ASPECT_5_3, }, ++ /* 221 - 800x480@60Hz 5:3, MKS IPS50 */ ++ { DRM_MODE("800x480", DRM_MODE_TYPE_DRIVER, 30240, 800, 850, ++ 950, 960, 0, 480, 510, 513, 525, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), ++ .picture_aspect_ratio = HDMI_PICTURE_ASPECT_5_3, }, + }; + + /* + * HDMI 1.4 4k modes. Index using the VIC. + */ +@@ -4167,11 +4177,11 @@ static bool drm_edid_has_cta_extension(const struct drm_edid *drm_edid) + } + + static __always_inline const struct drm_display_mode *cea_mode_for_vic(u8 vic) + { + BUILD_BUG_ON(1 + ARRAY_SIZE(edid_cea_modes_1) - 1 != 127); +- BUILD_BUG_ON(193 + ARRAY_SIZE(edid_cea_modes_193) - 1 != 219); ++ BUILD_BUG_ON(193 + ARRAY_SIZE(edid_cea_modes_193) - 1 != 221); + + if (vic >= 1 && vic < 1 + ARRAY_SIZE(edid_cea_modes_1)) + return &edid_cea_modes_1[vic - 1]; + if (vic >= 193 && vic < 193 + ARRAY_SIZE(edid_cea_modes_193)) + return &edid_cea_modes_193[vic - 193]; +diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c +index db774d97918f..375fbc8a8747 100644 +--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c ++++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c +@@ -293,10 +293,11 @@ struct inno_hdmi_phy_drv_data { + static const struct pre_pll_config pre_pll_cfg_table[] = { + { 25175000, 25175000, 3, 125, 3, 1, 1, 1, 3, 3, 4, 0, 0xe00000}, + { 25175000, 31468750, 1, 41, 0, 3, 3, 1, 3, 3, 4, 0, 0xf5554f}, + { 27000000, 27000000, 1, 36, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 27000000, 33750000, 1, 45, 0, 3, 3, 1, 3, 3, 4, 0, 0x0}, ++ { 30240000, 30240000, 5, 504, 3, 2, 2, 20, 4, 2, 2, 0, 0x0}, // Non standard screens like MKS IPS50 + { 31500000, 31500000, 1, 42, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 31500000, 39375000, 1, 105, 1, 3, 3, 10, 0, 3, 4, 0, 0x0}, + { 33750000, 33750000, 1, 45, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 33750000, 42187500, 1, 169, 2, 3, 3, 15, 0, 3, 4, 0, 0x0}, + { 35500000, 35500000, 1, 71, 2, 2, 2, 6, 0, 3, 4, 0, 0x0}, +diff --git a/drivers/video/hdmi.c b/drivers/video/hdmi.c +index 03c7f27dde49..8d68d34ce023 100644 +--- a/drivers/video/hdmi.c ++++ b/drivers/video/hdmi.c +@@ -1113,10 +1113,12 @@ hdmi_picture_aspect_get_name(enum hdmi_picture_aspect picture_aspect) + return "16:9"; + case HDMI_PICTURE_ASPECT_64_27: + return "64:27"; + case HDMI_PICTURE_ASPECT_256_135: + return "256:135"; ++ case HDMI_PICTURE_ASPECT_5_3: ++ return "5:3"; + case HDMI_PICTURE_ASPECT_RESERVED: + return "Reserved"; + } + return "Invalid"; + } +diff --git a/include/linux/hdmi.h b/include/linux/hdmi.h +index 3bb87bf6bc65..be61a7954847 100644 +--- a/include/linux/hdmi.h ++++ b/include/linux/hdmi.h +@@ -97,10 +97,11 @@ enum hdmi_picture_aspect { + HDMI_PICTURE_ASPECT_NONE, + HDMI_PICTURE_ASPECT_4_3, + HDMI_PICTURE_ASPECT_16_9, + HDMI_PICTURE_ASPECT_64_27, + HDMI_PICTURE_ASPECT_256_135, ++ HDMI_PICTURE_ASPECT_5_3, + HDMI_PICTURE_ASPECT_RESERVED, + }; + + enum hdmi_active_aspect { + HDMI_ACTIVE_ASPECT_16_9_TOP = 2, +-- +Created with Armbian build tools https://github.com/armbian/build + diff --git a/patch/kernel/archive/rockchip64-6.6/general-add-hdmi-mks-ips50-resolutions.patch b/patch/kernel/archive/rockchip64-6.6/general-add-hdmi-mks-ips50-resolutions.patch new file mode 100644 index 0000000000..c4da8ab19a --- /dev/null +++ b/patch/kernel/archive/rockchip64-6.6/general-add-hdmi-mks-ips50-resolutions.patch @@ -0,0 +1,102 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Maxim Medvedev +Date: Mon, 1 Jan 2024 21:50:10 +0000 +Subject: HDMI EDID records for 800x480 resolution (a MKS IPS50 screen and similar) + +--- + drivers/gpu/drm/drm_edid.c | 12 +++++++++- + drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 1 + + drivers/video/hdmi.c | 2 ++ + include/linux/hdmi.h | 1 + + 4 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index a491280ca48c..6d74e4b62dcf 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -1536,10 +1536,20 @@ static const struct drm_display_mode edid_cea_modes_193[] = { + /* 219 - 4096x2160@120Hz 256:135 */ + { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 1188000, 4096, 4184, + 4272, 4400, 0, 2160, 2168, 2178, 2250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), + .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135, }, ++ /* 220 - 800x480@60Hz 5:3 */ ++ { DRM_MODE("800x480", DRM_MODE_TYPE_DRIVER, 30240, 800, 850, ++ 920, 960, 0, 480, 510, 513, 525, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), ++ .picture_aspect_ratio = HDMI_PICTURE_ASPECT_5_3, }, ++ /* 221 - 800x480@60Hz 5:3, MKS IPS50 */ ++ { DRM_MODE("800x480", DRM_MODE_TYPE_DRIVER, 30240, 800, 850, ++ 950, 960, 0, 480, 510, 513, 525, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), ++ .picture_aspect_ratio = HDMI_PICTURE_ASPECT_5_3, }, + }; + + /* + * HDMI 1.4 4k modes. Index using the VIC. + */ +@@ -4167,11 +4177,11 @@ static bool drm_edid_has_cta_extension(const struct drm_edid *drm_edid) + } + + static __always_inline const struct drm_display_mode *cea_mode_for_vic(u8 vic) + { + BUILD_BUG_ON(1 + ARRAY_SIZE(edid_cea_modes_1) - 1 != 127); +- BUILD_BUG_ON(193 + ARRAY_SIZE(edid_cea_modes_193) - 1 != 219); ++ BUILD_BUG_ON(193 + ARRAY_SIZE(edid_cea_modes_193) - 1 != 221); + + if (vic >= 1 && vic < 1 + ARRAY_SIZE(edid_cea_modes_1)) + return &edid_cea_modes_1[vic - 1]; + if (vic >= 193 && vic < 193 + ARRAY_SIZE(edid_cea_modes_193)) + return &edid_cea_modes_193[vic - 193]; +diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c +index db774d97918f..375fbc8a8747 100644 +--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c ++++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c +@@ -293,10 +293,11 @@ struct inno_hdmi_phy_drv_data { + static const struct pre_pll_config pre_pll_cfg_table[] = { + { 25175000, 25175000, 3, 125, 3, 1, 1, 1, 3, 3, 4, 0, 0xe00000}, + { 25175000, 31468750, 1, 41, 0, 3, 3, 1, 3, 3, 4, 0, 0xf5554f}, + { 27000000, 27000000, 1, 36, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 27000000, 33750000, 1, 45, 0, 3, 3, 1, 3, 3, 4, 0, 0x0}, ++ { 30240000, 30240000, 5, 504, 3, 2, 2, 20, 4, 2, 2, 0, 0x0}, // Non standard screens like MKS IPS50 + { 31500000, 31500000, 1, 42, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 31500000, 39375000, 1, 105, 1, 3, 3, 10, 0, 3, 4, 0, 0x0}, + { 33750000, 33750000, 1, 45, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 33750000, 42187500, 1, 169, 2, 3, 3, 15, 0, 3, 4, 0, 0x0}, + { 35500000, 35500000, 1, 71, 2, 2, 2, 6, 0, 3, 4, 0, 0x0}, +diff --git a/drivers/video/hdmi.c b/drivers/video/hdmi.c +index 03c7f27dde49..8d68d34ce023 100644 +--- a/drivers/video/hdmi.c ++++ b/drivers/video/hdmi.c +@@ -1113,10 +1113,12 @@ hdmi_picture_aspect_get_name(enum hdmi_picture_aspect picture_aspect) + return "16:9"; + case HDMI_PICTURE_ASPECT_64_27: + return "64:27"; + case HDMI_PICTURE_ASPECT_256_135: + return "256:135"; ++ case HDMI_PICTURE_ASPECT_5_3: ++ return "5:3"; + case HDMI_PICTURE_ASPECT_RESERVED: + return "Reserved"; + } + return "Invalid"; + } +diff --git a/include/linux/hdmi.h b/include/linux/hdmi.h +index 3bb87bf6bc65..be61a7954847 100644 +--- a/include/linux/hdmi.h ++++ b/include/linux/hdmi.h +@@ -97,10 +97,11 @@ enum hdmi_picture_aspect { + HDMI_PICTURE_ASPECT_NONE, + HDMI_PICTURE_ASPECT_4_3, + HDMI_PICTURE_ASPECT_16_9, + HDMI_PICTURE_ASPECT_64_27, + HDMI_PICTURE_ASPECT_256_135, ++ HDMI_PICTURE_ASPECT_5_3, + HDMI_PICTURE_ASPECT_RESERVED, + }; + + enum hdmi_active_aspect { + HDMI_ACTIVE_ASPECT_16_9_TOP = 2, +-- +Created with Armbian build tools https://github.com/armbian/build + diff --git a/patch/kernel/archive/rockchip64-6.9/general-add-hdmi-mks-ips50-resolutions.patch b/patch/kernel/archive/rockchip64-6.9/general-add-hdmi-mks-ips50-resolutions.patch new file mode 100644 index 0000000000..c4da8ab19a --- /dev/null +++ b/patch/kernel/archive/rockchip64-6.9/general-add-hdmi-mks-ips50-resolutions.patch @@ -0,0 +1,102 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Maxim Medvedev +Date: Mon, 1 Jan 2024 21:50:10 +0000 +Subject: HDMI EDID records for 800x480 resolution (a MKS IPS50 screen and similar) + +--- + drivers/gpu/drm/drm_edid.c | 12 +++++++++- + drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 1 + + drivers/video/hdmi.c | 2 ++ + include/linux/hdmi.h | 1 + + 4 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index a491280ca48c..6d74e4b62dcf 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -1536,10 +1536,20 @@ static const struct drm_display_mode edid_cea_modes_193[] = { + /* 219 - 4096x2160@120Hz 256:135 */ + { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 1188000, 4096, 4184, + 4272, 4400, 0, 2160, 2168, 2178, 2250, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), + .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135, }, ++ /* 220 - 800x480@60Hz 5:3 */ ++ { DRM_MODE("800x480", DRM_MODE_TYPE_DRIVER, 30240, 800, 850, ++ 920, 960, 0, 480, 510, 513, 525, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), ++ .picture_aspect_ratio = HDMI_PICTURE_ASPECT_5_3, }, ++ /* 221 - 800x480@60Hz 5:3, MKS IPS50 */ ++ { DRM_MODE("800x480", DRM_MODE_TYPE_DRIVER, 30240, 800, 850, ++ 950, 960, 0, 480, 510, 513, 525, 0, ++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), ++ .picture_aspect_ratio = HDMI_PICTURE_ASPECT_5_3, }, + }; + + /* + * HDMI 1.4 4k modes. Index using the VIC. + */ +@@ -4167,11 +4177,11 @@ static bool drm_edid_has_cta_extension(const struct drm_edid *drm_edid) + } + + static __always_inline const struct drm_display_mode *cea_mode_for_vic(u8 vic) + { + BUILD_BUG_ON(1 + ARRAY_SIZE(edid_cea_modes_1) - 1 != 127); +- BUILD_BUG_ON(193 + ARRAY_SIZE(edid_cea_modes_193) - 1 != 219); ++ BUILD_BUG_ON(193 + ARRAY_SIZE(edid_cea_modes_193) - 1 != 221); + + if (vic >= 1 && vic < 1 + ARRAY_SIZE(edid_cea_modes_1)) + return &edid_cea_modes_1[vic - 1]; + if (vic >= 193 && vic < 193 + ARRAY_SIZE(edid_cea_modes_193)) + return &edid_cea_modes_193[vic - 193]; +diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c +index db774d97918f..375fbc8a8747 100644 +--- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c ++++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c +@@ -293,10 +293,11 @@ struct inno_hdmi_phy_drv_data { + static const struct pre_pll_config pre_pll_cfg_table[] = { + { 25175000, 25175000, 3, 125, 3, 1, 1, 1, 3, 3, 4, 0, 0xe00000}, + { 25175000, 31468750, 1, 41, 0, 3, 3, 1, 3, 3, 4, 0, 0xf5554f}, + { 27000000, 27000000, 1, 36, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 27000000, 33750000, 1, 45, 0, 3, 3, 1, 3, 3, 4, 0, 0x0}, ++ { 30240000, 30240000, 5, 504, 3, 2, 2, 20, 4, 2, 2, 0, 0x0}, // Non standard screens like MKS IPS50 + { 31500000, 31500000, 1, 42, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 31500000, 39375000, 1, 105, 1, 3, 3, 10, 0, 3, 4, 0, 0x0}, + { 33750000, 33750000, 1, 45, 0, 3, 3, 1, 2, 3, 4, 0, 0x0}, + { 33750000, 42187500, 1, 169, 2, 3, 3, 15, 0, 3, 4, 0, 0x0}, + { 35500000, 35500000, 1, 71, 2, 2, 2, 6, 0, 3, 4, 0, 0x0}, +diff --git a/drivers/video/hdmi.c b/drivers/video/hdmi.c +index 03c7f27dde49..8d68d34ce023 100644 +--- a/drivers/video/hdmi.c ++++ b/drivers/video/hdmi.c +@@ -1113,10 +1113,12 @@ hdmi_picture_aspect_get_name(enum hdmi_picture_aspect picture_aspect) + return "16:9"; + case HDMI_PICTURE_ASPECT_64_27: + return "64:27"; + case HDMI_PICTURE_ASPECT_256_135: + return "256:135"; ++ case HDMI_PICTURE_ASPECT_5_3: ++ return "5:3"; + case HDMI_PICTURE_ASPECT_RESERVED: + return "Reserved"; + } + return "Invalid"; + } +diff --git a/include/linux/hdmi.h b/include/linux/hdmi.h +index 3bb87bf6bc65..be61a7954847 100644 +--- a/include/linux/hdmi.h ++++ b/include/linux/hdmi.h +@@ -97,10 +97,11 @@ enum hdmi_picture_aspect { + HDMI_PICTURE_ASPECT_NONE, + HDMI_PICTURE_ASPECT_4_3, + HDMI_PICTURE_ASPECT_16_9, + HDMI_PICTURE_ASPECT_64_27, + HDMI_PICTURE_ASPECT_256_135, ++ HDMI_PICTURE_ASPECT_5_3, + HDMI_PICTURE_ASPECT_RESERVED, + }; + + enum hdmi_active_aspect { + HDMI_ACTIVE_ASPECT_16_9_TOP = 2, +-- +Created with Armbian build tools https://github.com/armbian/build +