# SPDX-License-Identifier: GPL-2.0-only
#
# Sensor device configuration
#

menu "I2C Hardware Bus support"
	depends on HAS_IOMEM

comment "PC SMBus host controller drivers"
	depends on PCI

config I2C_CCGX_UCSI
	tristate
	help
	  A common module to provide an API to instantiate UCSI device
	  for Cypress CCGx Type-C controller. Individual bus drivers
	  need to select this one on demand.

config I2C_ALI1535
	tristate "ALI 1535"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the SMB
	  Host controller on Acer Labs Inc. (ALI) M1535 South Bridges.  The SMB
	  controller is part of the 7101 device, which is an ACPI-compliant
	  Power Management Unit (PMU).

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

config I2C_ALI1563
	tristate "ALI 1563"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the SMB
	  Host controller on Acer Labs Inc. (ALI) M1563 South Bridges.  The SMB
	  controller is part of the 7101 device, which is an ACPI-compliant
	  Power Management Unit (PMU).

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

config I2C_ALI15X3
	tristate "ALI 15x3"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the
	  Acer Labs Inc. (ALI) M1514 and M1543 motherboard I2C interfaces.

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

config I2C_AMD756
	tristate "AMD 756/766/768/8111 and nVidia nForce"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the AMD
	  756/766/768 mainboard I2C interfaces.  The driver also includes
	  support for the first (SMBus 1.0) I2C interface of the AMD 8111 and
	  the nVidia nForce I2C interface.

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

config I2C_AMD8111
	tristate "AMD 8111"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the
	  second (SMBus 2.0) AMD 8111 mainboard I2C interface.

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

config I2C_AMD_MP2
	tristate "AMD MP2 PCIe"
	depends on PCI && ACPI
	help
	  If you say yes to this option, support will be included for the AMD
	  MP2 PCIe I2C adapter.

	  This driver can also be built as modules.  If so, the modules will
	  be called i2c-amd-mp2-pci and i2c-amd-mp2-plat.

config I2C_AMD_ASF
	tristate "AMD ASF I2C Controller Support"
	depends on I2C_PIIX4
	select I2C_SLAVE
	help
	  This option enables support for the AMD ASF (Alert Standard Format)
	  I2C controller. The AMD ASF controller is an SMBus controller with
	  built-in ASF functionality, allowing it to issue generic SMBus
	  packets and communicate with the DASH controller using MCTP over
	  ASF.

	  If you have an AMD system with ASF support and want to enable this
	  functionality, say Y or M here. If unsure, say N.

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

config I2C_HIX5HD2
	tristate "Hix5hd2 high-speed I2C driver"
	depends on ARCH_HISI || ARCH_HIX5HD2 || COMPILE_TEST
	help
	  Say Y here to include support for the high-speed I2C controller
	  used in HiSilicon hix5hd2 SoCs.

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

config I2C_I801
	tristate "Intel 82801 (ICH/PCH)"
	depends on PCI && HAS_IOPORT
	select P2SB if X86
	select CHECK_SIGNATURE if X86 && DMI
	select I2C_SMBUS
	help
	  If you say yes to this option, support will be included for the Intel
	  801 family of mainboard I2C interfaces.  Specifically, the following
	  versions of the chipset are supported:
	    82801AA
	    82801AB
	    82801BA
	    82801CA/CAM
	    82801DB
	    82801EB/ER (ICH5/ICH5R)
	    6300ESB
	    ICH6
	    ICH7
	    ESB2
	    ICH8
	    ICH9
	    EP80579 (Tolapai)
	    ICH10
	    5/3400 Series (PCH)
	    6 Series (PCH)
	    Patsburg (PCH)
	    DH89xxCC (PCH)
	    Panther Point (PCH)
	    Lynx Point (PCH)
	    Avoton (SOC)
	    Wellsburg (PCH)
	    Coleto Creek (PCH)
	    Wildcat Point (PCH)
	    BayTrail (SOC)
	    Braswell (SOC)
	    Sunrise Point (PCH)
	    Kaby Lake (PCH)
	    DNV (SOC)
	    Broxton (SOC)
	    Lewisburg (PCH)
	    Gemini Lake (SOC)
	    Cannon Lake (PCH)
	    Cedar Fork (PCH)
	    Ice Lake (PCH)
	    Comet Lake (PCH)
	    Elkhart Lake (PCH)
	    Tiger Lake (PCH)
	    Jasper Lake (SOC)
	    Emmitsburg (PCH)
	    Alder Lake (PCH)
	    Raptor Lake (PCH)
	    Meteor Lake (SOC and PCH)
	    Birch Stream (SOC)
	    Arrow Lake (SOC)
	    Panther Lake (SOC)

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

config I2C_I801_MUX
	def_bool I2C_I801
	depends on DMI && I2C_MUX_GPIO
	depends on !(I2C_I801=y && I2C_MUX=m)
	help
	  Optional support for multiplexed SMBUS on certain systems with
	  more than 8 memory slots.

config I2C_ISCH
	tristate "Intel SCH SMBus 1.0"
	depends on PCI && HAS_IOPORT
	select LPC_SCH
	help
	  Say Y here if you want to use SMBus controller on the Intel SCH
	  based systems.

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

config I2C_ISMT
	tristate "Intel iSMT SMBus Controller"
	depends on PCI && X86
	help
	  If you say yes to this option, support will be included for the Intel
	  iSMT SMBus host controller interface.

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

