# SPDX-License-Identifier: GPL-2.0-only
#
# Touchscreen 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_88PM860X
	tristate "Marvell 88PM860x touchscreen"
	depends on MFD_88PM860X
	help
	  Say Y here if you have a 88PM860x PMIC and want to enable
	  support for the built-in touchscreen.

	  If unsure, say N.

	  To compile this driver as a module, choose M here: the
	  module will be called 88pm860x-ts.

config TOUCHSCREEN_ADS7846
	tristate "ADS7846/TSC2046/AD7873 and AD(S)7843 based touchscreens"
	depends on SPI_MASTER
	depends on HWMON = n || HWMON
	help
	  Say Y here if you have a touchscreen interface using the
	  ADS7846/TSC2046/AD7873 or ADS7843/AD7843 controller,
	  and your board-specific setup code includes that in its
	  table of SPI devices.

	  If HWMON is selected, and the driver is told the reference voltage
	  on your board, you will also get hwmon interfaces for the voltage
	  (and on ads7846/tsc2046/ad7873, temperature) sensors of this chip.

	  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_AD7877
	tristate "AD7877 based touchscreens"
	depends on SPI_MASTER
	help
	  Say Y here if you have a touchscreen interface using the
	  AD7877 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 ad7877.

config TOUCHSCREEN_AD7879
	tristate "Analog Devices AD7879-1/AD7889-1 touchscreen interface"
	help
	  Say Y here if you want to support a touchscreen interface using
	  the AD7879-1/AD7889-1 controller.

	  You should select a bus connection too.

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

config TOUCHSCREEN_AD7879_I2C
	tristate "support I2C bus connection"
	depends on TOUCHSCREEN_AD7879 && I2C
	select REGMAP_I2C
	help
	  Say Y here if you have AD7879-1/AD7889-1 hooked to an I2C bus.

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

config TOUCHSCREEN_AD7879_SPI
	tristate "support SPI bus connection"
	depends on TOUCHSCREEN_AD7879 && SPI_MASTER
	select REGMAP_SPI
	help
	  Say Y here if you have AD7879-1/AD7889-1 hooked to a SPI bus.

	  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 ad7879-spi.

config TOUCHSCREEN_ADC
	tristate "Generic ADC based resistive touchscreen"
	depends on IIO
	select IIO_BUFFER
	select IIO_BUFFER_CB
	help
	  Say Y here if you want to use the generic ADC
	  resistive touchscreen driver.

	  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 resistive-adc-touch.ko.

config TOUCHSCREEN_AR1021_I2C
	tristate "Microchip AR1020/1021 i2c touchscreen"
	depends on I2C && OF
	help
	  Say Y here if you have the Microchip AR1020 or AR1021 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 ar1021_i2c.

config TOUCHSCREEN_ATMEL_MXT
	tristate "Atmel mXT I2C Touchscreen"
	depends on I2C
	select FW_LOADER
	help
	  Say Y here if you have Atmel mXT series I2C touchscreen,
	  such as AT42QT602240/ATMXT224, connected to your system.

	  If unsure, say N.

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

config TOUCHSCREEN_ATMEL_MXT_T37
	bool "Support T37 Diagnostic Data"
	depends on TOUCHSCREEN_ATMEL_MXT
	depends on VIDEO_DEV=y || (TOUCHSCREEN_ATMEL_MXT=m && VIDEO_DEV=m)
	select VIDEOBUF2_VMALLOC
	help
	  Say Y here if you want support to output data from the T37
	  Diagnostic Data object using a V4L device.

config TOUCHSCREEN_AUO_PIXCIR
	tristate "AUO in-cell touchscreen using Pixcir ICs"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have a AUO display with in-cell touchscreen
	  using Pixcir ICs.

	  If unsure, say N.

	  To compile this driver as a module, choose M here: the
	  module will be called auo-pixcir-ts.

config TOUCHSCREEN_BU21013
	tristate "BU21013 based touch panel controllers"
	depends on I2C
	help
	  Say Y here if you have a bu21013 touchscreen connected to
	  your system.

	  If unsure, say N.

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

