# 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_SLIMBUS || 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
	depends on PHYLIB

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