config I2C_PIIX4
	tristate "Intel PIIX4 and compatible (ATI/AMD/Serverworks/Broadcom/SMSC)"
	depends on PCI && HAS_IOPORT
	select I2C_SMBUS
	help
	  If you say yes to this option, support will be included for the Intel
	  PIIX4 family of mainboard I2C interfaces.  Specifically, the following
	  versions of the chipset are supported (note that Serverworks is part
	  of Broadcom):
	    Intel PIIX4
	    Intel 440MX
	    ATI IXP200
	    ATI IXP300
	    ATI IXP400
	    ATI SB600
	    ATI SB700/SP5100
	    ATI SB800
	    AMD Hudson-2
	    AMD ML
	    AMD CZ
	    Hygon CZ
	    Serverworks OSB4
	    Serverworks CSB5
	    Serverworks CSB6
	    Serverworks HT-1000
	    Serverworks HT-1100
	    SMSC Victory66

	  Some AMD chipsets contain two PIIX4-compatible SMBus
	  controllers. This driver will attempt to use both controllers
	  on the SB700/SP5100, if they have been initialized by the BIOS.

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

config I2C_CHT_WC
	tristate "Intel Cherry Trail Whiskey Cove PMIC smbus controller"
	depends on INTEL_SOC_PMIC_CHTWC
	help
	  If you say yes to this option, support will be included for the
	  SMBus controller found in the Intel Cherry Trail Whiskey Cove PMIC
	  found on some Intel Cherry Trail systems.

	  Note this controller is hooked up to a TI bq24292i charger-IC,
	  combined with a FUSB302 Type-C port-controller as such it is advised
	  to also select CONFIG_TYPEC_FUSB302=m.

config I2C_NFORCE2
	tristate "Nvidia nForce2, nForce3 and nForce4"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the Nvidia
	  nForce2, nForce3 and nForce4 families of mainboard I2C interfaces.

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

config I2C_NVIDIA_GPU
	tristate "NVIDIA GPU I2C controller"
	depends on PCI
	select I2C_CCGX_UCSI
	help
	  If you say yes to this option, support will be included for the
	  NVIDIA GPU I2C controller which is used to communicate with the GPU's
	  Type-C controller. This driver can also be built as a module called
	  i2c-nvidia-gpu.

config I2C_SIS5595
	tristate "SiS 5595"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the
	  SiS5595 SMBus (a subset of I2C) interface.

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

config I2C_SIS630
	tristate "SiS 630/730/964"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the
	  SiS630, SiS730 and SiS964 SMBus (a subset of I2C) interface.

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

config I2C_SIS96X
	tristate "SiS 96x"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the SiS
	  96x SMBus (a subset of I2C) interfaces.  Specifically, the following
	  chipsets are supported:
	    645/961
	    645DX/961
	    645DX/962
	    648/961
	    650/961
	    735
	    745

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

config I2C_VIA
	tristate "VIA VT82C586B"
	depends on PCI && HAS_IOPORT
	select I2C_ALGOBIT
	help
	  If you say yes to this option, support will be included for the VIA
	  82C586B I2C interface

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

config I2C_VIAPRO
	tristate "VIA VT82C596/82C686/82xx and CX700/VX8xx/VX900"
	depends on PCI && HAS_IOPORT
	help
	  If you say yes to this option, support will be included for the VIA
	  VT82C596 and later SMBus interface.  Specifically, the following
	  chipsets are supported:
	    VT82C596A/B
	    VT82C686A/B
	    VT8231
	    VT8233/A
	    VT8235
	    VT8237R/A/S
	    VT8251
	    CX700
	    VX800/VX820
	    VX855/VX875
	    VX900

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

if ACPI

config I2C_ZHAOXIN
	tristate "Zhaoxin I2C Interface"
	depends on PCI || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  ZHAOXIN I2C interface

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

comment "ACPI drivers"

config I2C_SCMI
	tristate "SMBus Control Method Interface"
	help
	  This driver supports the SMBus Control Method Interface. It needs the
	  BIOS to declare ACPI control methods as described in the SMBus Control
	  Method Interface specification.

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

endif # ACPI

comment "Mac SMBus host controller drivers"
	depends on PPC_CHRP || PPC_PMAC

config I2C_HYDRA
	tristate "CHRP Apple Hydra Mac I/O I2C interface"
	depends on PCI && PPC_CHRP
	select I2C_ALGOBIT
	help
	  This supports the use of the I2C interface in the Apple Hydra Mac
	  I/O chip on some CHRP machines (e.g. the LongTrail).  Say Y if you
	  have such a machine.

	  This support is also available as a module.  If so, the module
	  will be called i2c-hydra.

config I2C_POWERMAC
	tristate "Powermac I2C interface"
	depends on PPC_PMAC
	default y
	help
	  This exposes the various PowerMac i2c interfaces to the linux i2c
	  layer and to userland. It is used by various drivers on the PowerMac
	  platform, and should generally be enabled.

	  This support is also available as a module.  If so, the module
	  will be called i2c-powermac.

comment "I2C system bus drivers (mostly embedded / system-on-chip)"

config I2C_ALTERA
	tristate "Altera Soft IP I2C"
	depends on ARCH_INTEL_SOCFPGA || NIOS2 || COMPILE_TEST
	depends on OF
	help
	  If you say yes to this option, support will be included for the
	  Altera Soft IP I2C interfaces on SoCFPGA and Nios2 architectures.

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

config I2C_ASPEED
	tristate "Aspeed I2C Controller"
	depends on ARCH_ASPEED || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  Aspeed I2C controller.

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

