[PATCH v11 01/21] drm/bridge: synopsys: dw-dp: Register DP AUX on bridge attach

Andy Yan andyshrk at 163.com
Sun Aug 16 05:37:21 PDT 2026


Hello Sebastian,

At 2026-08-07 01:02:07, "Sebastian Reichel" <sebastian.reichel at collabora.com> wrote:
>Unregister the DP AUX device at the right spot as documented in the
>drm_dp_aux_register() function description. This helps that it is
>only accessed when the DRM device is ready and the bridge is powered
>and initialized (further fixes are required for that).
>
>Fixes: 86eecc3a9c2e ("drm/bridge: synopsys: Add DW DPTX Controller support library")
>Reported-by: Sashiko <sashiko-bot at kernel.org>
>Signed-off-by: Sebastian Reichel <sebastian.reichel at collabora.com>
>---
> drivers/gpu/drm/bridge/synopsys/dw-dp.c | 55 +++++++++++++++++++++------------
> 1 file changed, 35 insertions(+), 20 deletions(-)
>
>diff --git a/drivers/gpu/drm/bridge/synopsys/dw-dp.c b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
>index 8b8529e1723c..60feb3d1e14b 100644
>--- a/drivers/gpu/drm/bridge/synopsys/dw-dp.c
>+++ b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
>@@ -1813,7 +1813,36 @@ static struct drm_bridge_state *dw_dp_bridge_atomic_duplicate_state(struct drm_b
> 	return &state->base;
> }
> 
>+static int dw_dp_bridge_attach(struct drm_bridge *bridge,
>+			       struct drm_encoder *encoder,
>+			       enum drm_bridge_attach_flags flags)
>+{
>+	struct dw_dp *dp = bridge_to_dp(bridge);
>+	struct device *dev = dp->dev;
>+	int ret;
>+
>+	dp->aux.dev = dev;
>+	dp->aux.drm_dev = encoder->dev;
>+	dp->aux.name = dev_name(dev);
>+	dp->aux.transfer = dw_dp_aux_transfer;
>+
>+	ret = drm_dp_aux_register(&dp->aux);
>+	if (ret)
>+		dev_err(dev, "Aux register failed: %d\n", ret);
>+
>+	return ret;
>+}
>+
>+static void dw_dp_bridge_detach(struct drm_bridge *bridge)
>+{
>+	struct dw_dp *dp = bridge_to_dp(bridge);
>+
>+	drm_dp_aux_unregister(&dp->aux);
>+}
>+
> static const struct drm_bridge_funcs dw_dp_bridge_funcs = {
>+	.attach = dw_dp_bridge_attach,
>+	.detach = dw_dp_bridge_detach,
> 	.atomic_duplicate_state = dw_dp_bridge_atomic_duplicate_state,
> 	.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
> 	.atomic_create_state = drm_atomic_helper_bridge_create_state,
>@@ -2043,20 +2072,10 @@ struct dw_dp *dw_dp_bind(struct device *dev, struct drm_encoder *encoder,
> 	if (ret)
> 		return ERR_PTR(ret);
> 
>-	dp->aux.dev = dev;
>-	dp->aux.drm_dev = encoder->dev;
>-	dp->aux.name = dev_name(dev);
>-	dp->aux.transfer = dw_dp_aux_transfer;
>-	ret = drm_dp_aux_register(&dp->aux);
>-	if (ret) {
>-		dev_err_probe(dev, ret, "Aux register failed\n");
>-		return ERR_PTR(ret);
>-	}
>-
> 	ret = drm_bridge_attach(encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
> 	if (ret) {
> 		dev_err_probe(dev, ret, "Failed to attach bridge\n");
>-		goto unregister_aux;
>+		return ERR_PTR(ret);
> 	}
> 
> 	dw_dp_init_hw(dp);
>@@ -2064,37 +2083,33 @@ struct dw_dp *dw_dp_bind(struct device *dev, struct drm_encoder *encoder,
> 	ret = phy_init(dp->phy);
> 	if (ret) {
> 		dev_err_probe(dev, ret, "phy init failed\n");
>-		goto unregister_aux;
>+		return ERR_PTR(ret);
> 	}
> 
> 	ret = devm_add_action_or_reset(dev, dw_dp_phy_exit, dp);
> 	if (ret)
>-		goto unregister_aux;
>+		return ERR_PTR(ret);
> 
> 	dp->irq = platform_get_irq(pdev, 0);
> 	if (dp->irq < 0) {
> 		ret = dp->irq;
>-		goto unregister_aux;
>+		return ERR_PTR(ret);
> 	}
> 
> 	ret = devm_request_threaded_irq(dev, dp->irq, NULL, dw_dp_irq,
> 					IRQF_ONESHOT, dev_name(dev), dp);
> 	if (ret) {
> 		dev_err_probe(dev, ret, "failed to request irq\n");


  After this patch[0]  is applied, there will be a conflict here.

 [0]https://lore.kernel.org/all/20260723131649.134127-6-panchuang@vivo.com/#t


>-		goto unregister_aux;
>+		return ERR_PTR(ret);
> 	}



> 
> 	return dp;
>-
>-unregister_aux:
>-	drm_dp_aux_unregister(&dp->aux);
>-	return ERR_PTR(ret);
> }
> EXPORT_SYMBOL_GPL(dw_dp_bind);
> 
> void dw_dp_unbind(struct dw_dp *dp)
> {
>-	drm_dp_aux_unregister(&dp->aux);
>+	/* nothing to do */
> }
> EXPORT_SYMBOL_GPL(dw_dp_unbind);
> 
>
>-- 
>2.53.0
>


More information about the Linux-rockchip mailing list