#
# 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_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)
	    Lynx Point-LP (PCH)
	    Avoton (SOC)
	    Wellsburg (PCH)
	    Coleto Creek (PCH)
	    Wildcat Point (PCH)
	    Wildcat Point-LP (PCH)
	    BayTrail (SOC)
	    Sunrise Point-H (PCH)
	    Sunrise Point-LP (PCH)
	    DNV (SOC)
	    Broxton (SOC)
	    Lewisburg (PCH)
	    Gemini Lake (SOC)
	    Cannon Lake-H (PCH)
	    Cannon Lake-LP (PCH)
	    Cedar Fork (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
	    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_CHARGER_BQ24190=m and CONFIG_TYPEC_FUSB302=m
	  (the fusb302 driver currently is in drivers/staging).

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_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) && 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
	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_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
	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
	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
	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
	default y
	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 I2C controller"
	depends on ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST
	default y
	help
	  If you say yes to this option, support will be included for the
	  I2C interface on the Broadcom Settop SoCs.

	  If you do not need I2C interface, say N.

config I2C_BLACKFIN_TWI
	tristate "Blackfin TWI I2C support"
	depends on BLACKFIN
	depends on !BF561 && !BF531 && !BF532 && !BF533
	help
	  This is the I2C bus driver for Blackfin on-chip TWI interface.

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

config I2C_BLACKFIN_TWI_CLK_KHZ
	int "Blackfin TWI I2C clock (kHz)"
	depends on I2C_BLACKFIN_TWI
	range 21 400
	default 50
	help
	  The unit of the TWI clock is kHz.

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

config I2C_DESIGNWARE_PLATFORM
	tristate "Synopsys DesignWare Platform"
	select I2C_DESIGNWARE_CORE
	depends on (ACPI && COMMON_CLK) || !ACPI
	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_SLAVE
	bool "Synopsys DesignWare Slave"
	select I2C_SLAVE
	depends on I2C_DESIGNWARE_PLATFORM
	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_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_DESIGNWARE_BAYTRAIL
	bool "Intel Baytrail I2C semaphore support"
	depends on ACPI
	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_DIGICOLOR
	tristate "Conexant Digicolor I2C driver"
	depends on ARCH_DIGICOLOR
	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 "Exynos5 high-speed I2C driver"
	depends on ARCH_EXYNOS && OF
	default y
	help
	  High-speed I2C controller on Exynos5 based 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
	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 || METAG || 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_IOP33X || ARCH_IXP4XX || ARCH_IOP13XX
	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 MACH_JZ4780 || 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
	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
	depends on HAS_DMA
	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_MV64XXX
	tristate "Marvell mv64xxx I2C Controller"
	depends on MV64X60 || PLAT_ORION || ARCH_SUNXI || ARCH_MVEBU
	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
	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_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
	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_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
	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
	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_PUV3
	tristate "PKUnity v3 I2C bus support"
	depends on UNICORE32 && ARCH_PUV3
	select I2C_ALGOBIT
	help
	  This driver supports the I2C IP inside the PKUnity-v3 SoC.
	  This I2C bus controller is under AMBA/AXI bus.

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

config I2C_PXA
	tristate "Intel PXA2XX I2C adapter"
	depends on ARCH_PXA || ARCH_MMP || ARCH_MVEBU || (X86_32 && PCI && OF)
	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
	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_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 "S3C2410 I2C Driver"
	depends on HAVE_S3C2410_I2C
	help
	  Say Y here to include support for I2C controller in the
	  Samsung SoCs.

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 HAS_DMA
	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
	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
	bool "Spreadtrum I2C interface"
	depends on I2C=y && ARCH_SPRD
	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
	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
	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
	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_TEGRA
	tristate "NVIDIA Tegra internal I2C controller"
	depends on ARCH_TEGRA
	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
	default y
	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
	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
	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 HAS_DMA
	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.

	  This driver is a replacement for (and was inspired by) an older
	  driver named i2c-philips-par.  The new driver supports more devices,
	  and makes it easier to add support for new devices.

	  An adapter type parameter is now mandatory.  Please read the file
	  Documentation/i2c/busses/i2c-parport for details.

	  Another driver exists, named i2c-parport-light, which doesn't depend
	  on the parport driver.  This is meant for embedded systems. Don't say
	  Y here if you intend to say Y or M there.

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

config I2C_PARPORT_LIGHT
	tristate "Parallel port adapter (light)"
	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.

	  This driver is a light version of i2c-parport.  It doesn't depend
	  on the parport driver, and uses direct I/O access instead.  This
	  might be preferred on embedded systems where wasting memory for
	  the clean but heavy parport handling is not an option.  The
	  drawback is a reduced portability and the impossibility to
	  daisy-chain other parallel port devices.

	  Don't say Y here if you said Y or M to i2c-parport.  Saying M to
	  both is possible but both modules should not be loaded at the same
	  time.

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

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_MLXCPLD
	tristate "Mellanox I2C driver"
	depends on X86_64
	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 MFD_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.

endmenu