config I2C_AT91
	tristate "Atmel AT91 I2C Two-Wire interface (TWI)"
	depends on ARCH_AT91 || COMPILE_TEST
	help
	  This supports the use of the I2C interface on Atmel AT91
	  processors.

	  A serious problem is that there is no documented way to issue
	  repeated START conditions for more than two messages, as needed
	  to support combined I2C messages.  Use the i2c-gpio driver
	  unless your system can cope with this limitation.

	  Caution! at91rm9200, at91sam9261, at91sam9260, at91sam9263 devices
	  don't have clock stretching in transmission mode. For that reason,
	  you can encounter underrun issues causing premature stop sendings if
	  the latency to fill the transmission register is too long. If you
	  are facing this situation, use the i2c-gpio driver.

config I2C_AT91_SLAVE_EXPERIMENTAL
	bool "Microchip AT91 I2C experimental slave mode"
	depends on I2C_AT91
	select I2C_SLAVE
	help
	  If you say yes to this option, support for the slave mode will be
	  added. Caution: do not use it for production. This feature has not
	  been tested in a heavy way, help wanted.
	  There are known bugs:
	    - It can hang, on a SAMA5D4, after several transfers.
	    - There are some mismatches with a SAMA5D4 as slave and a SAMA5D2 as
	    master.

config I2C_AU1550
	tristate "Au1550/Au1200/Au1300 SMBus interface"
	depends on MIPS_ALCHEMY
	help
	  If you say yes to this option, support will be included for the
	  Au1550/Au1200/Au1300 SMBus interface.

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

config I2C_AXXIA
	tristate "Axxia I2C controller"
	depends on ARCH_AXXIA || COMPILE_TEST
	default ARCH_AXXIA
	select I2C_SLAVE
	help
	  Say yes if you want to support the I2C bus on Axxia platforms.

	  Please note that this controller is limited to transfers of maximum
	  255 bytes in length. Any attempt to to a larger transfer will return
	  an error.

config I2C_BCM2835
	tristate "Broadcom BCM2835 I2C controller"
	depends on ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST
	depends on COMMON_CLK
	help
	  If you say yes to this option, support will be included for the
	  BCM2835 I2C controller.

	  If you don't know what to do here, say N.

	  This support is also available as a module.  If so, the module
	  will be called i2c-bcm2835.

config I2C_BCM_IPROC
	tristate "Broadcom iProc I2C controller"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	default ARCH_BCM_IPROC
	select I2C_SLAVE
	help
	  If you say yes to this option, support will be included for the
	  Broadcom iProc I2C controller.

	  If you don't know what to do here, say N.

config I2C_BCM_KONA
	tristate "BCM Kona I2C adapter"
	depends on ARCH_BCM_MOBILE || COMPILE_TEST
	default y if ARCH_BCM_MOBILE
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on the Broadcom Kona family of processors.

	  If you do not need KONA I2C interface, say N.

config I2C_BRCMSTB
	tristate "BRCM Settop/DSL I2C controller"
	depends on ARCH_BCM2835 || ARCH_BCMBCA || ARCH_BRCMSTB || \
		   BMIPS_GENERIC || COMPILE_TEST
	default ARCH_BCM2835 || ARCH_BCMBCA || ARCH_BRCMSTB || BMIPS_GENERIC
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on the Broadcom Settop/DSL SoCs.

	  If you do not need I2C interface, say N.

config I2C_CADENCE
	tristate "Cadence I2C Controller"
	depends on ARCH_ZYNQ || ARM64 || XTENSA || RISCV || COMPILE_TEST
	help
	  Say yes here to select Cadence I2C Host Controller. This controller is
	  e.g. used by Xilinx Zynq.

config I2C_CBUS_GPIO
	tristate "CBUS I2C driver"
	depends on GPIOLIB || COMPILE_TEST
	help
	  Support for CBUS access using I2C API. Mostly relevant for Nokia
	  Internet Tablets (770, N800 and N810).

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

config I2C_CGBC
	tristate "Congatec I2C Controller"
	depends on MFD_CGBC
	help
	  This driver supports the 2 I2C interfaces on the Congatec Board
	  Controller.

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

config I2C_CPM
	tristate "Freescale CPM1 or CPM2 (MPC8xx/826x)"
	depends on CPM1 || CPM2
	help
	  This supports the use of the I2C interface on Freescale
	  processors with CPM1 or CPM2.

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

config I2C_DAVINCI
	tristate "DaVinci I2C driver"
	depends on ARCH_DAVINCI || ARCH_KEYSTONE || COMPILE_TEST
	help
	  Support for TI DaVinci I2C controller driver.

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

	  Please note that this driver might be needed to bring up other
	  devices such as DaVinci NIC.
	  For details please see http://www.ti.com/davinci

config I2C_DESIGNWARE_CORE
	tristate "Synopsys DesignWare I2C adapter"
	select REGMAP
	help
	  This option enables support for the Synopsys DesignWare I2C adapter.
	  This driver includes support for the I2C host on the Synopsys
	  Designware I2C adapter.

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

if I2C_DESIGNWARE_CORE

config I2C_DESIGNWARE_SLAVE
	bool "Synopsys DesignWare Slave"
	select I2C_SLAVE
	help
	  If you say yes to this option, support will be included for the
	  Synopsys DesignWare I2C slave adapter.

config I2C_DESIGNWARE_PLATFORM
	tristate "Synopsys DesignWare Platform driver"
	depends on (ACPI && COMMON_CLK) || !ACPI
	select MFD_SYSCON if MIPS_BAIKAL_T1
	default I2C_DESIGNWARE_CORE
	help
	  If you say yes to this option, support will be included for the
	  Synopsys DesignWare I2C adapters on the platform bus.

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