config TOUCHSCREEN_BU21029
	tristate "Rohm BU21029 based touch panel controllers"
	depends on I2C
	help
	  Say Y here if you have a Rohm BU21029 touchscreen controller
	  connected to your system.

	  If unsure, say N.

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

config TOUCHSCREEN_CHIPONE_ICN8318
	tristate "chipone icn8318 touchscreen controller"
	depends on GPIOLIB || COMPILE_TEST
	depends on I2C
	depends on OF
	help
	  Say Y here if you have a ChipOne icn8318 based I2C touchscreen.

	  If unsure, say N.

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

config TOUCHSCREEN_CHIPONE_ICN8505
	tristate "chipone icn8505 touchscreen controller"
	depends on I2C && ACPI
	help
	  Say Y here if you have a ChipOne icn8505 based I2C touchscreen.

	  If unsure, say N.

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

config TOUCHSCREEN_CY8CTMA140
	tristate "cy8ctma140 touchscreen"
	depends on I2C
	help
	  Say Y here if you have a Cypress CY8CTMA140 capacitive
	  touchscreen also just known as "TMA140"

	  If unsure, say N.

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

config TOUCHSCREEN_CY8CTMG110
	tristate "cy8ctmg110 touchscreen"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have a cy8ctmg110 capacitive touchscreen on
	  an AAVA device.

	  If unsure, say N.

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

config TOUCHSCREEN_CYTTSP_CORE
	tristate "Cypress TTSP touchscreen"
	help
	  Say Y here if you have a touchscreen using controller from
	  the Cypress TrueTouch(tm) Standard Product family connected
	  to your system. You will also need to select appropriate
	  bus connection below.

	  If unsure, say N.

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

config TOUCHSCREEN_CYTTSP_I2C
	tristate "support I2C bus connection"
	depends on TOUCHSCREEN_CYTTSP_CORE && I2C
	help
	  Say Y here if the touchscreen is connected via I2C bus.

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

config TOUCHSCREEN_CYTTSP_SPI
	tristate "support SPI bus connection"
	depends on TOUCHSCREEN_CYTTSP_CORE && SPI_MASTER
	help
	  Say Y here if the touchscreen is connected via SPI bus.

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

config TOUCHSCREEN_CYTTSP4_CORE
	tristate "Cypress TrueTouch Gen4 Touchscreen Driver"
	help
	  Core driver for Cypress TrueTouch(tm) Standard Product
	  Generation4 touchscreen controllers.

	  Say Y here if you have a Cypress Gen4 touchscreen.

	  If unsure, say N.

	  To compile this driver as a module, choose M here.

config TOUCHSCREEN_CYTTSP4_I2C
	tristate "support I2C bus connection"
	depends on TOUCHSCREEN_CYTTSP4_CORE && I2C
	help
	  Say Y here if the touchscreen is connected via I2C bus.

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

config TOUCHSCREEN_CYTTSP4_SPI
	tristate "support SPI bus connection"
	depends on TOUCHSCREEN_CYTTSP4_CORE && SPI_MASTER
	help
	  Say Y here if the touchscreen is connected via SPI bus.

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

config TOUCHSCREEN_CYTTSP5
	tristate "Cypress TrueTouch Gen5 Touchscreen Driver"
	depends on I2C
	select REGMAP_I2C
	select CRC_ITU_T
	help
	  Driver for Parade TrueTouch Standard Product Generation 5
	  touchscreen controllers. I2C bus interface support only.

	  Say Y here if you have a Cypress Gen5 touchscreen.

	  If unsure, say N.

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

config TOUCHSCREEN_DA9034
	tristate "Touchscreen support for Dialog Semiconductor DA9034"
	depends on PMIC_DA903X
	default y
	help
	  Say Y here to enable the support for the touchscreen found
	  on Dialog Semiconductor DA9034 PMIC.

	  If unsure, say N.

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

config TOUCHSCREEN_DA9052
	tristate "Dialog DA9052/DA9053 TSI"
	depends on PMIC_DA9052
	help
	  Say Y here to support the touchscreen found on Dialog Semiconductor
	  DA9052-BC and DA9053-AA/Bx PMICs.

	  If unsure, say N.

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

