# SPDX-License-Identifier: GPL-2.0-only
#
# Input core configuration
#
menuconfig INPUT_KEYBOARD
	bool "Keyboards"
	default y
	help
	  Say Y here, and a list of supported keyboards will be displayed.
	  This option doesn't affect the kernel.

	  If unsure, say Y.

if INPUT_KEYBOARD

config KEYBOARD_ADC
	tristate "ADC Ladder Buttons"
	depends on IIO
	help
	  This driver implements support for buttons connected
	  to an ADC using a resistor ladder.

	  Say Y here if your device has such buttons connected to an ADC.  Your
	  board-specific setup logic must also provide a configuration data
	  for mapping voltages to buttons.

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

config KEYBOARD_ADP5520
	tristate "Keypad Support for ADP5520 PMIC"
	depends on PMIC_ADP5520
	help
	  This option enables support for the keypad scan matrix
	  on Analog Devices ADP5520 PMICs.

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

config KEYBOARD_ADP5585
	tristate "ADP558x keypad support"
	depends on MFD_ADP5585
	select INPUT_MATRIXKMAP
	help
	  This option enables support for the KEYPAD function found in the Analog
	  Devices ADP5585 and similar devices.

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

config KEYBOARD_ADP5588
	tristate "ADP5588/87 I2C QWERTY Keypad and IO Expander"
	depends on I2C
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use a ADP5588/87 attached to your
	  system I2C bus.

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

config KEYBOARD_AMIGA
	tristate "Amiga keyboard"
	depends on AMIGA
	help
	  Say Y here if you are running Linux on any AMIGA and have a keyboard
	  attached.

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

config KEYBOARD_APPLESPI
	tristate "Apple SPI keyboard and trackpad"
	depends on ACPI && EFI
	depends on SPI
	depends on X86 || COMPILE_TEST
	depends on LEDS_CLASS
	select CRC16
	help
	  Say Y here if you are running Linux on any Apple MacBook8,1 or later,
	  or any MacBookPro13,* or MacBookPro14,*.

	  You will also need to enable appropriate SPI master controllers:
	  spi_pxa2xx_platform and spi_pxa2xx_pci for MacBook8,1, and
	  spi_pxa2xx_platform and intel_lpss_pci for the rest.

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

config KEYBOARD_ATARI
	tristate "Atari keyboard"
	depends on ATARI
	select ATARI_KBD_CORE
	help
	  Say Y here if you are running Linux on any Atari and have a keyboard
	  attached.

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

config KEYBOARD_ATKBD
	tristate "AT keyboard"
	default y
	select SERIO
	select SERIO_LIBPS2
	select SERIO_I8042 if ARCH_MIGHT_HAVE_PC_SERIO
	select SERIO_GSCPS2 if GSC
	select INPUT_VIVALDIFMAP
	help
	  Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
	  you'll need this, unless you have a different type keyboard (USB, ADB
	  or other). This also works for AT and PS/2 keyboards connected over a
	  PS/2 to serial converter.

	  If unsure, say Y.

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

config KEYBOARD_ATKBD_HP_KEYCODES
	bool "Use HP keyboard scancodes"
	depends on PARISC && KEYBOARD_ATKBD
	default y
	help
	  Say Y here if you have a PA-RISC machine and want to use an AT or
	  PS/2 keyboard, and your keyboard uses keycodes that are specific to
	  PA-RISC keyboards.

	  Say N if you use a standard keyboard.

config KEYBOARD_ATKBD_RDI_KEYCODES
	bool "Use PrecisionBook keyboard scancodes"
	depends on KEYBOARD_ATKBD_HP_KEYCODES
	default n
	help
	  If you have an RDI PrecisionBook, say Y here if you want to use its
	  built-in keyboard (as opposed to an external keyboard).

	  The PrecisionBook has five keys that conflict with those used by most
	  AT and PS/2 keyboards. These are as follows:

	    PrecisionBook    Standard AT or PS/2

	    F1               F12
	    Left Ctrl        Left Alt
	    Caps Lock        Left Ctrl
	    Right Ctrl       Caps Lock
	    Left             102nd key (the key to the right of Left Shift)

	  If you say N here, and use the PrecisionBook keyboard, then each key
	  in the left-hand column will be interpreted as the corresponding key
	  in the right-hand column.

	  If you say Y here, and use an external keyboard, then each key in the
	  right-hand column will be interpreted as the key shown in the
	  left-hand column.

