#
# USB device configuration
#

menu "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
	# 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/input/Kconfig"

source "drivers/usb/image/Kconfig"

source "drivers/usb/media/Kconfig"

source "drivers/usb/net/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"

endmenu

