# SPDX-License-Identifier: GPL-2.0-only
#
# Magnetometer sensors
#
# When adding new entries keep the list in alphabetical order

menu "Magnetometer sensors"

config AF8133J
	tristate "Voltafield AF8133J 3-Axis Magnetometer"
	depends on I2C
	depends on OF
	select REGMAP_I2C
	help
	  Say yes here to build support for Voltafield AF8133J I2C-based
	  3-axis magnetometer chip.

	  To compile this driver as a module, choose M here: the module
	  will be called af8133j.

config AK8974
	tristate "Asahi Kasei AK8974 3-Axis Magnetometer"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Asahi Kasei AK8974, AMI305 or
	  AMI306 I2C-based 3-axis magnetometer chips.

	  To compile this driver as a module, choose M here: the module
	  will be called ak8974.

config AK8975
	tristate "Asahi Kasei AK8975 3-Axis Magnetometer"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Asahi Kasei AK8975, AK8963,
	  AK09911, AK09912, AK09916 or AK09918 3-Axis Magnetometer.

	  To compile this driver as a module, choose M here: the module
	  will be called ak8975.

config AK09911
	tristate "Asahi Kasei AK09911 3-axis Compass"
	depends on I2C
	depends on GPIOLIB || COMPILE_TEST
	select AK8975
	help
	  Deprecated: AK09911 is now supported by AK8975 driver.

config BMC150_MAGN
	tristate
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER

config BMC150_MAGN_I2C
	tristate "Bosch BMC150 I2C Magnetometer Driver"
	depends on I2C
	select BMC150_MAGN
	select REGMAP_I2C
	help
	  Say yes here to build support for the BMC150 magnetometer with
	  I2C interface.

	  This is a combo module with both accelerometer and magnetometer.
	  This driver is only implementing magnetometer part, which has
	  its own address and register map.

	  This driver also supports I2C Bosch BMC156 and BMM150 chips.
	  To compile this driver as a module, choose M here: the module will be
	  called bmc150_magn_i2c.

config BMC150_MAGN_SPI
	tristate "Bosch BMC150 SPI Magnetometer Driver"
	depends on SPI
	select BMC150_MAGN
	select REGMAP_SPI
	help
	  Say yes here to build support for the BMC150 magnetometer with
	  SPI interface.

	  This is a combo module with both accelerometer and magnetometer.
	  This driver is only implementing magnetometer part, which has
	  its own address and register map.

	  This driver also supports SPI Bosch BMC156 and BMM150 chips.
	  To compile this driver as a module, choose M here: the module will be
	  called bmc150_magn_spi.

config MAG3110
	tristate "Freescale MAG3110 3-Axis Magnetometer"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for the Freescale MAG3110 3-Axis
	  magnetometer.

	  To compile this driver as a module, choose M here: the module
	  will be called mag3110.

config HID_SENSOR_MAGNETOMETER_3D
	depends on HID_SENSOR_HUB
	select IIO_BUFFER
	select HID_SENSOR_IIO_COMMON
	select HID_SENSOR_IIO_TRIGGER
	tristate "HID Magenetometer 3D"
	help
	  Say yes here to build support for the HID SENSOR
	  Magnetometer 3D.

config MMC35240
	tristate "MEMSIC MMC35240 3-axis magnetic sensor"
	select REGMAP_I2C
	depends on I2C
	help
	  Say yes here to build support for the MEMSIC MMC35240 3-axis
	  magnetic sensor.

	  To compile this driver as a module, choose M here: the module
	  will be called mmc35240.

config IIO_ST_MAGN_3AXIS
	tristate "STMicroelectronics magnetometers 3-Axis Driver"
	depends on (I2C || SPI_MASTER) && SYSFS
	select IIO_ST_SENSORS_CORE
	select IIO_TRIGGERED_BUFFER if (IIO_BUFFER)
	help
	  Say yes here to build support for STMicroelectronics magnetometers:
	  LSM303C, LSM303DLHC, LSM303DLM, LIS3MDL.

	  Also need to enable at least one of I2C and SPI interface drivers
	  below.

config IIO_ST_MAGN_I2C_3AXIS
	tristate "STMicroelectronics magnetometers 3-Axis I2C Interface"
	depends on I2C && IIO_ST_MAGN_3AXIS
	default I2C && IIO_ST_MAGN_3AXIS
	select IIO_ST_SENSORS_I2C
	help
	  Build support for STMicroelectronics magnetometers I2C interface.

	  To compile this driver as a module, choose M here. The module
	  will be called st_magn_i2c.

config IIO_ST_MAGN_SPI_3AXIS
	tristate "STMicroelectronics magnetometers 3-Axis SPI Interface"
	depends on SPI_MASTER && IIO_ST_MAGN_3AXIS
	default SPI_MASTER && IIO_ST_MAGN_3AXIS
	select IIO_ST_SENSORS_SPI
	help
	  Build support for STMicroelectronics magnetometers SPI interface.

	  To compile this driver as a module, choose M here. The module
	  will be called st_magn_spi.

config SENSORS_HMC5843
	tristate
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER

config SENSORS_HMC5843_I2C
	tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer (I2C)"
	depends on I2C
	select SENSORS_HMC5843
	select REGMAP_I2C
	help
	  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
	  HMC5883L 3-Axis Magnetometer (digital compass).

	  This driver can also be compiled as a set of modules.
	  If so, these modules will be created:
	  - hmc5843_core (core functions)
	  - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)

config SENSORS_HMC5843_SPI
	tristate "Honeywell HMC5983 3-Axis Magnetometer (SPI)"
	depends on SPI_MASTER
	select SENSORS_HMC5843
	select REGMAP_SPI
	help
	  Say Y here to add support for the Honeywell HMC5983 3-Axis Magnetometer
	  (digital compass).

	  This driver can also be compiled as a set of modules.
	  If so, these modules will be created:
	  - hmc5843_core (core functions)
	  - hmc5843_spi (support for HMC5983)

config SENSORS_RM3100
	tristate
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER

config SENSORS_RM3100_I2C
	tristate "PNI RM3100 3-Axis Magnetometer (I2C)"
	depends on I2C
	select SENSORS_RM3100
	select REGMAP_I2C
	help
	  Say Y here to add support for the PNI RM3100 3-Axis Magnetometer.

	  This driver can also be compiled as a module.
	  To compile this driver as a module, choose M here: the module
	  will be called rm3100-i2c.

config SENSORS_RM3100_SPI
	tristate "PNI RM3100 3-Axis Magnetometer (SPI)"
	depends on SPI_MASTER
	select SENSORS_RM3100
	select REGMAP_SPI
	help
	  Say Y here to add support for the PNI RM3100 3-Axis Magnetometer.

	  This driver can also be compiled as a module.
	  To compile this driver as a module, choose M here: the module
	  will be called rm3100-spi.

config TI_TMAG5273
	tristate "TI TMAG5273 Low-Power Linear 3D Hall-Effect Sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y here to add support for the TI TMAG5273 Low-Power
	  Linear 3D Hall-Effect Sensor.

	  This driver can also be compiled as a module.
	  To compile this driver as a module, choose M here: the module
	  will be called tmag5273.

config YAMAHA_YAS530
	tristate "Yamaha YAS530 family of 3-Axis Magnetometers (I2C)"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to add support for the Yamaha YAS530 series of
	  3-Axis Magnetometers. YAS530, YAS532, YAS533 and YAS537 are
	  supported.

	  This driver can also be compiled as a module.
	  To compile this driver as a module, choose M here: the module
	  will be called yamaha-yas.

endmenu
