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

menu "Magnetometer sensors"

config AK8975
	tristate "Asahi Kasei AK8975 3-Axis Magnetometer"
	depends on I2C
	depends on GPIOLIB
	help
	  Say yes here to build support for Asahi Kasei AK8975 3-Axis
	  Magnetometer.

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

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 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

endmenu