config TOUCHSCREEN_DYNAPRO
	tristate "Dynapro serial touchscreen"
	select SERIO
	help
	  Say Y here if you have a Dynapro 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 dynapro.

config TOUCHSCREEN_HAMPSHIRE
	tristate "Hampshire serial touchscreen"
	select SERIO
	help
	  Say Y here if you have a Hampshire 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 hampshire.

config TOUCHSCREEN_EETI
	tristate "EETI touchscreen panel support"
	depends on I2C
	help
	  Say Y here to enable support for I2C connected EETI touch panels.

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

config TOUCHSCREEN_EGALAX
	tristate "EETI eGalax multi-touch panel support"
	depends on I2C && OF
	help
	  Say Y here to enable support for I2C connected EETI
	  eGalax multi-touch panels.

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

config TOUCHSCREEN_EGALAX_SERIAL
	tristate "EETI eGalax serial touchscreen"
	select SERIO
	help
	  Say Y here to enable support for serial connected EETI
	  eGalax touch panels.

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

config TOUCHSCREEN_EXC3000
	tristate "EETI EXC3000 multi-touch panel support"
	depends on I2C
	help
	  Say Y here to enable support for I2C connected EETI
	  EXC3000 multi-touch panels.

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

config TOUCHSCREEN_FUJITSU
	tristate "Fujitsu serial touchscreen"
	select SERIO
	help
	  Say Y here if you have the Fujitsu touchscreen (such as one
	  installed in Lifebook P series laptop) connected to your
	  system.

	  If unsure, say N.

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

config TOUCHSCREEN_GOODIX
	tristate "Goodix I2C touchscreen"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have the Goodix touchscreen (such as one
	  installed in Onda v975w tablets) connected to your
	  system. It also supports 5-finger chip models, which can be
	  found on ARM tablets, like Wexler TAB7200 and MSI Primo73.

	  If unsure, say N.

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

config TOUCHSCREEN_HIDEEP
	tristate "HiDeep Touch IC"
	depends on I2C
	help
	  Say Y here if you have a touchscreen using HiDeep.

	  If unsure, say N.

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

config TOUCHSCREEN_HYCON_HY46XX
	tristate "Hycon hy46xx touchscreen support"
	depends on I2C
	help
	  Say Y here if you have a touchscreen using Hycon hy46xx

	  If unsure, say N.

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

config TOUCHSCREEN_HYNITRON_CSTXXX
	tristate "Hynitron touchscreen support"
	depends on I2C
	help
	  Say Y here if you have a touchscreen using a Hynitron
	  touchscreen controller.

	  If unsure, say N.

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

config TOUCHSCREEN_ILI210X
	tristate "Ilitek ILI210X based touchscreen"
	depends on I2C
	select CRC_CCITT
	help
	  Say Y here if you have a ILI210X based touchscreen
	  controller. This driver supports models ILI2102,
	  ILI2102s, ILI2103, ILI2103s and ILI2105.
	  Such kind of chipsets can be found in Amazon Kindle Fire
	  touchscreens.

	  If unsure, say N.

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

config TOUCHSCREEN_ILITEK
	tristate "Ilitek I2C 213X/23XX/25XX/Lego Series Touch ICs"
	depends on I2C
	help
	  Say Y here if you have touchscreen with ILITEK touch IC,
	  it supports 213X/23XX/25XX and other Lego series.

	  If unsure, say N.

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

config TOUCHSCREEN_IPROC
	tristate "IPROC touch panel driver support"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	help
	  Say Y here if you want to add support for the IPROC touch
	  controller to your system.

	  If unsure, say N.

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

config TOUCHSCREEN_S6SY761
	tristate "Samsung S6SY761 Touchscreen driver"
	depends on I2C
	help
	  Say Y if you have the Samsung S6SY761 driver

	  If unsure, say N

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

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_EKTF2127
	tristate "Elan eKTF2127 I2C touchscreen"
	depends on I2C
	help
	  Say Y here if you have an Elan eKTF2127 touchscreen
	  connected to your system.

	  If unsure, say N.

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

