# SPDX-License-Identifier: GPL-2.0-only
#
# RMI4 configuration
#
config RMI4_CORE
	tristate "Synaptics RMI4 bus support"
	select IRQ_DOMAIN
	help
	  Say Y here if you want to support the Synaptics RMI4 bus.  This is
	  required for all RMI4 device support.

	  If unsure, say Y.

if RMI4_CORE

config RMI4_I2C
	tristate "RMI4 I2C Support"
	depends on I2C
	help
	  Say Y here if you want to support RMI4 devices connected to an I2C
	  bus.

	  If unsure, say Y.

config RMI4_SPI
	tristate "RMI4 SPI Support"
	depends on SPI
	help
	  Say Y here if you want to support RMI4 devices connected to a SPI
	  bus.

	  If unsure, say N.

config RMI4_SMB
	tristate "RMI4 SMB Support"
	depends on I2C
	help
	  Say Y here if you want to support RMI4 devices connected to an SMB
	  bus.

	  If unsure, say N.

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

config RMI4_F03
	bool "RMI4 Function 03 (PS2 Guest)"
	depends on RMI4_CORE
	help
	  Say Y here if you want to add support for RMI4 function 03.

	  Function 03 provides PS2 guest support for RMI4 devices. This
	  includes support for TrackPoints on TouchPads.

config RMI4_F03_SERIO
	tristate
	depends on RMI4_CORE
	depends on RMI4_F03
	default RMI4_CORE
	select SERIO

config RMI4_2D_SENSOR
	bool

config RMI4_F11
	bool "RMI4 Function 11 (2D pointing)"
	select RMI4_2D_SENSOR
	help
	  Say Y here if you want to add support for RMI4 function 11.

	  Function 11 provides 2D multifinger pointing for touchscreens and
	  touchpads. For sensors that support relative pointing, F11 also
	  provides mouse input.

config RMI4_F12
	bool "RMI4 Function 12 (2D pointing)"
	select RMI4_2D_SENSOR
	help
	  Say Y here if you want to add support for RMI4 function 12.

	  Function 12 provides 2D multifinger pointing for touchscreens and
	  touchpads. For sensors that support relative pointing, F12 also
	  provides mouse input.

config RMI4_F30
	bool "RMI4 Function 30 (GPIO LED)"
	help
	  Say Y here if you want to add support for RMI4 function 30.

	  Function 30 provides GPIO and LED support for RMI4 devices. This
	  includes support for buttons on TouchPads and ClickPads.

config RMI4_F34
	bool "RMI4 Function 34 (Device reflash)"
	select FW_LOADER
	help
	  Say Y here if you want to add support for RMI4 function 34.

	  Function 34 provides support for upgrading the firmware on the RMI4
	  device via the firmware loader interface. This is triggered using a
	  sysfs attribute.

config RMI4_F54
	bool "RMI4 Function 54 (Analog diagnostics)"
	depends on VIDEO_V4L2=y || (RMI4_CORE=m && VIDEO_V4L2=m)
	select VIDEOBUF2_VMALLOC
	select RMI4_F55
	help
	  Say Y here if you want to add support for RMI4 function 54

	  Function 54 provides access to various diagnostic features in certain
	  RMI4 touch sensors.

config RMI4_F55
	bool "RMI4 Function 55 (Sensor tuning)"
	help
	  Say Y here if you want to add support for RMI4 function 55

	  Function 55 provides access to the RMI4 touch sensor tuning
	  mechanism.

endif # RMI_CORE
