# SPDX-License-Identifier: GPL-2.0-only
#
# HID driver configuration
#
menuconfig HID_SUPPORT
	bool "HID bus support"
	default y
	depends on INPUT
	help
	  This option adds core support for human interface device (HID).
	  You will also need drivers from the following menu to make use of it.

if HID_SUPPORT

config HID
	tristate "HID bus core support"
	default y
	depends on INPUT
	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 https://www.usb.org/developers/hidpage/

	  If unsure, say Y.

if HID

config HID_BATTERY_STRENGTH
	bool "Battery level reporting for HID devices"
	select 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"
	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 Uninterruptible 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"
	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"
	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"

config HID_A4TECH
	tristate "A4TECH mice"
	default !EXPERT
	help
	Support for some A4TECH mice with two scroll wheels.

config HID_ACCUTOUCH
	tristate "Accutouch touch device"
	depends on USB_HID
	help
	  This selects a driver for the Accutouch 2216 touch controller.

	  The driver works around a problem in the reported device capabilities
	  which causes userspace to detect the device as a mouse rather than
          a touchscreen.

	  Say Y here if you have a Accutouch 2216 touch controller.

config HID_ACRUX
	tristate "ACRUX game controller support"
	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"
	depends on LEDS_CLASS
	depends on NEW_LEDS
	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_ASUS
	tristate "Asus"
	depends on USB_HID
	depends on LEDS_CLASS
	depends on ASUS_WMI || ASUS_WMI=n
	select POWER_SUPPLY
	help
	Support for Asus notebook built-in keyboard and touchpad via i2c, and
	the Asus Republic of Gamers laptop keyboard special keys.

	Supported devices:
	- EeeBook X205TA
	- VivoBook E200HA
	- GL553V series
	- GL753V series

config HID_AUREAL
	tristate "Aureal"
	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"
	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_BIGBEN_FF
	tristate "BigBen Interactive Kids' gamepad support"
	depends on USB_HID
	depends on NEW_LEDS
	depends on LEDS_CLASS
	select INPUT_FF_MEMLESS
	help
	  Support for the "Kid-friendly Wired Controller" PS3OFMINIPAD
	  gamepad made by BigBen Interactive, originally sold as a PS3
	  accessory. This driver fixes input mapping and adds support for
	  force feedback effects and LEDs on the device.

config HID_CHERRY
	tristate "Cherry Cymotion keyboard"
	default !EXPERT
	help
	Support for Cherry Cymotion keyboard.

config HID_CHICONY
	tristate "Chicony devices"
	depends on USB_HID
	default !EXPERT
	help
	Support for Chicony Tactical pad and special keys on Chicony keyboards.

config HID_CORSAIR
	tristate "Corsair devices"
	depends on USB_HID && LEDS_CLASS
	help
	Support for Corsair devices that are not fully compliant with the
	HID standard.

	Supported devices:
	- Vengeance K90
	- Scimitar PRO RGB

config HID_COUGAR
	tristate "Cougar devices"
	help
	Support for Cougar devices that are not fully compliant with the
	HID standard.

	Supported devices:
	- Cougar 500k Gaming Keyboard

config HID_MACALLY
	tristate "Macally devices"
	help
	Support for Macally devices that are not fully compliant with the
	HID standard.

	supported devices:
	- Macally ikey keyboard

config HID_PRODIKEYS
	tristate "Prodikeys PC-MIDI Keyboard support"
	depends on USB_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_CMEDIA
	tristate "CMedia audio chips"
	help
	Support for CMedia CM6533 HID audio jack controls
        and HS100B mute buttons.

config HID_CP2112
	tristate "Silicon Labs CP2112 HID USB-to-SMBus Bridge support"
	depends on USB_HID && HIDRAW && I2C && GPIOLIB
	select GPIOLIB_IRQCHIP
	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_CREATIVE_SB0540
	tristate "Creative SB0540 infrared receiver"
	depends on USB_HID
	help
	Support for Creative infrared SB0540-compatible remote controls, such
	as the RM-1500 and RM-1800 remotes.

	Say Y here if you want support for Creative SB0540 infrared receiver.

config HID_CYPRESS
	tristate "Cypress mouse and barcode readers"
	default !EXPERT
	help
	Support for cypress mouse and barcode readers.

config HID_DRAGONRISE
	tristate "DragonRise Inc. game controller"
	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"
	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_ELAN
	tristate "ELAN USB Touchpad Support"
	depends on LEDS_CLASS && USB_HID
	help
	Say Y to enable support for the USB ELAN touchpad
	Currently the following devices are known to be supported:
	 - HP Pavilion X2 10-p0XX.

