#
# I2C subsystem configuration
#

menu "I2C support"

config I2C
	tristate "I2C support"
	select RT_MUTEXES
	select IRQ_DOMAIN
	---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, two extensions are supported:
	  the SMBus Alert protocol and the SMBus Host Notify 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
