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

Sebastian Reichel <[email protected]>
Newsgroups org.infradead.lists.linux-rockchip,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Message-ID <aoM0KMBoIpIQ5vnw@venus>
Hello Andy,

On Sun, Aug 16, 2026 at 08:37:21PM +0800, Andy Yan wrote:
> Hello Sebastian,
> 
> At 2026-08-07 01:02:07, "Sebastian Reichel" <[email protected]> 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 <[email protected]>
> >Signed-off-by: Sebastian Reichel <[email protected]>
> >---
> > 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/[email protected]/#t

This got applied after I send this. I do rebase to latest
drm-misc-next on every submission, so it will be fixed with the next
version.

Greetings,

-- Sebastian

> 
> 
> >-		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
> >

_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmqDNJUACgkQ2O7X88g7
+poGaxAAgeNiIBmqZCzTK0GPvq5iKwuyIr8+xL44ArVV7Lqm9EAor3E8wc7d7rZz
/uXUPWw76k/rt+tba7ZwpwtjdXIYIc7uvq9x6HyCIxUeAjPemr5q4iLF/eK5o4XF
flNISlAmFhzvmRL9doDKsZri1TclNHl+JzJUieSQEOlkZtFF6Bw/elJ2WUV7dFdS
gs+t5Rig5fOpfdOgDyWWs3NBhUWe818KXfHtUMoX7FsHAGb8Al5p9WN3ARCc4rYp
mRggpOE/EVgD+KMsUXSC/k3iVdNOKAHBwMbJ0burCj69G4iS+TaVtINHR0tzmivj
9B+1/9Kh29D+sLT3gVB4QjPvGnrtft1/xmB3Y9PLuUePZrpjGmSGmvrE9Me8FDsg
J9hEBp+xl0LdcQDAj3ifbJNFqUl2f3VWF47snIkMahGty6WB2/zIgO/UIC2mbMB0
GjUHEqJxiPNrHBi/nIEx+XYpky7Xa2T9mRmWea+Md6gRybg/bdGlF0ji+QVxH8tu
5kURLI73p0w9h3Xn6SRREfZqMc2JmbaE+S++dJXlbabBiaWRGNaozxU9XnfNwKpQ
D4jn540HXz9efN8iIazaZ2lXhsO89sr4/xbxzSS84ao9e8M3xGjsCaSFBeeTPBjs
x9BLlJqK4I9iQCmeeQn8zGTxmHWOuQV8wOa6YBys9f0ohByuusU=
=3lJR
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.