#
# Sensor device configuration
#

menu "I2C Hardware Bus support"

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

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 BF534 || BF536 || BF537 || BF54x
	help
	  This is the TWI I2C device driver for Blackfin 534/536/537/54x.
	  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_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_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_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_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

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

config I2C_I810
	tristate "Intel 810/815"
	depends on PCI
	select I2C_ALGOBIT
	help
	  If you say yes to this option, support will be included for the Intel
	  810/815 family of mainboard I2C interfaces.  Specifically, the 
	  following versions of the chipset are supported:
	    i810AA
	    i810AB
	    i810E
	    i815
	    i845G

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

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_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
	    Serverworks OSB4
	    Serverworks CSB5
	    Serverworks CSB6
	    Serverworks HT-1000
	    SMSC Victory66

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

config I2C_IBM_IIC
	tristate "IBM PPC 4xx on-chip I2C interface"
	depends on IBM_OCP
	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_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_IXP4XX
	tristate "IXP4xx GPIO-Based I2C Interface (DEPRECATED)"
	depends on ARCH_IXP4XX
	select I2C_ALGOBIT
	help
	  Say Y here if you have an Intel IXP4xx(420,421,422,425) 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-ixp4xx.

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

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_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 powemac
	  platform, thus should generally be enabled.

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

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_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_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_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_PASEMI
	tristate "PA Semi SMBus interface"
	depends on PPC_PASEMI && PCI
	help
	  Supports the PA Semi PWRficient on-chip SMBus interfaces.

config I2C_PROSAVAGE
	tristate "S3/VIA (Pro)Savage"
	depends on PCI
	select I2C_ALGOBIT
	help
	  If you say yes to this option, support will be included for the
	  I2C bus and DDC bus of the S3VIA embedded Savage4 and ProSavage8
	  graphics processors.
	  chipsets supported:
	    S3/VIA KM266/VT8375 aka ProSavage8
	    S3/VIA KM133/VT8365 aka Savage4

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

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_SAVAGE4
	tristate "S3 Savage 4"
	depends on PCI && EXPERIMENTAL
	select I2C_ALGOBIT
	help
	  If you say yes to this option, support will be included for the 
	  S3 Savage 4 I2C interface.

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

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_SIMTEC
	tristate "Simtec Generic I2C interface"
	select I2C_ALGOBIT
	help
	  If you say yes to this option, support will be inclyded 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 build as a module. If so, the module
	  will be called i2c-simtec.

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.

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_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_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 I2C_TINY_USB
	tristate "I2C-Tiny-USB"
	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_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.

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_VIA
	tristate "VIA 82C586B"
	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"
	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
	    VT8251
	    CX700

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

config I2C_VOODOO3
	tristate "Voodoo 3"
	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 can also be built as a module.  If so, the module
	  will be called i2c-voodoo3.

config I2C_PCA_ISA
	tristate "PCA9564 on an ISA bus"
	depends on ISA
	select I2C_ALGOPCA
	default n
	help
	  This driver supports ISA boards using the Philips PCA 9564
	  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_MV64XXX
	tristate "Marvell mv64xxx I2C Controller"
	depends on MV64X60 && 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_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_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.

endmenu
