# SPDX-License-Identifier: GPL-2.0

config USB_ISP1760
	tristate "NXP ISP 1760/1761/1763 support"
	depends on USB || USB_GADGET
	select REGMAP_MMIO
	help
	  Say Y or M here if your system as an ISP1760/1763 USB host controller
	  or an ISP1761 USB dual-role controller.

	  This driver does not support isochronous transfers or OTG.
	  This USB controller is usually attached to a non-DMA-Master
	  capable bus. NXP's eval kit brings this chip on PCI card
	  where the chip itself is behind a PLB to simulate such
	  a bus.

	  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
	bool

if USB_ISP1760

choice
	prompt "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
	  Select this if you want to use the ISP1760 in both host and
	  peripheral modes.

endchoice

endif
