# 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_ALI1535
	tristate "ALI 1535"
	depends on PCI
	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
	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
	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
	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_AMD756_S4882
	tristate "SMBus multiplexing on the Tyan S4882"
	depends on I2C_AMD756 && X86
	help
	  Enabling this option will add specific SMBus support for the Tyan
	  S4882 motherboard.  On this 4-CPU board, the SMBus is multiplexed
	  over 8 different channels, where the various memory module EEPROMs
	  and temperature sensors live.  Saying yes here will give you access
	  to these in addition to the trunk.

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

config I2C_AMD8111
	tristate "AMD 8111"
	depends on PCI
	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_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
	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)

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

config I2C_ISCH
	tristate "Intel SCH SMBus 1.0"
	depends on PCI
	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
	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
	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_NFORCE2_S4985
	tristate "SMBus multiplexing on the Tyan S4985"
	depends on I2C_NFORCE2 && X86
	help
	  Enabling this option will add specific SMBus support for the Tyan
	  S4985 motherboard.  On this 4-CPU board, the SMBus is multiplexed
	  over 4 different channels, where the various memory module EEPROMs
	  live.  Saying yes here will give you access to these in addition
	  to the trunk.

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

config I2C_NVIDIA_GPU
	tristate "NVIDIA GPU I2C controller"
	depends on PCI
	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
	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
	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
	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
	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
	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

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
	tristate "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 mismtaches 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_BRCMSTB || BMIPS_GENERIC || \
		   ARCH_BCM_63XX || COMPILE_TEST
	default y
	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 || 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_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
	select REGMAP

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

	  This is not a standalone module, this module compiles together with
	  i2c-designware-core.

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

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

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"
	depends on PCI
	select I2C_DESIGNWARE_CORE
	help
	  If you say yes to this option, support will be included for the
	  Synopsys DesignWare I2C adapter. Only master mode is supported.

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

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 Exynos5 and newer Samsung SoCs.

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_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 && ACPI) || 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 || 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, 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
	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 IOPx3xx and IXP4xx on-chip I2C interface"
	depends on ARCH_IOP32X || ARCH_IXP4XX || COMPILE_TEST
	help
	  Say Y here if you want to use the IIC bus controller on
	  the Intel IOPx3xx I/O Processors or 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_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_MLXBF
        tristate "Mellanox BlueField I2C controller"
        depends on MELLANOX_PLATFORM && ARM64
	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_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)) || 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
	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_NPCM7XX
	tristate "Nuvoton I2C Controller"
	depends on ARCH_NPCM7XX || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  Nuvoton I2C controller, which is available on the NPCM7xx BMC
	  controller.
	  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 y if MACH_OMAP_H3 || 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_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 HAVE_S3C2410_I2C
	bool
	help
	  This will include I2C support for Samsung SoCs. If you want to
	  include I2C support for any machine, kindly select this in the
	  respective Kconfig file.

config I2C_S3C2410
	tristate "S3C/Exynos I2C Driver"
	depends on HAVE_S3C2410_I2C || 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_XLR
	tristate "Netlogic XLR I2C support"
	depends on CPU_XLR || COMPILE_TEST
	help
	  This driver enables support for the on-chip I2C interface of
	  the Netlogic XLR/XLS MIPS processors and Sigma Designs SOCs.

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

config I2C_XLP9XX
	tristate "XLP9XX I2C support"
	depends on CPU_XLP || ARCH_THUNDER2 || COMPILE_TEST
	help
	  This driver enables support for the on-chip I2C interface of
	  the Broadcom XLP9xx/XLP5xx MIPS and Vulcan ARM64 processors.

	  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
	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_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_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 || COMPILE_TEST
	help
	  This exposes the Mellanox platform I2C busses to the linux I2C layer
	  for X86 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
