#
# USB Input driver configuration
#
comment "USB Input Devices"
	depends on USB

config USB_HID
	tristate "USB Human Interface Device (full HID) support"
	default y
	depends on USB && INPUT
	select HID
	---help---
	  Say Y here if you want full HID support to connect USB keyboards,
	  mice, joysticks, graphic tablets, or any other HID based devices
	  to your computer via USB, as well as Uninterruptible Power Supply
	  (UPS) and monitor control devices.

	  You can't use this driver and the HIDBP (Boot Protocol) keyboard
	  and mouse drivers at the same time. More information is available:
	  <file:Documentation/input/input.txt>.

	  If unsure, say Y.

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

comment "Input core support is needed for USB HID input layer or HIDBP support"
	depends on USB_HID && INPUT=n

config USB_HIDINPUT_POWERBOOK
	bool "Enable support for iBook/PowerBook special keys"
	default n
	depends on USB_HID
	help
	  Say Y here if you want support for the special keys (Fn, Numlock) on
	  Apple iBooks and PowerBooks.

	  If unsure, say N.

config HID_FF
	bool "Force feedback support (EXPERIMENTAL)"
	depends on USB_HID && EXPERIMENTAL
	help
	  Say Y here is you want force feedback support for a few HID devices.
	  See below for a list of supported devices.

	  See <file:Documentation/input/ff.txt> for a description of the force
	  feedback API.

	  If unsure, say N.

config HID_PID
	bool "PID device support"
	depends on HID_FF
	help
	  Say Y here if you have a PID-compliant device and wish to enable force
	  feedback for it. Microsoft Sidewinder Force Feedback 2 is one of such
	  devices.

config LOGITECH_FF
	bool "Logitech WingMan *3D support"
	depends on HID_FF
	select INPUT_FF_MEMLESS if USB_HID
	help
	  Say Y here if you have one of these devices:
	  - Logitech WingMan Cordless RumblePad
	  - Logitech WingMan Force 3D
	  and if you want to enable force feedback for them.
	  Note: if you say N here, this device will still be supported, but without
	  force feedback.

config THRUSTMASTER_FF
	bool "ThrustMaster FireStorm Dual Power 2 support (EXPERIMENTAL)"
	depends on HID_FF && EXPERIMENTAL
	select INPUT_FF_MEMLESS if USB_HID
	help
	  Say Y here if you have a THRUSTMASTER FireStore Dual Power 2,
	  and want to enable force feedback support for it.
	  Note: if you say N here, this device will still be supported, but without
	  force feedback.

config ZEROPLUS_FF
	bool "Zeroplus based game controller support"
	depends on HID_FF
	select INPUT_FF_MEMLESS if USB_HID
	help
	  Say Y here if you have a Zeroplus based game controller and want to
	  enable force feedback for it.

config USB_HIDDEV
	bool "/dev/hiddev raw HID device support"
	depends on USB_HID
	help
	  Say Y here if you want to support HID devices (from the USB
	  specification standpoint) that aren't strictly user interface
	  devices, like monitor controls and Uninterruptable Power Supplies.

	  This module supports these devices separately using a separate
	  event interface on /dev/usb/hiddevX (char 180:96 to 180:111).

	  If unsure, say Y.

menu "USB HID Boot Protocol drivers"
	depends on USB!=n && USB_HID!=y

config USB_KBD
	tristate "USB HIDBP Keyboard (simple Boot) support"
	depends on USB && INPUT
	---help---
	  Say Y here only if you are absolutely sure that you don't want
	  to use the generic HID driver for your USB keyboard and prefer
	  to use the keyboard in its limited Boot Protocol mode instead.

	  This is almost certainly not what you want.  This is mostly
	  useful for embedded applications or simple keyboards.

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

	  If even remotely unsure, say N.

config USB_MOUSE
	tristate "USB HIDBP Mouse (simple Boot) support"
	depends on USB && INPUT
	---help---
	  Say Y here only if you are absolutely sure that you don't want
	  to use the generic HID driver for your USB mouse and prefer
	  to use the mouse in its limited Boot Protocol mode instead.

	  This is almost certainly not what you want.  This is mostly
	  useful for embedded applications or simple mice.

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

	  If even remotely unsure, say N.

endmenu

