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

	  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_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
	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_EFM32
	tristate "EFM32 I2C controller"
	depends on ARCH_EFM32 || COMPILE_TEST
	help
	  This driver supports the i2c block found in Energy Micro's EFM32
	  SoCs.

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_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
	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_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 MV64X60 || 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
	default n
	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_PMCMSP
	tristate "PMC MSP I2C TWI Controller"
	depends on PMC_MSP || COMPILE_TEST
	help
	  This driver supports the PMC TWI controller on MSP devices.

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

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
	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_SIRF
	tristate "CSR SiRFprimaII I2C interface"
	depends on ARCH_SIRF || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  CSR SiRFprimaII I2C interface.

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

config I2C_SPRD
	tristate "Spreadtrum I2C interface"
	depends on I2C=y && (ARCH_SPRD || COMPILE_TEST)
	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
	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_STU300
	tristate "ST Microelectronics DDC I2C interface"
	depends on MACH_U300 || COMPILE_TEST
	default y if MACH_U300
	help
	  If you say yes to this option, support will be included for the
	  I2C interface from ST Microelectronics simply called "DDC I2C"
	  supporting both I2C and DDC, used in e.g. the U300 series
	  mobile platforms.

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

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 and Sigma Designs I2C support"
	depends on CPU_XLR || ARCH_TANGO || 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
	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_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
	default n
	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
	default n
	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_ZX2967
	tristate "ZTE ZX2967 I2C support"
	depends on ARCH_ZX
	default y
	help
	  Selecting this option will add ZX2967 I2C driver.
	  This driver can also be built as a module. If so, the module will be
	  called i2c-zx2967.

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.

endmenu