config KEYBOARD_QT1050
	tristate "Microchip AT42QT1050 Touch Sensor Chip"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y here if you want to use Microchip AT42QT1050 QTouch
	  Sensor chip as input device.

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

config KEYBOARD_QT1070
	tristate "Atmel AT42QT1070 Touch Sensor Chip"
	depends on I2C
	help
	  Say Y here if you want to use Atmel AT42QT1070 QTouch
	  Sensor chip as input device.

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

config KEYBOARD_QT2160
	tristate "Atmel AT42QT2160 Touch Sensor Chip"
	depends on I2C
	help
	  If you say yes here you get support for Atmel AT42QT2160 Touch
	  Sensor chip as a keyboard input.

	  This driver can also be built as a module. If so, the module
	  will be called qt2160.

config KEYBOARD_CLPS711X
	tristate "CLPS711X Keypad support"
	depends on ARCH_CLPS711X || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Say Y here to enable the matrix keypad on the Cirrus Logic
	  CLPS711X CPUs.

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

config KEYBOARD_DLINK_DIR685
	tristate "D-Link DIR-685 touchkeys support"
	depends on I2C
	default ARCH_GEMINI
	help
	  If you say yes here you get support for the D-Link DIR-685
	  touchkeys.

	  To compile this driver as a module, choose M here: the
	  module will be called dlink-dir685-touchkeys.

config KEYBOARD_LKKBD
	tristate "DECstation/VAXstation LK201/LK401 keyboard"
	select SERIO
	help
	  Say Y here if you want to use a LK201 or LK401 style serial
	  keyboard. This keyboard is also usable on PCs if you attach
	  it with the inputattach program. The connector pinout is
	  described within lkkbd.c.

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

config KEYBOARD_EP93XX
	tristate "EP93xx Matrix Keypad support"
	depends on ARCH_EP93XX || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Say Y here to enable the matrix keypad on the Cirrus EP93XX.

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

config KEYBOARD_GPIO
	tristate "GPIO Buttons"
	depends on GPIOLIB || COMPILE_TEST
	help
	  This driver implements support for buttons connected
	  to GPIO pins of various CPUs (and some other chips).

	  Say Y here if your device has buttons connected
	  directly to such GPIO pins.  Your board-specific
	  setup logic must also provide a platform device,
	  with configuration data saying which GPIOs are used.

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

config KEYBOARD_GPIO_POLLED
	tristate "Polled GPIO buttons"
	depends on GPIOLIB
	help
	  This driver implements support for buttons connected
	  to GPIO pins that are not capable of generating interrupts.

	  Say Y here if your device has buttons connected
	  directly to such GPIO pins.  Your board-specific
	  setup logic must also provide a platform device,
	  with configuration data saying which GPIOs are used.

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

config KEYBOARD_TCA8418
	tristate "TCA8418 Keypad Support"
	depends on I2C
	select INPUT_MATRIXKMAP
	help
	  This driver implements basic keypad functionality
	  for keys connected through TCA8418 keypad decoder.

	  Say Y here if your device has keys connected to
	  TCA8418 keypad decoder.

	  If enabled the complete TCA8418 device will be managed through
	  this driver.

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

config KEYBOARD_MATRIX
	tristate "GPIO driven matrix keypad support"
	depends on GPIOLIB || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Enable support for GPIO driven matrix keypad.

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

config KEYBOARD_HIL_OLD
	tristate "HP HIL keyboard support (simple driver)"
	depends on GSC || HP300
	default y
	help
	  The "Human Interface Loop" is a older, 8-channel USB-like
	  controller used in several Hewlett Packard models. This driver
	  was adapted from the one written for m68k/hp300, and implements
	  support for a keyboard attached to the HIL port, but not for
	  any other types of HIL input devices like mice or tablets.
	  However, it has been thoroughly tested and is stable.

	  If you want full HIL support including support for multiple
	  keyboards, mice, and tablets, you have to enable the
	  "HP System Device Controller i8042 Support" in the input/serio
	  submenu.

