From b9ceef773d7113416588d3d5ac8ed6f96e101dc8 Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Fri, 15 Dec 2023 18:03:17 +0800 Subject: [PATCH] drm/rockchip: analogix_dp: add mode_valid func support The edp controller can not support display timings whose front porch or back porch is 0. Signed-off-by: Damon Ding Change-Id: I689f9f23154cffd7199e65767e2a977cd3404ea9 --- .../gpu/drm/rockchip/analogix_dp-rockchip.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 303579f75a4d..9f09525b4bc0 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -314,6 +314,23 @@ static void rockchip_dp_bridge_detach(struct analogix_dp_plat_data *plat_data, rockchip_drm_unregister_sub_dev(sdev); } +static enum drm_mode_status +rockchip_dp_drm_encoder_mode_valid(struct drm_encoder *encoder, + const struct drm_display_mode *mode) +{ + struct rockchip_dp_device *dp = to_dp(encoder); + struct videomode vm; + + drm_display_mode_to_videomode(mode, &vm); + + if (!vm.hfront_porch || !vm.hback_porch || !vm.vfront_porch || !vm.vback_porch) { + DRM_DEV_ERROR(dp->dev, "front porch or back porch can not be 0\n"); + return MODE_BAD; + } + + return MODE_OK; +} + static bool rockchip_dp_drm_encoder_mode_fixup(struct drm_encoder *encoder, const struct drm_display_mode *mode, @@ -484,6 +501,7 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder, } static struct drm_encoder_helper_funcs rockchip_dp_encoder_helper_funcs = { + .mode_valid = rockchip_dp_drm_encoder_mode_valid, .mode_fixup = rockchip_dp_drm_encoder_mode_fixup, .mode_set = rockchip_dp_drm_encoder_mode_set, .atomic_enable = rockchip_dp_drm_encoder_enable,