#
# 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/PCH)"
	depends on PCI
	select CHECK_SIGNATURE if X86 && DMI
	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)

	  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_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
	    ATI SB800
	    AMD Hudson-2
	    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/VX8xx"
	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

	  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 && 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/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_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_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_DESIGNWARE_PLATFORM
	tristate "Synopsys DesignWare Platform"
	depends on HAVE_CLK
	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-platform.

config I2C_DESIGNWARE_PCI
	tristate "Synopsys DesignWare PCI"
	depends on PCI
	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_EG20T
	tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) I2C"
	depends on PCI
	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_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_INTEL_MID
	tristate "Intel Moorestown/Medfield Platform I2C controller"
	depends on PCI
	help
	  Say Y here if you have an Intel Moorestown/Medfield platform I2C
	  controller.

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

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_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_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_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 PLAT_NOMADIK
	help
	  If you say yes to this option, support will be included for the
	  I2C interface from ST-Ericsson's Nomadik and Ux500 architectures.

config I2C_NUC900
	tristate "NUC900 I2C Driver"
	depends on ARCH_W90X900
	help
	  Say Y here to include support for I2C controller in the
	  Winbond/Nuvoton NUC900 based System-on-Chip devices.

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_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_PNX4008 || 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 || (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 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_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 || ARCH_SHMOBILE
	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_PRIMA2
	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_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_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_VERSATILE
	tristate "ARM Versatile/Realview I2C bus support"
	depends on ARCH_VERSATILE || ARCH_REALVIEW || ARCH_VEXPRESS
	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_OCTEON
	tristate "Cavium OCTEON I2C bus support"
	depends on CPU_CAVIUM_OCTEON
	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_XILINX
	tristate "Xilinx I2C Controller"
	depends on EXPERIMENTAL && 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 "XLR I2C support"
	depends on CPU_XLR
	help
	  This driver enables support for the on-chip I2C interface of
	  the Netlogic XLR/XLS MIPS processors.

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

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_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_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 "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 && 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_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
