# 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
	select POWER_SUPPLY
	help
	Support for Corsair devices that are not fully compliant with the
	HID standard.
	Support for Corsair Void headsets.

	Supported devices:
	- Vengeance K90
	- Scimitar PRO RGB
	- Corsair Void headsets

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_GOODIX_SPI
	tristate "Goodix GT7986U SPI HID touchscreen"
	depends on SPI_MASTER
	help
	  Support for Goodix GT7986U SPI HID touchscreen device.

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_KYSONA
	tristate "Kysona devices"
	depends on USB_HID
	help
	Support for Kysona mice.

	Say Y here if you have a Kysona M600 mouse
	and want to be able to read its battery capacity.

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
	select RMI4_F3A
	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_WINWING
	tristate "WinWing Orion2 throttle support"
	depends on USB_HID
	depends on NEW_LEDS
	depends on LEDS_CLASS
	help
	  Support for WinWing Orion2 throttle base with the following grips:

	    * TGRIP-16EX
	    * TGRIP-18

	  This driver enables all buttons and switches on the throttle base.

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

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
