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

	  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
