#
# USB device configuration
#

menuconfig USB_SUPPORT
	bool "USB support"
	depends on HAS_IOMEM
	default y

if USB_SUPPORT

# Host-side USB depends on having a host controller
# NOTE:  dummy_hcd is always an option, but it's ignored here ...
# NOTE:  SL-811 option should be board-specific ...
config USB_ARCH_HAS_HCD
	boolean
	default y if USB_ARCH_HAS_OHCI
	default y if USB_ARCH_HAS_EHCI
	default y if ARM				# SL-811
	default PCI

# many non-PCI SOC chips embed OHCI
config USB_ARCH_HAS_OHCI
	boolean
	# ARM:
	default y if SA1111
	default y if ARCH_OMAP
	default y if ARCH_LH7A404
	default y if ARCH_S3C2410
	default y if PXA27x
	default y if ARCH_EP93XX
	default y if ARCH_AT91
	default y if ARCH_PNX4008
	# PPC:
	default y if STB03xxx
	default y if PPC_MPC52xx
	# MIPS:
	default y if SOC_AU1X00
	# more:
	default PCI

# some non-PCI hcds implement EHCI
config USB_ARCH_HAS_EHCI
	boolean
	default y if PPC_83xx
	default y if SOC_AU1200
	default PCI

# ARM SA1111 chips have a non-PCI based "OHCI-compatible" USB host interface.
config USB
	tristate "Support for Host-side USB"
	depends on USB_ARCH_HAS_HCD
	---help---
	  Universal Serial Bus (USB) is a specification for a serial bus
	  subsystem which offers higher speeds and more features than the
	  traditional PC serial port.  The bus supplies power to peripherals
	  and allows for hot swapping.  Up to 127 USB peripherals can be
	  connected to a single USB host in a tree structure.
	  
	  The USB host is the root of the tree, the peripherals are the
	  leaves and the inner nodes are special USB devices called hubs.
	  Most PCs now have USB host ports, used to connect peripherals
	  such as scanners, keyboards, mice, modems, cameras, disks,
	  flash memory, network links, and printers to the PC.

	  Say Y here if your computer has a host-side USB port and you want
	  to use USB devices.  You then need to say Y to at least one of the
	  Host Controller Driver (HCD) options below.  Choose a USB 1.1
	  controller, such as "UHCI HCD support" or "OHCI HCD support",
	  and "EHCI HCD (USB 2.0) support" except for older systems that
	  do not have USB 2.0 support.  It doesn't normally hurt to select
	  them all if you are not certain.

	  If your system has a device-side USB port, used in the peripheral
	  side of the USB protocol, see the "USB Gadget" framework instead.

	  After choosing your HCD, then select drivers for the USB peripherals
	  you'll be using.  You may want to check out the information provided
	  in <file:Documentation/usb/> and especially the links given in
	  <file:Documentation/usb/usb-help.txt>.

	  To compile this driver as a module, choose M here: the
	  module will be called usbcore.

source "drivers/usb/core/Kconfig"

source "drivers/usb/host/Kconfig"

source "drivers/usb/class/Kconfig"

source "drivers/usb/storage/Kconfig"

source "drivers/usb/image/Kconfig"

source "drivers/usb/mon/Kconfig"

comment "USB port drivers"
	depends on USB

config USB_USS720
	tristate "USS720 parport driver"
	depends on USB && PARPORT
	select PARPORT_NOT_PC
	---help---
	  This driver is for USB parallel port adapters that use the Lucent
	  Technologies USS-720 chip. These cables are plugged into your USB
	  port and provide USB compatibility to peripherals designed with
	  parallel port interfaces.

	  The chip has two modes: automatic mode and manual mode. In automatic
	  mode, it looks to the computer like a standard USB printer. Only
	  printers may be connected to the USS-720 in this mode. The generic
	  USB printer driver ("USB Printer support", above) may be used in
	  that mode, and you can say N here if you want to use the chip only
	  in this mode.

	  Manual mode is not limited to printers, any parallel port
	  device should work. This driver utilizes manual mode.
	  Note however that some operations are three orders of magnitude
	  slower than on a PCI/ISA Parallel Port, so timing critical
	  applications might not work.

	  Say Y here if you own an USS-720 USB->Parport cable and intend to
	  connect anything other than a printer to it.

	  To compile this driver as a module, choose M here: the
	  module will be called uss720.

source "drivers/usb/serial/Kconfig"

source "drivers/usb/misc/Kconfig"

source "drivers/usb/atm/Kconfig"

source "drivers/usb/gadget/Kconfig"

endif # USB_SUPPORT