config HID_ELECOM
	tristate "ELECOM HID devices"
	help
	Support for ELECOM devices:
	  - BM084 Bluetooth Mouse
	  - EX-G Trackballs (M-XT3DRBK, M-XT3URBK)
	  - DEFT Trackballs (M-DT1DRBK, M-DT1URBK, M-DT2DRBK, M-DT2URBK)
	  - HUGE Trackballs (M-HT1DRBK, M-HT1URBK)

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_EVISION
	tristate "EVision Keyboards Support"
	depends on HID
	help
	Support for some EVision keyboards. Note that this is needed only when
	applying customization using userspace programs.

config HID_EZKEY
	tristate "Ezkey BTC 8193 keyboard"
	default !EXPERT
	help
	Support for Ezkey BTC 8193 keyboard.

config HID_FT260
	tristate "FTDI FT260 USB HID to I2C host support"
	depends on USB_HID && HIDRAW && I2C
	help
	  Provides I2C host adapter functionality over USB-HID through FT260
	  device. The customizable USB descriptor fields are exposed as sysfs
	  attributes.

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

config HID_GEMBIRD
	tristate "Gembird Joypad"
	help
	Support for Gembird JPD-DualForce 2.

config HID_GFRM
	tristate "Google Fiber TV Box remote control support"
	help
	Support for Google Fiber TV Box remote controls

config HID_GLORIOUS
	tristate "Glorious PC Gaming Race mice"
	help
	  Support for Glorious PC Gaming Race mice such as
	  the Glorious Model O, O- and D.

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_VIVALDI_COMMON
	tristate
	help
	  ChromeOS Vivaldi HID parsing support library. This is a hidden
	  option so that drivers can use common code to parse the HID
	  descriptors for vivaldi function row keymap.

config HID_GOOGLE_HAMMER
	tristate "Google Hammer Keyboard"
	select HID_VIVALDI_COMMON
	select INPUT_VIVALDIFMAP
	depends on USB_HID && LEDS_CLASS && CROS_EC
	help
	Say Y here if you have a Google Hammer device.

config HID_GOOGLE_STADIA_FF
	tristate "Google Stadia force feedback"
	select INPUT_FF_MEMLESS
	help
	Say Y here if you want to enable force feedback support for the Google
	Stadia controller.

config HID_VIVALDI
	tristate "Vivaldi Keyboard"
	select HID_VIVALDI_COMMON
	select INPUT_VIVALDIFMAP
	help
	  Say Y here if you want to enable support for Vivaldi keyboards.

	  Vivaldi keyboards use a vendor-specific (Google) HID usage to report
	  how the keys in the top row are physically ordered.

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_KEYTOUCH
	tristate "Keytouch HID devices"
	help
	Support for Keytouch HID devices not fully compliant with
	the specification. Currently supported:
		- Keytouch IEC 60945

config HID_KYE
	tristate "KYE/Genius devices"
	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 USB_HID
	help
	Support for UC-Logic and Huion tablets.

config HID_WALTOP
	tristate "Waltop"
	help
	Support for Waltop tablets.

config HID_VIEWSONIC
	tristate "ViewSonic/Signotec"
	help
	  Support for ViewSonic/Signotec PD1011 signature pad.

config HID_VRC2
	tristate "VRC-2 Car Controller"
	depends on HID
	help
        Support for VRC-2 which is a 2-axis controller often used in
        car simulators.

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

config HID_XIAOMI
	tristate "Xiaomi"
	help
	  Adds support for side buttons of Xiaomi Mi Dual Mode Wireless
	  Mouse Silent Edition.

config HID_GYRATION
	tristate "Gyration remote control"
	help
	Support for Gyration remote control.

config HID_ICADE
	tristate "ION iCade arcade controller"
	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_ITE
	tristate "ITE devices"
	default !EXPERT
	help
	Support for ITE devices not fully compliant with HID standard.

config HID_JABRA
	tristate "Jabra USB HID Driver"
	help
	Support for Jabra USB HID devices.

	Prevents mapping of vendor defined HID usages to input events. Without
	this driver HID	reports from Jabra devices may incorrectly be seen as
	mouse button events.
	Say M here if you may ever plug in a Jabra USB device.

config HID_TWINHAN
	tristate "Twinhan IR remote control"
	help
	Support for Twinhan IR remote control.

config HID_KENSINGTON
	tristate "Kensington Slimblade Trackball"
	default !EXPERT
	help
	Support for Kensington Slimblade Trackball.

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

