@davrdz25 Execute the following command to apply this patch. If it still doesn’t work, please provide me with the kernel log and the following command information.
kernel-5.10$ patch -p1 < 0001-dp-force-output-only-4k-60hz.patch
0001-dp-force-output-only-4k-60hz.patch
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts b/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts
index 7a77c46eefff..d9a3513bec07 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-khadas-edge2.dts
@@ -195,6 +195,7 @@
};
&dp0 {
+ force-hpd;
status = "okay";
};
diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c
old mode 100644
new mode 100755
index b0f2c05f4c83..b925301861b9
--- a/drivers/gpu/drm/rockchip/dw-dp.c
+++ b/drivers/gpu/drm/rockchip/dw-dp.c
@@ -305,6 +305,14 @@ struct dw_dp {
struct rockchip_drm_sub_dev sub_dev;
};
+static const struct drm_display_mode dw_dp_default_modes[] = {
+ /* 97 - 3840x2160@60Hz 16:9 */
+ { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 4016,
+ 4104, 4400, 0, 2160, 2168, 2178, 2250, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
+ .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
+};
+
struct dw_dp_state {
struct drm_connector_state state;
@@ -679,8 +687,10 @@ static int dw_dp_connector_get_modes(struct drm_connector *connector)
{
struct dw_dp *dp = connector_to_dp(connector);
struct drm_display_info *di = &connector->display_info;
+ struct drm_display_mode *mode;
struct edid *edid;
int num_modes = 0;
+ int i, ret = 0;
if (dp->right && dp->right->next_bridge) {
struct drm_bridge *bridge = dp->right->next_bridge;
@@ -695,13 +705,27 @@ static int dw_dp_connector_get_modes(struct drm_connector *connector)
num_modes = drm_bridge_get_modes(dp->next_bridge, connector);
if (!num_modes) {
- edid = drm_bridge_get_edid(&dp->bridge, connector);
+ edid = NULL;//drm_bridge_get_edid(&dp->bridge, connector);
if (edid) {
drm_connector_update_edid_property(connector, edid);
num_modes = drm_add_edid_modes(connector, edid);
kfree(edid);
+ }else {
+
+ for (i = 0; i < ARRAY_SIZE(dw_dp_default_modes); i++) {
+ const struct drm_display_mode *ptr =
+ &dw_dp_default_modes[i];
+
+ mode = drm_mode_duplicate(connector->dev, ptr);
+ if (mode) {
+ if (!i)
+ mode->type = DRM_MODE_TYPE_PREFERRED;
+ drm_mode_probed_add(connector, mode);
+ ret++;
+ }
}
- }
+
+
if (!di->color_formats)
di->color_formats = DRM_COLOR_FORMAT_RGB444;
@@ -717,8 +741,10 @@ static int dw_dp_connector_get_modes(struct drm_connector *connector)
list_for_each_entry(mode, &connector->probed_modes, head)
drm_mode_convert_to_split_mode(mode);
}
-
+ }
+ }
return num_modes;
+
}
static int dw_dp_connector_atomic_check(struct drm_connector *conn,
--
2.17.1
adb shell dmesg > kernel.log
cat /d/dri/0/summary