config KEYBOARD_HIL
	tristate "HP HIL keyboard/pointer support"
	depends on GSC || HP300
	default y
	select HP_SDC
	select HIL_MLC
	select SERIO
	help
	  The "Human Interface Loop" is a older, 8-channel USB-like
	  controller used in several Hewlett Packard models.
	  This driver implements support for HIL-keyboards and pointing
	  devices (mice, tablets, touchscreens) attached
	  to your machine, so normally you should say Y here.

config KEYBOARD_HP6XX
	tristate "HP Jornada 6xx keyboard"
	depends on SH_HP6XX
	help
	  Say Y here if you have a HP Jornada 620/660/680/690 and want to
	  support the built-in keyboard.

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

config KEYBOARD_HP7XX
	tristate "HP Jornada 7xx keyboard"
	depends on SA1100_JORNADA720_SSP && SA1100_SSP
	help
	  Say Y here if you have a HP Jornada 710/720/728 and want to
	  support the built-in keyboard.

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

config KEYBOARD_LM8323
	tristate "LM8323 keypad chip"
	depends on I2C
	depends on LEDS_CLASS
	help
	  If you say yes here you get support for the National Semiconductor
	  LM8323 keypad controller.

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

config KEYBOARD_LM8333
	tristate "LM8333 keypad chip"
	depends on I2C
	select INPUT_MATRIXKMAP
	help
	  If you say yes here you get support for the National Semiconductor
	  LM8333 keypad controller.

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

config KEYBOARD_LOCOMO
	tristate "LoCoMo Keyboard Support"
	depends on SHARP_LOCOMO
	help
	  Say Y here if you are running Linux on a Sharp Zaurus Collie or Poodle based PDA

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

config KEYBOARD_LPC32XX
	tristate "LPC32XX matrix key scanner support"
	depends on (ARCH_LPC32XX && OF) || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use NXP LPC32XX SoC key scanner interface,
	  connected to a key matrix.

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

config KEYBOARD_MAPLE
	tristate "Maple bus keyboard"
	depends on SH_DREAMCAST && MAPLE
	help
	  Say Y here if you have a Dreamcast console running Linux and have
	  a keyboard attached to its Maple bus.

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

config KEYBOARD_MAX7359
	tristate "Maxim MAX7359 Key Switch Controller"
	select INPUT_MATRIXKMAP
	depends on I2C
	help
	  If you say yes here you get support for the Maxim MAX7359 Key
	  Switch Controller chip. This providers microprocessors with
	  management of up to 64 key switches

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

config KEYBOARD_MAX7360
	tristate "Maxim MAX7360 Key Switch Controller"
	select INPUT_MATRIXKMAP
	depends on I2C
	depends on MFD_MAX7360
	help
	  If you say yes here you get support for the keypad controller on the
	  Maxim MAX7360 I/O Expander.

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

config KEYBOARD_MPR121
	tristate "Freescale MPR121 Touchkey"
	depends on I2C
	help
	  Say Y here if you have Freescale MPR121 touchkey controller
	  chip in your system.

	  If unsure, say N.

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

config KEYBOARD_SNVS_PWRKEY
	tristate "IMX SNVS Power Key Driver"
	depends on ARCH_MXC || (COMPILE_TEST && HAS_IOMEM)
	depends on OF
	help
	  This is the snvs powerkey driver for the Freescale i.MX application
	  processors.

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

config KEYBOARD_IMX
	tristate "IMX keypad support"
	depends on ARCH_MXC || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Enable support for IMX keypad port.

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

config KEYBOARD_IMX_BBM_SCMI
	tristate "IMX BBM SCMI Key Driver"
	depends on IMX_SCMI_BBM_EXT || COMPILE_TEST
	default y if ARCH_MXC
	help
	  This is the BBM key driver for NXP i.MX SoCs managed through
	  SCMI protocol.

	  To compile this driver as a module, choose M here: the
	  module will be called scmi-imx-bbm-key.