config HID_LED
	tristate "Simple RGB LED support"
	depends on LEDS_CLASS
	help
	Support for simple RGB LED devices. Currently supported are:
	- Riso Kagaku Webmail Notifier
	- Dream Cheeky Webmail Notifier and Friends Alert
	- ThingM blink(1)
	- Delcom Visual Signal Indicator Generation 2
	- Greynut Luxafor

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

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

	Say Y if you want support for horizontal scrolling of the IBM/Lenovo
	Scrollpoint mice or 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_LETSKETCH
	tristate "Letsketch WP9620N tablets"
	depends on USB_HID
	help
	  Driver for the LetSketch / VSON WP9620N drawing tablet. This
	  drawing tablet is also sold under other brand names such as Case U,
	  presumably this driver will work for all of them. But it has only been
	  tested with a LetSketch WP9620N model.

	  These tablets also work without a special HID driver, but then only
	  part of the active area works and both the pad and stylus buttons are
	  hardwired to special key-combos. E.g. the 2 stylus buttons send right
	  mouse clicks / resp. "e" key presses.

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

config HID_LOGITECH_DJ
	tristate "Logitech receivers full support"
	depends on USB_HID
	depends on HIDRAW
	depends on HID_LOGITECH
	select HID_LOGITECH_HIDPP
	help
	Say Y if you want support for Logitech receivers and devices.
	Logitech receivers are capable of pairing multiple 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
	select POWER_SUPPLY
	help
	Support for Logitech devices relying on 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
	Keyboard).

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

	  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 G25 (*)
	  - Logitech G27 (*)
	  - Logitech G29 (*)
	  - Logitech Driving Force
	  - Logitech Driving Force Pro (*)
	  - Logitech Driving Force GT (*)
	  - Logitech Driving Force EX/RX
	  - Logitech Driving Force Wireless
	  - Logitech Speed Force Wireless
	  - Logitech MOMO Force
	  - Logitech MOMO Racing Force
	  - Logitech Formula Force GP
	  - Logitech Formula Force EX/RX
	  - Logitech Wingman Formula Force GP

config HID_MAGICMOUSE
	tristate "Apple Magic Mouse/Trackpad multi-touch support"
	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_MALTRON
	tristate "Maltron L90 keyboard"
	help
	Adds support for the volume up, volume down, mute, and play/pause buttons
	of the Maltron L90 keyboard.

config HID_MAYFLASH
	tristate "Mayflash game controller adapter force feedback"
	select INPUT_FF_MEMLESS
	help
	Say Y here if you have HJZ Mayflash PS3 game controller adapters
	and want to enable force feedback support.

config HID_MEGAWORLD_FF
	tristate "Mega World based game controller force feedback support"
	depends on USB_HID
	select INPUT_FF_MEMLESS
	help
	Say Y here if you have a Mega World based game controller and want
	to have force feedback support for it.

config HID_REDRAGON
	tristate "Redragon keyboards"
	default !EXPERT
	help
    Support for Redragon keyboards that need fix-ups to work properly.

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

config HID_MONTEREY
	tristate "Monterey Genius KB29E keyboard"
	default !EXPERT
	help
	Support for Monterey Genius KB29E.

config HID_MULTITOUCH
	tristate "HID Multitouch panels"
	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
	  - CJTouch 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_NINTENDO
	tristate "Nintendo Joy-Con, NSO, and Pro Controller support"
	depends on NEW_LEDS
	depends on LEDS_CLASS
	select POWER_SUPPLY
	help
	Adds support for the Nintendo Switch Joy-Cons, NSO, Pro Controller.
	All controllers support bluetooth, and the Pro Controller also supports
	its USB mode. This also includes support for the Nintendo Switch Online
	Controllers which include the Genesis, SNES, and N64 controllers.

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

config NINTENDO_FF
	bool "Nintendo Switch controller force feedback support"
	depends on HID_NINTENDO
	select INPUT_FF_MEMLESS
	help
	Say Y here if you have a Nintendo Switch controller and want to enable
	force feedback support for it. This works for both joy-cons, the pro
	controller, and the NSO N64 controller. For the pro controller, both
	rumble motors can be controlled individually.

config HID_NTI
	tristate "NTI keyboard adapters"
	help
	Support for the "extra" Sun keyboard keys on keyboards attached
	through Network Technologies USB-SUN keyboard adapters.

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

config HID_NVIDIA_SHIELD
	tristate "NVIDIA SHIELD devices"
	depends on USB_HID
	depends on BT_HIDP
	depends on LEDS_CLASS
	select POWER_SUPPLY
	help
	  Support for NVIDIA SHIELD accessories.

	  Supported devices:
	  - Thunderstrike (NVIDIA SHIELD Controller 2017)

