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

menu "Magnetometer sensors"

config AK8974
	tristate "Asahi Kasei AK8974 3-Axis Magnetometer"
	depends on I2C
	depends on OF
	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 or AK09916 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:
	  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 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. Right now YAS530, YAS532 and YAS533 are
	  fully 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
