# SPDX-License-Identifier: GPL-2.0-only
#
# Multiplexer I2C chip drivers configuration
#

menu "Multiplexer I2C Chip support"
	depends on I2C_MUX

config I2C_ARB_GPIO_CHALLENGE
	tristate "GPIO-based I2C arbitration"
	depends on GPIOLIB || COMPILE_TEST
	depends on OF
	help
	  If you say yes to this option, support will be included for an
	  I2C multimaster arbitration scheme using GPIOs and a challenge &
	  response mechanism where masters have to claim the bus by asserting
	  a GPIO.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-arb-gpio-challenge.

config I2C_MUX_GPIO
	tristate "GPIO-based I2C multiplexer"
	depends on GPIOLIB
	help
	  If you say yes to this option, support will be included for a
	  GPIO based I2C multiplexer. This driver provides access to
	  I2C busses connected through a MUX, which is controlled
	  through GPIO pins.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-gpio.

config I2C_MUX_GPMUX
	tristate "General Purpose I2C multiplexer"
	select MULTIPLEXER
	depends on OF
	help
	  If you say yes to this option, support will be included for a
	  general purpose I2C multiplexer. This driver provides access to
	  I2C busses connected through a MUX, which in turn is controlled
	  by a MUX-controller from the MUX subsystem.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-gpmux.

config I2C_MUX_LTC4306
	tristate "LTC LTC4306/5 I2C multiplexer"
	select GPIOLIB
	select REGMAP_I2C
	help
	  If you say yes here you get support for the Analog Devices
	  LTC4306 or LTC4305 I2C mux/switch devices.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-ltc4306.

config I2C_MUX_PCA9541
	tristate "NXP PCA9541 I2C Master Selector"
	help
	  If you say yes here you get support for the NXP PCA9541
	  I2C Master Selector.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-pca9541.

config I2C_MUX_PCA954x
	tristate "NXP PCA954x/PCA984x and Maxim MAX735x/MAX736x I2C Mux/switches"
	depends on GPIOLIB || COMPILE_TEST
	help
	  If you say yes here you get support for NXP PCA954x/PCA984x
	  and Maxim MAX735x/MAX736x I2C mux/switch devices.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-pca954x.

config I2C_MUX_PINCTRL
	tristate "pinctrl-based I2C multiplexer"
	depends on PINCTRL
	depends on OF
	help
	  If you say yes to this option, support will be included for an I2C
	  multiplexer that uses the pinctrl subsystem, i.e. pin multiplexing.
	  This is useful for SoCs whose I2C module's signals can be routed to
	  different sets of pins at run-time.

	  This driver can also be built as a module. If so, the module will be
	  called i2c-mux-pinctrl.

config I2C_MUX_REG
	tristate "Register-based I2C multiplexer"
	depends on HAS_IOMEM
	help
	  If you say yes to this option, support will be included for a
	  register based I2C multiplexer. This driver provides access to
	  I2C busses connected through a MUX, which is controlled
	  by a single register.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-reg.

config I2C_DEMUX_PINCTRL
	tristate "pinctrl-based I2C demultiplexer"
	depends on PINCTRL && OF
	select OF_DYNAMIC
	help
	  If you say yes to this option, support will be included for an I2C
	  demultiplexer that uses the pinctrl subsystem. This is useful if you
	  want to change the I2C master at run-time depending on features.

config I2C_MUX_MLXCPLD
	tristate "Mellanox CPLD based I2C multiplexer"
	help
	  If you say yes to this option, support will be included for a
	  CPLD based I2C multiplexer. This driver provides access to
	  I2C busses connected through a MUX, which is controlled
	  by a CPLD register.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-mlxcpld.

config I2C_MUX_MULE
	tristate "Theobroma Systems Mule I2C device multiplexer"
	depends on OF && SENSORS_AMC6821
	help
	  Mule is an MCU that emulates a set of I2C devices, among which
	  devices that are reachable through an I2C-mux. The devices on the mux
	  can be selected by writing the appropriate device number to an I2C
	  configuration register.

	  If you say yes to this option, support will be included for a
	  Theobroma Systems Mule I2C multiplexer. This driver provides access to
	  I2C devices connected on this mux.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-mux-mule.

endmenu