config NVIDIA_SHIELD_FF
	bool "NVIDIA SHIELD force feedback support"
	depends on HID_NVIDIA_SHIELD
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you would like to enable force feedback support for
	  NVIDIA SHIELD accessories with haptics capabilities.

config HID_ORTEK
	tristate "Ortek PKB-1700/WKB-2000/Skycable wireless keyboard and mouse trackpad"
	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"
	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"
	help
	Support for Petalynx Maxter remote control.

config HID_PICOLCD
	tristate "PicoLCD (graphic version)"
	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_SYSMEM_HELPERS_DEFERRED
	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"
	help
	  Provides HID support for Plantronics USB audio devices.
	  Correctly maps vendor unique volume up/down HID usages to
	  KEY_VOLUMEUP and KEY_VOLUMEDOWN events and prevents core mapping
	  of other vendor unique HID usages to random mouse events.

	  Say M here if you may ever plug in a Plantronics USB audio device.

config HID_PLAYSTATION
	tristate "PlayStation HID Driver"
	depends on LEDS_CLASS_MULTICOLOR
	select CRC32
	select POWER_SUPPLY
	help
	  Provides support for Sony PS4/PS5 controllers including support for
	  its special functionalities e.g. touchpad, lights and motion
	  sensors.

config PLAYSTATION_FF
	bool "PlayStation force feedback support"
	depends on HID_PLAYSTATION
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you would like to enable force feedback support for
	  PlayStation game controllers.

config HID_PXRC
       tristate "PhoenixRC HID Flight Controller"
       depends on HID
       help
       Support for PhoenixRC HID Flight Controller, a 8-axis flight controller.

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

config HID_RAZER
	tristate "Razer non-fully HID-compliant devices"
	help
	Support for Razer devices that are not fully compliant with the
	HID standard.

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

config HID_RETRODE
	tristate "Retrode 2 USB adapter for vintage video games"
	depends on USB_HID
	help
	Support for
	  * Retrode 2 cartridge and controller adapter

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"
	help
	Support for Saitek devices that are not fully compliant with the
	HID standard.

	Supported devices:
	- PS1000 Dual Analog Pad
	- Saitek R.A.T.7, R.A.T.9, M.M.O.7 Gaming Mice
	- Mad Catz R.A.T.5, R.A.T.9 Gaming Mice

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

config HID_SEMITEK
	tristate "Semitek USB keyboards"
	help
	Support for Semitek USB keyboards that are not fully compliant
	with the HID standard.

	There are many variants, including:
	- GK61, GK64, GK68, GK84, GK96, etc.
	- SK61, SK64, SK68, SK84, SK96, etc.
	- Dierya DK61/DK66
	- Tronsmart TK09R
	- Woo-dy
	- X-Bows Nature/Knight

config HID_SIGMAMICRO
	tristate "SiGma Micro-based keyboards"
	depends on USB_HID
	help
	  Support for keyboards that use the SiGma Micro (a.k.a SigmaChip) IC.

	  Supported devices:
	  - Landslides KR-700
	  - Rapoo V500

config HID_SONY
	tristate "Sony PS2/3/4 accessories"
	depends on USB_HID
	depends on NEW_LEDS
	depends on LEDS_CLASS
	select POWER_SUPPLY
	select CRC32
	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)
	  * Guitar Hero Live PS3, Wii U and PS4 guitar dongles
	  * Guitar Hero PS3 and PC guitar dongles

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"
	help
	Support for Speedlink Vicious and Divine Cezanne mouse.

config HID_STEAM
	tristate "Steam Controller/Deck support"
	select POWER_SUPPLY
	help
	Say Y here if you have a Steam Controller or Deck if you want to use it
	without running the Steam Client. It supports both the wired and
	the wireless adaptor.

config STEAM_FF
	bool "Steam Deck force feedback support"
	depends on HID_STEAM
	select INPUT_FF_MEMLESS
	help
	Say Y here if you want to enable force feedback support for the Steam
	Deck.

config HID_STEELSERIES
	tristate "Steelseries devices support"
	depends on USB_HID
	help
	Support for Steelseries SRW-S1 steering wheel, and the Steelseries
	Arctis 1 Wireless for XBox headset.

config HID_SUNPLUS
	tristate "Sunplus wireless desktop"
	help
	Support for Sunplus wireless desktop.

config HID_RMI
	tristate "Synaptics RMI4 device support"
	select RMI4_CORE
	select RMI4_F03
	select RMI4_F11
	select RMI4_F12
	select RMI4_F30
	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"
	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"
	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"
	help
	Say Y if you have a TiVo Slide Bluetooth remote control.

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

