From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sender4-op-o11.zoho.com (sender4-op-o11.zoho.com [136.143.188.11]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34342485CD2 for ; Thu, 6 Aug 2026 17:57:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.11 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786039081; cv=pass; b=bVEA+X79WR321N/oTNi62b/PwwcxvomrrMt63Af4vx0oaZm8U51Xuw6dYCdEmTomljy5j+qi4G2aTO5zZQxoZL1KH6Jknj24goZdnjZneQRK43I1ZiSWG3epQWVVQvqT+LsF62SXODYAWKn8PtOlbTOBqJOvk+njyl+GvW5G430= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786039081; c=relaxed/simple; bh=dFBFSCKQXDOkHvcOOpV2oBZMne/EmfUVGSTkQQdcbi8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=TrYcYmL6HRD4Z3M1hip3mcQlCNokKhnq/r0eRyW2WpbLAf7karBa5Yn7R9afP9qq+6hvJUOjTCV9RHzRGjFw8XQwJq0pbBvxnq3B9CrcjY0HOD943yvYgyLJ7UhGbFIQCUzmsh+x5eFYkQtPTbI36aWL9aTJtZUz7cD9R18pt8w= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=sebastian.reichel@collabora.com header.b=A88Zm4h1; arc=pass smtp.client-ip=136.143.188.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=sebastian.reichel@collabora.com header.b="A88Zm4h1" ARC-Seal: i=1; a=rsa-sha256; t=1786039023; cv=none; d=zohomail.com; s=zohoarc; b=ZFXJbF+uCUZNw+eEaDW5/JhYp93Db5Hqqko0UmTN24ysW6SuIQSB2aLdBUhpgCgz7qHVmKwUru53W6h67x2JkC7lxCbfI20cXJBpNaBout4CgQ2tNm/0ZkwrdzxvoUb9mHtrlIeC+ErP3lJc5U3VTvz0pjXis/NDzgUlGLjMl7U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786039023; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=7t2ppmEV8KZPQctXq3NUCSS5AXEtR6dC/YbrnTJetEs=; b=NjPBIc8XI2v5ookPpLYAmEprwtm2lmLdWHJ32BMu8hEwM4lddPgXhmnGWsc4kiw3WC0bpEOKC198UY0zBXo4GdKOqr/gphV5L9TEEW9R7Zvl6VysD1IKdqkA0/xNhcFoE6Uv9ypOvpOc6/YkpQGGpFCa8Xm7odQLpkuJ42bVNgI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=sebastian.reichel@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1786039023; s=zohomail; d=collabora.com; i=sebastian.reichel@collabora.com; h=Date:Date:From:From:To:To:Cc:Cc:Subject:Subject:Message-ID:MIME-Version:Content-Type:In-Reply-To:Message-Id:Reply-To; bh=7t2ppmEV8KZPQctXq3NUCSS5AXEtR6dC/YbrnTJetEs=; b=A88Zm4h1XJd75PKpCw9Qd2ouL8JgScvKbLul8lq5fGefFN3GsNc6BoxuM+i6F2LG B91VeeXuXo8UKZpI+4YlP43oNGHJKYw7wrpdTd6F9vTk7oiYPCbeyh7eMwd/KrMi3X/ zhBg1wdeFxC1yohQ4BnYDH6mPQBSssxidTYOwGMg= Received: by mx.zohomail.com with SMTPS id 178603901993027.6707984562496; Thu, 6 Aug 2026 10:56:59 -0700 (PDT) Received: by venus (Postfix, from userid 1000) id D00661808BD; Thu, 06 Aug 2026 19:56:53 +0200 (CEST) Date: Thu, 6 Aug 2026 19:56:53 +0200 From: Sebastian Reichel To: Chaoyi Chen Cc: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sandy Huang , Heiko =?utf-8?Q?St=C3=BCbner?= , Andy Yan , Vinod Koul , Chaoyi Chen , Nicolas Frattaroli , Heikki Krogerus , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-phy@lists.infradead.org Subject: Re: [PATCH v6 1/7] drm/bridge: aux-hpd-bridge: Add drm_dev_has_dp_hpd_bridge() Message-ID: References: <20260804070730.68-1-kernel@airkyi.com> <20260804070730.68-2-kernel@airkyi.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="lmyx267gariqvzno" Content-Disposition: inline In-Reply-To: <20260804070730.68-2-kernel@airkyi.com> X-Zoho-Virus-Status: 1 X-Zoho-AV-Stamp: zmail-av-0.2.10.1.5.2/286.26.37 X-ZohoMailClient: External --lmyx267gariqvzno Content-Type: text/plain; protected-headers=v1; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Subject: Re: [PATCH v6 1/7] drm/bridge: aux-hpd-bridge: Add drm_dev_has_dp_hpd_bridge() MIME-Version: 1.0 Hi, On Tue, Aug 04, 2026 at 03:07:24PM +0800, Chaoyi Chen wrote: > From: Chaoyi Chen >=20 > Add a new API to check whether a DisplayPort HPD bridge has already > been registered. This helps avoid duplicate registration of the same > HPD bridge, although the current framework allows doing so. >=20 > Suggested-by: Sebastian Reichel > Signed-off-by: Chaoyi Chen > --- Reviewed-by: Sebastian Reichel Tested-by: Sebastian Reichel I still see the bridge registered twice for fusb302. Apparently the the new notifier is faster than the explicit registration in the driver. The code added here works though; reloading aux_hpd_typec_dp_bridge does not register more and more bridges :) Greetings, -- Sebastian > drivers/gpu/drm/bridge/aux-hpd-bridge.c | 42 ++++++++++++++++++++++++- > include/drm/bridge/aux-bridge.h | 6 ++++ > 2 files changed, 47 insertions(+), 1 deletion(-) >=20 > diff --git a/drivers/gpu/drm/bridge/aux-hpd-bridge.c b/drivers/gpu/drm/br= idge/aux-hpd-bridge.c > index f02a38a2638a..a56c88eba005 100644 > --- a/drivers/gpu/drm/bridge/aux-hpd-bridge.c > +++ b/drivers/gpu/drm/bridge/aux-hpd-bridge.c > @@ -12,6 +12,8 @@ > #include > #include > =20 > +#define DRM_AUX_HPD_BRIDGE_NAME "dp_hpd_bridge" > + > static DEFINE_IDA(drm_aux_hpd_bridge_ida); > =20 > struct drm_aux_hpd_bridge_data { > @@ -36,6 +38,44 @@ static void drm_aux_hpd_bridge_free_adev(void *_adev) > auxiliary_device_uninit(_adev); > } > =20 > +static int hpd_bridge_match(struct device *dev, const void *data) > +{ > + const struct device_node *np =3D data; > + struct auxiliary_device *adev; > + > + if (!dev_is_auxiliary(dev)) > + return 0; > + > + adev =3D to_auxiliary_dev(dev); > + if (strcmp(adev->name, DRM_AUX_HPD_BRIDGE_NAME)) > + return 0; > + > + return adev->dev.platform_data =3D=3D np; > +} > + > +/** > + * drm_dev_has_dp_hpd_bridge - check whether a HPD DisplayPort bridge is= registered > + * @parent: device instance providing this bridge > + * @np: device node pointer corresponding to this bridge instance > + * > + * Walk the children of @parent and check whether a HPD DisplayPort brid= ge for > + * the given @np has already been registered via devm_drm_dp_hpd_bridge_= add(). > + * > + * Return: true if a HPD bridge for @parent / @np already exists, false = otherwise > + */ > +bool drm_dev_has_dp_hpd_bridge(struct device *parent, struct device_node= *np) > +{ > + struct device *child; > + > + child =3D device_find_child(parent, np, hpd_bridge_match); > + if (child) { > + put_device(child); > + return true; > + } > + return false; > +} > +EXPORT_SYMBOL_GPL(drm_dev_has_dp_hpd_bridge); > + > /** > * devm_drm_dp_hpd_bridge_alloc - allocate a HPD DisplayPort bridge > * @parent: device instance providing this bridge > @@ -63,7 +103,7 @@ struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(= struct device *parent, str > } > =20 > adev->id =3D ret; > - adev->name =3D "dp_hpd_bridge"; > + adev->name =3D DRM_AUX_HPD_BRIDGE_NAME; > adev->dev.parent =3D parent; > adev->dev.release =3D drm_aux_hpd_bridge_release; > adev->dev.platform_data =3D of_node_get(np); > diff --git a/include/drm/bridge/aux-bridge.h b/include/drm/bridge/aux-bri= dge.h > index c2f5a855512f..cca07a8e2d45 100644 > --- a/include/drm/bridge/aux-bridge.h > +++ b/include/drm/bridge/aux-bridge.h > @@ -25,6 +25,7 @@ struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(s= truct device *parent, str > int devm_drm_dp_hpd_bridge_add(struct device *dev, struct auxiliary_devi= ce *adev); > struct device *drm_dp_hpd_bridge_register(struct device *parent, > struct device_node *np); > +bool drm_dev_has_dp_hpd_bridge(struct device *parent, struct device_node= *np); > void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_st= atus status); > #else > static inline struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(stru= ct device *parent, > @@ -44,6 +45,11 @@ static inline struct device *drm_dp_hpd_bridge_registe= r(struct device *parent, > return NULL; > } > =20 > +static inline bool drm_dev_has_dp_hpd_bridge(struct device *parent, stru= ct device_node *np) > +{ > + return false; > +} > + > static inline void drm_aux_hpd_bridge_notify(struct device *dev, enum dr= m_connector_status status) > { > } > --=20 > 2.53.0 >=20 --lmyx267gariqvzno Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmp0yuIACgkQ2O7X88g7 +po3bQ//XxQC2aSQqCssQjBwMzPwUFwLFuI1cswQEnui/0Ma+SOGA796JIx+7t4U aaoov8lNcVLA8v6jA+VHswHsj+iy31uUHdXOJDl06b3CS+wNvxLbelMMQUQ+liFr XxJ/pgkwSeDY455N996scnB1WG+tYQJSquY95aTlHFitgcp9sLUQ8gQjSNits0nq qteTIoAV/wzBIAn3gH1XY/aEGSQHg/rXMi+/E8NNgZxuKcMABIbkipi7CG0PGL6F 1GR7OzGOJBAaYBCOTzf+IXXSOs9URotGfXp60kU4ClIGR9WcrdeM+vBVVQteTQeB d5Cxu7dPTMIeGtpB37xLwlVHb187pE7szjjBi1SWpf5IXv4S3feA5uZnpTwagsR8 rXsD/jEDWZ/3oi5CtDdtAduZEGIxBNAKY2yzC9xze+vM0j8i6RoOHwBTa4vwL7A2 ZwbLdiz+S29nlbImHxcN7riTJOcU31V6ccXtdYVn2REqNzi4wn7kzxP2zMG/pfDr QpvXOj9UtsFZyo/uCukbBFu6jP6pu08u0qdTa6AUAXYsSgkfaV9jVyDtPboX6fp3 1kxaxqm5IcwdOa6Nz9brODhsigM+qqMrd3WGGurmW4sN8ADfz5Vsdv4dMXOlUGO4 kT0gbbmbtdS1GZ4S6BDC7sNiokDFT0JCJwwL0dIwfiJRr9y1aUU= =GGPA -----END PGP SIGNATURE----- --lmyx267gariqvzno--