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

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/DSL I2C controller"
	depends on 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_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_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
	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_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
