[PATCH 02/28] drm/writeback: Add a helper function to get writeback connector

Kandpal, Suraj suraj.kandpal at intel.com
Fri Aug 1 04:04:16 UTC 2025


> > > > Now that we can initialize a drm_writeback_connector without
> > > > having to initialize the drm_connector within it and leaving the
> > > > responsibility of initialising the drm_connector and maintaining
> > > > the association with drm_writeback_connector to it. This helper
> > > > hooks lets drivers return the drm_writeback_connector associated with
> the give drm_connector.
> > > >
> > > > Signed-off-by: Suraj Kandpal <suraj.kandpal at intel.com>
> > > > ---
> > > >  drivers/gpu/drm/drm_writeback.c          | 14 ++++++
> > > >  include/drm/drm_modeset_helper_vtables.h | 59
> > > ++++++++++++++++++++++++
> > > >  include/drm/drm_writeback.h              | 14 ++++--
> > > >  3 files changed, 82 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/drm_writeback.c
> > > > b/drivers/gpu/drm/drm_writeback.c index fa58eb0dc7bf..e9f7123270d6
> > > > 100644
> > > > --- a/drivers/gpu/drm/drm_writeback.c
> > > > +++ b/drivers/gpu/drm/drm_writeback.c
> > > > @@ -107,6 +107,19 @@ static const struct dma_fence_ops
> > > drm_writeback_fence_ops = {
> > > >  	.get_timeline_name = drm_writeback_fence_get_timeline_name,
> > > >  };
> > > >
> > > > +struct drm_writeback_connector *
> > > > +drm_connector_to_writeback(struct drm_connector *connector) {
> > > > +	const struct drm_connector_helper_funcs *funcs =
> > > > +		connector->helper_private;
> > > > +
> > > > +	if (funcs->get_writeback_connector)
> > > > +		return funcs->get_writeback_connector(connector);
> > > > +
> > > > +	return container_of(connector, struct drm_writeback_connector,
> > > > +base); } EXPORT_SYMBOL(drm_connector_to_writeback);
> > > > +
> > > >  static int create_writeback_properties(struct drm_device *dev)  {
> > > >  	struct drm_property *prop;
> > > > @@ -443,6 +456,7 @@ drm_writeback_connector_init_with_conn(struct
> > > drm_device *dev, struct drm_connec
> > > >  				       struct drm_writeback_connector
> > > *wb_connector,
> > > >  				       struct drm_encoder *enc,
> > > >  				       const struct drm_connector_funcs
> > > *con_funcs,
> > > > +				       const struct
> > > drm_writeback_connector_helper_funcs
> > > > +*wb_funcs,
> > > >  				       const u32 *formats, int n_formats)  {
> > > >  	struct drm_property_blob *blob;
> > > > diff --git a/include/drm/drm_modeset_helper_vtables.h
> > > > b/include/drm/drm_modeset_helper_vtables.h
> > > > index ce7c7aeac887..6b89b33d2304 100644
> > > > --- a/include/drm/drm_modeset_helper_vtables.h
> > > > +++ b/include/drm/drm_modeset_helper_vtables.h
> > > > @@ -31,6 +31,7 @@
> > > >
> > > >  #include <drm/drm_crtc.h>
> > > >  #include <drm/drm_encoder.h>
> > > > +#include <drm/drm_writeback.h>
> > > >
> > > >  /**
> > > >   * DOC: overview
> > > > @@ -1179,6 +1180,25 @@ struct drm_connector_helper_funcs {
> > > >  	 *
> > > >  	 */
> > > >  	void (*disable_hpd)(struct drm_connector *connector);
> > > > +
> > > > +	/**
> > > > +	 * @get_writeback_connector:
> > > > +	 *
> > > > +	 * This callback is used by drivers to get the writeback connector in
> > > > +	 * case the init is done via drm_writeback_init_with_conn. Which
> > > means
> > > > +	 * the drivers don't have drm_connector embedded in
> > > drm_writeback_connector
> > > > +	 * so they need to send the associated writeback connector with this
> > > > +	 * function.
> > > > +	 *
> > > > +	 * This operation is optional.
> > > > +	 *
> > > > +	 * This is mainly called from drm_writeback_set_gb.
> > > > +	 *
> > > > +	 * RETURNS:
> > > > +	 *
> > > > +	 * drm_writeback_connector assoiciated with the drm connector.
> > > > +	 */
> > > > +	struct drm_writeback_connector
> > > > +*(*get_writeback_connector)(struct
> > > > +drm_connector *connector);
> > > >  };
> > > >
> > > >  /**
> > > > @@ -1192,6 +1212,45 @@ static inline void
> > > drm_connector_helper_add(struct drm_connector *connector,
> > > >  	connector->helper_private = funcs;  }
> > > >
> > > > +/**
> > > > + * struct drm_writeback_connector_helper_funcs - helper
> > > > +operations for writeback
> > > > + * connectors.
> > > > + *
> > > > + * These functions are used by the atomic and legacy modeset
> > > > +helpers and by the
> > > > + * probe helpers.
> > > > + */
> > > > +struct drm_writeback_connector_helper_funcs {
> > > > +	/**
> > > > +	 * @get_connector_from_writeback:
> > > > +	 *
> > > > +	 * This callback is used by drivers to get the drm_connector in
> > > > +	 * case the init is done via drm_writeback_init_with_conn. Which
> > > means
> > > > +	 * the drivers don't have drm_connector embedded in
> > > drm_writeback_connector
> > > > +	 * so they need to send the associated drm_connector with this
> > > > +	 * function.
> > > > +	 *
> > > > +	 * This operation is optional.
> > > > +	 *
> > > > +	 * RETURNS:
> > > > +	 *
> > > > +	 * drm_connector assoiciated with the drm_writeback_connector.
> > > > +	 */
> > > > +	struct drm_connector
> > > > +	*(*get_connector_from_writeback)(struct drm_writeback_connector
> > > > +*wbconnector); };
> > > > +
> > > > +/**
> > > > + * drm_writeback_connector_helper_add - sets the helper vtable
> > > > +for a connector
> > > > + * @wb_connector: DRM writeback connector
> > > > + * @funcs: helper vtable to set for @wb_connector  */ static
> > > > +inline void drm_writeback_connector_helper_add(struct
> > > > +drm_writeback_connector *wb_connector,
> > > > +				   const struct
> > > drm_writeback_connector_helper_funcs *funcs) {
> > > > +	wb_connector->helper_private = funcs; }
> > > > +
> > > >  /**
> > > >   * struct drm_plane_helper_funcs - helper operations for planes
> > > >   *
> > > > diff --git a/include/drm/drm_writeback.h
> > > > b/include/drm/drm_writeback.h index 149744dbeef0..77c3c64c132d
> > > > 100644
> > > > --- a/include/drm/drm_writeback.h
> > > > +++ b/include/drm/drm_writeback.h
> > > > @@ -84,6 +84,13 @@ struct drm_writeback_connector {
> > > >  	 * The name of the connector's fence timeline.
> > > >  	 */
> > > >  	char timeline_name[32];
> > > > +
> > > > +	/**
> > > > +	 * @helper_private:
> > > > +	 *
> > > > +	 * helper private funcs for writeback_connector
> > > > +	 */
> > > > +	const struct drm_writeback_connector_helper_funcs
> > > *helper_private;
> > > >  };
> > >
> > > Unrelate to the commit? Also, where is this defined?
> >
> > This is very much related to this commit and defined on top right here in this
> commit.
> 
> Then please split this patch into two.

Sure will do 

Regards,
Suraj Kandpal

> 
> 
> --
> With best wishes
> Dmitry


More information about the dri-devel mailing list