public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm: bridge: anx7625: enforce CONFIG_USB_ROLE_SWITCH dependency
@ 2026-03-04  8:35 Arnd Bergmann
  2026-03-06  9:48 ` Neil Armstrong
  2026-03-11  2:20 ` Dmitry Baryshkov
  0 siblings, 2 replies; 3+ messages in thread
From: Arnd Bergmann @ 2026-03-04  8:35 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Maarten Lankhorst,
	Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
	Dmitry Baryshkov, Heikki Krogerus, Xin Ji
  Cc: Arnd Bergmann, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Ayushi Makhija, Douglas Anderson, Luca Ceresoli, Loic Poulain,
	Chen-Yu Tsai, dri-devel, linux-kernel

From: Arnd Bergmann <arnd@arndb.de>

When CONFIG_TYPEC is enabled, but USB_ROLE_SWITCH=m, the anx7625 driver
fails to link as built-in:

aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_i2c_remove':
anx7625.c:(.text+0x6ec): undefined reference to `usb_role_switch_put'
aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_typec_set_status':
anx7625.c:(.text+0x3080): undefined reference to `usb_role_switch_set_role'
aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_i2c_probe':
anx7625.c:(.text+0x5368): undefined reference to `fwnode_usb_role_switch_get'

The problem is that both dependencies are optional in the sense of allowing
the anx7625 driver to call the exported interfaces to be used from a loadable
module, but cannot work for built-in drivers. It would be possible to handle
all nine combinations of the CONFIG_TYPEC and CONFIG_USB_ROLE_SWITCH tristate
options, but that does add a lot of complexity that seems unnecessary when
in reality any user of this driver would have both enabled anyway.

Turn both dependencies into hard 'depends on' here to only allow configurations
where it's possible to actually use them, and remove the misguided IS_REACHABLE()
check that did nothing here.

Fixes: f81455b2d332 ("drm: bridge: anx7625: implement minimal Type-C support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 drivers/gpu/drm/bridge/analogix/Kconfig   |  3 ++-
 drivers/gpu/drm/bridge/analogix/anx7625.c | 17 -----------------
 2 files changed, 2 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix/Kconfig b/drivers/gpu/drm/bridge/analogix/Kconfig
index f3448b0631fe..03dc7ffe824a 100644
--- a/drivers/gpu/drm/bridge/analogix/Kconfig
+++ b/drivers/gpu/drm/bridge/analogix/Kconfig
@@ -34,7 +34,8 @@ config DRM_ANALOGIX_ANX7625
 	tristate "Analogix Anx7625 MIPI to DP interface support"
 	depends on DRM
 	depends on OF
-	depends on TYPEC || !TYPEC
+	depends on TYPEC
+	depends on USB_ROLE_SWITCH
 	select DRM_DISPLAY_DP_HELPER
 	select DRM_DISPLAY_HDCP_HELPER
 	select DRM_DISPLAY_HELPER
diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c
index c43519097a45..ec4b24481987 100644
--- a/drivers/gpu/drm/bridge/analogix/anx7625.c
+++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
@@ -1483,7 +1483,6 @@ static void anx7625_start_dp_work(struct anx7625_data *ctx)
 	DRM_DEV_DEBUG_DRIVER(dev, "Secure OCM version=%02x\n", ret);
 }
 
-#if IS_REACHABLE(CONFIG_TYPEC)
 static u8 anx7625_checksum(u8 *buf, u8 len)
 {
 	u8 ret = 0;
@@ -1635,22 +1634,6 @@ static void anx7625_typec_unregister(struct anx7625_data *ctx)
 	usb_role_switch_put(ctx->role_sw);
 	typec_unregister_port(ctx->typec_port);
 }
-#else
-static void anx7625_typec_set_status(struct anx7625_data *ctx,
-				     unsigned int intr_status,
-				     unsigned int intr_vector)
-{
-}
-
-static int anx7625_typec_register(struct anx7625_data *ctx)
-{
-	return 0;
-}
-
-static void anx7625_typec_unregister(struct anx7625_data *ctx)
-{
-}
-#endif
 
 static int anx7625_read_hpd_status_p0(struct anx7625_data *ctx)
 {
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] drm: bridge: anx7625: enforce CONFIG_USB_ROLE_SWITCH dependency
  2026-03-04  8:35 [PATCH] drm: bridge: anx7625: enforce CONFIG_USB_ROLE_SWITCH dependency Arnd Bergmann
@ 2026-03-06  9:48 ` Neil Armstrong
  2026-03-11  2:20 ` Dmitry Baryshkov
  1 sibling, 0 replies; 3+ messages in thread
From: Neil Armstrong @ 2026-03-06  9:48 UTC (permalink / raw)
  To: Arnd Bergmann, Andrzej Hajda, Robert Foss, Maarten Lankhorst,
	Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
	Dmitry Baryshkov, Heikki Krogerus, Xin Ji
  Cc: Arnd Bergmann, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Ayushi Makhija, Douglas Anderson, Luca Ceresoli, Loic Poulain,
	Chen-Yu Tsai, dri-devel, linux-kernel

On 3/4/26 09:35, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> When CONFIG_TYPEC is enabled, but USB_ROLE_SWITCH=m, the anx7625 driver
> fails to link as built-in:
> 
> aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_i2c_remove':
> anx7625.c:(.text+0x6ec): undefined reference to `usb_role_switch_put'
> aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_typec_set_status':
> anx7625.c:(.text+0x3080): undefined reference to `usb_role_switch_set_role'
> aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_i2c_probe':
> anx7625.c:(.text+0x5368): undefined reference to `fwnode_usb_role_switch_get'
> 
> The problem is that both dependencies are optional in the sense of allowing
> the anx7625 driver to call the exported interfaces to be used from a loadable
> module, but cannot work for built-in drivers. It would be possible to handle
> all nine combinations of the CONFIG_TYPEC and CONFIG_USB_ROLE_SWITCH tristate
> options, but that does add a lot of complexity that seems unnecessary when
> in reality any user of this driver would have both enabled anyway.
> 
> Turn both dependencies into hard 'depends on' here to only allow configurations
> where it's possible to actually use them, and remove the misguided IS_REACHABLE()
> check that did nothing here.
> 
> Fixes: f81455b2d332 ("drm: bridge: anx7625: implement minimal Type-C support")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>   drivers/gpu/drm/bridge/analogix/Kconfig   |  3 ++-
>   drivers/gpu/drm/bridge/analogix/anx7625.c | 17 -----------------
>   2 files changed, 2 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/analogix/Kconfig b/drivers/gpu/drm/bridge/analogix/Kconfig
> index f3448b0631fe..03dc7ffe824a 100644
> --- a/drivers/gpu/drm/bridge/analogix/Kconfig
> +++ b/drivers/gpu/drm/bridge/analogix/Kconfig
> @@ -34,7 +34,8 @@ config DRM_ANALOGIX_ANX7625
>   	tristate "Analogix Anx7625 MIPI to DP interface support"
>   	depends on DRM
>   	depends on OF
> -	depends on TYPEC || !TYPEC
> +	depends on TYPEC
> +	depends on USB_ROLE_SWITCH
>   	select DRM_DISPLAY_DP_HELPER
>   	select DRM_DISPLAY_HDCP_HELPER
>   	select DRM_DISPLAY_HELPER
> diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c
> index c43519097a45..ec4b24481987 100644
> --- a/drivers/gpu/drm/bridge/analogix/anx7625.c
> +++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
> @@ -1483,7 +1483,6 @@ static void anx7625_start_dp_work(struct anx7625_data *ctx)
>   	DRM_DEV_DEBUG_DRIVER(dev, "Secure OCM version=%02x\n", ret);
>   }
>   
> -#if IS_REACHABLE(CONFIG_TYPEC)
>   static u8 anx7625_checksum(u8 *buf, u8 len)
>   {
>   	u8 ret = 0;
> @@ -1635,22 +1634,6 @@ static void anx7625_typec_unregister(struct anx7625_data *ctx)
>   	usb_role_switch_put(ctx->role_sw);
>   	typec_unregister_port(ctx->typec_port);
>   }
> -#else
> -static void anx7625_typec_set_status(struct anx7625_data *ctx,
> -				     unsigned int intr_status,
> -				     unsigned int intr_vector)
> -{
> -}
> -
> -static int anx7625_typec_register(struct anx7625_data *ctx)
> -{
> -	return 0;
> -}
> -
> -static void anx7625_typec_unregister(struct anx7625_data *ctx)
> -{
> -}
> -#endif
>   
>   static int anx7625_read_hpd_status_p0(struct anx7625_data *ctx)
>   {

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

Thanks,
Neil

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] drm: bridge: anx7625: enforce CONFIG_USB_ROLE_SWITCH dependency
  2026-03-04  8:35 [PATCH] drm: bridge: anx7625: enforce CONFIG_USB_ROLE_SWITCH dependency Arnd Bergmann
  2026-03-06  9:48 ` Neil Armstrong
@ 2026-03-11  2:20 ` Dmitry Baryshkov
  1 sibling, 0 replies; 3+ messages in thread
