#
# Input core configuration
#
menuconfig INPUT_KEYBOARD
	bool "Keyboards" if EMBEDDED || !X86
	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_AAED2000
	tristate "AAED-2000 keyboard"
	depends on MACH_AAED2000
	select INPUT_POLLDEV
	default y
	help
	  Say Y here to enable the keyboard on the Agilent AAED-2000
	  development board.

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

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_ADP5588
	tristate "ADP5588/87 I2C QWERTY Keypad and IO Expander"
	depends on I2C
	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 ATARI_KBD_CORE
	bool

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" if EMBEDDED || !X86
	default y
	select SERIO
	select SERIO_LIBPS2
	select SERIO_I8042 if X86
	select SERIO_GSCPS2 if GSC
	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_QT2160
	tristate "Atmel AT42QT2160 Touch Sensor Chip"
	depends on I2C && EXPERIMENTAL
	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_BFIN
	tristate "Blackfin BF54x keypad support"
	depends on (BF54x && !BF544)
	help
	  Say Y here if you want to use the BF54x keypad.

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

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 useable 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
	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 GENERIC_GPIO
	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 GENERIC_GPIO
	select INPUT_POLLDEV
	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_TCA6416
	tristate "TCA6416 Keypad Support"
	depends on I2C
	help
	  This driver implements basic keypad functionality
	  for keys connected through TCA6416 IO expander

	  Say Y here if your device has keys connected to
	  TCA6416 IO expander. Your board-specific setup logic
	  must also provide pin-mask details(of which TCA6416 pins
	  are used for keypad).

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


config KEYBOARD_MATRIX
	tristate "GPIO driven matrix keypad support"
	depends on GENERIC_GPIO
	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
	select INPUT_POLLDEV
	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_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_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"
	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_MCS
	tristate "MELFAS MCS Touchkey"
	depends on I2C
	help
	  Say Y here if you have the MELFAS MCS5000/5080 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 mcs_touchkey.

config KEYBOARD_IMX
	tristate "IMX keypad support"
	depends on ARCH_MXC
	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_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_NOMADIK
	tristate "ST-Ericsson Nomadik SKE keyboard"
	depends on PLAT_NOMADIK
	help
	  Say Y here if you want to use a keypad provided on the SKE controller
	  used on the Ux500 and Nomadik platforms

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

config KEYBOARD_OPENCORES
	tristate "OpenCores Keyboard Controller"
	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_PXA27x
	tristate "PXA27x/PXA3xx keypad support"
	depends on PXA27x || PXA3xx || ARCH_MMP
	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_PXA930_ROTARY
	tristate "PXA930/PXA935 Enhanced Rotary Controller Support"
	depends on CPU_PXA930 || CPU_PXA935
	help
	  Enable support for PXA930/PXA935 Enhanced Rotary Controller.

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

config KEYBOARD_SAMSUNG
	tristate "Samsung keypad support"
	depends on SAMSUNG_DEV_KEYPAD
	help
	  Say Y here if you want to use the Samsung keypad.

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

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_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 SUPERH || ARCH_SHMOBILE
	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
	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_DAVINCI
	tristate "TI DaVinci Key Scan"
	depends on ARCH_DAVINCI_DM365
	help
	  Say Y to enable keypad module support for the TI DaVinci
	  platforms (DM365).

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

config KEYBOARD_OMAP
	tristate "TI OMAP keypad support"
	depends on (ARCH_OMAP1 || ARCH_OMAP2)
	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 ARCH_OMAP4
	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_TNETV107X
	tristate "TI TNETV107X keypad support"
	depends on ARCH_DAVINCI_TNETV107X
	help
	  Say Y here if you want to use the TNETV107X keypad.

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

config KEYBOARD_TWL4030
	tristate "TI TWL4030/TWL5030/TPS659x0 keypad support"
	depends on TWL4030_CORE
	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_W90P910
	tristate "W90P910 Matrix Keypad support"
	depends on ARCH_W90X900
	help
	  Say Y here to enable the matrix keypad on evaluation board
	  based on W90P910.

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

endif