config I2C_DESIGNWARE_AMDPSP
	bool "AMD PSP I2C semaphore support"
	depends on ACPI
	depends on CRYPTO_DEV_SP_PSP
	depends on PCI
	depends on I2C_DESIGNWARE_PLATFORM
	depends on (I2C_DESIGNWARE_PLATFORM=y && CRYPTO_DEV_CCP_DD=y) || \
		   (I2C_DESIGNWARE_PLATFORM=m && CRYPTO_DEV_CCP_DD)
	help
	  This driver enables managed host access to the selected I2C bus shared
	  between AMD CPU and AMD PSP.

	  You should say Y if running on an AMD system equipped with the PSP.

config I2C_DESIGNWARE_BAYTRAIL
	bool "Intel Baytrail I2C semaphore support"
	depends on ACPI
	depends on I2C_DESIGNWARE_PLATFORM
	depends on (I2C_DESIGNWARE_PLATFORM=m && IOSF_MBI) || \
		   (I2C_DESIGNWARE_PLATFORM=y && IOSF_MBI=y)
	help
	  This driver enables managed host access to the PMIC I2C bus on select
	  Intel BayTrail platforms using the X-Powers AXP288 PMIC. It allows
	  the host to request uninterrupted access to the PMIC's I2C bus from
	  the platform firmware controlling it. You should say Y if running on
	  a BayTrail system using the AXP288.

config I2C_DESIGNWARE_PCI
	tristate "Synopsys DesignWare PCI driver"
	depends on PCI
	select I2C_CCGX_UCSI
	help
	  If you say yes to this option, support will be included for the
	  Synopsys DesignWare I2C adapters on the PCI bus. Only master mode is
	  supported.

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

endif

config I2C_DIGICOLOR
	tristate "Conexant Digicolor I2C driver"
	depends on ARCH_DIGICOLOR || COMPILE_TEST
	help
	  Support for Conexant Digicolor SoCs (CX92755) I2C controller driver.

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

config I2C_EG20T
	tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) I2C"
	depends on PCI && (X86_32 || MIPS || COMPILE_TEST)
	help
	  This driver is for PCH(Platform controller Hub) I2C of EG20T which
	  is an IOH(Input/Output Hub) for x86 embedded processor.
	  This driver can access PCH I2C bus device.

	  This driver also can be used for LAPIS Semiconductor IOH(Input/
	  Output Hub), ML7213, ML7223 and ML7831.
	  ML7213 IOH is for IVI(In-Vehicle Infotainment) use, ML7223 IOH is
	  for MP(Media Phone) use and ML7831 IOH is for general purpose use.
	  ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series.
	  ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH.

config I2C_EMEV2
	tristate "EMMA Mobile series I2C adapter"
	depends on HAVE_CLK
	select I2C_SLAVE
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on the Renesas Electronics EM/EV family of processors.

config I2C_EXYNOS5
	tristate "Exynos high-speed I2C driver"
	depends on OF
	depends on ARCH_EXYNOS || COMPILE_TEST
	default y if ARCH_EXYNOS
	help
	  High-speed I2C controller on Samsung Exynos5 and newer Samsung SoCs:
	  Exynos5250, Exynos5260, Exynos5410, Exynos542x, Exynos5800,
	  Exynos5433, Exynos7, Exynos850 and ExynosAutoV9.
	  Choose Y here only if you build for such Samsung SoC.

config I2C_GPIO
	tristate "GPIO-based bitbanging I2C"
	depends on GPIOLIB || COMPILE_TEST
	select I2C_ALGOBIT
	help
	  This is a very simple bitbanging I2C driver utilizing the
	  arch-neutral GPIO API to control the SCL and SDA lines.

config I2C_GPIO_FAULT_INJECTOR
	bool "GPIO-based fault injector"
	depends on I2C_GPIO
	help
	  This adds some functionality to the i2c-gpio driver which can inject
	  faults to an I2C bus, so another bus master can be stress-tested.
	  This is for debugging. If unsure, say 'no'.

config I2C_GXP
	tristate "GXP I2C Interface"
	depends on ARCH_HPE_GXP || COMPILE_TEST
	help
	  This enables support for GXP I2C interface. The I2C engines can be
	  either I2C master or I2C slaves.

config I2C_HIGHLANDER
	tristate "Highlander FPGA SMBus interface"
	depends on SH_HIGHLANDER || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for
	  the SMBus interface located in the FPGA on various Highlander
	  boards, particularly the R0P7780LC0011RL and R0P7785LC0011RL
	  FPGAs. This is wholly unrelated to the SoC I2C.

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

config I2C_HISI
	tristate "HiSilicon I2C controller"
	depends on ARM64 || COMPILE_TEST
	help
	  Say Y here if you want to have Hisilicon I2C controller support
	  available on the Kunpeng Server.

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

config I2C_IBM_IIC
	tristate "IBM PPC 4xx on-chip I2C interface"
	depends on 4xx
	help
	  Say Y here if you want to use IIC peripheral found on
	  embedded IBM PPC 4xx based systems.

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

config I2C_IMG
	tristate "Imagination Technologies I2C SCB Controller"
	depends on MIPS || COMPILE_TEST
	help
	  Say Y here if you want to use the IMG I2C SCB controller,
	  available on the TZ1090 and other IMG SoCs.

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

config I2C_IMX
	tristate "IMX I2C interface"
	depends on ARCH_MXC || ARCH_LAYERSCAPE || ARCH_S32 || COLDFIRE \
		|| COMPILE_TEST
	select I2C_SLAVE
	help
	  Say Y here if you want to use the IIC bus controller on
	  the Freescale i.MX/MXC/S32G, Layerscape or ColdFire processors.

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

config I2C_IMX_LPI2C
	tristate "IMX Low Power I2C interface"
	depends on ARCH_MXC || COMPILE_TEST
	select I2C_SLAVE
	help
	  Say Y here if you want to use the Low Power IIC bus controller
	  on the Freescale i.MX processors.

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

