Hi Damon, On 4/3/2026 9:00 AM, Damon Ding wrote: > For Rockchip and Allwinner platforms, the HDMI encoder attaches the > dw-hdmi bridge via dw_hdmi_bind(). This additional bridge attach flag > serves as preparation for the Rockchip dw-hdmi driver to support the > bridge-connector framework.
We should not extend the dw_hdmi_bind() function with a new flag. Each driver can instead call dw_hdmi_probe() and drm_bridge_attach() on their own, similar as the other dw-hdmi drivers that currently use the bridge connector. Regards, Jonas > > Signed-off-by: Damon Ding <[email protected]> > --- > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 5 +++-- > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 2 +- > drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 2 +- > include/drm/bridge/dw_hdmi.h | 4 +++- > 4 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > index ada45e8b3e2c..dd50dda3a4f5 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > @@ -3619,7 +3619,8 @@ EXPORT_SYMBOL_GPL(dw_hdmi_remove); > */ > struct dw_hdmi *dw_hdmi_bind(struct platform_device *pdev, > struct drm_encoder *encoder, > - const struct dw_hdmi_plat_data *plat_data) > + const struct dw_hdmi_plat_data *plat_data, > + enum drm_bridge_attach_flags flags) > { > struct dw_hdmi *hdmi; > int ret; > @@ -3628,7 +3629,7 @@ struct dw_hdmi *dw_hdmi_bind(struct platform_device > *pdev, > if (IS_ERR(hdmi)) > return hdmi; > > - ret = drm_bridge_attach(encoder, &hdmi->bridge, NULL, 0); > + ret = drm_bridge_attach(encoder, &hdmi->bridge, NULL, flags); > if (ret) { > dw_hdmi_remove(hdmi); > return ERR_PTR(ret); > diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > index 0dc1eb5d2ae3..21b141b7cb9c 100644 > --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > @@ -608,7 +608,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, > struct device *master, > > platform_set_drvdata(pdev, hdmi); > > - hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data); > + hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data, 0); > > /* > * If dw_hdmi_bind() fails we'll never call dw_hdmi_unbind(), > diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c > b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c > index 96532709c2a7..04173335f7e7 100644 > --- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c > +++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c > @@ -188,7 +188,7 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct > device *master, > > platform_set_drvdata(pdev, hdmi); > > - hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data); > + hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data, 0); > > /* > * If dw_hdmi_bind() fails we'll never call dw_hdmi_unbind(), > diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h > index 8500dd4f99d8..e789fb451ef2 100644 > --- a/include/drm/bridge/dw_hdmi.h > +++ b/include/drm/bridge/dw_hdmi.h > @@ -6,6 +6,7 @@ > #ifndef __DW_HDMI__ > #define __DW_HDMI__ > > +#include <drm/drm_bridge.h> > #include <sound/hdmi-codec.h> > > struct drm_display_info; > @@ -182,7 +183,8 @@ void dw_hdmi_remove(struct dw_hdmi *hdmi); > void dw_hdmi_unbind(struct dw_hdmi *hdmi); > struct dw_hdmi *dw_hdmi_bind(struct platform_device *pdev, > struct drm_encoder *encoder, > - const struct dw_hdmi_plat_data *plat_data); > + const struct dw_hdmi_plat_data *plat_data, > + enum drm_bridge_attach_flags flags); > > void dw_hdmi_resume(struct dw_hdmi *hdmi); >
