On Thu, 20 Jan 2022, Abhinav Kumar <quic_abhin...@quicinc.com> wrote:
> Instead of creating an internal encoder for the writeback
> connector to satisfy DRM requirements, allow the clients
> to pass a real encoder to it by changing the drm_writeback's
> encoder to a pointer.
>
> If a real encoder is not passed, drm_writeback_connector_init
> will internally allocate one.
>
> This will help the clients to manage the real encoder states
> better as they will allocate and maintain the encoder.

See also the thread starting at [1], and please try to coordinate.

I don't know what the end result should be like, I'm just saying please
collaborate instead of racing to get one set of changes in.

BR,
Jani.


[1] 
https://patchwork.freedesktop.org/patch/msgid/20220111101801.28310-1-suraj.kand...@intel.com

>
> Signed-off-by: Abhinav Kumar <quic_abhin...@quicinc.com>
> ---
>  drivers/gpu/drm/drm_writeback.c | 11 +++++++----
>  include/drm/drm_writeback.h     |  2 +-
>  2 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c
> index dccf4504..fdb7381 100644
> --- a/drivers/gpu/drm/drm_writeback.c
> +++ b/drivers/gpu/drm/drm_writeback.c
> @@ -189,8 +189,11 @@ int drm_writeback_connector_init(struct drm_device *dev,
>       if (IS_ERR(blob))
>               return PTR_ERR(blob);
>  
> -     drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs);
> -     ret = drm_encoder_init(dev, &wb_connector->encoder,
> +     /* allocate the internal drm encoder if a real one wasnt passed */
> +     if (!wb_connector->encoder)
> +             wb_connector->encoder = devm_kzalloc(dev->dev, sizeof(struct 
> drm_encoder), GFP_KERNEL);
> +     drm_encoder_helper_add(wb_connector->encoder, enc_helper_funcs);
> +     ret = drm_encoder_init(dev, wb_connector->encoder,
>                              &drm_writeback_encoder_funcs,
>                              DRM_MODE_ENCODER_VIRTUAL, NULL);
>       if (ret)
> @@ -204,7 +207,7 @@ int drm_writeback_connector_init(struct drm_device *dev,
>               goto connector_fail;
>  
>       ret = drm_connector_attach_encoder(connector,
> -                                             &wb_connector->encoder);
> +                                             wb_connector->encoder);
>       if (ret)
>               goto attach_fail;
>  
> @@ -233,7 +236,7 @@ int drm_writeback_connector_init(struct drm_device *dev,
>  attach_fail:
>       drm_connector_cleanup(connector);
>  connector_fail:
> -     drm_encoder_cleanup(&wb_connector->encoder);
> +     drm_encoder_cleanup(wb_connector->encoder);
>  fail:
>       drm_property_blob_put(blob);
>       return ret;
> diff --git a/include/drm/drm_writeback.h b/include/drm/drm_writeback.h
> index 9697d27..f0d8147 100644
> --- a/include/drm/drm_writeback.h
> +++ b/include/drm/drm_writeback.h
> @@ -31,7 +31,7 @@ struct drm_writeback_connector {
>        * by passing the @enc_funcs parameter to drm_writeback_connector_init()
>        * function.
>        */
> -     struct drm_encoder encoder;
> +     struct drm_encoder *encoder;
>  
>       /**
>        * @pixel_formats_blob_ptr:

-- 
Jani Nikula, Intel Open Source Graphics Center

Reply via email to