config I2C_IOP3XX
	tristate "Intel IXP4xx on-chip I2C interface"
	depends on ARCH_IXP4XX || COMPILE_TEST
	help
	  Say Y here if you want to use the IIC bus controller on
	  the Intel IXP4xx Network Processors.

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

config I2C_JZ4780
	tristate "JZ4780 I2C controller interface support"
	depends on MIPS || COMPILE_TEST
	help
	 If you say yes to this option, support will be included for the
	 Ingenic JZ4780 I2C controller.

	 If you don't know what to do here, say N.

config I2C_KEBA
	tristate "KEBA I2C controller support"
	depends on HAS_IOMEM
	depends on KEBA_CP500 || COMPILE_TEST
	select AUXILIARY_BUS
	help
	  This driver supports the I2C controller found in KEBA system FPGA
	  devices.

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

config I2C_KEMPLD
	tristate "Kontron COM I2C Controller"
	depends on MFD_KEMPLD
	help
	  This enables support for the I2C bus interface on some Kontron ETX
	  and COMexpress (ETXexpress) modules.

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

config I2C_LPC2K
	tristate "I2C bus support for NXP LPC2K/LPC178x/18xx/43xx"
	depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
	help
	  This driver supports the I2C interface found several NXP
	  devices including LPC2xxx, LPC178x/7x and LPC18xx/43xx.

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

config I2C_LS2X
	tristate "Loongson LS2X I2C adapter"
	depends on MACH_LOONGSON64 || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on the Loongson-2K SoCs and Loongson LS7A bridge
	  chip.

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

config I2C_MLXBF
        tristate "Mellanox BlueField I2C controller"
        depends on MELLANOX_PLATFORM && ARM64
	depends on ACPI
	select I2C_SLAVE
        help
          Enabling this option will add I2C SMBus support for Mellanox BlueField
          system.

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

          This driver implements an I2C SMBus host controller and enables both
          master and slave functions.

config I2C_MESON
	tristate "Amlogic Meson I2C controller"
	depends on ARCH_MESON || COMPILE_TEST
	depends on COMMON_CLK
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on the Amlogic Meson family of SoCs.

config I2C_MICROCHIP_CORE
	tristate "Microchip FPGA I2C controller"
	depends on ARCH_MICROCHIP_POLARFIRE || COMPILE_TEST
	depends on OF
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on Microchip FPGAs.

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

config I2C_MPC
	tristate "MPC107/824x/85xx/512x/52xx/83xx/86xx"
	depends on PPC
	help
	  If you say yes to this option, support will be included for the
	  built-in I2C interface on the MPC107, Tsi107, MPC512x, MPC52xx,
	  MPC8240, MPC8245, MPC83xx, MPC85xx and MPC8641 family processors.

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

config I2C_MT65XX
	tristate "MediaTek I2C adapter"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  This selects the MediaTek(R) Integrated Inter Circuit bus driver
	  for MT65xx and MT81xx.
	  If you want to use MediaTek(R) I2C interface, say Y or M here.
	  If unsure, say N.

config I2C_MT7621
	tristate "MT7621/MT7628 I2C Controller"
	depends on (RALINK && (SOC_MT7620 || SOC_MT7621)) || ARCH_AIROHA || COMPILE_TEST
	help
	  Say Y here to include support for I2C controller in the
	  MediaTek MT7621/MT7628 SoCs.

config I2C_MV64XXX
	tristate "Marvell mv64xxx I2C Controller"
	depends on PLAT_ORION || ARCH_SUNXI || ARCH_MVEBU || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  built-in I2C interface on the Marvell 64xxx line of host bridges.
	  This driver is also used for Allwinner SoCs I2C controllers.

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

config I2C_MXS
	tristate "Freescale i.MX28 I2C interface"
	depends on SOC_IMX28 || COMPILE_TEST
	select STMP_DEVICE
	help
	  Say Y here if you want to use the I2C bus controller on
	  the Freescale i.MX28 processors.

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

config I2C_NOMADIK
	tristate "ST-Ericsson Nomadik/Ux500 I2C Controller"
	depends on ARM_AMBA || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  I2C interface from ST-Ericsson's Nomadik and Ux500 architectures,
	  as well as the STA2X11 PCIe I/O HUB.

config I2C_NPCM
	tristate "Nuvoton I2C Controller"
	depends on ARCH_NPCM || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  Nuvoton I2C controller, which is available on the NPCM BMC
	  controllers.
	  Driver can also support slave mode (select I2C_SLAVE).

config I2C_OCORES
	tristate "OpenCores I2C Controller"
	help
	  If you say yes to this option, support will be included for the
	  OpenCores I2C controller. For details see
	  http://www.opencores.org/projects.cgi/web/i2c/overview

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

config I2C_OMAP
	tristate "OMAP I2C adapter"
	depends on ARCH_OMAP || ARCH_K3 || COMPILE_TEST
	default MACH_OMAP_OSK
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on the Texas Instruments OMAP1/2 family of processors.
	  Like OMAP1510/1610/1710/5912 and OMAP242x.
	  For details see http://www.ti.com/omap.

config I2C_OWL
	tristate "Actions Semiconductor Owl I2C Controller"
	depends on ARCH_ACTIONS || COMPILE_TEST
	help
	  Say Y here if you want to use the I2C bus controller on
	  the Actions Semiconductor Owl SoC's.

config I2C_PASEMI
	tristate "PA Semi SMBus interface"
	depends on PPC_PASEMI && PCI
	help
	  Supports the PA Semi PWRficient on-chip SMBus interfaces.

