diff options
author | Laurentiu Palcu <laurentiu.palcu@oss.nxp.com> | 2020-11-05 16:50:18 +0200 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2020-11-26 11:29:44 +0100 |
commit | 05faf1559de52465f1e753e31883aa294e6179c1 (patch) | |
tree | 2c62b09e42de7ae5e990a9f750685d5f22c23c60 /drivers/gpu/drm/imx/dcss/dcss-plane.c | |
parent | 594486b52c8e77378a9b3769be1f2080b891a922 (diff) |
drm/imx/dcss: allow using nearest neighbor interpolation scaling
This patch adds support for using NN interpolation scaling by setting the
SCALING_FILTER plane property to 1. Otherwise, the default method is used.
Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20201105145018.27255-1-laurentiu.palcu@oss.nxp.com
Diffstat (limited to 'drivers/gpu/drm/imx/dcss/dcss-plane.c')
-rw-r--r-- | drivers/gpu/drm/imx/dcss/dcss-plane.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/gpu/drm/imx/dcss/dcss-plane.c b/drivers/gpu/drm/imx/dcss/dcss-plane.c index 5db093aada2f..03ba88f7f995 100644 --- a/drivers/gpu/drm/imx/dcss/dcss-plane.c +++ b/drivers/gpu/drm/imx/dcss/dcss-plane.c @@ -257,7 +257,8 @@ static bool dcss_plane_needs_setup(struct drm_plane_state *state, state->src_h != old_state->src_h || fb->format->format != old_fb->format->format || fb->modifier != old_fb->modifier || - state->rotation != old_state->rotation; + state->rotation != old_state->rotation || + state->scaling_filter != old_state->scaling_filter; } static void dcss_plane_atomic_update(struct drm_plane *plane, @@ -313,6 +314,9 @@ static void dcss_plane_atomic_update(struct drm_plane *plane, is_rotation_90_or_270 = state->rotation & (DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270); + dcss_scaler_set_filter(dcss->scaler, dcss_plane->ch_num, + state->scaling_filter); + dcss_scaler_setup(dcss->scaler, dcss_plane->ch_num, state->fb->format, is_rotation_90_or_270 ? src_h : src_w, @@ -394,6 +398,10 @@ struct dcss_plane *dcss_plane_init(struct drm_device *drm, if (ret) return ERR_PTR(ret); + drm_plane_create_scaling_filter_property(&dcss_plane->base, + BIT(DRM_SCALING_FILTER_DEFAULT) | + BIT(DRM_SCALING_FILTER_NEAREST_NEIGHBOR)); + drm_plane_create_rotation_property(&dcss_plane->base, DRM_MODE_ROTATE_0, DRM_MODE_ROTATE_0 | |