usb: isp1760: Make HCD support optional
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 20 Jan 2015 22:56:03 +0000 (00:56 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 27 Jan 2015 15:39:42 +0000 (09:39 -0600)
Enable compilation of the isp1760 driver in pure host mode, pure device
mode, or dual-role mode.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/isp1760/Kconfig
drivers/usb/isp1760/Makefile
drivers/usb/isp1760/isp1760-hcd.h
drivers/usb/isp1760/isp1760-udc.h

index c09ab8fa0e10bd65572c0701992a567a35f22fe3..c94b7d9533999db817a0b4492821fc5f7b7013d3 100644 (file)
@@ -1,6 +1,6 @@
 config USB_ISP1760
        tristate "NXP ISP 1760/1761 support"
-       depends on USB
+       depends on USB || USB_GADGET
        help
          Say Y or M here if your system as an ISP1760 USB host controller
          or an ISP1761 USB dual-role controller.
@@ -14,9 +14,46 @@ config USB_ISP1760
          To compile this driver as a module, choose M here: the
          module will be called isp1760.
 
+config USB_ISP1760_HCD
+       bool
+
 config USB_ISP1761_UDC
-       boolean "NXP ISP1761 USB Device Controller"
-       depends on USB_ISP1760 && USB_GADGET
+       bool
+
+if USB_ISP1760
+
+choice
+       bool "ISP1760 Mode Selection"
+       default USB_ISP1760_DUAL_ROLE if (USB && USB_GADGET)
+       default USB_ISP1760_HOST_ROLE if (USB && !USB_GADGET)
+       default USB_ISP1760_GADGET_ROLE if (!USB && USB_GADGET)
+
+config USB_ISP1760_HOST_ROLE
+       bool "Host only mode"
+       depends on USB=y || USB=USB_ISP1760
+       select USB_ISP1760_HCD
+       help
+         Select this if you want to use the ISP1760 in host mode only. The
+         gadget function will be disabled.
+
+config USB_ISP1760_GADGET_ROLE
+       bool "Gadget only mode"
+       depends on USB_GADGET=y || USB_GADGET=USB_ISP1760
+       select USB_ISP1761_UDC
+       help
+         Select this if you want to use the ISP1760 in peripheral mode only.
+         The host function will be disabled.
+
+config USB_ISP1760_DUAL_ROLE
+       bool "Dual Role mode"
+       depends on USB=y || USB=USB_ISP1760
+       depends on USB_GADGET=y || USB_GADGET=USB_ISP1760
+       select USB_ISP1760_HCD
+       select USB_ISP1761_UDC
        help
-          The NXP ISP1761 is a dual-role high-speed USB host and device
-          controller.
+         Select this if you want to use the ISP1760 in both host and
+         peripheral modes.
+
+endchoice
+
+endif
index 698ccb0b2c65d8bde1d1bfd675c72141dd8d5501..2b741074ad2b2757abf845211088d363781a422d 100644 (file)
@@ -1,4 +1,5 @@
-isp1760-y := isp1760-core.o isp1760-hcd.o isp1760-if.o
+isp1760-y := isp1760-core.o isp1760-if.o
+isp1760-$(CONFIG_USB_ISP1760_HCD) += isp1760-hcd.o
 isp1760-$(CONFIG_USB_ISP1761_UDC) += isp1760-udc.o
 
 obj-$(CONFIG_USB_ISP1760)      += isp1760.o
index df7ea3684b7794bb5ac0cf49decf864aa9dc991c..0c1c98d6ea0884e58787286ad3fa8ab5b9c0e05a 100644 (file)
@@ -47,6 +47,7 @@ enum isp1760_queue_head_types {
 };
 
 struct isp1760_hcd {
+#ifdef CONFIG_USB_ISP1760_HCD
        struct usb_hcd          *hcd;
 
        u32 hcs_params;
@@ -64,8 +65,10 @@ struct isp1760_hcd {
        unsigned                i_thresh;
        unsigned long           reset_done;
        unsigned long           next_statechange;
+#endif
 };
 
+#ifdef CONFIG_USB_ISP1760_HCD
 int isp1760_hcd_register(struct isp1760_hcd *priv, void __iomem *regs,
                         struct resource *mem, int irq, unsigned long irqflags,
                         struct device *dev);
@@ -73,5 +76,27 @@ void isp1760_hcd_unregister(struct isp1760_hcd *priv);
 
 int isp1760_init_kmem_once(void);
 void isp1760_deinit_kmem_cache(void);
+#else
+static inline int isp1760_hcd_register(struct isp1760_hcd *priv,
+                                      void __iomem *regs, struct resource *mem,
+                                      int irq, unsigned long irqflags,
+                                      struct device *dev)
+{
+       return 0;
+}
+
+static inline void isp1760_hcd_unregister(struct isp1760_hcd *priv)
+{
+}
+
+static inline int isp1760_init_kmem_once(void)
+{
+       return 0;
+}
+
+static inline void isp1760_deinit_kmem_cache(void)
+{
+}
+#endif
 
 #endif /* _ISP1760_HCD_H_ */
index 4af6ba6eda866955a297cbb3778777b58b90ce88..26899ed8114549f7f14293e88182969f8dcdae92 100644 (file)
@@ -62,7 +62,7 @@ struct isp1760_ep {
  * connected: Tracks gadget driver bus connection state
  */
 struct isp1760_udc {
-#if CONFIG_USB_ISP1761_UDC
+#ifdef CONFIG_USB_ISP1761_UDC
        struct isp1760_device *isp;
 
        int irq;
@@ -87,7 +87,7 @@ struct isp1760_udc {
 #endif
 };
 
-#if CONFIG_USB_ISP1761_UDC
+#ifdef CONFIG_USB_ISP1761_UDC
 int isp1760_udc_register(struct isp1760_device *isp, int irq,
                         unsigned long irqflags);
 void isp1760_udc_unregister(struct isp1760_device *isp);