diff mbox series

usb: hide usb_of_get_companion_dev for CONFIG_USB=n

Message ID 20180813214924.3567840-1-arnd@arndb.de
State New
Headers show
Series usb: hide usb_of_get_companion_dev for CONFIG_USB=n | expand

Commit Message

Arnd Bergmann Aug. 13, 2018, 9:48 p.m. UTC
The renesas UDC implementation now calls usb_of_get_companion_dev(),
which is only defined when CONFIG_USB is enabled:

drivers/usb/gadget/udc/renesas_usb3.o: In function `renesas_usb3_probe':
renesas_usb3.c:(.text+0xa34): undefined reference to `usb_of_get_companion_dev'

To avoid the build error, we need two changes:

- usb_of_get_companion_dev must be stubbed out when CONFIG_USB is
  disabled, so it the udc driver can be built for a gadget-only
  mode kernel
- With CONFIG_USB=m, we must not attempt to have USB_RENESAS_USB3
  built-in, so we need a soft dependency on USB.

Fixes: 39facfa01c9f ("usb: gadget: udc: renesas_usb3: Add register of usb role switch")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 drivers/usb/gadget/udc/Kconfig | 1 +
 include/linux/usb/of.h         | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

-- 
2.18.0

Comments

Alan Stern Aug. 14, 2018, 1:58 p.m. UTC | #1
On Mon, 13 Aug 2018, Arnd Bergmann wrote:

> The renesas UDC implementation now calls usb_of_get_companion_dev(),

> which is only defined when CONFIG_USB is enabled:

> 

> drivers/usb/gadget/udc/renesas_usb3.o: In function `renesas_usb3_probe':

> renesas_usb3.c:(.text+0xa34): undefined reference to `usb_of_get_companion_dev'

> 

> To avoid the build error, we need two changes:

> 

> - usb_of_get_companion_dev must be stubbed out when CONFIG_USB is

>   disabled, so it the udc driver can be built for a gadget-only

>   mode kernel

> - With CONFIG_USB=m, we must not attempt to have USB_RENESAS_USB3

>   built-in, so we need a soft dependency on USB.

> 

> Fixes: 39facfa01c9f ("usb: gadget: udc: renesas_usb3: Add register of usb role switch")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  drivers/usb/gadget/udc/Kconfig | 1 +

>  include/linux/usb/of.h         | 6 +++++-

>  2 files changed, 6 insertions(+), 1 deletion(-)

> 

> diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig

> index 0a16cbd4e528..663a8bd67a7b 100644

> --- a/drivers/usb/gadget/udc/Kconfig

> +++ b/drivers/usb/gadget/udc/Kconfig

> @@ -193,6 +193,7 @@ config USB_RENESAS_USB3

>  	tristate 'Renesas USB3.0 Peripheral controller'

>  	depends on ARCH_RENESAS || COMPILE_TEST

>  	depends on EXTCON

> +	depends on USB || !USB


Is this some weird standard idiom?  It looks really strange.

Alan Stern
Arnd Bergmann Aug. 14, 2018, 2:26 p.m. UTC | #2
On Tue, Aug 14, 2018 at 3:58 PM Alan Stern <stern@rowland.harvard.edu> wrote:
> On Mon, 13 Aug 2018, Arnd Bergmann wrote:

> > diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig

> > index 0a16cbd4e528..663a8bd67a7b 100644

> > --- a/drivers/usb/gadget/udc/Kconfig

> > +++ b/drivers/usb/gadget/udc/Kconfig

> > @@ -193,6 +193,7 @@ config USB_RENESAS_USB3

> >       tristate 'Renesas USB3.0 Peripheral controller'

> >       depends on ARCH_RENESAS || COMPILE_TEST

> >       depends on EXTCON

> > +     depends on USB || !USB

>

> Is this some weird standard idiom?  It looks really strange.


Yes, and yes.

A less common way to write it is

        depends on (USB != m) || m

which some people prefer, but I find even weirder.

       Arnd
diff mbox series

Patch

diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig
index 0a16cbd4e528..663a8bd67a7b 100644
--- a/drivers/usb/gadget/udc/Kconfig
+++ b/drivers/usb/gadget/udc/Kconfig
@@ -193,6 +193,7 @@  config USB_RENESAS_USB3
 	tristate 'Renesas USB3.0 Peripheral controller'
 	depends on ARCH_RENESAS || COMPILE_TEST
 	depends on EXTCON
+	depends on USB || !USB
 	select USB_ROLE_SWITCH
 	help
 	   Renesas USB3.0 Peripheral controller is a USB peripheral controller
diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h
index dba55ccb9b53..733339218466 100644
--- a/include/linux/usb/of.h
+++ b/include/linux/usb/of.h
@@ -23,7 +23,6 @@  struct device_node *usb_of_get_device_node(struct usb_device *hub, int port1);
 bool usb_of_has_combined_node(struct usb_device *udev);
 struct device_node *usb_of_get_interface_node(struct usb_device *udev,
 		u8 config, u8 ifnum);
-struct device *usb_of_get_companion_dev(struct device *dev);
 #else
 static inline enum usb_dr_mode
 of_usb_get_dr_mode_by_phy(struct device_node *np, int arg0)
@@ -53,6 +52,11 @@  usb_of_get_interface_node(struct usb_device *udev, u8 config, u8 ifnum)
 {
 	return NULL;
 }
+#endif
+
+#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_USB)
+struct device *usb_of_get_companion_dev(struct device *dev);
+#else
 static inline struct device *usb_of_get_companion_dev(struct device *dev)
 {
 	return NULL;