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: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
Laurent Pinchart 2015-01-21 00:56:03 +02:00 committed by Felipe Balbi
parent 7ef077a8ad
commit 100832abf0
4 changed files with 71 additions and 8 deletions

View File

@ -1,6 +1,6 @@
config USB_ISP1760 config USB_ISP1760
tristate "NXP ISP 1760/1761 support" tristate "NXP ISP 1760/1761 support"
depends on USB depends on USB || USB_GADGET
help help
Say Y or M here if your system as an ISP1760 USB host controller Say Y or M here if your system as an ISP1760 USB host controller
or an ISP1761 USB dual-role 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 To compile this driver as a module, choose M here: the
module will be called isp1760. module will be called isp1760.
config USB_ISP1760_HCD
bool
config USB_ISP1761_UDC config USB_ISP1761_UDC
boolean "NXP ISP1761 USB Device Controller" bool
depends on USB_ISP1760 && USB_GADGET
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 help
The NXP ISP1761 is a dual-role high-speed USB host and device Select this if you want to use the ISP1760 in host mode only. The
controller. 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
Select this if you want to use the ISP1760 in both host and
peripheral modes.
endchoice
endif

View 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 isp1760-$(CONFIG_USB_ISP1761_UDC) += isp1760-udc.o
obj-$(CONFIG_USB_ISP1760) += isp1760.o obj-$(CONFIG_USB_ISP1760) += isp1760.o

View File

@ -47,6 +47,7 @@ enum isp1760_queue_head_types {
}; };
struct isp1760_hcd { struct isp1760_hcd {
#ifdef CONFIG_USB_ISP1760_HCD
struct usb_hcd *hcd; struct usb_hcd *hcd;
u32 hcs_params; u32 hcs_params;
@ -64,8 +65,10 @@ struct isp1760_hcd {
unsigned i_thresh; unsigned i_thresh;
unsigned long reset_done; unsigned long reset_done;
unsigned long next_statechange; unsigned long next_statechange;
#endif
}; };
#ifdef CONFIG_USB_ISP1760_HCD
int isp1760_hcd_register(struct isp1760_hcd *priv, void __iomem *regs, int isp1760_hcd_register(struct isp1760_hcd *priv, void __iomem *regs,
struct resource *mem, int irq, unsigned long irqflags, struct resource *mem, int irq, unsigned long irqflags,
struct device *dev); struct device *dev);
@ -73,5 +76,27 @@ void isp1760_hcd_unregister(struct isp1760_hcd *priv);
int isp1760_init_kmem_once(void); int isp1760_init_kmem_once(void);
void isp1760_deinit_kmem_cache(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_ */ #endif /* _ISP1760_HCD_H_ */

View File

@ -62,7 +62,7 @@ struct isp1760_ep {
* connected: Tracks gadget driver bus connection state * connected: Tracks gadget driver bus connection state
*/ */
struct isp1760_udc { struct isp1760_udc {
#if CONFIG_USB_ISP1761_UDC #ifdef CONFIG_USB_ISP1761_UDC
struct isp1760_device *isp; struct isp1760_device *isp;
int irq; int irq;
@ -87,7 +87,7 @@ struct isp1760_udc {
#endif #endif
}; };
#if CONFIG_USB_ISP1761_UDC #ifdef CONFIG_USB_ISP1761_UDC
int isp1760_udc_register(struct isp1760_device *isp, int irq, int isp1760_udc_register(struct isp1760_device *isp, int irq,
unsigned long irqflags); unsigned long irqflags);
void isp1760_udc_unregister(struct isp1760_device *isp); void isp1760_udc_unregister(struct isp1760_device *isp);