Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 100832ab authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Felipe Balbi
Browse files

usb: isp1760: Make HCD support optional



Enable compilation of the isp1760 driver in pure host mode, pure device
mode, or dual-role mode.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 7ef077a8
Loading
Loading
Loading
Loading
+42 −5
Original line number Diff line number Diff line
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
+2 −1
Original line number Diff line number Diff line
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
+25 −0
Original line number Diff line number Diff line
@@ -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_ */
+2 −2
Original line number Diff line number Diff line
@@ -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);