config KEYBOARD_IMX_SC_KEY
	tristate "IMX SCU Key Driver"
	depends on IMX_SCU
	help
	  This is the system controller key driver for NXP i.MX SoCs with
	  system controller inside.

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

config KEYBOARD_NEWTON
	tristate "Newton keyboard"
	select SERIO
	help
	  Say Y here if you have a Newton keyboard on a serial port.

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

config KEYBOARD_NSPIRE
	tristate "TI-NSPIRE built-in keyboard"
	depends on ARCH_NSPIRE && OF
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the built-in keypad on TI-NSPIRE.

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

config KEYBOARD_TEGRA
	tristate "NVIDIA Tegra internal matrix keyboard controller support"
	depends on (ARCH_TEGRA && OF) || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use a matrix keyboard connected directly
	  to the internal keyboard controller on Tegra SoCs.

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

config KEYBOARD_OPENCORES
	tristate "OpenCores Keyboard Controller"
	depends on HAS_IOMEM
	help
	  Say Y here if you want to use the OpenCores Keyboard Controller
	  http://www.opencores.org/project,keyboardcontroller

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

config KEYBOARD_PINEPHONE
	tristate "Pine64 PinePhone Keyboard"
	depends on I2C && REGULATOR
	select CRC8
	select INPUT_MATRIXKMAP
	help
	  Say Y here to enable support for the keyboard in the Pine64 PinePhone
	  keyboard case. This driver supports the FLOSS firmware available at
	  https://megous.com/git/pinephone-keyboard/

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

config KEYBOARD_PXA27x
	tristate "PXA27x/PXA3xx keypad support"
	depends on PXA27x || PXA3xx || ARCH_MMP || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Enable support for PXA27x/PXA3xx keypad controller.

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

config KEYBOARD_PMIC8XXX
	tristate "Qualcomm PMIC8XXX keypad support"
	depends on MFD_PM8XXX
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to enable the driver for the PMIC8XXX
	  keypad provided as a reference design from Qualcomm. This is intended
	  to support up to 18x8 matrix-based keypad design.

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

config KEYBOARD_SAMSUNG
	tristate "Samsung keypad support"
	depends on HAS_IOMEM && HAVE_CLK
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the keypad on your Samsung mobile
	  device.

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

config KEYBOARD_GOLDFISH_EVENTS
	depends on GOLDFISH || COMPILE_TEST
	tristate "Generic Input Event device for Goldfish"
	help
	  Say Y here to get an input event device for the Goldfish virtual
	  device emulator.

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

config KEYBOARD_STOWAWAY
	tristate "Stowaway keyboard"
	select SERIO
	help
	  Say Y here if you have a Stowaway keyboard on a serial port.
	  Stowaway compatible keyboards like Dicota Input-PDA keyboard
	  are also supported by this driver.

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

config KEYBOARD_ST_KEYSCAN
	tristate "STMicroelectronics keyscan support"
	depends on ARCH_STI || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use a keypad attached to the keyscan block
	  on some STMicroelectronics SoC devices.

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

config KEYBOARD_SUNKBD
	tristate "Sun Type 4 and Type 5 keyboard"
	select SERIO
	help
	  Say Y here if you want to use a Sun Type 4 or Type 5 keyboard,
	  connected either to the Sun keyboard connector or to an serial
	  (RS-232) port via a simple adapter.

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

config KEYBOARD_SH_KEYSC
	tristate "SuperH KEYSC keypad support"
	depends on ARCH_SHMOBILE || COMPILE_TEST
	help
	  Say Y here if you want to use a keypad attached to the KEYSC block
	  on SuperH processors such as sh7722 and sh7343.

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

config KEYBOARD_STMPE
	tristate "STMPE keypad support"
	depends on MFD_STMPE
	depends on OF
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the keypad controller on STMPE I/O
	  expanders.

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

config KEYBOARD_SUN4I_LRADC
	tristate "Allwinner sun4i low res adc attached tablet keys support"
	depends on ARCH_SUNXI
	help
	  This selects support for the Allwinner low res adc attached tablet
	  keys found on Allwinner sunxi SoCs.

	  To compile this driver as a module, choose M here: the
	  module will be called sun4i-lradc-keys.

