Re: [RFC PATCH] drm: allow passing a real encoder object for wb connector

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jani

On 1/21/2022 1:17 AM, Jani Nikula wrote:
On Thu, 20 Jan 2022, Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx> 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.kandpal@xxxxxxxxx

Thanks for pointing to this thread. Since https://patchwork.freedesktop.org/patch/469090/ has been posted earlier and is more complete in terms of handling other vendor changes, we can continue on that one.

But I dont see any comments on that one yet.

Hi Laurent

In that case can you please check the https://patchwork.freedesktop.org/patch/469090/ thread , we can continue our discussion there.

We also have the same issue too. Our encoder also maintains its own struct drm_encoder.

Thanks

Abhinav

Signed-off-by: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx>
---
  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:




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux