summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorAndy Yan <andy.yan@rock-chips.com>2026-01-17 10:07:30 +0800
committerHeiko Stuebner <heiko@sntech.de>2026-01-20 11:09:46 +0100
commit88b14b9279d824dd84bdda20c7b2fdb4b285dd25 (patch)
tree30af1cc58b19ce81188506b0cba731985be9ba58 /drivers/gpu/drm
parentaa156ad92523b21b12bfa5bb261d6affb4b1597f (diff)
drm/rockchip: vop2: Add mode valid callback for crtc
The different Video Ports support different maximum resolutions. Reject resolutions that are not supported by a specific VP. Only the output width is checked because the hardware itself does not have a hard output height limit. Filter the mode that can't output by the VP/crtc. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com> # Sige5 Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://patch.msgid.link/20260117020738.294825-1-andyshrk@163.com
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_vop2.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index a0099e4dd4ea..ec3b4fde10db 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -1426,6 +1426,17 @@ static void vop2_crtc_disable_vblank(struct drm_crtc *crtc)
vop2_crtc_disable_irq(vp, VP_INT_FS_FIELD);
}
+static enum drm_mode_status vop2_crtc_mode_valid(struct drm_crtc *crtc,
+ const struct drm_display_mode *mode)
+{
+ struct vop2_video_port *vp = to_vop2_video_port(crtc);
+
+ if (mode->hdisplay > vp->data->max_output.width)
+ return MODE_BAD_HVALUE;
+
+ return MODE_OK;
+}
+
static bool vop2_crtc_mode_fixup(struct drm_crtc *crtc,
const struct drm_display_mode *mode,
struct drm_display_mode *adj_mode)
@@ -1871,6 +1882,7 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc,
static const struct drm_crtc_helper_funcs vop2_crtc_helper_funcs = {
.mode_fixup = vop2_crtc_mode_fixup,
+ .mode_valid = vop2_crtc_mode_valid,
.atomic_check = vop2_crtc_atomic_check,
.atomic_begin = vop2_crtc_atomic_begin,
.atomic_flush = vop2_crtc_atomic_flush,