# 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"
	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
