#
# HID driver configuration
#
menu "HID support"
     depends on INPUT

config HID
	tristate "HID bus support"
	depends on INPUT
	default y
	---help---
	  A human interface device (HID) is a type of computer device that
	  interacts directly with and takes input from humans. The term "HID"
	  most commonly used to refer to the USB-HID specification, but other
	  devices (such as, but not strictly limited to, Bluetooth) are
	  designed using HID specification (this involves certain keyboards,
	  mice, tablets, etc). This option adds the HID bus to the kernel,
	  together with generic HID layer code. The HID devices are added and
	  removed from the HID bus by the transport-layer drivers, such as
	  usbhid (USB_HID) and hidp (BT_HIDP).

	  For docs and specs, see http://www.usb.org/developers/hidpage/

	  If unsure, say Y.

if HID

config HID_BATTERY_STRENGTH
	bool "Battery level reporting for HID devices"
	depends on HID && POWER_SUPPLY && HID = POWER_SUPPLY
	default n
	---help---
	This option adds support of reporting battery strength (for HID devices
	that support this feature) through power_supply class so that userspace
	tools, such as upower, can display it.

config HIDRAW
	bool "/dev/hidraw raw HID device support"
	depends on 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/hidraw.

	There is also a /dev/hiddev configuration option in the USB HID
	configuration menu. In comparison to hiddev, this device does not process
	the hid events at all (no parsing, no lookups). This lets applications
	to work on raw hid events when they want to, and avoid using transport-specific
	userspace libhid/libusb libraries.

	If unsure, say Y.

config UHID
	tristate "User-space I/O driver support for HID subsystem"
	depends on HID
	default n
	---help---
	Say Y here if you want to provide HID I/O Drivers from user-space.
	This allows to write I/O drivers in user-space and feed the data from
	the device into the kernel. The kernel parses the HID reports, loads the
	corresponding HID Device Driver or provides input devices on top of your
	user-space device.

	This driver cannot be used to parse HID-reports in user-space and write
	special HID-drivers. You should use hidraw for that.
	Instead, this driver allows to write the transport-layer driver in
	user-space like USB-HID and Bluetooth-HID do in kernel-space.

	If unsure, say N.

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

config HID_GENERIC
	tristate "Generic HID driver"
	depends on HID
	default HID
	---help---
	Support for generic devices on the HID bus. This includes most
	keyboards and mice, joysticks, tablets and digitizers.

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

	If unsure, say Y.

menu "Special HID drivers"
	depends on HID

config HID_A4TECH
	tristate "A4 tech mice" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for A4 tech X5 and WOP-35 / Trust 450L mice.

config HID_ACRUX
	tristate "ACRUX game controller support"
	depends on HID
	---help---
	Say Y here if you want to enable support for ACRUX game controllers.

config HID_ACRUX_FF
	bool "ACRUX force feedback support"
	depends on HID_ACRUX
	select INPUT_FF_MEMLESS
	---help---
	Say Y here if you want to enable force feedback support for ACRUX
	game controllers.

config HID_APPLE
	tristate "Apple {i,Power,Mac}Books" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for some Apple devices which less or more break
	HID specification.

	Say Y here if you want support for keyboards of	Apple iBooks, PowerBooks,
	MacBooks, MacBook Pros and Apple Aluminum.

config HID_APPLEIR
	tristate "Apple infrared receiver"
	depends on (USB_HID)
	---help---
	Support for Apple infrared remote control. All the Apple computers from
	  2005 onwards include such a port, except the unibody Macbook (2009),
	  and Mac Pros. This receiver is also used in the Apple TV set-top box
	  prior to the 2010 model.

	Say Y here if you want support for Apple infrared remote control.

config HID_AUREAL
	tristate "Aureal"
	depends on HID
	---help---
	Support for Aureal Cy se W-01RN Remote Controller and other Aureal derived remotes.

config HID_BELKIN
	tristate "Belkin Flip KVM and Wireless keyboard" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Belkin Flip KVM and Wireless keyboard.

