# 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_88PM886_ONKEY
	tristate "Marvell 88PM886 onkey support"
	depends on MFD_88PM886_PMIC
	help
	  Support the onkey of Marvell 88PM886 PMIC as an input device
	  reporting power button status.

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_ARIEL_PWRBUTTON
	tristate "Dell Wyse 3020 Power Button Driver"
	depends on SPI
	depends on MACH_MMP3_DT || COMPILE_TEST
	help
	  Say Y to enable support for reporting power button status on
	  on Dell Wyse 3020 ("Ariel") thin client.

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

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_ATC260X_ONKEY
	tristate "Actions Semi ATC260x PMIC ONKEY"
	depends on MFD_ATC260X
	help
	  Support the ONKEY of ATC260x PMICs as an input device reporting
	  power button status. ONKEY can be used to wakeup from low power
	  modes and force a reset on long press.

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

config INPUT_ATMEL_CAPTOUCH
	tristate "Atmel Capacitive Touch Button Driver"
	depends on OF
	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_AW86927
	tristate "Awinic AW86927 Haptic Driver Support"
	depends on I2C && INPUT
	select INPUT_FF_MEMLESS
	select REGMAP_I2C
	help
	  Say Y here if you have an Awinic AW86927 haptic chip.

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

config INPUT_BBNSM_PWRKEY
	tristate "NXP BBNSM Power Key Driver"
	depends on ARCH_MXC || COMPILE_TEST
	depends on OF
	help
	  This is the bbnsm powerkey driver for the NXP i.MX application
	  processors.

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

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_CS40L50_VIBRA
	tristate "CS40L50 Haptic Driver support"
	depends on MFD_CS40L50_CORE
	help
	  Say Y here to enable support for Cirrus Logic's CS40L50
	  haptic driver.

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

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_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_MAX7360_ROTARY
	tristate "Maxim MAX7360 Rotary Encoder"
	depends on MFD_MAX7360
	help
	  If you say yes here you get support for the rotary encoder on the
	  Maxim MAX7360 I/O Expander.

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

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/MAX77705/MAX77843 haptic controller support"
	depends on (MFD_MAX77693 || MFD_MAX77705 || MFD_MAX77843) && PWM
	select INPUT_FF_MEMLESS
	help
	  This option enables support for the haptic controller on
	  MAXIM MAX77693, MAX77705 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_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_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 && !UML
	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_TPS65219_PWRBUTTON
	tristate "TPS65219 Power button driver"
	depends on MFD_TPS65219
	help
	  Say Y here if you want to enable power button reporting for
	  TPS65219 Power Management IC devices.

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

config INPUT_TPS6594_PWRBUTTON
	tristate "TPS6594 Power button driver"
	depends on MFD_TPS6594
	help
	  Say Y here if you want to enable power button reporting for
	  TPS6594 Power Management IC devices.

	  To compile this driver as a module, choose M here. The module will
	  be called tps6594-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_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_RK8XX
	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_DA7280_HAPTICS
	tristate "Dialog Semiconductor DA7280 haptics support"
	depends on INPUT && I2C
	select REGMAP_I2C
	help
	  Say Y to enable support for the Dialog DA7280 haptics driver.
	  The haptics can be controlled by PWM or GPIO
	  with I2C communication.

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

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_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_IBM_PANEL
	tristate "IBM Operation Panel driver"
	depends on I2C && I2C_SLAVE
	help
	  Say Y here if you have an IBM Operation Panel connected to your system
	  over I2C. The panel is typically connected only to a system's service
	  processor (BMC).

	  If unsure, say N.

	  The Operation Panel is a controller with some buttons and an LCD
	  display that allows someone with physical access to the system to
	  perform various administrative tasks. This driver only supports the part
	  of the controller that sends commands to the system.

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

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_IQS269A
	tristate "Azoteq IQS269A capacitive touch controller"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y to enable support for the Azoteq IQS269A capacitive
	  touch controller.

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

config INPUT_IQS626A
	tristate "Azoteq IQS626A capacitive touch controller"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y to enable support for the Azoteq IQS626A capacitive
	  touch controller.

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

config INPUT_IQS7222
	tristate "Azoteq IQS7222A/B/C/D capacitive touch controller"
	depends on I2C
	help
	  Say Y to enable support for the Azoteq IQS7222A/B/C/D family
	  of capacitive touch controllers.

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

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_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_QNAP_MCU
	tristate "Input Support for QNAP MCU controllers"
	depends on MFD_QNAP_MCU
	help
	  This option enables support for input elements available on
	  embedded controllers used in QNAP NAS devices.

	  This includes a polled power-button as well as a beeper.

	  To compile this driver as a module, choose M here: the
	  module will be called qnap-mcu-input.

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_RT5120_PWRKEY
	tristate "RT5120 PMIC power key support"
	depends on MFD_RT5120 || COMPILE_TEST
	help
	  This enables support for RT5120 PMIC power key driver.

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

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
