#
# Mouse driver configuration
#
menuconfig INPUT_TOUCHSCREEN
	bool "Touchscreens"
	help
	  Say Y here, and a list of supported touchscreens will be displayed.
	  This option doesn't affect the kernel.

	  If unsure, say Y.

if INPUT_TOUCHSCREEN

config TOUCHSCREEN_ADS7846
	tristate "ADS 7846 based touchscreens"
	depends on SPI_MASTER
	help
	  Say Y here if you have a touchscreen interface using the
	  ADS7846 controller, and your board-specific initialization
	  code includes that in its table of SPI devices.

	  If unsure, say N (but it's safe to say "Y").

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

config TOUCHSCREEN_BITSY
	tristate "Compaq iPAQ H3600 (Bitsy) touchscreen"
	depends on SA1100_BITSY
	select SERIO
	help
	  Say Y here if you have the h3600 (Bitsy) touchscreen.

	  If unsure, say N.

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

config TOUCHSCREEN_CORGI
	tristate "SharpSL (Corgi and Spitz series) touchscreen driver"
	depends on PXA_SHARPSL
	default y	
	help
	  Say Y here to enable the driver for the touchscreen on the 
	  Sharp SL-C7xx and SL-Cxx00 series of PDAs.

	  If unsure, say N.

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

config TOUCHSCREEN_GUNZE
	tristate "Gunze AHL-51S touchscreen"
	select SERIO
	help
	  Say Y here if you have the Gunze AHL-51 touchscreen connected to
	  your system.

	  If unsure, say N.

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

config TOUCHSCREEN_ELO
	tristate "Elo serial touchscreens"
	select SERIO
	help
	  Say Y here if you have an Elo serial touchscreen connected to
	  your system.

	  If unsure, say N.

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

config TOUCHSCREEN_MTOUCH
	tristate "MicroTouch serial touchscreens"
	select SERIO
	help
	  Say Y here if you have a MicroTouch (3M) serial touchscreen connected to
	  your system.

	  If unsure, say N.

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

config TOUCHSCREEN_MK712
	tristate "ICS MicroClock MK712 touchscreen"
	help
	  Say Y here if you have the ICS MicroClock MK712 touchscreen
	  controller chip in your system.

	  If unsure, say N.

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

config TOUCHSCREEN_HP600
	tristate "HP Jornada 680/690 touchscreen"
	depends on SH_HP600 && SH_ADC
	help
	  Say Y here if you have a HP Jornada 680 or 690 and want to
          support the built-in touchscreen.

	  If unsure, say N.

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

endif