config HID_BETOP_FF
	tristate "Betop Production Inc. force feedback support"
	depends on USB_HID
	select INPUT_FF_MEMLESS
	---help---
	Say Y here if you want to enable force feedback support for devices by
	BETOP Production Ltd.
	Currently the following devices are known to be supported:
	 - BETOP 2185 PC & BFM MODE

config HID_CHERRY
	tristate "Cherry Cymotion keyboard" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Cherry Cymotion keyboard.

config HID_CHICONY
	tristate "Chicony Tactical pad" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Chicony Tactical pad.

config HID_PRODIKEYS
	tristate "Prodikeys PC-MIDI Keyboard support"
	depends on HID && SND
	select SND_RAWMIDI
	---help---
	Support for Prodikeys PC-MIDI Keyboard device support.
	Say Y here to enable support for this device.
	- Prodikeys PC-MIDI keyboard.
	  The Prodikeys PC-MIDI acts as a USB Audio device, with one MIDI
	  input and one MIDI output. These MIDI jacks appear as
	  a sound "card" in the ALSA sound system.
	  Note: if you say N here, this device will still function as a basic
	  multimedia keyboard, but will lack support for the musical keyboard
	  and some additional multimedia keys.

config HID_CP2112
	tristate "Silicon Labs CP2112 HID USB-to-SMBus Bridge support"
	depends on USB_HID && I2C && GPIOLIB
	---help---
	Support for Silicon Labs CP2112 HID USB to SMBus Master Bridge.
	This is a HID device driver which registers as an i2c adapter
	and gpiochip to expose these functions of the CP2112. The
	customizable USB descriptor fields are exposed as sysfs attributes.

config HID_CYPRESS
	tristate "Cypress mouse and barcode readers" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for cypress mouse and barcode readers.

config HID_DRAGONRISE
	tristate "DragonRise Inc. game controller"
	depends on HID
	---help---
	Say Y here if you have DragonRise Inc. game controllers.
	These might be branded as:
	- Tesun USB-703
	- Media-tech MT1504 "Rogue"
	- DVTech JS19 "Gear"
	- Defender Game Master

config DRAGONRISE_FF
	bool "DragonRise Inc. force feedback"
	depends on HID_DRAGONRISE
	select INPUT_FF_MEMLESS
	---help---
	Say Y here if you want to enable force feedback support for DragonRise Inc.
	game controllers.

config HID_EMS_FF
	tristate "EMS Production Inc. force feedback support"
	depends on HID
	select INPUT_FF_MEMLESS
	---help---
	Say Y here if you want to enable force feedback support for devices by
	EMS Production Ltd.
	Currently the following devices are known to be supported:
	 - Trio Linker Plus II

config HID_ELECOM
	tristate "ELECOM BM084 bluetooth mouse"
	depends on HID
	---help---
	Support for the ELECOM BM084 (bluetooth mouse).

config HID_ELO
	tristate "ELO USB 4000/4500 touchscreen"
	depends on USB_HID
	---help---
	Support for the ELO USB 4000/4500 touchscreens. Note that this is for
	different devices than those handled by CONFIG_TOUCHSCREEN_USB_ELO.

config HID_EZKEY
	tristate "Ezkey BTC 8193 keyboard" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Ezkey BTC 8193 keyboard.

config HID_HOLTEK
	tristate "Holtek HID devices"
	depends on USB_HID
	---help---
	Support for Holtek based devices:
	  - Holtek On Line Grip based game controller
	  - Trust GXT 18 Gaming Keyboard
	  - Sharkoon Drakonia / Perixx MX-2000 gaming mice
	  - Tracer Sniper TRM-503 / NOVA Gaming Slider X200 /
	    Zalman ZM-GM1
	  - SHARKOON DarkGlider Gaming mouse
	  - LEETGION Hellion Gaming Mouse