From: Dmitry Baryshkov @ 2026-03-11  2:20 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Maarten Lankhorst,
	Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
	Heikki Krogerus, Xin Ji, Arnd Bergmann
  Cc: Arnd Bergmann, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Ayushi Makhija, Douglas Anderson, Luca Ceresoli, Loic Poulain,
	Chen-Yu Tsai, dri-devel, linux-kernel

On Wed, 04 Mar 2026 09:35:52 +0100, Arnd Bergmann wrote:
> When CONFIG_TYPEC is enabled, but USB_ROLE_SWITCH=m, the anx7625 driver
> fails to link as built-in:
> 
> aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_i2c_remove':
> anx7625.c:(.text+0x6ec): undefined reference to `usb_role_switch_put'
> aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_typec_set_status':
> anx7625.c:(.text+0x3080): undefined reference to `usb_role_switch_set_role'
> aarch64-linux-ld: drivers/gpu/drm/bridge/analogix/anx7625.o: in function `anx7625_i2c_probe':
> anx7625.c:(.text+0x5368): undefined reference to `fwnode_usb_role_switch_get'
> 
> [...]

Applied to drm-misc-next, thanks!

[1/1] drm: bridge: anx7625: enforce CONFIG_USB_ROLE_SWITCH dependency
      commit: 10e9ff46fe07bdfa8c11434d4b943f89d8ba74f6

Best regards,
-- 
With best wishes
Dmitry



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-03-11  2:20 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-04  8:35 [PATCH] drm: bridge: anx7625: enforce CONFIG_USB_ROLE_SWITCH dependency Arnd Bergmann
2026-03-06  9:48 ` Neil Armstrong
2026-03-11  2:20 ` Dmitry Baryshkov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox