On Thu, 20 Jan 2022, Abhinav Kumar quic_abhinavk@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.k...
Signed-off-by: Abhinav Kumar quic_abhinavk@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);
if (ret) goto attach_fail;wb_connector->encoder);
@@ -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: