# SPDX-License-Identifier: GPL-2.0-only
#
# Input misc drivers configuration
#
menuconfig INPUT_MISC
	bool "Miscellaneous devices"
	help
	  Say Y here, and a list of miscellaneous input drivers will be displayed.
	  Everything that didn't fit into the other categories is here. This option
	  doesn't affect the kernel.

	  If unsure, say Y.

if INPUT_MISC

config INPUT_88PM860X_ONKEY
	tristate "88PM860x ONKEY support"
	depends on MFD_88PM860X
	help
	  Support the ONKEY of Marvell 88PM860x PMICs as an input device
	  reporting power button status.

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

config INPUT_88PM80X_ONKEY
	tristate "88PM80x ONKEY support"
	depends on MFD_88PM800
	help
	  Support the ONKEY of Marvell 88PM80x PMICs as an input device
	  reporting power button status.

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

config INPUT_AB8500_PONKEY
	tristate "AB8500 Pon (PowerOn) Key"
	depends on AB8500_CORE
	help
	  Say Y here to use the PowerOn Key for ST-Ericsson's AB8500
	  Mix-Sig PMIC.

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

config INPUT_AD714X
	tristate "Analog Devices AD714x Capacitance Touch Sensor"
	help
	  Say Y here if you want to support an AD7142/3/7/8/7A touch sensor.

	  You should select a bus connection too.

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

config INPUT_AD714X_I2C
	tristate "support I2C bus connection"
	depends on INPUT_AD714X && I2C
	default y
	help
	  Say Y here if you have AD7142/AD7147 hooked to an I2C bus.

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

config INPUT_AD714X_SPI
	tristate "support SPI bus connection"
	depends on INPUT_AD714X && SPI
	default y
	help
	  Say Y here if you have AD7142/AD7147 hooked to a SPI bus.

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

config INPUT_ARIZONA_HAPTICS
	tristate "Arizona haptics support"
	depends on MFD_ARIZONA && SND_SOC
	select INPUT_FF_MEMLESS
	help
	  Say Y to enable support for the haptics module in Arizona CODECs.

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

config INPUT_ATMEL_CAPTOUCH
	tristate "Atmel Capacitive Touch Button Driver"
	depends on OF || COMPILE_TEST
	depends on I2C
	help
	  Say Y here if an Atmel Capacitive Touch Button device which
	  implements "captouch" protocol is connected to I2C bus. Typically
	  this device consists of Atmel Touch sensor controlled by AtMegaXX
	  MCU running firmware based on Qtouch library.
	  One should find "atmel,captouch" node in the board specific DTS.

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

config INPUT_BMA150
	tristate "BMA150/SMB380 acceleration sensor support"
	depends on I2C
	help
	  Say Y here if you have Bosch Sensortec's BMA150 or SMB380
	  acceleration sensor hooked to an I2C bus.

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

config INPUT_E3X0_BUTTON
	tristate "NI Ettus Research USRP E3xx Button support."
	default n
	help
	  Say Y here to enable support for the NI Ettus Research
	  USRP E3xx Button.

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

config INPUT_MSM_VIBRATOR
	tristate "Qualcomm MSM vibrator driver"
	select INPUT_FF_MEMLESS
	help
	  Support for the vibrator that is found on various Qualcomm MSM
	  SOCs.

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

config INPUT_PCSPKR
	tristate "PC Speaker support"
	depends on PCSPKR_PLATFORM
	help
	  Say Y here if you want the standard PC Speaker to be used for
	  bells and whistles.

	  If unsure, say Y.

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

config INPUT_PM8941_PWRKEY
	tristate "Qualcomm PM8941 power key support"
	depends on MFD_SPMI_PMIC
	help
	  Say Y here if you want support for the power key usually found
	  on boards using a Qualcomm PM8941 compatible PMIC.

	  If unsure, say Y.

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

config INPUT_PM8XXX_VIBRATOR
	tristate "Qualcomm PM8XXX vibrator support"
	depends on MFD_PM8XXX || MFD_SPMI_PMIC
	select INPUT_FF_MEMLESS
	help
	  This option enables device driver support for the vibrator
	  on Qualcomm PM8xxx chip. This driver supports ff-memless interface
	  from input framework.

	  To compile this driver as module, choose M here: the
	  module will be called pm8xxx-vibrator.

config INPUT_PMIC8XXX_PWRKEY
	tristate "PMIC8XXX power key support"
	depends on MFD_PM8XXX
	help
	  Say Y here if you want support for the PMIC8XXX power key.

	  If unsure, say N.

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

config INPUT_SPARCSPKR
	tristate "SPARC Speaker support"
	depends on PCI && SPARC64
	help
	  Say Y here if you want the standard Speaker on Sparc PCI systems
	  to be used for bells and whistles.

	  If unsure, say Y.

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

config INPUT_M68K_BEEP
	tristate "M68k Beeper support"
	depends on M68K

config INPUT_MAX77650_ONKEY
	tristate "Maxim MAX77650 ONKEY support"
	depends on MFD_MAX77650
	help
	  Support the ONKEY of the MAX77650 PMIC as an input device.

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

config INPUT_MAX77693_HAPTIC
	tristate "MAXIM MAX77693/MAX77843 haptic controller support"
	depends on (MFD_MAX77693 || MFD_MAX77843) && PWM
	select INPUT_FF_MEMLESS
	help
	  This option enables support for the haptic controller on
	  MAXIM MAX77693 and MAX77843 chips.

	  To compile this driver as module, choose M here: the
	  module will be called max77693-haptic.

config INPUT_MAX8925_ONKEY
	tristate "MAX8925 ONKEY support"
	depends on MFD_MAX8925
	help
	  Support the ONKEY of MAX8925 PMICs as an input device
	  reporting power button status.

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

config INPUT_MAX8997_HAPTIC
	tristate "MAXIM MAX8997 haptic controller support"
	depends on PWM && MFD_MAX8997
	select INPUT_FF_MEMLESS
	help
	  This option enables device driver support for the haptic controller
	  on MAXIM MAX8997 chip. This driver supports ff-memless interface
	  from input framework.

	  To compile this driver as module, choose M here: the
	  module will be called max8997-haptic.

config INPUT_MC13783_PWRBUTTON
	tristate "MC13783 ON buttons"
	depends on MFD_MC13XXX
	help
	  Support the ON buttons of MC13783 PMIC as an input device
	  reporting power button status.

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

config INPUT_MMA8450
	tristate "MMA8450 - Freescale's 3-Axis, 8/12-bit Digital Accelerometer"
	depends on I2C
	help
	  Say Y here if you want to support Freescale's MMA8450 Accelerometer
	  through I2C interface.

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

config INPUT_APANEL
	tristate "Fujitsu Lifebook Application Panel buttons"
	depends on X86 && I2C && LEDS_CLASS
	select CHECK_SIGNATURE
	help
	 Say Y here for support of the Application Panel buttons, used on
	 Fujitsu Lifebook. These are attached to the mainboard through
	 an SMBus interface managed by the I2C Intel ICH (i801) driver,
	 which you should also build for this kernel.

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

config INPUT_GP2A
	tristate "Sharp GP2AP002A00F I2C Proximity/Opto sensor driver"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have a Sharp GP2AP002A00F proximity/als combo-chip
	  hooked to an I2C bus.

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

config INPUT_GPIO_BEEPER
	tristate "Generic GPIO Beeper support"
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have a beeper connected to a GPIO pin.

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

config INPUT_GPIO_DECODER
	tristate "Polled GPIO Decoder Input driver"
	depends on GPIOLIB || COMPILE_TEST
	help
	 Say Y here if you want driver to read status of multiple GPIO
	 lines and report the encoded value as an absolute integer to
	 input subsystem.

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

config INPUT_GPIO_VIBRA
	tristate "GPIO vibrator support"
	depends on GPIOLIB || COMPILE_TEST
	select INPUT_FF_MEMLESS
	help
	  Say Y here to get support for GPIO based vibrator devices.

	  If unsure, say N.

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

config INPUT_IXP4XX_BEEPER
	tristate "IXP4XX Beeper support"
	depends on ARCH_IXP4XX
	help
	  If you say yes here, you can connect a beeper to the
	  ixp4xx gpio pins. This is used by the LinkSys NSLU2.

	  If unsure, say Y.

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

config INPUT_COBALT_BTNS
	tristate "Cobalt button interface"
	depends on MIPS_COBALT
	help
	  Say Y here if you want to support MIPS Cobalt button interface.

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

