# 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 and PCA984x I2C Mux/switches"
	depends on GPIOLIB || COMPILE_TEST
	help
	  If you say yes here you get support for the NXP PCA954x
	  and PCA984x 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.

endmenu