config TOUCHSCREEN_ELAN
	tristate "Elan eKTH I2C touchscreen"
	depends on I2C
	help
	  Say Y here if you have an Elan eKTH I2C touchscreen
	  connected to your system.

	  If unsure, say N.

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

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_WACOM_W8001
	tristate "Wacom W8001 penabled serial touchscreen"
	select SERIO
	help
	  Say Y here if you have an Wacom W8001 penabled 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 wacom_w8001.

config TOUCHSCREEN_WACOM_I2C
	tristate "Wacom Tablet support (I2C)"
	depends on I2C
	help
	  Say Y here if you want to use the I2C version of the Wacom
	  Pen Tablet.

	  If unsure, say N.

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

config TOUCHSCREEN_LPC32XX
	tristate "LPC32XX touchscreen controller"
	depends on ARCH_LPC32XX
	help
	  Say Y here if you have a LPC32XX device and want
	  to support the built-in touchscreen.

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

config TOUCHSCREEN_MAX11801
	tristate "MAX11801 based touchscreens"
	depends on I2C
	help
	  Say Y here if you have a MAX11801 based touchscreen
	  controller.

	  If unsure, say N.

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

config TOUCHSCREEN_MCS5000
	tristate "MELFAS MCS-5000 touchscreen"
	depends on I2C
	help
	  Say Y here if you have the MELFAS MCS-5000 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 mcs5000_ts.

config TOUCHSCREEN_MMS114
	tristate "MELFAS MMS114 touchscreen"
	depends on I2C
	help
	  Say Y here if you have the MELFAS MMS114 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 mms114.

config TOUCHSCREEN_MELFAS_MIP4
	tristate "MELFAS MIP4 Touchscreen"
	depends on I2C
	help
	  Say Y here if you have a MELFAS MIP4 Touchscreen device.

	  If unsure, say N.

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

config TOUCHSCREEN_MSG2638
	tristate "MStar msg2638 touchscreen support"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have an I2C touchscreen using MStar msg2638.

	  If unsure, say N.

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

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_NOVATEK_NVT_TS
	tristate "Novatek NT11205 touchscreen support"
	depends on I2C
	help
	  Say Y here if you have a Novatek NT11205 touchscreen.
	  If unsure, say N.

	  To compile this driver as a module, choose M here: the
	  module will be called novatek-nvt-ts.

config TOUCHSCREEN_IMAGIS
	tristate "Imagis touchscreen support"
	depends on I2C
	help
	  Say Y here if you have an Imagis IST30xxC touchscreen.
	  If unsure, say N.

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

config TOUCHSCREEN_IMX6UL_TSC
	tristate "Freescale i.MX6UL touchscreen controller"
	depends on ((OF && GPIOLIB) || COMPILE_TEST) && HAS_IOMEM
	help
	  Say Y here if you have a Freescale i.MX6UL, and want to
	  use the internal touchscreen controller.

	  If unsure, say N.

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

config TOUCHSCREEN_INEXIO
	tristate "iNexio serial touchscreens"
	select SERIO
	help
	  Say Y here if you have an iNexio 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 inexio.

config TOUCHSCREEN_MK712
	tristate "ICS MicroClock MK712 touchscreen"
	depends on ISA
	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 6xx touchscreen"
	depends on SH_HP6XX && SH_ADC
	help
	  Say Y here if you have a HP Jornada 620/660/680/690 and want to
	  support the built-in touchscreen.

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

config TOUCHSCREEN_HP7XX
	tristate "HP Jornada 7xx touchscreen"
	depends on SA1100_JORNADA720_SSP
	help
	  Say Y here if you have a HP Jornada 710/720/728 and want
	  to support the built-in touchscreen.

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