config INPUT_CPCAP_PWRBUTTON
	tristate "CPCAP OnKey"
	depends on MFD_CPCAP
	help
	  Say Y here if you want to enable power key reporting via the
	  Motorola CPCAP chip.

	  To compile this driver as a module, choose M here. The module will
	  be called cpcap-pwrbutton.

config INPUT_WISTRON_BTNS
	tristate "x86 Wistron laptop button interface"
	depends on X86_32
	select INPUT_SPARSEKMAP
	select NEW_LEDS
	select LEDS_CLASS
	select CHECK_SIGNATURE
	help
	  Say Y here for support of Wistron laptop button interfaces, used on
	  laptops of various brands, including Acer and Fujitsu-Siemens. If
	  available, mail and wifi LEDs will be controllable via /sys/class/leds.

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

config INPUT_ATLAS_BTNS
	tristate "x86 Atlas button interface"
	depends on X86 && ACPI
	help
	  Say Y here for support of Atlas wallmount touchscreen buttons.
	  The events will show up as scancodes F1 through F9 via evdev.

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

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

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

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

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

config INPUT_KXTJ9
	tristate "Kionix KXTJ9 tri-axis digital accelerometer"
	depends on I2C
	help
	  Say Y here to enable support for the Kionix KXTJ9 digital tri-axis
	  accelerometer.

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

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

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

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

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

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

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

config INPUT_CM109
	tristate "C-Media CM109 USB I/O Controller"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to enable keyboard and buzzer functions of the
	  C-Media CM109 usb phones. The audio part is enabled by the generic
	  usb sound driver, so you might want to enable that as well.

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

config INPUT_REGULATOR_HAPTIC
	tristate "Regulator haptics support"
	depends on REGULATOR
	select INPUT_FF_MEMLESS
	help
	  This option enables device driver support for the haptic controlled
	  by a regulator. This driver supports ff-memless interface
	  from input framework.

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

config INPUT_RETU_PWRBUTTON
	tristate "Retu Power button Driver"
	depends on MFD_RETU
	help
	  Say Y here if you want to enable power key reporting via the
	  Retu chips found in Nokia Internet Tablets (770, N800, N810).

	  To compile this driver as a module, choose M here. The module will
	  be called retu-pwrbutton.

config INPUT_TPS65218_PWRBUTTON
	tristate "TPS65218 Power button driver"
	depends on (MFD_TPS65217 || MFD_TPS65218)
	help
	  Say Y here if you want to enable power button reporting for
	  TPS65217 and TPS65218 Power Management IC devices.

	  To compile this driver as a module, choose M here. The module will
	  be called tps65218-pwrbutton.

config INPUT_AXP20X_PEK
	tristate "X-Powers AXP20X power button driver"
	depends on MFD_AXP20X
	help
	  Say Y here if you want to enable power key reporting via the
	  AXP20X PMIC.

	  To compile this driver as a module, choose M here. The module will
	  be called axp20x-pek.


config INPUT_TWL4030_PWRBUTTON
	tristate "TWL4030 Power button Driver"
	depends on TWL4030_CORE
	help
	  Say Y here if you want to enable power key reporting via the
	  TWL4030 family of chips.

	  To compile this driver as a module, choose M here. The module will
	  be called twl4030_pwrbutton.

config INPUT_TWL4030_VIBRA
	tristate "Support for TWL4030 Vibrator"
	depends on TWL4030_CORE
	select MFD_TWL4030_AUDIO
	select INPUT_FF_MEMLESS
	help
	  This option enables support for TWL4030 Vibrator Driver.

	  To compile this driver as a module, choose M here. The module will
	  be called twl4030_vibra.

config INPUT_TWL6040_VIBRA
	tristate "Support for TWL6040 Vibrator"
	depends on TWL6040_CORE
	select INPUT_FF_MEMLESS
	help
	  This option enables support for TWL6040 Vibrator Driver.

	  To compile this driver as a module, choose M here. The module will
	  be called twl6040_vibra.

config INPUT_UINPUT
	tristate "User level driver support"
	help
	  Say Y here if you want to support user level drivers for input
	  subsystem accessible under char device 10:223 - /dev/input/uinput.

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

config INPUT_SGI_BTNS
	tristate "SGI Indy/O2 volume button interface"
	depends on SGI_IP22 || SGI_IP32
	help
	  Say Y here if you want to support SGI Indy/O2 volume button interface.

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

