Hi Sui, Thank you for the patch. On Tue, Jan 23, 2024 at 12:32:16AM +0800, Sui Jingfeng wrote: > Because ACPI based systems only has the fwnode associated, the of_node > member of struct device is NULL. To order to move things forward, we add > drm_bridge_find_by_fwnode() to extend the support. > > Signed-off-by: Sui Jingfeng <sui.jingfeng@xxxxxxxxx> Could we switch completely to fwnode, instead of maintaining the fwnode and OF options side-by-side ? > --- > drivers/gpu/drm/drm_bridge.c | 33 +++++++++++++++++++++++++++++++++ > include/drm/drm_bridge.h | 4 ++++ > 2 files changed, 37 insertions(+) > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > index cee3188adf3d..ffd969adc2fb 100644 > --- a/drivers/gpu/drm/drm_bridge.c > +++ b/drivers/gpu/drm/drm_bridge.c > @@ -1347,6 +1347,39 @@ struct drm_bridge *of_drm_find_bridge(struct device_node *np) > EXPORT_SYMBOL(of_drm_find_bridge); > #endif > > +/** > + * drm_bridge_find_by_fwnode - Find the bridge corresponding to the associated fwnode > + * > + * @fwnode: fwnode for which to find the matching drm_bridge > + * > + * This function looks up a drm_bridge based on its associated fwnode. > + * > + * RETURNS: > + * A reference to the drm_bridge control structure if found, NULL on failure. > + */ > +struct drm_bridge *drm_bridge_find_by_fwnode(struct fwnode_handle *fwnode) > +{ > + struct drm_bridge *ret = NULL; > + struct drm_bridge *bridge; > + > + if (!fwnode) > + return NULL; > + > + mutex_lock(&bridge_lock); > + > + list_for_each_entry(bridge, &bridge_list, list) { > + if (bridge->fwnode == fwnode) { > + ret = bridge; > + break; > + } > + } > + > + mutex_unlock(&bridge_lock); > + > + return ret; > +} > +EXPORT_SYMBOL(drm_bridge_find_by_fwnode); > + > MODULE_AUTHOR("Ajay Kumar <ajaykumar.rs@xxxxxxxxxxx>"); > MODULE_DESCRIPTION("DRM bridge infrastructure"); > MODULE_LICENSE("GPL and additional rights"); > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index e39da5807ba7..fe3d5f4bf37f 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -720,6 +720,8 @@ struct drm_bridge { > struct list_head chain_node; > /** @of_node: device node pointer to the bridge */ > struct device_node *of_node; > + /** @fwnode: associated fwnode supplied by platform firmware */ > + struct fwnode_handle *fwnode; > /** @list: to keep track of all added bridges */ > struct list_head list; > /** > @@ -796,6 +798,8 @@ static inline struct drm_bridge *of_drm_find_bridge(struct device_node *np) > } > #endif > > +struct drm_bridge *drm_bridge_find_by_fwnode(struct fwnode_handle *fwnode); > + > /** > * drm_bridge_get_next_bridge() - Get the next bridge in the chain > * @bridge: bridge object -- Regards, Laurent Pinchart