config TOUCHSCREEN_IPAQ_MICRO
	tristate "HP iPAQ Atmel Micro ASIC touchscreen"
	depends on MFD_IPAQ_MICRO
	help
	  Say Y here to enable support for the touchscreen attached to
	  the Atmel Micro peripheral controller on iPAQ h3100/h3600/h3700

	  If unsure, say N.

	  To compile this driver as a module, choose M here: the
	  module will be called ipaq-micro-ts.

config TOUCHSCREEN_HTCPEN
	tristate "HTC Shift X9500 touchscreen"
	depends on ISA
	help
	  Say Y here if you have an HTC Shift UMPC also known as HTC X9500
	  Clio / Shangrila 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 htcpen.

config TOUCHSCREEN_PENMOUNT
	tristate "Penmount serial touchscreen"
	select SERIO
	help
	  Say Y here if you have a Penmount 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 penmount.

config TOUCHSCREEN_EDT_FT5X06
	tristate "EDT FocalTech FT5x06 I2C Touchscreen support"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y here if you have an EDT "Polytouch" touchscreen based
	  on the FocalTech FT5x06 family of controllers connected to
	  your system.

	  If unsure, say N.

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

config TOUCHSCREEN_RASPBERRYPI_FW
	tristate "Raspberry Pi's firmware base touch screen support"
	depends on RASPBERRYPI_FIRMWARE || (RASPBERRYPI_FIRMWARE=n && COMPILE_TEST)
	help
	  Say Y here if you have the official Raspberry Pi 7 inch screen on
	  your system.

	  If unsure, say N.

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

config TOUCHSCREEN_MIGOR
	tristate "Renesas MIGO-R touchscreen"
	depends on (SH_MIGOR || COMPILE_TEST) && I2C
	help
	  Say Y here to enable MIGO-R touchscreen support.

	  If unsure, say N.

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

config TOUCHSCREEN_TOUCHRIGHT
	tristate "Touchright serial touchscreen"
	select SERIO
	help
	  Say Y here if you have a Touchright 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 touchright.

config TOUCHSCREEN_TOUCHWIN
	tristate "Touchwin serial touchscreen"
	select SERIO
	help
	  Say Y here if you have a Touchwin 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 touchwin.

config TOUCHSCREEN_TI_AM335X_TSC
	tristate "TI Touchscreen Interface"
	depends on MFD_TI_AM335X_TSCADC
	help
	  Say Y here if you have 4/5/8 wire touchscreen controller
	  to be connected to the ADC controller on your TI AM335x SoC.

	  If unsure, say N.

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

config TOUCHSCREEN_PIXCIR
	tristate "PIXCIR I2C touchscreens"
	depends on I2C
	help
	  Say Y here if you have a pixcir i2c touchscreen
	  controller.

	  If unsure, say N.

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

config TOUCHSCREEN_WDT87XX_I2C
	tristate "Weida HiTech I2C touchscreen"
	depends on I2C
	help
	  Say Y here if you have a Weida WDT87XX I2C touchscreen
	  connected to your system.

	  If unsure, say N.

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

config TOUCHSCREEN_WM831X
	tristate "Support for WM831x touchscreen controllers"
	depends on MFD_WM831X
	help
	  This enables support for the touchscreen controller on the WM831x
	  series of PMICs.

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

config TOUCHSCREEN_WM97XX
	tristate "Support for WM97xx AC97 touchscreen controllers"
	depends on AC97_BUS || AC97_BUS_NEW
	help
	  Say Y here if you have a Wolfson Microelectronics WM97xx
	  touchscreen connected to your system. Note that this option
	  only enables core driver, you will also need to select
	  support for appropriate chip below.

	  If unsure, say N.

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

config TOUCHSCREEN_WM9705
	bool "WM9705 Touchscreen interface support"
	depends on TOUCHSCREEN_WM97XX
	default y
	help
	  Say Y here to enable support for the Wolfson Microelectronics
	  WM9705 touchscreen controller.

config TOUCHSCREEN_WM9712
	bool "WM9712 Touchscreen interface support"
	depends on TOUCHSCREEN_WM97XX
	default y
	help
	  Say Y here to enable support for the Wolfson Microelectronics
	  WM9712 touchscreen controller.