config I2C_APPLE
	tristate "Apple SMBus platform driver"
	depends on !I2C_PASEMI
	depends on ARCH_APPLE || COMPILE_TEST
	default ARCH_APPLE
	help
	  Say Y here if you want to use the I2C controller present on Apple
	  Silicon chips such as the M1.

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

config I2C_PCA_PLATFORM
	tristate "PCA9564/PCA9665 as platform device"
	select I2C_ALGOPCA
	help
	  This driver supports a memory mapped Philips PCA9564/PCA9665
	  parallel bus to I2C bus controller.

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

config I2C_PNX
	tristate "I2C bus support for Philips PNX and NXP LPC targets"
	depends on ARCH_LPC32XX || COMPILE_TEST
	help
	  This driver supports the Philips IP3204 I2C IP block master and/or
	  slave controller

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

config I2C_PXA
	tristate "Intel PXA2XX I2C adapter"
	depends on ARCH_PXA || ARCH_MMP || ARCH_MVEBU || (X86_32 && PCI && OF) || COMPILE_TEST
	help
	  If you have devices in the PXA I2C bus, say yes to this option.
	  This driver can also be built as a module.  If so, the module
	  will be called i2c-pxa.

config I2C_PXA_PCI
	def_bool I2C_PXA && X86_32 && PCI && OF

config I2C_PXA_SLAVE
	bool "Intel PXA2XX I2C Slave comms support"
	depends on I2C_PXA && !X86_32
	select I2C_SLAVE
	help
	  Support I2C slave mode communications on the PXA I2C bus.  This
	  is necessary for systems where the PXA may be a target on the
	  I2C bus.

config I2C_QCOM_CCI
	tristate "Qualcomm Camera Control Interface"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  built-in camera control interface on the Qualcomm SoCs.

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

config I2C_QCOM_GENI
	tristate "Qualcomm Technologies Inc.'s GENI based I2C controller"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on QCOM_GENI_SE
	help
	  This driver supports GENI serial engine based I2C controller in
	  master mode on the Qualcomm Technologies Inc.'s SoCs. If you say
	  yes to this option, support will be included for the built-in I2C
	  interface on the Qualcomm Technologies Inc.'s SoCs.

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

config I2C_QUP
	tristate "Qualcomm QUP based I2C controller"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  built-in I2C interface on the Qualcomm SoCs.

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

config I2C_RIIC
	tristate "Renesas RIIC adapter"
	depends on ARCH_RENESAS || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  Renesas RIIC I2C interface.

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

config I2C_RK3X
	tristate "Rockchip RK3xxx I2C adapter"
	depends on OF && COMMON_CLK
	help
	  Say Y here to include support for the I2C adapter in Rockchip RK3xxx
	  SoCs.

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

config I2C_RTL9300
	tristate "Realtek RTL9300 I2C controller"
	depends on MACH_REALTEK_RTL || COMPILE_TEST
	help
	  Say Y here to include support for the I2C controller in Realtek
	  RTL9300 SoCs.

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

config I2C_RZV2M
	tristate "Renesas RZ/V2M adapter"
	depends on ARCH_RENESAS || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  Renesas RZ/V2M I2C interface.

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

config I2C_S3C2410
	tristate "S3C/Exynos I2C Driver"
	depends on ARCH_EXYNOS || ARCH_S3C64XX || ARCH_S5PV210 || COMPILE_TEST
	help
	  Say Y here to include support for I2C controller in the
	  Samsung SoCs (S3C, S5Pv210, Exynos).

config I2C_SH7760
	tristate "Renesas SH7760 I2C Controller"
	depends on CPU_SUBTYPE_SH7760
	help
	  This driver supports the 2 I2C interfaces on the Renesas SH7760.

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

config I2C_SH_MOBILE
	tristate "SuperH Mobile I2C Controller"
	depends on ARCH_SHMOBILE || ARCH_RENESAS || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  built-in I2C interface on the Renesas SH-Mobile processor.

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

config I2C_SIMTEC
	tristate "Simtec Generic I2C interface"
	select I2C_ALGOBIT
	help
	  If you say yes to this option, support will be included for
	  the Simtec Generic I2C interface. This driver is for the
	  simple I2C bus used on newer Simtec products for general
	  I2C, such as DDC on the Simtec BBD2016A.

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

config I2C_SPRD
	tristate "Spreadtrum I2C interface"
	depends on I2C=y && (ARCH_SPRD || COMPILE_TEST)
	depends on COMMON_CLK
	help
	  If you say yes to this option, support will be included for the
	  Spreadtrum I2C interface.

config I2C_ST
	tristate "STMicroelectronics SSC I2C support"
	depends on ARCH_STI || COMPILE_TEST
	help
	  Enable this option to add support for STMicroelectronics SoCs
	  hardware SSC (Synchronous Serial Controller) as an I2C controller.

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

config I2C_STM32F4
	tristate "STMicroelectronics STM32F4 I2C support"
	depends on ARCH_STM32 || COMPILE_TEST
	help
	  Enable this option to add support for STM32 I2C controller embedded
	  in STM32F4 SoCs.

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

config I2C_STM32F7
	tristate "STMicroelectronics STM32F7 I2C support"
	depends on ARCH_STM32 || COMPILE_TEST
	select I2C_SLAVE
	select I2C_SMBUS
	help
	  Enable this option to add support for STM32 I2C controller embedded
	  in STM32F7 SoCs.

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

config I2C_SUN6I_P2WI
	tristate "Allwinner sun6i internal P2WI controller"
	depends on RESET_CONTROLLER
	depends on MACH_SUN6I || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  P2WI (Push/Pull 2 Wire Interface) controller embedded in some sunxi
	  SOCs.
	  The P2WI looks like an SMBus controller (which supports only byte
	  accesses), except that it only supports one slave device.
	  This interface is used to connect to specific PMIC devices (like the
	  AXP221).