config USB_AIPTEK
	tristate "Aiptek 6000U/8000U tablet support"
	depends on USB && INPUT
	help
	  Say Y here if you want to use the USB version of the Aiptek 6000U
	  or Aiptek 8000U tablet.  Make sure to say Y to "Mouse support"
	  (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
	  (CONFIG_INPUT_EVDEV) as well.

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

config USB_WACOM
	tristate "Wacom Intuos/Graphire tablet support"
	depends on USB && INPUT
	help
	  Say Y here if you want to use the USB version of the Wacom Intuos
	  or Graphire tablet.  Make sure to say Y to "Mouse support"
	  (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
	  (CONFIG_INPUT_EVDEV) as well.

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

config USB_ACECAD
	tristate "Acecad Flair tablet support"
	depends on USB && INPUT
	help
	  Say Y here if you want to use the USB version of the Acecad Flair
	  tablet.  Make sure to say Y to "Mouse support"
	  (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
	  (CONFIG_INPUT_EVDEV) as well.

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

config USB_KBTAB
	tristate "KB Gear JamStudio tablet support"
	depends on USB && INPUT
	help
	  Say Y here if you want to use the USB version of the KB Gear
	  JamStudio tablet.  Make sure to say Y to "Mouse support"
	  (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
	  (CONFIG_INPUT_EVDEV) as well.

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

config USB_POWERMATE
	tristate "Griffin PowerMate and Contour Jog support"
	depends on USB && INPUT
	---help---
	  Say Y here if you want to use Griffin PowerMate or Contour Jog devices.
	  These are aluminum dials which can measure clockwise and anticlockwise
	  rotation.  The dial also acts as a pushbutton.  The base contains an LED
	  which can be instructed to pulse or to switch to a particular intensity.

	  You can download userspace tools from
	  <http://sowerbutts.com/powermate/>.

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

config USB_TOUCHSCREEN
	tristate "USB Touchscreen Driver"
	depends on USB && INPUT
	---help---
	  USB Touchscreen driver for:
	  - eGalax Touchkit USB (also includes eTurboTouch CT-410/510/700)
	  - PanJit TouchSet USB
	  - 3M MicroTouch USB (EX II series)
	  - ITM
	  - some other eTurboTouch
	  - Gunze AHL61
	  - DMC TSC-10/25

	  Have a look at <http://linux.chapter7.ch/touchkit/> for
	  a usage description and the required user-space stuff.

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

config USB_TOUCHSCREEN_EGALAX
	default y
	bool "eGalax, eTurboTouch CT-410/510/700 device support" if EMBEDDED
	depends on USB_TOUCHSCREEN

config USB_TOUCHSCREEN_PANJIT
	default y
	bool "PanJit device support" if EMBEDDED
	depends on USB_TOUCHSCREEN

config USB_TOUCHSCREEN_3M
	default y
	bool "3M/Microtouch EX II series device support" if EMBEDDED
	depends on USB_TOUCHSCREEN

config USB_TOUCHSCREEN_ITM
	default y
	bool "ITM device support" if EMBEDDED
	depends on USB_TOUCHSCREEN

config USB_TOUCHSCREEN_ETURBO
	default y
	bool "eTurboTouch (non-eGalax compatible) device support" if EMBEDDED
	depends on USB_TOUCHSCREEN

config USB_TOUCHSCREEN_GUNZE
	default y
	bool "Gunze AHL61 device support" if EMBEDDED
	depends on USB_TOUCHSCREEN

config USB_TOUCHSCREEN_DMC_TSC10
	default y
	bool "DMC TSC-10/25 device support" if EMBEDDED
	depends on USB_TOUCHSCREEN

config USB_YEALINK
	tristate "Yealink usb-p1k voip phone"
	depends on USB && INPUT && EXPERIMENTAL
	---help---
	  Say Y here if you want to enable keyboard and LCD functions of the
	  Yealink usb-p1k usb phones. The audio part is enabled by the generic
	  usb sound driver, so you might want to enable that as well.

	  For information about how to use these additional functions, see
	  <file:Documentation/input/yealink.txt>.

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

config USB_XPAD
	tristate "X-Box gamepad support"
	depends on USB && INPUT
	---help---
	  Say Y here if you want to use the X-Box pad with your computer.
	  Make sure to say Y to "Joystick support" (CONFIG_INPUT_JOYDEV)
	  and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well.

	  For information about how to connect the X-Box pad to USB, see
	  <file:Documentation/input/xpad.txt>.

	  To compile this driver as a module, choose M here: the
	  module will be called xpad.
	  
config USB_ATI_REMOTE
	tristate "ATI / X10 USB RF remote control"
	depends on USB && INPUT
	---help---
	  Say Y here if you want to use an ATI or X10 "Lola" USB remote control.
	  These are RF remotes with USB receivers. 
	  The ATI remote comes with many of ATI's All-In-Wonder video cards.
	  The X10 "Lola" remote is available at:
	     <http://www.x10.com/products/lola_sg1.htm>
	  This driver provides mouse pointer, left and right mouse buttons, 
	  and maps all the other remote buttons to keypress events.
	  
	  To compile this driver as a module, choose M here: the module will be
	  called ati_remote.

config USB_ATI_REMOTE2
	tristate "ATI / Philips USB RF remote control"
	depends on USB && INPUT
	---help---
	  Say Y here if you want to use an ATI or Philips USB RF remote control.
	  These are RF remotes with USB receivers.
	  ATI Remote Wonder II comes with some ATI's All-In-Wonder video cards
	  and is also available as a separate product.
	  This driver provides mouse pointer, left and right mouse buttons,
	  and maps all the other remote buttons to keypress events.

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

config USB_KEYSPAN_REMOTE
	tristate "Keyspan DMR USB remote control (EXPERIMENTAL)"
	depends on USB && INPUT && EXPERIMENTAL
	---help---
	  Say Y here if you want to use a Keyspan DMR USB remote control.
	  Currently only the UIA-11 type of receiver has been tested.  The tag
	  on the receiver that connects to the USB port should have a P/N that
	  will tell you what type of DMR you have.  The UIA-10 type is not
	  supported at this time.  This driver maps all buttons to keypress
	  events.

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

config USB_APPLETOUCH
	tristate "Apple USB Touchpad support"
	depends on USB && INPUT
	---help---
	  Say Y here if you want to use an Apple USB Touchpad.

	  These are the touchpads that can be found on post-February 2005
	  Apple Powerbooks (prior models have a Synaptics touchpad connected
	  to the ADB bus).

	  This driver provides a basic mouse driver but can be interfaced
	  with the synaptics X11 driver to provide acceleration and
	  scrolling in X11.

	  For further information, see
	  <file:Documentation/input/appletouch.txt>.

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