# 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)
	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
	select MDIO_BUS

config REGMAP_MMIO
	tristate

config REGMAP_IRQ
	bool
	select IRQ_DOMAIN

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
