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

config USB_HID
	tristate "USB Human Interface Device (full HID) support"
	depends on USB
	---help---
	  Say Y here if you want full HID support to connect keyboards,
	  mice, joysticks, graphic tablets, or any other HID based devices
	  to your computer via USB. You also need to select HID Input layer
	  support (below) if you want to use keyboards, mice, joysticks and
	  the like ... 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
	bool "HID input layer support"
	default y
	depends on INPUT && USB_HID
	help
	  Say Y here if you want to use a USB keyboard, mouse or joystick,
	  or any other HID input device.

	  If unsure, say Y.

config USB_HIDINPUT_POWERBOOK
	bool "Enable support for iBook/PowerBook special keys"
	default n
	depends on USB_HIDINPUT
	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_HIDINPUT && 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.