config HOLTEK_FF
	bool "Holtek On Line Grip force feedback support"
	depends on HID_HOLTEK
	select INPUT_FF_MEMLESS
	---help---
	  Say Y here if you have a Holtek On Line Grip based game controller
	  and want to have force feedback support for it.

config HID_GT683R
	tristate "MSI GT68xR LED support"
	depends on LEDS_CLASS && USB_HID
	---help---
	Say Y here if you want to enable support for the three MSI GT68xR LEDs

	This driver support following modes:
	  - Normal: LEDs are fully on when enabled
	  - Audio:  LEDs brightness depends on sound level
	  - Breathing: LEDs brightness varies at human breathing rate

	Currently the following devices are know to be supported:
	  - MSI GT683R

config HID_HUION
	tristate "Huion tablets"
	depends on USB_HID
	---help---
	Support for Huion 580 tablet.

config HID_KEYTOUCH
	tristate "Keytouch HID devices"
	depends on HID
	---help---
	Support for Keytouch HID devices not fully compliant with
	the specification. Currently supported:
		- Keytouch IEC 60945

config HID_KYE
	tristate "KYE/Genius devices"
	depends on HID
	---help---
	Support for KYE/Genius devices not fully compliant with HID standard:
	- Ergo Mouse
	- EasyPen i405X tablet
	- MousePen i608X tablet
	- EasyPen M610X tablet

config HID_UCLOGIC
	tristate "UC-Logic"
	depends on HID
	---help---
	Support for UC-Logic tablets.

config HID_WALTOP
	tristate "Waltop"
	depends on HID
	---help---
	Support for Waltop tablets.

config HID_GYRATION
	tristate "Gyration remote control"
	depends on HID
	---help---
	Support for Gyration remote control.

config HID_ICADE
	tristate "ION iCade arcade controller"
	depends on HID
	---help---
	Support for the ION iCade arcade controller to work as a joystick.

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

config HID_TWINHAN
	tristate "Twinhan IR remote control"
	depends on HID
	---help---
	Support for Twinhan IR remote control.

config HID_KENSINGTON
	tristate "Kensington Slimblade Trackball" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Kensington Slimblade Trackball.

config HID_LCPOWER
	tristate "LC-Power"
	depends on HID
	---help---
	Support for LC-Power RC1000MCE RF remote control.

config HID_LENOVO
	tristate "Lenovo / Thinkpad devices"
	depends on HID
	select NEW_LEDS
	select LEDS_CLASS
	---help---
	Support for Lenovo devices that are not fully compliant with HID standard.

	Say Y if you want support for the non-compliant features of the Lenovo
	Thinkpad standalone keyboards, e.g:
	- ThinkPad USB Keyboard with TrackPoint (supports extra LEDs and trackpoint
	  configuration)
	- ThinkPad Compact Bluetooth Keyboard with TrackPoint (supports Fn keys)
	- ThinkPad Compact USB Keyboard with TrackPoint (supports Fn keys)

config HID_LOGITECH
	tristate "Logitech devices" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Logitech devices that are not fully compliant with HID standard.

config HID_LOGITECH_DJ
	tristate "Logitech Unifying receivers full support"
	depends on HIDRAW
	depends on HID_LOGITECH
	select HID_LOGITECH_HIDPP
	---help---
	Say Y if you want support for Logitech Unifying receivers and devices.
	Unifying receivers are capable of pairing up to 6 Logitech compliant
	devices to the same receiver. Without this driver it will be handled by
	generic USB_HID driver and all incoming events will be multiplexed
	into a single mouse and a single keyboard device.

config HID_LOGITECH_HIDPP
	tristate "Logitech HID++ devices support"
	depends on HID_LOGITECH
	---help---
	Support for Logitech devices relyingon the HID++ Logitech specification

	Say Y if you want support for Logitech devices relying on the HID++
	specification. Such devices are the various Logitech Touchpads (T650,
	T651, TK820), some mice (Zone Touch mouse), or even keyboards (Solar
	Keayboard).

