usb: dwc3: remove dwc3 dependency on host AND gadget.
authorVivek Gautam <gautam.vivek@samsung.com>
Tue, 15 Jan 2013 10:39:21 +0000 (16:09 +0530)
committerFelipe Balbi <balbi@ti.com>
Fri, 18 Jan 2013 12:55:55 +0000 (14:55 +0200)
DWC3 controller curretly depends on USB && USB_GADGET.
Some hardware may like to use only host feature on dwc3,
or only gadget feature.

So, removing this dependency of USB_DWC3 on USB and USB_GADGET.
Adding the mode of operaiton of DWC3 also here
HOST/GADGET/DUAL_ROLE based on which features are enabled.

[ balbi@ti.com :
. make sure we have default modes for all possible Kernel
configurations.
. Remove the config -> menuconfig change as it's unnecessary
. switch over to IS_ENABLED() ]

CC: Doug Anderson <dianders@chromium.org>
Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/Kconfig
drivers/usb/dwc3/Makefile
drivers/usb/dwc3/core.h
drivers/usb/dwc3/debugfs.c

index f6a6e07..77e3f40 100644 (file)
@@ -1,6 +1,6 @@
 config USB_DWC3
        tristate "DesignWare USB3 DRD Core Support"
-       depends on (USB && USB_GADGET)
+       depends on (USB || USB_GADGET)
        select USB_OTG_UTILS
        select USB_XHCI_PLATFORM if USB_SUPPORT && USB_XHCI_HCD
        help
@@ -12,6 +12,35 @@ config USB_DWC3
 
 if USB_DWC3
 
+choice
+       bool "DWC3 Mode Selection"
+       default USB_DWC3_DUAL_ROLE if (USB && USB_GADGET)
+       default USB_DWC3_HOST if (USB && !USB_GADGET)
+       default USB_DWC3_GADGET if (!USB && USB_GADGET)
+
+config USB_DWC3_HOST
+       bool "Host only mode"
+       depends on USB
+       help
+         Select this when you want to use DWC3 in host mode only,
+         thereby the gadget feature will be regressed.
+
+config USB_DWC3_GADGET
+       bool "Gadget only mode"
+       depends on USB_GADGET
+       help
+         Select this when you want to use DWC3 in gadget mode only,
+         thereby the host feature will be regressed.
+
+config USB_DWC3_DUAL_ROLE
+       bool "Dual Role mode"
+       depends on (USB && USB_GADGET)
+       help
+         This is the default mode of working of DWC3 controller where
+         both host and gadget features are enabled.
+
+endchoice
+
 config USB_DWC3_DEBUG
        bool "Enable Debugging Messages"
        help
index 4502648..0c7ac92 100644 (file)
@@ -4,8 +4,14 @@ ccflags-$(CONFIG_USB_DWC3_VERBOSE)     += -DVERBOSE_DEBUG
 obj-$(CONFIG_USB_DWC3)                 += dwc3.o
 
 dwc3-y                                 := core.o
-dwc3-y                                 += host.o
-dwc3-y                                 += gadget.o ep0.o
+
+ifneq ($(filter y,$(CONFIG_USB_DWC3_HOST) $(CONFIG_USB_DWC3_DUAL_ROLE)),)
+       dwc3-y                          += host.o
+endif
+
+ifneq ($(filter y,$(CONFIG_USB_DWC3_GADGET) $(CONFIG_USB_DWC3_DUAL_ROLE)),)
+       dwc3-y                          += gadget.o ep0.o
+endif
 
 ifneq ($(CONFIG_DEBUG_FS),)
        dwc3-y                          += debugfs.o
index f02b3e0..b417506 100644 (file)
@@ -864,10 +864,24 @@ union dwc3_event {
 void dwc3_set_mode(struct dwc3 *dwc, u32 mode);
 int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc);
 
+#if IS_ENABLED(CONFIG_USB_DWC3_HOST) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)
 int dwc3_host_init(struct dwc3 *dwc);
 void dwc3_host_exit(struct dwc3 *dwc);
-
+#else
+static inline int dwc3_host_init(struct dwc3 *dwc)
+{ return 0; }
+static inline void dwc3_host_exit(struct dwc3 *dwc)
+{ }
+#endif
+
+#if IS_ENABLED(CONFIG_USB_DWC3_GADGET) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)
 int dwc3_gadget_init(struct dwc3 *dwc);
 void dwc3_gadget_exit(struct dwc3 *dwc);
+#else
+static inline int dwc3_gadget_init(struct dwc3 *dwc)
+{ return 0; }
+static inline void dwc3_gadget_exit(struct dwc3 *dwc)
+{ }
+#endif
 
 #endif /* __DRIVERS_USB_DWC3_CORE_H */
index aff8fd3..4a752e7 100644 (file)
@@ -661,6 +661,7 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
                goto err1;
        }
 
+#if IS_ENABLED(CONFIG_USB_DWC3_GADGET)
        file = debugfs_create_file("mode", S_IRUGO | S_IWUSR, root,
                        dwc, &dwc3_mode_fops);
        if (!file) {
@@ -681,6 +682,7 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
                ret = -ENOMEM;
                goto err1;
        }
+#endif
 
        return 0;