#
# 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_ADP5588
	tristate "ADP5588 I2C QWERTY Keypad and IO Expander"
	depends on I2C
	help
	  Say Y here if you want to use a ADP5588 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 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_CORGI
	tristate "Corgi keyboard"
	depends on PXA_SHARPSL
	default y
	help
	  Say Y here to enable the keyboard on the Sharp Zaurus SL-C7xx
	  series of PDAs.

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

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_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_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_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
	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_SPITZ
	tristate "Spitz keyboard"
	depends on PXA_SHARPSL
	default y
	help
	  Say Y here to enable the keyboard on the Sharp Zaurus SL-C1000,
	  SL-C3000 and Sl-C3100 series of PDAs.

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

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
	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_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_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_TOSA
	tristate "Tosa keyboard"
	depends on MACH_TOSA
	default y
	help
	  Say Y here to enable the keyboard on the Sharp Zaurus SL-6000x (Tosa)

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

config KEYBOARD_TOSA_USE_EXT_KEYCODES
	bool "Tosa keyboard: use extended keycodes"
	depends on KEYBOARD_TOSA
	help
	  Say Y here to enable the tosa keyboard driver to generate extended
	  (>= 127) keycodes. Be aware, that they can't be correctly interpreted
	  by either console keyboard driver or by Kdrive keybd driver.

	  Say Y only if you know, what you are doing!

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