config LOGITECH_FF
	bool "Logitech force feedback support"
	depends on HID_LOGITECH
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you have one of these devices:
	  - Logitech WingMan Cordless RumblePad
	  - Logitech WingMan Cordless RumblePad 2
	  - Logitech WingMan Force 3D
	  - Logitech Formula Force EX
	  - Logitech WingMan Formula Force GP

	  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 LOGIRUMBLEPAD2_FF
	bool "Logitech force feedback support (variant 2)"
	depends on HID_LOGITECH
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you want to enable force feedback support for:
	  - Logitech RumblePad
	  - Logitech Rumblepad 2
	  - Logitech Formula Vibration Feedback Wheel

config LOGIG940_FF
	bool "Logitech Flight System G940 force feedback support"
	depends on HID_LOGITECH
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you want to enable force feedback support for Logitech
	  Flight System G940 devices.

config LOGIWHEELS_FF
	bool "Logitech wheels configuration and force feedback support"
	depends on HID_LOGITECH
	select INPUT_FF_MEMLESS
	default LOGITECH_FF
	help
	  Say Y here if you want to enable force feedback and range setting
	  support for following Logitech wheels:
	  - Logitech Driving Force
	  - Logitech Driving Force Pro
	  - Logitech Driving Force GT
	  - Logitech G25
	  - Logitech G27
	  - Logitech MOMO/MOMO 2
	  - Logitech Formula Force EX

config HID_MAGICMOUSE
	tristate "Apple Magic Mouse/Trackpad multi-touch support"
	depends on HID
	---help---
	Support for the Apple Magic Mouse/Trackpad multi-touch.

	Say Y here if you want support for the multi-touch features of the
	Apple Wireless "Magic" Mouse and the Apple Wireless "Magic" Trackpad.

config HID_MICROSOFT
	tristate "Microsoft non-fully HID-compliant devices" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Microsoft devices that are not fully compliant with HID standard.

config HID_MONTEREY
	tristate "Monterey Genius KB29E keyboard" if EXPERT
	depends on HID
	default !EXPERT
	---help---
	Support for Monterey Genius KB29E.

config HID_MULTITOUCH
	tristate "HID Multitouch panels"
	depends on HID
	---help---
	  Generic support for HID multitouch panels.

	  Say Y here if you have one of the following devices:
	  - 3M PCT touch screens
	  - ActionStar dual touch panels
	  - Atmel panels
	  - Cando dual touch panels
	  - Chunghwa panels
	  - CVTouch panels
	  - Cypress TrueTouch panels
	  - Elan Microelectronics touch panels
	  - Elo TouchSystems IntelliTouch Plus panels
	  - GeneralTouch 'Sensing Win7-TwoFinger' panels
	  - GoodTouch panels
	  - Hanvon dual touch panels
	  - Ilitek dual touch panels
	  - IrTouch Infrared USB panels
	  - LG Display panels (Dell ST2220Tc)
	  - Lumio CrystalTouch panels
	  - MosArt dual-touch panels
	  - Panasonic multitouch panels
	  - PenMount dual touch panels
	  - Perixx Peripad 701 touchpad
	  - PixArt optical touch screen
	  - Pixcir dual touch panels
	  - Quanta panels
	  - eGalax dual-touch panels, including the Joojoo and Wetab tablets
	  - SiS multitouch panels
	  - Stantum multitouch panels
	  - Touch International Panels
	  - Unitec Panels
	  - Wistron optical touch panels
	  - XAT optical touch panels
	  - Xiroku optical touch panels
	  - Zytronic touch panels

	  If unsure, say N.

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

config HID_NTRIG
	tristate "N-Trig touch screen"
	depends on USB_HID
	---help---
	Support for N-Trig touch screen.

config HID_ORTEK
	tristate "Ortek PKB-1700/WKB-2000/Skycable wireless keyboard and mouse trackpad"
	depends on HID
	---help---
	There are certain devices which have LogicalMaximum wrong in the keyboard
	usage page of their report descriptor. The most prevailing ones so far
	are manufactured by Ortek, thus the name of the driver. Currently
	supported devices by this driver are

	   - Ortek PKB-1700
	   - Ortek WKB-2000
	   - Skycable wireless presenter