config I2C_SYNQUACER
	tristate "Socionext SynQuacer I2C controller"
	depends on ARCH_SYNQUACER || COMPILE_TEST
	help
	  Say Y here to include support for the I2C controller used in some
	  Fujitsu and Socionext SoCs.

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

config I2C_TEGRA
	tristate "NVIDIA Tegra internal I2C controller"
	depends on ARCH_TEGRA || (COMPILE_TEST && (ARC || ARM || ARM64 || M68K || RISCV || SUPERH || SPARC))
	# COMPILE_TEST needs architectures with readsX()/writesX() primitives
	help
	  If you say yes to this option, support will be included for the
	  I2C controller embedded in NVIDIA Tegra SOCs

config I2C_TEGRA_BPMP
	tristate "NVIDIA Tegra BPMP I2C controller"
	depends on TEGRA_BPMP || COMPILE_TEST
	default y if TEGRA_BPMP
	help
	  If you say yes to this option, support will be included for the I2C
	  controller embedded in NVIDIA Tegra SoCs accessed via the BPMP.

	  This I2C driver is a 'virtual' I2C driver. The real driver is part
	  of the BPMP firmware, and this driver merely communicates with that
	  real driver.

config I2C_UNIPHIER
	tristate "UniPhier FIFO-less I2C controller"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for
	  the UniPhier FIFO-less I2C interface embedded in PH1-LD4, PH1-sLD8,
	  or older UniPhier SoCs.

config I2C_UNIPHIER_F
	tristate "UniPhier FIFO-builtin I2C controller"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for
	  the UniPhier FIFO-builtin I2C interface embedded in PH1-Pro4,
	  PH1-Pro5, or newer UniPhier SoCs.

config I2C_VERSATILE
	tristate "ARM Versatile/Realview I2C bus support"
	depends on ARCH_MPS2 || ARCH_VERSATILE || ARCH_REALVIEW || ARCH_VEXPRESS || COMPILE_TEST
	select I2C_ALGOBIT
	help
	  Say yes if you want to support the I2C serial bus on ARMs Versatile
	  range of platforms.

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

config I2C_WMT
	tristate "Wondermedia WM8xxx SoC I2C bus support"
	depends on ARCH_VT8500 || COMPILE_TEST
	help
	  Say yes if you want to support the I2C bus on Wondermedia 8xxx-series
	  SoCs.

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

config I2C_OCTEON
	tristate "Cavium OCTEON I2C bus support"
	depends on CAVIUM_OCTEON_SOC
	help
	  Say yes if you want to support the I2C serial bus on Cavium
	  OCTEON SOC.

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

config I2C_THUNDERX
	tristate "Cavium ThunderX I2C bus support"
	depends on 64BIT && PCI && (ARM64 || COMPILE_TEST)
	select I2C_SMBUS
	help
	  Say yes if you want to support the I2C serial bus on Cavium
	  ThunderX SOC.

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

config I2C_XILINX
	tristate "Xilinx I2C Controller"
	depends on HAS_IOMEM
	help
	  If you say yes to this option, support will be included for the
	  Xilinx I2C controller.

	  This driver can also be built as a module.  If so, the module
	  will be called xilinx_i2c.

config I2C_XLP9XX
	tristate "Cavium ThunderX2 I2C support"
	depends on ARCH_THUNDER2 || COMPILE_TEST
	help
	  This driver enables support for the on-chip I2C interface of
	  the Cavium ThunderX2 processors. (Originally on Netlogic XLP SoCs.)

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

config I2C_RCAR
	tristate "Renesas R-Car I2C Controller"
	depends on ARCH_RENESAS || COMPILE_TEST
	select I2C_SLAVE
	select I2C_SMBUS
	select RESET_CONTROLLER if ARCH_RCAR_GEN3 || ARCH_RCAR_GEN4
	help
	  If you say yes to this option, support will be included for the
	  R-Car I2C controller.

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

comment "External I2C/SMBus adapter drivers"

config I2C_DIOLAN_U2C
	tristate "Diolan U2C-12 USB adapter"
	depends on USB
	help
	  If you say yes to this option, support will be included for Diolan
	  U2C-12, a USB to I2C interface.

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

config I2C_DLN2
	tristate "Diolan DLN-2 USB I2C adapter"
	depends on MFD_DLN2
	help
	 If you say yes to this option, support will be included for Diolan
	 DLN2, a USB to I2C interface.

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

config I2C_LJCA
	tristate "I2C functionality of Intel La Jolla Cove Adapter"
	depends on USB_LJCA
	default USB_LJCA
	help
	  If you say yes to this option, I2C functionality support of Intel
	  La Jolla Cove Adapter (LJCA) will be included.

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

config I2C_CP2615
	tristate "Silicon Labs CP2615 USB sound card and I2C adapter"
	depends on USB
	help
	  If you say yes to this option, support will be included for Silicon
	  Labs CP2615's I2C interface.

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

config I2C_PARPORT
	tristate "Parallel port adapter"
	depends on PARPORT
	select I2C_ALGOBIT
	select I2C_SMBUS
	help
	  This supports parallel port I2C adapters such as the ones made by
	  Philips or Velleman, Analog Devices evaluation boards, and more.
	  Basically any adapter using the parallel port as an I2C bus with
	  no extra chipset is supported by this driver, or could be. Please
	  read the file Documentation/i2c/busses/i2c-parport.rst for details.

	  This support is also available as a module.  If so, the module
	  will be called i2c-parport.