config HP_SDC_RTC
	tristate "HP SDC Real Time Clock"
	depends on (GSC || HP300) && SERIO
	select HP_SDC
	help
	  Say Y here if you want to support the built-in real time clock
	  of the HP SDC controller.

config INPUT_PALMAS_PWRBUTTON
	tristate "Palmas Power button Driver"
	depends on MFD_PALMAS
	help
	  Say Y here if you want to enable power key reporting via the
	  Palmas family of PMICs.

	  To compile this driver as a module, choose M here. The module will
	  be called palmas_pwrbutton.

config INPUT_PCF50633_PMU
	tristate "PCF50633 PMU events"
	depends on MFD_PCF50633
	help
	 Say Y to include support for delivering  PMU events via  input
	 layer on NXP PCF50633.

config INPUT_PCF8574
	tristate "PCF8574 Keypad input device"
	depends on I2C
	help
	  Say Y here if you want to support a keypad connected via I2C
	  with a PCF8574.

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

config INPUT_PWM_BEEPER
	tristate "PWM beeper support"
	depends on PWM
	help
	  Say Y here to get support for PWM based beeper devices.

	  If unsure, say N.

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

config INPUT_PWM_VIBRA
	tristate "PWM vibrator support"
	depends on PWM
	select INPUT_FF_MEMLESS
	help
	  Say Y here to get support for PWM based vibrator devices.

	  If unsure, say N.

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

config INPUT_RK805_PWRKEY
	tristate "Rockchip RK805 PMIC power key support"
	depends on MFD_RK808
	help
	  Select this option to enable power key driver for RK805.

	  If unsure, say N.

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

config INPUT_GPIO_ROTARY_ENCODER
	tristate "Rotary encoders connected to GPIO pins"
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here to add support for rotary encoders connected to GPIO lines.
	  Check file:Documentation/input/devices/rotary-encoder.rst for more
	  information.

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

config INPUT_RB532_BUTTON
	tristate "Mikrotik Routerboard 532 button interface"
	depends on MIKROTIK_RB532
	depends on GPIOLIB
	help
	  Say Y here if you want support for the S1 button built into
	  Mikrotik's Routerboard 532.

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

config INPUT_DA9052_ONKEY
	tristate "Dialog DA9052/DA9053 Onkey"
	depends on PMIC_DA9052
	help
	  Support the ONKEY of Dialog DA9052 PMICs as an input device
	  reporting power button status.

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

config INPUT_DA9055_ONKEY
	tristate "Dialog Semiconductor DA9055 ONKEY"
	depends on MFD_DA9055
	help
	  Support the ONKEY of DA9055 PMICs as an input device
	  reporting power button status.

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

config INPUT_DA9063_ONKEY
	tristate "Dialog DA9063/62/61 OnKey"
	depends on MFD_DA9063 || MFD_DA9062
	help
	  Support the ONKEY of Dialog DA9063, DA9062 and DA9061 Power
	  Management ICs as an input device capable of reporting the
	  power button status.

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

config INPUT_DM355EVM
	tristate "TI DaVinci DM355 EVM Keypad and IR Remote"
	depends on MFD_DM355EVM_MSP
	select INPUT_SPARSEKMAP
	help
	  Supports the pushbuttons and IR remote used with
	  the DM355 EVM board.

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

config INPUT_WM831X_ON
	tristate "WM831X ON pin"
	depends on MFD_WM831X
	help
	  Support the ON pin of WM831X PMICs as an input device
	  reporting power button status.

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

config INPUT_PCAP
	tristate "Motorola EZX PCAP misc input events"
	depends on EZX_PCAP
	help
	  Say Y here if you want to use Power key and Headphone button
	  on Motorola EZX phones.

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