config HID_PANTHERLORD
	tristate "Pantherlord/GreenAsia game controller"
	depends on HID
	---help---
	  Say Y here if you have a PantherLord/GreenAsia based game controller
	  or adapter.

config PANTHERLORD_FF
	bool "Pantherlord force feedback support"
	depends on HID_PANTHERLORD
	select INPUT_FF_MEMLESS
	---help---
	  Say Y here if you have a PantherLord/GreenAsia based game controller
	  or adapter and want to enable force feedback support for it.

config HID_PENMOUNT
	tristate "Penmount touch device"
	depends on USB_HID
	---help---
	  This selects a driver for the PenMount 6000 touch controller.

	  The driver works around a problem in the report descript allowing
	  the userspace to touch events instead of mouse events.

	  Say Y here if you have a Penmount based touch controller.

config HID_PETALYNX
	tristate "Petalynx Maxter remote control"
	depends on HID
	---help---
	Support for Petalynx Maxter remote control.

config HID_PICOLCD
	tristate "PicoLCD (graphic version)"
	depends on HID
	---help---
	  This provides support for Minibox PicoLCD devices, currently
	  only the graphical ones are supported.

	  This includes support for the following device features:
	  - Keypad
	  - Switching between Firmware and Flash mode
	  - EEProm / Flash access     (via debugfs)
	  Features selectively enabled:
	  - Framebuffer for monochrome 256x64 display
	  - Backlight control
	  - Contrast control
	  - General purpose outputs
	  Features that are not (yet) supported:
	  - IR

config HID_PICOLCD_FB
	bool "Framebuffer support" if EXPERT
	default !EXPERT
	depends on HID_PICOLCD
	depends on HID_PICOLCD=FB || FB=y
	select FB_DEFERRED_IO
	select FB_SYS_FILLRECT
	select FB_SYS_COPYAREA
	select FB_SYS_IMAGEBLIT
	select FB_SYS_FOPS
	---help---
	  Provide access to PicoLCD's 256x64 monochrome display via a
	  framebuffer device.

config HID_PICOLCD_BACKLIGHT
	bool "Backlight control" if EXPERT
	default !EXPERT
	depends on HID_PICOLCD
	depends on HID_PICOLCD=BACKLIGHT_CLASS_DEVICE || BACKLIGHT_CLASS_DEVICE=y
	---help---
	  Provide access to PicoLCD's backlight control via backlight
	  class.

config HID_PICOLCD_LCD
	bool "Contrast control" if EXPERT
	default !EXPERT
	depends on HID_PICOLCD
	depends on HID_PICOLCD=LCD_CLASS_DEVICE || LCD_CLASS_DEVICE=y
	---help---
	  Provide access to PicoLCD's LCD contrast via lcd class.

config HID_PICOLCD_LEDS
	bool "GPO via leds class" if EXPERT
	default !EXPERT
	depends on HID_PICOLCD
	depends on HID_PICOLCD=LEDS_CLASS || LEDS_CLASS=y
	---help---
	  Provide access to PicoLCD's GPO pins via leds class.

config HID_PICOLCD_CIR
	bool "CIR via RC class" if EXPERT
	default !EXPERT
	depends on HID_PICOLCD
	depends on HID_PICOLCD=RC_CORE || RC_CORE=y
	---help---
	  Provide access to PicoLCD's CIR interface via remote control (LIRC).

config HID_PLANTRONICS
	tristate "Plantronics USB HID Driver"
	default !EXPERT
	depends on HID
	---help---
	Provides HID support for Plantronics telephony devices.

config HID_PRIMAX
	tristate "Primax non-fully HID-compliant devices"
	depends on HID
	---help---
	Support for Primax devices that are not fully compliant with the
	HID standard.

