#
# 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