config I2C_PCI1XXXX
	tristate "PCI1XXXX I2C Host Adapter"
	depends on PCI
	help
	  If you say yes to this option, support will be included for
	  Microchip PCI1XXXX's I2C interface.

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

config I2C_ROBOTFUZZ_OSIF
	tristate "RobotFuzz Open Source InterFace USB adapter"
	depends on USB
	help
	  If you say yes to this option, support will be included for the
	  RobotFuzz Open Source InterFace USB to I2C interface.

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

config I2C_TAOS_EVM
	tristate "TAOS evaluation module"
	depends on TTY
	select SERIO
	select SERIO_SERPORT
	help
	  This supports TAOS evaluation modules on serial port. In order to
	  use this driver, you will need the inputattach tool, which is part
	  of the input-utils package.

	  If unsure, say N.

	  This support is also available as a module.  If so, the module
	  will be called i2c-taos-evm.

config I2C_TINY_USB
	tristate "Tiny-USB adapter"
	depends on USB
	help
	  If you say yes to this option, support will be included for the
	  i2c-tiny-usb, a simple do-it-yourself USB to I2C interface. See
	  http://www.harbaum.org/till/i2c_tiny_usb for hardware details.

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

config I2C_VIPERBOARD
	tristate "Viperboard I2C master support"
	depends on MFD_VIPERBOARD && USB
	help
	  Say yes here to access the I2C part of the Nano River
	  Technologies Viperboard as I2C master.
	  See viperboard API specification and Nano
	  River Tech's viperboard.h for detailed meaning
	  of the module parameters.

comment "Other I2C/SMBus bus drivers"

config I2C_ACORN
	tristate "Acorn IOC/IOMD I2C bus support"
	depends on ARCH_ACORN
	default y
	select I2C_ALGOBIT
	help
	  Say yes if you want to support the I2C bus on Acorn platforms.

	  If you don't know, say Y.

config I2C_ELEKTOR
	tristate "Elektor ISA card"
	depends on ISA && HAS_IOPORT_MAP && BROKEN_ON_SMP
	select I2C_ALGOPCF
	help
	  This supports the PCF8584 ISA bus I2C adapter.  Say Y if you own
	  such an adapter.

	  This support is also available as a module.  If so, the module
	  will be called i2c-elektor.

config I2C_ICY
	tristate "ICY Zorro card"
	depends on ZORRO
	select I2C_ALGOPCF
	help
	  This supports the PCF8584 Zorro bus I2C adapter, known as ICY.
	  Say Y if you own such an adapter.

	  This support is also available as a module.  If so, the module
	  will be called i2c-icy.

	  If you have a 2019 edition board with an LTC2990 sensor at address
	  0x4c, loading the module 'ltc2990' is sufficient to enable it.

config I2C_MLXCPLD
	tristate "Mellanox I2C driver"
	depends on X86_64 || (ARM64 && ACPI) || COMPILE_TEST
	depends on HAS_IOPORT
	help
	  This exposes the Mellanox platform I2C busses to the linux I2C layer
	  for X86 and ARM64/ACPI based systems.
	  Controller is implemented as CPLD logic.

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

config I2C_PCA_ISA
	tristate "PCA9564/PCA9665 on an ISA bus"
	depends on ISA
	select I2C_ALGOPCA
	help
	  This driver supports ISA boards using the Philips PCA9564/PCA9665
	  parallel bus to I2C bus controller.

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

	  This device is almost undetectable and using this driver on a
	  system which doesn't have this device will result in long
	  delays when I2C/SMBus chip drivers are loaded (e.g. at boot
	  time).  If unsure, say N.

config I2C_SIBYTE
	tristate "SiByte SMBus interface"
	depends on SIBYTE_SB1xxx_SOC
	help
	  Supports the SiByte SOC on-chip I2C interfaces (2 channels).

config I2C_CROS_EC_TUNNEL
	tristate "ChromeOS EC tunnel I2C bus"
	depends on CROS_EC
	help
	  If you say yes here you get an I2C bus that will tunnel i2c commands
	  through to the other side of the ChromeOS EC to the i2c bus
	  connected there. This will work whatever the interface used to
	  talk to the EC (SPI, I2C or LPC).

config I2C_XGENE_SLIMPRO
	tristate "APM X-Gene SoC I2C SLIMpro devices support"
	depends on ARCH_XGENE && MAILBOX
	help
	  Enable I2C bus access using the APM X-Gene SoC SLIMpro
	  co-processor. The I2C device access the I2C bus via the X-Gene
	  to SLIMpro (On chip coprocessor) mailbox mechanism.
	  If unsure, say N.

config SCx200_ACB
	tristate "Geode ACCESS.bus support"
	depends on X86_32 && PCI
	help
	  Enable the use of the ACCESS.bus controllers on the Geode SCx200 and
	  SC1100 processors and the CS5535 and CS5536 Geode companion devices.

	  If you don't know what to do here, say N.

	  This support is also available as a module.  If so, the module
	  will be called scx200_acb.

config I2C_OPAL
	tristate "IBM OPAL I2C driver"
	depends on PPC_POWERNV
	default y
	help
	  This exposes the PowerNV platform i2c busses to the linux i2c layer,
	  the driver is based on the OPAL interfaces.

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

config I2C_FSI
	tristate "FSI I2C driver"
	depends on FSI
	help
	  Driver for FSI bus attached I2C masters. These are I2C masters that
	  are connected to the system over an FSI bus, instead of the more
	  common PCI or MMIO interface.

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

config I2C_VIRTIO
        tristate "Virtio I2C Adapter"
        select VIRTIO
        help
          If you say yes to this option, support will be included for the virtio
          I2C adapter driver. The hardware can be emulated by any device model
          software according to the virtio protocol.

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

endmenu