config HID_ROCCAT
	tristate "Roccat device support"
	depends on USB_HID
	---help---
	Support for Roccat devices.
	Say Y here if you have a Roccat mouse or keyboard and want
	support for its special functionalities.

config HID_SAITEK
	tristate "Saitek (Mad Catz) non-fully HID-compliant devices"
	depends on HID
	---help---
	Support for Saitek devices that are not fully compliant with the
	HID standard.

	Supported devices:
	- PS1000 Dual Analog Pad
	- R.A.T.9 Gaming Mouse
	- R.A.T.7 Gaming Mouse
	- M.M.O.7 Gaming Mouse

config HID_SAMSUNG
	tristate "Samsung InfraRed remote control or keyboards"
	depends on HID
	---help---
	Support for Samsung InfraRed remote control or keyboards.

config HID_SONY
	tristate "Sony PS2/3/4 accessories"
	depends on USB_HID
	depends on NEW_LEDS
	depends on LEDS_CLASS
	select POWER_SUPPLY
	---help---
	Support for

	  * Sony PS3 6-axis controllers
	  * Sony PS4 DualShock 4 controllers
	  * Buzz controllers
	  * Sony PS3 Blue-ray Disk Remote Control (Bluetooth)
	  * Logitech Harmony adapter for Sony Playstation 3 (Bluetooth)

config SONY_FF
	bool "Sony PS2/3/4 accessories force feedback support" 
	depends on HID_SONY
	select INPUT_FF_MEMLESS
	---help---
	Say Y here if you have a Sony PS2/3/4 accessory and want to enable
	force feedback support for it.

config HID_SPEEDLINK
	tristate "Speedlink VAD Cezanne mouse support"
	depends on HID
	---help---
	Support for Speedlink Vicious and Divine Cezanne mouse.

config HID_STEELSERIES
	tristate "Steelseries SRW-S1 steering wheel support"
	depends on HID
	---help---
	Support for Steelseries SRW-S1 steering wheel

config HID_SUNPLUS
	tristate "Sunplus wireless desktop"
	depends on HID
	---help---
	Support for Sunplus wireless desktop.

config HID_RMI
	tristate "Synaptics RMI4 device support"
	depends on HID
	---help---
	Support for Synaptics RMI4 touchpads.
	Say Y here if you have a Synaptics RMI4 touchpads over i2c-hid or usbhid
	and want support for its special functionalities.

config HID_GREENASIA
	tristate "GreenAsia (Product ID 0x12) game controller support"
	depends on HID
	---help---
	  Say Y here if you have a GreenAsia (Product ID 0x12) based game
	  controller or adapter.

config GREENASIA_FF
	bool "GreenAsia (Product ID 0x12) force feedback support"
	depends on HID_GREENASIA
	select INPUT_FF_MEMLESS
	---help---
	Say Y here if you have a GreenAsia (Product ID 0x12) based game controller
	(like MANTA Warrior MM816 and SpeedLink Strike2 SL-6635) or adapter
	and want to enable force feedback support for it.

config HID_HYPERV_MOUSE
	tristate "Microsoft Hyper-V mouse driver"
	depends on HYPERV
	---help---
	Select this option to enable the Hyper-V mouse driver.

config HID_SMARTJOYPLUS
	tristate "SmartJoy PLUS PS2/USB adapter support"
	depends on HID
	---help---
	Support for SmartJoy PLUS PS2/USB adapter, Super Dual Box,
	Super Joy Box 3 Pro, Super Dual Box Pro, and Super Joy Box 5 Pro.

	Note that DDR (Dance Dance Revolution) mode is not supported, nor
	is pressure sensitive buttons on the pro models.

config SMARTJOYPLUS_FF
	bool "SmartJoy PLUS PS2/USB adapter force feedback support"
	depends on HID_SMARTJOYPLUS
	select INPUT_FF_MEMLESS
	---help---
	Say Y here if you have a SmartJoy PLUS PS2/USB adapter and want to
	enable force feedback support for it.