config HID_TOPRE
	tristate "Topre REALFORCE keyboards"
	depends on HID
	help
	  Say Y for N-key rollover support on Topre REALFORCE R2 108/87 key keyboards.

config HID_THINGM
	tristate "ThingM blink(1) USB RGB LED"
	depends on LEDS_CLASS
	select HID_LED
	help
	Support for the ThingM blink(1) USB RGB LED. This driver has been
	merged into the generic hid led driver. Config symbol HID_THINGM
	just selects HID_LED and will be removed soon.

config HID_THRUSTMASTER
	tristate "ThrustMaster devices support"
	depends on USB_HID
	help
	  Say Y here if you have a THRUSTMASTER FireStore Dual Power 2,
	  a THRUSTMASTER Ferrari GT Rumble Wheel or Thrustmaster FFB
	  Wheel (T150RS, T300RS, T300 Ferrari Alcantara Edition, T500RS).

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_UDRAW_PS3
	tristate "THQ PS3 uDraw tablet"
	help
	  Say Y here if you want to use the THQ uDraw gaming tablet for
	  the PS3.

config HID_U2FZERO
	tristate "U2F Zero LED and RNG support"
	depends on USB_HID
	depends on LEDS_CLASS
	depends on HW_RANDOM
	help
	  Support for the LED of the U2F Zero device.

	  U2F Zero supports custom commands for blinking the LED
	  and getting data from the internal hardware RNG.
	  The internal hardware can be used to feed the enthropy pool.

	  U2F Zero only supports blinking its LED, so this driver doesn't
	  allow setting the brightness to anything but 1, which will
	  trigger a single blink and immediately reset back to 0.

config HID_WACOM
	tristate "Wacom Intuos/Graphire tablet support (USB)"
	depends on USB_HID
	select POWER_SUPPLY
	select NEW_LEDS
	select LEDS_CLASS
	select LEDS_TRIGGERS
	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 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"
	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"
	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"
	help
	Support for Zydacron remote control.

config HID_SENSOR_HUB
	tristate "HID Sensors framework support"
	depends on 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.

config HID_SENSOR_CUSTOM_SENSOR
	tristate "HID Sensors hub custom sensor support"
	depends on HID_SENSOR_HUB
	default n
	help
	  HID Sensor hub specification allows definition of some custom and
	  generic sensors. Unlike other HID sensors, they can't be exported
	  via Linux IIO because of custom fields. This is up to the manufacturer
	  to decide how to interpret these special sensor ids and process in
	  the user space. Currently some manufacturers are using these ids for
	  sensor calibration and debugging other sensors. Manufacturers
	  shouldn't use these special custom sensor ids to export any of the
	  standard sensors.
	  Select this config option for custom/generic sensor support.

config HID_ALPS
	tristate "Alps HID device support"
	help
	Support for Alps I2C HID touchpads and StickPointer.
	Say Y here if you have a Alps touchpads over i2c-hid or usbhid
	and want support for its special functionalities.

config HID_MCP2200
	tristate "Microchip MCP2200 HID USB-to-GPIO bridge"
	depends on USB_HID && GPIOLIB
	help
	  Provides GPIO functionality over USB-HID through MCP2200 device.

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

config HID_MCP2221
	tristate "Microchip MCP2221 HID USB-to-I2C/SMbus host support"
	depends on USB_HID && I2C
	imply GPIOLIB
	imply IIO
	help
	Provides I2C and SMBUS host adapter functionality over USB-HID
	through MCP2221 device.

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

config HID_KUNIT_TEST
	tristate "KUnit tests for HID" if !KUNIT_ALL_TESTS
	depends on KUNIT
	depends on HID_BATTERY_STRENGTH
	depends on HID_UCLOGIC
	default KUNIT_ALL_TESTS
	help
	  This builds unit tests for HID. This option is not useful for
	  distributions or general kernels, but only for kernel
	  developers working on HID and associated drivers.

	  For more information on KUnit and unit tests in general,
	  please refer to the KUnit documentation in
	  Documentation/dev-tools/kunit/.

	  If in doubt, say "N".

endmenu

source "drivers/hid/bpf/Kconfig"

endif # HID

source "drivers/hid/usbhid/Kconfig"

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

source "drivers/hid/intel-ish-hid/Kconfig"

source "drivers/hid/amd-sfh-hid/Kconfig"

source "drivers/hid/surface-hid/Kconfig"

endif # HID_SUPPORT
