# SPDX-License-Identifier: GPL-2.0-only
#
# 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.rst>.

	  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_ATR
	tristate "I2C Address Translator (ATR) support" if COMPILE_TEST
	help
	  Enable support for I2C Address Translator (ATR) chips.

	  An ATR allows accessing multiple I2C busses from a single
	  physical bus via address translation instead of bus selection as
	  i2c-muxes do.

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

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

config I2C_SLAVE
	bool "I2C slave support"
	help
	  This enables Linux to act as an I2C slave device. Note that your I2C
	  bus master driver also needs to support this functionality. Please
	  read Documentation/i2c/slave-interface.rst for further details.

if I2C_SLAVE

config I2C_SLAVE_EEPROM
	tristate "I2C eeprom slave driver"
	help
	  This backend makes Linux behave like an I2C EEPROM. Please read
	  Documentation/i2c/slave-eeprom-backend.rst for further details.

config I2C_SLAVE_TESTUNIT
	tristate "I2C eeprom testunit driver"
	help
	  This backend can be used to trigger test cases for I2C bus masters
	  which require a remote device with certain capabilities, e.g.
	  multi-master, SMBus Host Notify, etc. Please read
	  Documentation/i2c/slave-testunit-backend.rst for further details.

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