config HID_TIVO
	tristate "TiVo Slide Bluetooth remote control support"
	depends on HID
	---help---
	Say Y if you have a TiVo Slide Bluetooth remote control.

config HID_TOPSEED
	tristate "TopSeed Cyberlink, BTC Emprex, Conceptronic remote control support"
	depends on HID
	---help---
	Say Y if you have a TopSeed Cyberlink or BTC Emprex or Conceptronic
	CLLRCMCE remote control.

config HID_THINGM
	tristate "ThingM blink(1) USB RGB LED"
	depends on HID
	depends on LEDS_CLASS
	---help---
	Support for the ThingM blink(1) USB RGB LED. This driver registers a
	Linux LED class instance, plus additional sysfs attributes to control
	RGB colors, fade time and playing. The device is exposed through hidraw
	to access other functions.

config HID_THRUSTMASTER
	tristate "ThrustMaster devices support"
	depends on HID
	---help---
	  Say Y here if you have a THRUSTMASTER FireStore Dual Power 2 or
	  a THRUSTMASTER Ferrari GT Rumble Wheel.

config THRUSTMASTER_FF
	bool "ThrustMaster devices force feedback support"
	depends on HID_THRUSTMASTER
	select INPUT_FF_MEMLESS
	---help---
	  Say Y here if you have a THRUSTMASTER FireStore Dual Power 2 or 3,
	  a THRUSTMASTER Dual Trigger 3-in-1 or a THRUSTMASTER Ferrari GT
	  Rumble Force or Force Feedback Wheel.

config HID_WACOM
	tristate "Wacom Intuos/Graphire tablet support (USB)"
	depends on HID
	select POWER_SUPPLY
	select NEW_LEDS
	select LEDS_CLASS
	help
	  Say Y here if you want to use the USB or BT version of the Wacom Intuos
	  or Graphire tablet.

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

config HID_WIIMOTE
	tristate "Nintendo Wii / Wii U peripherals"
	depends on HID
	depends on LEDS_CLASS
	select POWER_SUPPLY
	select INPUT_FF_MEMLESS
	---help---
	Support for Nintendo Wii and Wii U Bluetooth peripherals. Supported
	devices are the Wii Remote and its extension devices, but also devices
	based on the Wii Remote like the Wii U Pro Controller or the
	Wii Balance Board.

	Support for all official Nintendo extensions is available, however, 3rd
	party extensions might not be supported. Please report these devices to:
	  http://github.com/dvdhrm/xwiimote/issues

	Other Nintendo Wii U peripherals that are IEEE 802.11 based (including
	the Wii U Gamepad) might be supported in the future. But currently
	support is limited to Bluetooth based devices.

	If unsure, say N.

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

config HID_XINMO
	tristate "Xin-Mo non-fully compliant devices"
	depends on HID
	---help---
	Support for Xin-Mo devices that are not fully compliant with the HID
	standard. Currently only supports the Xin-Mo Dual Arcade. Say Y here
	if you have a Xin-Mo Dual Arcade controller.

config HID_ZEROPLUS
	tristate "Zeroplus based game controller support"
	depends on HID
	---help---
	  Say Y here if you have a Zeroplus based game controller.

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

config HID_ZYDACRON
	tristate "Zydacron remote control support"
	depends on HID
	---help---
	Support for Zydacron remote control.

config HID_SENSOR_HUB
	tristate "HID Sensors framework support"
	depends on HID && HAS_IOMEM
	select MFD_CORE
	default n
	---help---
	  Support for HID Sensor framework. This creates a MFD instance
	  for a sensor hub and identifies all the sensors connected to it.
	  Each sensor is registered as a MFD cell, so that sensor specific
	  processing can be done in a separate driver. Each sensor
	  drivers can use the service provided by this driver to register
	  for events and handle data streams. Each sensor driver can format
	  data and present to user mode using input or IIO interface.

endmenu

endif # HID

source "drivers/hid/usbhid/Kconfig"

source "drivers/hid/i2c-hid/Kconfig"

endmenu
