# SPDX-License-Identifier: GPL-2.0-only
#
# Tablet driver configuration
#
menuconfig INPUT_TABLET
	bool "Tablets"
	help
	  Say Y here, and a list of supported tablets will be displayed.
	  This option doesn't affect the kernel.

	  If unsure, say Y.

if INPUT_TABLET

config TABLET_USB_ACECAD
	tristate "Acecad Flair tablet support (USB)"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use the USB version of the Acecad Flair
	  tablet.  Make sure to say Y to "Mouse support"
	  (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
	  (CONFIG_INPUT_EVDEV) as well.

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

config TABLET_USB_AIPTEK
	tristate "Aiptek 6000U/8000U and Genius G_PEN tablet support (USB)"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use the USB version of the Aiptek 6000U,
	  Aiptek 8000U or Genius G-PEN 560 tablet.  Make sure to say Y to
	  "Mouse support" (CONFIG_INPUT_MOUSEDEV) and/or "Event interface
	  support" (CONFIG_INPUT_EVDEV) as well.

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

config TABLET_USB_GTCO
	tristate "GTCO CalComp/InterWrite USB Support"
	depends on USB && INPUT
	help
	  Say Y here if you want to use the USB version of the GTCO
	  CalComp/InterWrite Tablet.  Make sure to say Y to "Mouse support"
	  (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
	  (CONFIG_INPUT_EVDEV) as well.

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

config TABLET_USB_HANWANG
	tristate "Hanwang Art Master III tablet support (USB)"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use the USB version of the Hanwang Art
	  Master III tablet.

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

config TABLET_USB_KBTAB
	tristate "KB Gear JamStudio tablet support (USB)"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use the USB version of the KB Gear
	  JamStudio tablet.  Make sure to say Y to "Mouse support"
	  (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
	  (CONFIG_INPUT_EVDEV) as well.

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

config TABLET_USB_PEGASUS
	tristate "Pegasus Mobile Notetaker Pen input tablet support"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  Say Y here if you want to use the Pegasus Mobile Notetaker,
	  also known as:
	  Genie e-note The Notetaker,
	  Staedtler Digital ballpoint pen 990 01,
	  IRISnotes Express or
	  NEWLink Digital Note Taker.

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

config TABLET_SERIAL_WACOM4
	tristate "Wacom protocol 4 serial tablet support"
	select SERIO
	help
	  Say Y here if you want to use Wacom protocol 4 serial tablets.
	  E.g. serial versions of the Cintiq, Graphire or Penpartner.

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

endif
