#
# Sensor device configuration
#

menu "I2C Hardware Bus support"

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 && EXPERIMENTAL
	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 && EXPERIMENTAL
	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_I801
	tristate "Intel 82801 (ICH)"
	depends on PCI
	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
	    Tolapai
	    ICH10
	    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
	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_PIIX4
	tristate "Intel PIIX4 and compatible (ATI/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
	    ATI SB800
	    Serverworks OSB4
	    Serverworks CSB5
	    Serverworks CSB6
	    Serverworks HT-1000
	    Serverworks HT-1100
	    SMSC Victory66

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

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 && EXPERIMENTAL
	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"
	depends on PCI
	help
	  If you say yes to this option, support will be included for the
	  SiS630 and SiS730 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 && EXPERIMENTAL
	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/VX800/VX820"
	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

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

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 && EXPERIMENTAL
	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_AT91
	tristate "Atmel AT91 I2C Two-Wire interface (TWI)"
	depends on ARCH_AT91 && EXPERIMENTAL && BROKEN
	help
	  This supports the use of the I2C interface on Atmel AT91
	  processors.

	  This driver is BROKEN because the controller which it uses
	  will easily trigger RX overrun and TX underrun errors.  Using
	  low I2C clock rates may partially work around those issues
	  on some systems.  Another serious problem is that there is no
	  documented way to issue repeated START conditions, as needed
	  to support combined I2C messages.  Use the i2c-gpio driver
	  unless your system can cope with those limitations.

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

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

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 10 400
	default 50
	help
	  The unit of the TWI clock is kHz.

config I2C_CPM
	tristate "Freescale CPM1 or CPM2 (MPC8xx/826x)"
	depends on (CPM1 || CPM2) && OF_I2C
	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
	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_GPIO
	tristate "GPIO-based bitbanging I2C"
	depends on GENERIC_GPIO
	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_IMX
	tristate "IMX I2C interface"
	depends on ARCH_MXC
	help
	  Say Y here if you want to use the IIC bus controller on
	  the Freescale i.MX/MXC processors.

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

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_IXP2000
	tristate "IXP2000 GPIO-Based I2C Interface (DEPRECATED)"
	depends on ARCH_IXP2000
	select I2C_ALGOBIT
	help
	  Say Y here if you have an Intel IXP2000 (2400, 2800, 2850) based
	  system and are using GPIO lines for an I2C bus.

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

	  This driver is deprecated and will be dropped soon. Use i2c-gpio
	  instead.

config I2C_MPC
	tristate "MPC107/824x/85xx/52xx/86xx"
	depends on PPC32
	help
	  If you say yes to this option, support will be included for the
	  built-in I2C interface on the MPC107/Tsi107/MPC8240/MPC8245 and
	  MPC85xx/MPC8641 family processors. The driver may also work on 52xx
	  family processors, though interrupts are known not to work.

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

config I2C_MV64XXX
	tristate "Marvell mv64xxx I2C Controller"
	depends on (MV64X60 || PLAT_ORION) && EXPERIMENTAL
	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 can also be built as a module.  If so, the module
	  will be called i2c-mv64xxx.

config I2C_OCORES
	tristate "OpenCores I2C Controller"
	depends on EXPERIMENTAL
	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_PNX
	tristate "I2C bus support for Philips PNX targets"
	depends on ARCH_PNX4008
	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 (EXPERIMENTAL)"
	depends on EXPERIMENTAL && ARCH_PXA
	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_SLAVE
	bool "Intel PXA2XX I2C Slave comms support"
	depends on I2C_PXA
	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_S3C2410
	tristate "S3C2410 I2C Driver"
	depends on ARCH_S3C2410
	help
	  Say Y here to include support for I2C controller in the
	  Samsung S3C2410 based System-on-Chip devices.

config I2C_S6000
	tristate "S6000 I2C support"
	depends on XTENSA_VARIANT_S6000
	help
	  This driver supports the on chip I2C device on the
	  S6000 xtensa processor family.

	  To compile this driver as a module, choose M here. The module
	  will be called i2c-s6000.

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 SUPERH
	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_VERSATILE
	tristate "ARM Versatile/Realview I2C bus support"
	depends on ARCH_VERSATILE || ARCH_REALVIEW
	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.

comment "External I2C/SMBus adapter drivers"

config I2C_PARPORT
	tristate "Parallel port adapter"
	depends on PARPORT
	select I2C_ALGOBIT
	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
	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_TAOS_EVM
	tristate "TAOS evaluation module"
	depends on EXPERIMENTAL
	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.

comment "Graphics adapter I2C/DDC channel drivers"
	depends on PCI

config I2C_VOODOO3
	tristate "Voodoo 3 (DEPRECATED)"
	depends on PCI
	select I2C_ALGOBIT
	help
	  If you say yes to this option, support will be included for the
	  Voodoo 3 I2C interface. This driver is deprecated and you should
	  use the tdfxfb driver instead, which additionally provides
	  framebuffer support.

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

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 && 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_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_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_SIBYTE
	tristate "SiByte SMBus interface"
	depends on SIBYTE_SB1xxx_SOC
	help
	  Supports the SiByte SOC on-chip I2C interfaces (2 channels).

config I2C_STUB
	tristate "I2C/SMBus Test Stub"
	depends on EXPERIMENTAL && m
	default 'n'
	help
	  This module may be useful to developers of SMBus client drivers,
	  especially for certain kinds of sensor chips.

	  If you do build this module, be sure to read the notes and warnings
	  in <file:Documentation/i2c/i2c-stub>.

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

config SCx200_I2C
	tristate "NatSemi SCx200 I2C using GPIO pins (DEPRECATED)"
	depends on SCx200_GPIO
	select I2C_ALGOBIT
	help
	  Enable the use of two GPIO pins of a SCx200 processor as an I2C bus.

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

	  This driver is deprecated and will be dropped soon. Use i2c-gpio
	  (or scx200_acb) instead.

config SCx200_I2C_SCL
	int "GPIO pin used for SCL"
	depends on SCx200_I2C
	default "12"
	help
	  Enter the GPIO pin number used for the SCL signal.  This value can
	  also be specified with a module parameter.

config SCx200_I2C_SDA
	int "GPIO pin used for SDA"
	depends on SCx200_I2C
	default "13"
	help
	  Enter the GPIO pin number used for the SSA signal.  This value can
	  also be specified with a module parameter.

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.

endmenu