config TOUCHSCREEN_WM9713
	bool "WM9713 Touchscreen interface support"
	depends on TOUCHSCREEN_WM97XX
	default y
	help
	  Say Y here to enable support for the Wolfson Microelectronics
	  WM9713 touchscreen controller.

config TOUCHSCREEN_WM97XX_MAINSTONE
	tristate "WM97xx Mainstone/Palm accelerated touch"
	depends on TOUCHSCREEN_WM97XX && ARCH_PXA
	depends on SND_PXA2XX_LIB_AC97
	help
	  Say Y here for support for streaming mode with WM97xx touchscreens
	  on Mainstone, Palm Tungsten T5, TX and LifeDrive systems.

	  If unsure, say N.

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

config TOUCHSCREEN_USB_COMPOSITE
	tristate "USB Touchscreen Driver"
	depends on USB_ARCH_HAS_HCD
	select USB
	help
	  USB Touchscreen driver for:
	  - eGalax Touchkit USB (also includes eTurboTouch CT-410/510/700)
	  - PanJit TouchSet USB
	  - 3M MicroTouch USB (EX II series)
	  - ITM
	  - some other eTurboTouch
	  - Gunze AHL61
	  - DMC TSC-10/25
	  - IRTOUCHSYSTEMS/UNITOP
	  - IdealTEK URTC1000
	  - GoTop Super_Q2/GogoPen/PenPower tablets
	  - JASTEC USB Touch Controller/DigiTech DTR-02U
	  - Zytronic controllers
	  - Elo TouchSystems 2700 IntelliTouch
	  - EasyTouch USB Touch Controller from Data Module
	  - e2i (Mimo monitors)

	  Have a look at <http://linux.chapter7.ch/touchkit/> for
	  a usage description and the required user-space stuff.

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

config TOUCHSCREEN_MXS_LRADC
	tristate "Freescale i.MX23/i.MX28 LRADC touchscreen"
	depends on MFD_MXS_LRADC
	help
	  Say Y here if you have a touchscreen connected to the low-resolution
	  analog-to-digital converter (LRADC) on an i.MX23 or i.MX28 processor.

	  To compile this driver as a module, choose M here: the module will be
	  called mxs-lradc-ts.

config TOUCHSCREEN_MX25
	tristate "Freescale i.MX25 touchscreen input driver"
	depends on MFD_MX25_TSADC
	help
	  Enable support for touchscreen connected to your i.MX25.

	  To compile this driver as a module, choose M here: the
	  module will be called fsl-imx25-tcq.

config TOUCHSCREEN_MC13783
	tristate "Freescale MC13783 touchscreen input driver"
	depends on MFD_MC13XXX
	help
	  Say Y here if you have an Freescale MC13783 PMIC on your
	  board and want to use its touchscreen

	  If unsure, say N.

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

config TOUCHSCREEN_USB_EGALAX
	default y
	bool "eGalax, eTurboTouch CT-410/510/700 device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_PANJIT
	default y
	bool "PanJit device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_3M
	default y
	bool "3M/Microtouch EX II series device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_ITM
	default y
	bool "ITM device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_ETURBO
	default y
	bool "eTurboTouch (non-eGalax compatible) device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_GUNZE
	default y
	bool "Gunze AHL61 device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_DMC_TSC10
	default y
	bool "DMC TSC-10/25 device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_IRTOUCH
	default y
	bool "IRTOUCHSYSTEMS/UNITOP device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_IDEALTEK
	default y
	bool "IdealTEK URTC1000 device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_GENERAL_TOUCH
	default y
	bool "GeneralTouch Touchscreen device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_GOTOP
	default y
	bool "GoTop Super_Q2/GogoPen/PenPower tablet device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_JASTEC
	default y
	bool "JASTEC/DigiTech DTR-02U USB touch controller device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_ELO
	default y
	bool "Elo TouchSystems 2700 IntelliTouch controller device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_E2I
	default y
	bool "e2i Touchscreen controller (e.g. from Mimo 740)" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_ZYTRONIC
	default y
	bool "Zytronic controller" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_ETT_TC45USB
	default y
	bool "ET&T USB series TC4UM/TC5UH touchscreen controller support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_NEXIO
	default y
	bool "NEXIO/iNexio device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE

config TOUCHSCREEN_USB_EASYTOUCH
	default y
	bool "EasyTouch USB Touch controller device support" if EXPERT
	depends on TOUCHSCREEN_USB_COMPOSITE
	help
	  Say Y here if you have an EasyTouch USB Touch controller.
	  If unsure, say N.

config TOUCHSCREEN_TOUCHIT213
	tristate "Sahara TouchIT-213 touchscreen"
	select SERIO
	help
	  Say Y here if you have a Sahara TouchIT-213 Tablet PC.

	  If unsure, say N.

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

config TOUCHSCREEN_TS4800
	tristate "TS-4800 touchscreen"
	depends on HAS_IOMEM && OF
	depends on SOC_IMX51 || COMPILE_TEST
	select MFD_SYSCON
	help
	  Say Y here if you have a touchscreen on a TS-4800 board.

	  On TS-4800, the touchscreen is not handled directly by Linux but by
	  a companion FPGA.

	  If unsure, say N.

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

config TOUCHSCREEN_TSC_SERIO
	tristate "TSC-10/25/40 serial touchscreen support"
	select SERIO
	help
	  Say Y here if you have a TSC-10, 25 or 40 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 tsc40.

config TOUCHSCREEN_TSC200X_CORE
	tristate

config TOUCHSCREEN_TSC2004
	tristate "TSC2004 based touchscreens"
	depends on I2C
	select REGMAP_I2C
	select TOUCHSCREEN_TSC200X_CORE
	help
	  Say Y here if you have a TSC2004 based touchscreen.

	  If unsure, say N.

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

config TOUCHSCREEN_TSC2005
	tristate "TSC2005 based touchscreens"
	depends on SPI_MASTER
	select REGMAP_SPI
	select TOUCHSCREEN_TSC200X_CORE
	help
	  Say Y here if you have a TSC2005 based touchscreen.

	  If unsure, say N.

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

config TOUCHSCREEN_TSC2007
	tristate "TSC2007 based touchscreens"
	depends on I2C
	help
	  Say Y here if you have a TSC2007 based touchscreen.

	  If unsure, say N.

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

config TOUCHSCREEN_TSC2007_IIO
	bool "IIO interface for external ADC input and temperature"
	depends on TOUCHSCREEN_TSC2007
	depends on IIO=y || IIO=TOUCHSCREEN_TSC2007
	help
	  Saying Y here adds an iio interface to the tsc2007 which
	  provides values for the AUX input (used for e.g. battery
	  or ambient light monitoring), temperature and raw input
	  values.

config TOUCHSCREEN_PCAP
	tristate "Motorola PCAP touchscreen"
	depends on EZX_PCAP
	help
	  Say Y here if you have a Motorola EZX telephone and
	  want to enable support for the built-in touchscreen.

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

config TOUCHSCREEN_RM_TS
	tristate "Raydium I2C Touchscreen"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have Raydium series I2C touchscreen,
	  such as RM32380, connected to your system.

	  If unsure, say N.

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

config TOUCHSCREEN_SILEAD
	tristate "Silead I2C touchscreen"
	depends on I2C
	help
	  Say Y here if you have the Silead touchscreen connected to
	  your system.

	  If unsure, say N.

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

config TOUCHSCREEN_SIS_I2C
	tristate "SiS 9200 family I2C touchscreen"
	depends on I2C
	select CRC_ITU_T
	depends on GPIOLIB || COMPILE_TEST
	help
	  This enables support for SiS 9200 family over I2C based touchscreens.

	  If unsure, say N.

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

config TOUCHSCREEN_ST1232
	tristate "Sitronix ST1232 or ST1633 touchscreen controllers"
	depends on I2C
	help
	  Say Y here if you want to support the Sitronix ST1232
	  or ST1633 touchscreen controller.

	  If unsure, say N.

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

