# SPDX-License-Identifier: GPL-2.0
# Generic register map support.  There are no user servicable options here,
# this is an API intended to be used by other kernel subsystems.  These
# subsystems should select the appropriate symbols.

config REGMAP
	bool
	default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SOUNDWIRE || REGMAP_SOUNDWIRE_MBQ || REGMAP_SCCB || REGMAP_I3C || REGMAP_SPI_AVMM || REGMAP_MDIO || REGMAP_FSI)
	select IRQ_DOMAIN if REGMAP_IRQ
	select MDIO_BUS if REGMAP_MDIO
	help
	  Enable support for the Register Map (regmap) access API.

	  Usually, this option is automatically selected when needed.
	  However, you may want to enable it manually for running the regmap
	  KUnit tests.

	  If unsure, say N.

config REGMAP_KUNIT
	tristate "KUnit tests for regmap"
	depends on KUNIT && REGMAP
	default KUNIT_ALL_TESTS
	select REGMAP_RAM

config REGMAP_BUILD
	bool "Enable regmap build"
	depends on KUNIT
	select REGMAP
	help
	  This option exists purely to allow the regmap KUnit tests to
	  be enabled without having to enable some driver that uses
	  regmap due to unfortunate issues with how KUnit tests are
	  normally enabled.

config REGMAP_AC97
	tristate

config REGMAP_I2C
	tristate
	depends on I2C

config REGMAP_SLIMBUS
	tristate
	depends on SLIMBUS

config REGMAP_SPI
	tristate
	depends on SPI

config REGMAP_SPMI
	tristate
	depends on SPMI

config REGMAP_W1
	tristate
	depends on W1

config REGMAP_MDIO
	tristate

config REGMAP_MMIO
	tristate

config REGMAP_IRQ
	bool

config REGMAP_RAM
	tristate

config REGMAP_SOUNDWIRE
	tristate
	depends on SOUNDWIRE

config REGMAP_SOUNDWIRE_MBQ
	tristate
	depends on SOUNDWIRE

config REGMAP_SCCB
	tristate
	depends on I2C

config REGMAP_I3C
	tristate
	depends on I3C

config REGMAP_SPI_AVMM
	tristate
	depends on SPI

config REGMAP_FSI
	tristate
	depends on FSI
