On Mon, Aug 11, 2025 at 02:57:00PM +0530, Suraj Kandpal wrote: > Some drivers cannot work with the current design where the connector > is embedded within the drm_writeback_connector such as intel and > some drivers that can get it working end up adding a lot of checks > all around the code to check if it's a writeback conenctor or not. > To solve this we move the drm_writeback_connector within the > drm_connector and remove the drm_connector base which was in > drm_writeback_connector. We do all other required > modifications that come with these changes along with addition > of new function which returns the drm_connector when > drm_writeback_connector is present. > All drivers will be expected to allocate the drm_connector. > > Signed-off-by: Suraj Kandpal <suraj.kand...@intel.com> > --- > drivers/gpu/drm/drm_writeback.c | 33 ++++++++++------ > include/drm/drm_connector.h | 60 +++++++++++++++++++++++++++++ > include/drm/drm_writeback.h | 68 ++++----------------------------- > 3 files changed, 89 insertions(+), 72 deletions(-) > > diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c > index ec2575c4c21b..198b8c488056 100644 > --- a/drivers/gpu/drm/drm_writeback.c > +++ b/drivers/gpu/drm/drm_writeback.c > @@ -89,8 +89,10 @@ static const char > *drm_writeback_fence_get_driver_name(struct dma_fence *fence) > { > struct drm_writeback_connector *wb_connector = > fence_to_wb_connector(fence); > + struct drm_connector *connector = > + drm_writeback_to_connector(wb_connector); > > - return wb_connector->base.dev->driver->name; > + return connector->dev->driver->name; > } > > static const char * > @@ -187,7 +189,8 @@ static int __drm_writeback_connector_init(struct > drm_device *dev, > struct drm_encoder *enc, const u32 > *formats, > int n_formats) > { > - struct drm_connector *connector = &wb_connector->base; > + struct drm_connector *connector = > + drm_writeback_to_connector(wb_connector); > struct drm_mode_config *config = &dev->mode_config; > struct drm_property_blob *blob; > int ret = create_writeback_properties(dev); > @@ -269,7 +272,8 @@ int drm_writeback_connector_init(struct drm_device *dev, > struct drm_encoder *enc, > const u32 *formats, int n_formats) > { > - struct drm_connector *connector = &wb_connector->base; > + struct drm_connector *connector = > + drm_writeback_to_connector(wb_connector);
Please pass drm_connector instead (to all init functions). It would make more sense. > int ret; > > ret = drm_connector_init(dev, connector, con_funcs, > @@ -339,7 +343,8 @@ int drmm_writeback_connector_init(struct drm_device *dev, > struct drm_encoder *enc, > const u32 *formats, int n_formats) > { > - struct drm_connector *connector = &wb_connector->base; > + struct drm_connector *connector = > + drm_writeback_to_connector(wb_connector); > int ret; > > ret = drmm_connector_init(dev, connector, con_funcs, -- With best wishes Dmitry