#
# 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 or AK09912 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 IIO_TRIGGERED_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_ST_MAGN_I2C_3AXIS if (I2C)
	select IIO_ST_MAGN_SPI_3AXIS if (SPI_MASTER)
	select IIO_TRIGGERED_BUFFER if (IIO_BUFFER)
	help
	  Say yes here to build support for STMicroelectronics magnetometers:
	  LSM303DLHC, LSM303DLM, LIS3MDL.

	  This driver can also be built as a module. If so, these modules
	  will be created:
	  - st_magn (core functions for the driver [it is mandatory]);
	  - st_magn_i2c (necessary for the I2C devices [optional*]);
	  - st_magn_spi (necessary for the SPI devices [optional*]);

	  (*) one of these is necessary to do something.

config IIO_ST_MAGN_I2C_3AXIS
	tristate
	depends on IIO_ST_MAGN_3AXIS
	depends on IIO_ST_SENSORS_I2C

config IIO_ST_MAGN_SPI_3AXIS
	tristate
	depends on IIO_ST_MAGN_3AXIS
	depends on IIO_ST_SENSORS_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)

endmenu