config INPUT_ADXL34X
	tristate "Analog Devices ADXL34x Three-Axis Digital Accelerometer"
	default n
	help
	  Say Y here if you have a Accelerometer interface using the
	  ADXL345/6 controller, and your board-specific initialization
	  code includes that in its table of devices.

	  This driver can use either I2C or SPI communication to the
	  ADXL345/6 controller.  Select the appropriate method for
	  your system.

	  If unsure, say N (but it's safe to say "Y").

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

config INPUT_ADXL34X_I2C
	tristate "support I2C bus connection"
	depends on INPUT_ADXL34X && I2C
	default y
	help
	  Say Y here if you have ADXL345/6 hooked to an I2C bus.

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

config INPUT_ADXL34X_SPI
	tristate "support SPI bus connection"
	depends on INPUT_ADXL34X && SPI
	default y
	help
	  Say Y here if you have ADXL345/6 hooked to a SPI bus.

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

config INPUT_IMS_PCU
	tristate "IMS Passenger Control Unit driver"
	depends on USB
	depends on LEDS_CLASS
	help
	  Say Y here if you have system with IMS Rave Passenger Control Unit.

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

config INPUT_CMA3000
	tristate "VTI CMA3000 Tri-axis accelerometer"
	help
	  Say Y here if you want to use VTI CMA3000_D0x Accelerometer
	  driver

	  This driver currently only supports I2C interface to the
	  controller. Also select the I2C method.

	  If unsure, say N

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

config INPUT_CMA3000_I2C
	tristate "Support I2C bus connection"
	depends on INPUT_CMA3000 && I2C
	help
	  Say Y here if you want to use VTI CMA3000_D0x Accelerometer
	  through I2C interface.

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

config INPUT_XEN_KBDDEV_FRONTEND
	tristate "Xen virtual keyboard and mouse support"
	depends on XEN
	default y
	select XEN_XENBUS_FRONTEND
	help
	  This driver implements the front-end of the Xen virtual
	  keyboard and mouse device driver.  It communicates with a back-end
	  in another domain.

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

config INPUT_SIRFSOC_ONKEY
	tristate "CSR SiRFSoC power on/off/suspend key support"
	depends on ARCH_SIRF && OF
	default y
	help
	  Say Y here if you want to support for the SiRFSoC power on/off/suspend key
	  in Linux, after you press the onkey, system will suspend.

	  If unsure, say N.

config INPUT_IDEAPAD_SLIDEBAR
	tristate "IdeaPad Laptop Slidebar"
	depends on INPUT
	depends on SERIO_I8042
	help
	  Say Y here if you have an IdeaPad laptop with a slidebar.

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

config INPUT_SOC_BUTTON_ARRAY
	tristate "Windows-compatible SoC Button Array"
	depends on KEYBOARD_GPIO && ACPI
	help
	  Say Y here if you have a SoC-based tablet that originally runs
	  Windows 8 or a Microsoft Surface Book 2, Pro 5, Laptop 1 or later.

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

config INPUT_DRV260X_HAPTICS
	tristate "TI DRV260X haptics support"
	depends on INPUT && I2C
	depends on GPIOLIB || COMPILE_TEST
	select INPUT_FF_MEMLESS
	select REGMAP_I2C
	help
	  Say Y to enable support for the TI DRV260X haptics driver.

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

config INPUT_DRV2665_HAPTICS
	tristate "TI DRV2665 haptics support"
	depends on INPUT && I2C
	select INPUT_FF_MEMLESS
	select REGMAP_I2C
	help
	  Say Y to enable support for the TI DRV2665 haptics driver.

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

config INPUT_DRV2667_HAPTICS
	tristate "TI DRV2667 haptics support"
	depends on INPUT && I2C
	select INPUT_FF_MEMLESS
	select REGMAP_I2C
	help
	  Say Y to enable support for the TI DRV2667 haptics driver.

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

config INPUT_HISI_POWERKEY
	tristate "Hisilicon PMIC ONKEY support"
	depends on ARCH_HISI || COMPILE_TEST
	help
	  Say Y to enable support for PMIC ONKEY.

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

config INPUT_RAVE_SP_PWRBUTTON
	tristate "RAVE SP Power button Driver"
	depends on RAVE_SP_CORE
	help
	  Say Y here if you want to enable power key reporting from RAVE SP

	  To compile this driver as a module, choose M here: the
	  module will be called rave-sp-pwrbutton.

config INPUT_SC27XX_VIBRA
	tristate "Spreadtrum sc27xx vibrator support"
	depends on MFD_SC27XX_PMIC || COMPILE_TEST
	select INPUT_FF_MEMLESS
	help
	  This option enables support for Spreadtrum sc27xx vibrator driver.

	  To compile this driver as a module, choose M here. The module will
	  be called sc27xx_vibra.

config INPUT_STPMIC1_ONKEY
	tristate "STPMIC1 PMIC Onkey support"
	depends on MFD_STPMIC1
	help
	  Say Y to enable support of onkey embedded into STPMIC1 PMIC. onkey
	  can be used to wakeup from low power modes and force a shut-down on
	  long press.

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

endif
