#
# Magnetometer sensors
#
# When adding new entries keep the list in alphabetical order

menu "Magnetometer sensors"

config AK8975
	tristate "Asahi Kasei AK 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.

	  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.

	  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
