# 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 || COMPILE_TEST
	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 || COMPILE_TEST
	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 || COMPILE_TEST
	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
