#
# USB Miscellaneous driver configuration
#
comment "USB Miscellaneous drivers"
	depends on USB

config USB_EMI62
	tristate "EMI 6|2m USB Audio interface support"
	depends on USB
	---help---
	  This driver loads firmware to Emagic EMI 6|2m low latency USB
	  Audio and Midi interface.

	  After firmware load the device is handled with standard linux
	  USB Audio driver.

	  This code is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module will be called audio. If you want to compile it as a
	  module, say M here and read <file:Documentation/kbuild/modules.txt>.

config USB_EMI26
	tristate "EMI 2|6 USB Audio interface support"
	depends on USB
	---help---
	  This driver loads firmware to Emagic EMI 2|6 low latency USB
	  Audio interface.

	  After firmware load the device is handled with standard linux
	  USB Audio driver.

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

config USB_AUERSWALD
	tristate "USB Auerswald ISDN support (EXPERIMENTAL)"
	depends on USB && EXPERIMENTAL
	help
	  Say Y here if you want to connect an Auerswald USB ISDN Device
	  to your computer's USB port.

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

config USB_RIO500
	tristate "USB Diamond Rio500 support (EXPERIMENTAL)"
	depends on USB && EXPERIMENTAL
	help
	  Say Y here if you want to connect a USB Rio500 mp3 player to your
	  computer's USB port. Please read <file:Documentation/usb/rio.txt>
	  for more information.

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

config USB_LEGOTOWER
	tristate "USB Lego Infrared Tower support (EXPERIMENTAL)"
	depends on USB && EXPERIMENTAL
	help
	  Say Y here if you want to connect a USB Lego Infrared Tower to your
	  computer's USB port.

	  This code is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module will be called legousbtower. If you want to compile it as
	  a module, say M here and read
	  <file:Documentation/kbuild/modules.txt>.

config USB_LCD
	tristate "USB LCD driver support"
	depends on USB
	help
	  Say Y here if you want to connect an USBLCD to your computer's
	  USB port. The USBLCD is a small USB interface board for
	  alphanumeric LCD modules. See <http://www.usblcd.de/> for more
	  information.

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

config USB_LED
	tristate "USB LED driver support"
	depends on USB
	help
	  Say Y here if you want to connect an USBLED device to your 
	  computer's USB port.

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

config USB_CYPRESS_CY7C63
	tristate "Cypress CY7C63xxx USB driver support"
	depends on USB
	help
	  Say Y here if you want to connect a Cypress CY7C63xxx
	  micro controller to your computer's USB port. Currently this
	  driver supports the pre-programmed devices (incl. firmware)
	  by AK Modul-Bus Computer GmbH.

	  Please see: http://www.ak-modul-bus.de/stat/mikrocontroller.html

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

config USB_CYTHERM
	tristate "Cypress USB thermometer driver support"
	depends on USB
	help
	  Say Y here if you want to connect a Cypress USB thermometer
	  device to your computer's USB port. This device is also known
	  as the Cypress USB Starter kit or demo board. The Elektor
	  magazine published a modified version of this device in issue 
	  #291.

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

config USB_PHIDGETKIT
	tristate "USB PhidgetKit support"
	depends on USB
	help
	  Say Y here if you want to connect a PhidgetKit USB device from
	  Phidgets Inc.

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

config USB_PHIDGETSERVO
	tristate "USB PhidgetServo support"
	depends on USB
	help
	  Say Y here if you want to connect an 1 or 4 Motor PhidgetServo 
	  servo controller version 2.0 or 3.0.

	  Phidgets Inc. has a web page at <http://www.phidgets.com/>.

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

config USB_IDMOUSE
	tristate "Siemens ID USB Mouse Fingerprint sensor support"
	depends on USB
	help
	  Say Y here if you want to use the fingerprint sensor on
	  the Siemens ID Mouse. There is also a Siemens ID Mouse
	  _Professional_, which has not been tested with this driver,
	  but uses the same sensor and may therefore work.

	  This driver creates an entry "/dev/idmouseX" or "/dev/usb/idmouseX",
	  which can be used by, e.g.,"cat /dev/idmouse0 > fingerprint.pnm".

	  See also <http://www.fs.tum.de/~echtler/idmouse/>.

config USB_APPLEDISPLAY
	tristate "Apple Cinema Display support"
	depends on USB
	select BACKLIGHT_LCD_SUPPORT
	select BACKLIGHT_CLASS_DEVICE
	help
	  Say Y here if you want to control the backlight of Apple Cinema
	  Displays over USB. This driver provides a sysfs interface.

source "drivers/usb/misc/sisusbvga/Kconfig"

config USB_LD
	tristate "USB LD driver"
	depends on USB
	help
	  This driver is for generic USB devices that use interrupt transfers,
	  like LD Didactic's USB devices.

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

config USB_TEST
	tristate "USB testing driver (DEVELOPMENT)"
	depends on USB && USB_DEVICEFS && EXPERIMENTAL
	help
	  This driver is for testing host controller software.  It is used
	  with specialized device firmware for regression and stress testing,
	  to help prevent problems from cropping up with "real" drivers.

	  See <http://www.linux-usb.org/usbtest/> for more information,
	  including sample test device firmware and "how to use it".