config KEYBOARD_IPAQ_MICRO
	tristate "Buttons on Micro SoC (iPaq h3100,h3600,h3700)"
	depends on MFD_IPAQ_MICRO
	help
	  Say Y to enable support for the buttons attached to
	  Micro peripheral controller on iPAQ h3100/h3600/h3700

	  To compile this driver as a module, choose M here: the
	  module will be called ipaq-micro-keys.

config KEYBOARD_IQS62X
	tristate "Azoteq IQS620A/621/622/624/625 keys and switches"
	depends on MFD_IQS62X
	help
	  Say Y here to enable key and switch support for the Azoteq IQS620A,
	  IQS621, IQS622, IQS624 and IQS625 multi-function sensors.

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

config KEYBOARD_OMAP
	tristate "TI OMAP keypad support"
	depends on ARCH_OMAP1
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the OMAP keypad.

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

config KEYBOARD_OMAP4
	tristate "TI OMAP4+ keypad support"
	depends on (OF && HAS_IOMEM) || ARCH_OMAP2PLUS
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the OMAP4+ keypad.

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

config KEYBOARD_SPEAR
	tristate "ST SPEAR keyboard support"
	depends on PLAT_SPEAR || COMPILE_TEST
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the SPEAR keyboard.

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

config KEYBOARD_TC3589X
	tristate "TC3589X Keypad support"
	depends on MFD_TC3589X
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the keypad controller on
	  TC35892/3 I/O expander.

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

config KEYBOARD_TM2_TOUCHKEY
	tristate "TM2 touchkey support"
	depends on I2C
	depends on LEDS_CLASS
	help
	  Say Y here to enable device driver for tm2-touchkey with
	  LED control for the Exynos5433 TM2 board.

	  To compile this driver as a module, choose M here.
	  module will be called tm2-touchkey.

config KEYBOARD_TWL4030
	tristate "TI TWL4030/TWL5030/TPS659x0 keypad support"
	depends on TWL4030_CORE
	select INPUT_MATRIXKMAP
	help
	  Say Y here if your board use the keypad controller on
	  TWL4030 family chips.  It's safe to say enable this
	  even on boards that don't use the keypad controller.

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

config KEYBOARD_XTKBD
	tristate "XT keyboard"
	select SERIO
	help
	  Say Y here if you want to use the old IBM PC/XT keyboard (or
	  compatible) on your system. This is only possible with a
	  parallel port keyboard adapter, you cannot connect it to the
	  keyboard port on a PC that runs Linux.

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

config KEYBOARD_CROS_EC
	tristate "ChromeOS EC keyboard"
	select INPUT_MATRIXKMAP
	select INPUT_VIVALDIFMAP
	depends on CROS_EC
	help
	  Say Y here to enable the matrix keyboard used by ChromeOS devices
	  and implemented on the ChromeOS EC. You must enable one bus option
	  (CROS_EC_I2C or CROS_EC_SPI) to use this.

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

config KEYBOARD_CAP11XX
	tristate "Microchip CAP11XX based touch sensors"
	depends on OF && I2C
	select REGMAP_I2C
	help
	  Say Y here to enable the CAP11XX touch sensor driver.

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

config KEYBOARD_BCM
	tristate "Broadcom keypad driver"
	depends on OF && HAVE_CLK && HAS_IOMEM
	select INPUT_MATRIXKMAP
	default ARCH_BCM_CYGNUS
	help
	  Say Y here if you want to use Broadcom keypad.

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

config KEYBOARD_MT6779
	tristate "MediaTek Keypad Support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select REGMAP_MMIO
	select INPUT_MATRIXKMAP
	help
	  Say Y here if you want to use the keypad on MediaTek SoCs.
	  If unsure, say N.

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

config KEYBOARD_MTK_PMIC
	tristate "MediaTek PMIC keys support"
	depends on MFD_MT6397 || COMPILE_TEST
	help
	  Say Y here if you want to use the pmic keys (powerkey/homekey).

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

config KEYBOARD_CYPRESS_SF
	tristate "Cypress StreetFighter touchkey support"
	depends on I2C
	help
	  Say Y here if you want to enable support for Cypress StreetFighter
	  touchkeys.

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

endif