config TOUCHSCREEN_STMFTS
	tristate "STMicroelectronics STMFTS touchscreen"
	depends on I2C
	depends on LEDS_CLASS
	help
	  Say Y here if you want support for STMicroelectronics
	  STMFTS touchscreen.

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

config TOUCHSCREEN_STMPE
	tristate "STMicroelectronics STMPE touchscreens"
	depends on MFD_STMPE
	depends on OF
	help
	  Say Y here if you want support for STMicroelectronics
	  STMPE touchscreen controllers.

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

config TOUCHSCREEN_SUN4I
	tristate "Allwinner sun4i resistive touchscreen controller support"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on HWMON
	depends on THERMAL || !THERMAL_OF
	help
	  This selects support for the resistive touchscreen controller
	  found on Allwinner sunxi SoCs.

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

config TOUCHSCREEN_SUR40
	tristate "Samsung SUR40 (Surface 2.0/PixelSense) touchscreen"
	depends on USB && MEDIA_USB_SUPPORT && HAS_DMA
	depends on VIDEO_DEV
	select VIDEOBUF2_DMA_SG
	help
	  Say Y here if you want support for the Samsung SUR40 touchscreen
	  (also known as Microsoft Surface 2.0 or Microsoft PixelSense).

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

config TOUCHSCREEN_SURFACE3_SPI
	tristate "Ntrig/Microsoft Surface 3 SPI touchscreen"
	depends on SPI
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have the Ntrig/Microsoft SPI touchscreen
	  controller chip as found on the Surface 3 in your system.

	  If unsure, say N.

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

config TOUCHSCREEN_SX8654
	tristate "Semtech SX8654 touchscreen"
	depends on I2C
	help
	  Say Y here if you have a Semtech SX8654 touchscreen controller.

	  If unsure, say N

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

config TOUCHSCREEN_TPS6507X
	tristate "TPS6507x based touchscreens"
	depends on I2C
	help
	  Say Y here if you have a TPS6507x based touchscreen
	  controller.

	  If unsure, say N.

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

config TOUCHSCREEN_ZET6223
	tristate "Zeitec ZET6223 touchscreen driver"
	depends on I2C
	help
	  Say Y here if you have a touchscreen using Zeitec ZET6223

	  If unsure, say N.

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

config TOUCHSCREEN_ZFORCE
	tristate "Neonode zForce infrared touchscreens"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have a touchscreen using the zforce
	  infraread technology from Neonode.

	  If unsure, say N.

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

config TOUCHSCREEN_COLIBRI_VF50
	tristate "Toradex Colibri on board touchscreen driver"
	depends on IIO
	depends on GPIOLIB || COMPILE_TEST
	help
	  Say Y here if you have a Colibri VF50 and plan to use
	  the on-board provided 4-wire touchscreen driver.

	  If unsure, say N.

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

config TOUCHSCREEN_ROHM_BU21023
	tristate "ROHM BU21023/24 Dual touch support resistive touchscreens"
	depends on I2C
	help
	  Say Y here if you have a touchscreen using ROHM BU21023/24.

	  If unsure, say N.

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

config TOUCHSCREEN_IQS5XX
	tristate "Azoteq IQS550/572/525 trackpad/touchscreen controller"
	depends on I2C
	help
	  Say Y to enable support for the Azoteq IQS550/572/525
	  family of trackpad/touchscreen controllers.

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

config TOUCHSCREEN_IQS7211
	tristate "Azoteq IQS7210A/7211A/E trackpad/touchscreen controller"
	depends on I2C
	help
	  Say Y to enable support for the Azoteq IQS7210A/7211A/E
	  family of trackpad/touchscreen controllers.

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

config TOUCHSCREEN_ZINITIX
	tristate "Zinitix touchscreen support"
	depends on I2C
	help
	  Say Y here if you have a touchscreen using Zinitix bt541,
	  or something similar enough.

	  If unsure, say N.

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

config TOUCHSCREEN_HIMAX_HX83112B
	tristate "Himax hx83112b touchscreen driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y here to enable support for Himax hx83112b touchscreens.

	  If unsure, say N.

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

endif
