diff options
| author | Jernej Skrabec <jernej.skrabec@gmail.com> | 2025-11-04 19:09:17 +0100 |
|---|---|---|
| committer | Chen-Yu Tsai <wens@kernel.org> | 2025-11-12 17:18:21 +0800 |
| commit | b12c28bb15d374b89908c1cecc9251a631149c37 (patch) | |
| tree | 74d028a361bcd3b0beb7dca14819ceffefae9217 | |
| parent | f841ea7e3f7ea6409ea34235dd4b4390e368b620 (diff) | |
drm/sun4i: vi_layer: Move check from update to check callback
DRM requires that all check are done in atomic_check callback. Move
one check from atomic_commit to atomic_check callback.
Tested-by: Ryan Walklin <ryan@testtoast.com>
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Reviewed-by: Chen-Yu Tsai <wens@kernel.org>
Link: https://patch.msgid.link/20251104180942.61538-6-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org>
| -rw-r--r-- | drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c index 2eec23a2c0d4..bec92a3f31f9 100644 --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c @@ -218,16 +218,11 @@ static int sun8i_vi_layer_update_formats(struct sun8i_mixer *mixer, int channel, struct drm_plane_state *state = plane->state; u32 val, ch_base, csc_mode, hw_fmt; const struct drm_format_info *fmt; - int ret; ch_base = sun8i_channel_base(mixer, channel); fmt = state->fb->format; - ret = sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); - if (ret) { - DRM_DEBUG_DRIVER("Invalid format\n"); - return ret; - } + sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); val = hw_fmt << SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_OFFSET; regmap_update_bits(mixer->engine.regs, @@ -323,7 +318,9 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane, struct sun8i_layer *layer = plane_to_sun8i_layer(plane); struct drm_crtc *crtc = new_plane_state->crtc; struct drm_crtc_state *crtc_state; - int min_scale, max_scale; + const struct drm_format_info *fmt; + int min_scale, max_scale, ret; + u32 hw_fmt; if (!crtc) return 0; @@ -332,6 +329,13 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane, if (WARN_ON(!crtc_state)) return -EINVAL; + fmt = new_plane_state->fb->format; + ret = sun8i_mixer_drm_format_to_hw(fmt->format, &hw_fmt); + if (ret) { + DRM_DEBUG_DRIVER("Invalid plane format\n"); + return ret; + } + min_scale = DRM_PLANE_NO_SCALING; max_scale = DRM_PLANE_NO_SCALING; |
