[PATCH 4/8] drm/sun4i: crtc: Add a custom crtc atomic_check

Neil Armstrong narmstrong at baylibre.com
Wed Dec 13 08:06:14 PST 2017


On 13/12/2017 16:33, Maxime Ripard wrote:
> We have some restrictions on what the planes and CRTC can provide that are
> tied to only one generation of display engines.
> 
> For example, on the first generation, we can only have one YUV plane or one
> plane that uses the frontend output.
> 
> Let's allow our engines to provide an atomic_check callback to validate the
> current configuration.
> 
> Signed-off-by: Maxime Ripard <maxime.ripard at free-electrons.com>
> ---
>  drivers/gpu/drm/sun4i/sun4i_crtc.c   | 14 ++++++++++++++
>  drivers/gpu/drm/sun4i/sunxi_engine.h |  2 ++
>  2 files changed, 16 insertions(+)
> 
> diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> index 5decae0069d0..2a565325714f 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> @@ -46,6 +46,19 @@ static struct drm_encoder *sun4i_crtc_get_encoder(struct drm_crtc *crtc)
>  	return NULL;
>  }
>  
> +static int sun4i_crtc_atomic_check(struct drm_crtc *crtc,
> +				    struct drm_crtc_state *state)
> +{
> +	struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
> +	struct sunxi_engine *engine = scrtc->engine;
> +	int ret = 0;
> +
> +	if (engine && engine->ops && engine->ops->atomic_check)
> +		ret = engine->ops->atomic_check(engine, state);
> +
> +	return ret;
> +}
> +
>  static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc,
>  				    struct drm_crtc_state *old_state)
>  {
> @@ -125,6 +138,7 @@ static void sun4i_crtc_mode_set_nofb(struct drm_crtc *crtc)
>  }
>  
>  static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = {
> +	.atomic_check	= sun4i_crtc_atomic_check,
>  	.atomic_begin	= sun4i_crtc_atomic_begin,
>  	.atomic_flush	= sun4i_crtc_atomic_flush,
>  	.atomic_enable	= sun4i_crtc_atomic_enable,
> diff --git a/drivers/gpu/drm/sun4i/sunxi_engine.h b/drivers/gpu/drm/sun4i/sunxi_engine.h
> index 4cb70ae65c79..42655230aeba 100644
> --- a/drivers/gpu/drm/sun4i/sunxi_engine.h
> +++ b/drivers/gpu/drm/sun4i/sunxi_engine.h
> @@ -16,6 +16,8 @@ struct drm_device;
>  struct sunxi_engine;
>  
>  struct sunxi_engine_ops {
> +	int (*atomic_check)(struct sunxi_engine *engine,
> +			    struct drm_crtc_state *state);
>  	void (*commit)(struct sunxi_engine *engine);
>  	struct drm_plane **(*layers_init)(struct drm_device *drm,
>  					  struct sunxi_engine *engine);
> 

Reviewed-by: Neil Armstrong <narmstrong at baylibre.com>



More information about the linux-arm-kernel mailing list