#
# I2C subsystem configuration
#

menu "I2C support"

config I2C
	tristate "I2C support"
	select RT_MUTEXES
	---help---
	  I2C (pronounce: I-squared-C) is a slow serial bus protocol used in
	  many micro controller applications and developed by Philips.  SMBus,
	  or System Management Bus is a subset of the I2C protocol.  More
	  information is contained in the directory <file:Documentation/i2c/>,
	  especially in the file called "summary" there.

	  Both I2C and SMBus are supported here. You will need this for
	  hardware sensors support, and also for Video For Linux support.

	  If you want I2C support, you should say Y here and also to the
	  specific driver for your bus adapter(s) below.

	  This I2C support can also be built as a module.  If so, the module
	  will be called i2c-core.

config ACPI_I2C_OPREGION
	bool "ACPI I2C Operation region support"
	depends on I2C=y && ACPI
	default y
	help
	  Say Y here if you want to enable ACPI I2C operation region support.
	  Operation Regions allow firmware (BIOS) code to access I2C slave devices,
	  such as smart batteries through an I2C host controller driver.

if I2C

config I2C_BOARDINFO
	bool
	default y

config I2C_COMPAT
	bool "Enable compatibility bits for old user-space"
	default y
	help
	  Say Y here if you intend to run lm-sensors 3.1.1 or older, or any
	  other user-space package which expects i2c adapters to be class
	  devices. If you don't know, say Y.

config I2C_CHARDEV
	tristate "I2C device interface"
	help
	  Say Y here to use i2c-* device files, usually found in the /dev
	  directory on your system.  They make it possible to have user-space
	  programs use the I2C bus.  Information on how to do this is
	  contained in the file <file:Documentation/i2c/dev-interface>.

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

config I2C_MUX
	tristate "I2C bus multiplexing support"
	help
	  Say Y here if you want the I2C core to support the ability to
	  handle multiplexed I2C bus topologies, by presenting each
	  multiplexed segment as a I2C adapter.

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

source drivers/i2c/muxes/Kconfig

config I2C_HELPER_AUTO
	bool "Autoselect pertinent helper modules"
	default y
	help
	  Some I2C bus drivers require so-called "I2C algorithm" modules
	  to work. These are basically software-only abstractions of generic
	  I2C interfaces. This option will autoselect them so that you don't
	  have to care.

	  Unselect this only if you need to enable additional helper
	  modules, for example for use with external I2C bus drivers.

	  In doubt, say Y.

config I2C_SMBUS
	tristate "SMBus-specific protocols" if !I2C_HELPER_AUTO
	help
	  Say Y here if you want support for SMBus extensions to the I2C
	  specification. At the moment, the only supported extension is
	  the SMBus alert protocol.

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

source drivers/i2c/algos/Kconfig
source drivers/i2c/busses/Kconfig

config I2C_STUB
	tristate "I2C/SMBus Test Stub"
	depends on 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_SLAVE
	bool "I2C slave support"

if I2C_SLAVE

config I2C_SLAVE_EEPROM
	tristate "I2C eeprom slave driver"

endif

config I2C_DEBUG_CORE
	bool "I2C Core debugging messages"
	help
	  Say Y here if you want the I2C core to produce a bunch of debug
	  messages to the system log.  Select this if you are having a
	  problem with I2C support and want to see more of what is going on.

config I2C_DEBUG_ALGO
	bool "I2C Algorithm debugging messages"
	help
	  Say Y here if you want the I2C algorithm drivers to produce a bunch
	  of debug messages to the system log.  Select this if you are having
	  a problem with I2C support and want to see more of what is going
	  on.

config I2C_DEBUG_BUS
	bool "I2C Bus debugging messages"
	depends on HAS_IOMEM
	help
	  Say Y here if you want the I2C bus drivers to produce a bunch of
	  debug messages to the system log.  Select this if you are having
	  a problem with I2C support and want to see more of what is going
	  on.

endif # I2C

endmenu
