# Kconfig - LSM9DS0 accelerometer, magnetometer and temperature
# configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menuconfig LSM9DS0_MFD
	bool "LSM9DS0 I2C accelerometer, magnetometer and temperature sensor chip"
	depends on SENSOR && I2C && NANO_TIMEOUTS
	default n
	help
	  Enable driver for LSM9DS0 I2C-based MFD sensor.

config LSM9DS0_MFD_DEV_NAME
	string "LSM9DS0_MFD device name"
	depends on LSM9DS0_MFD
	default "lsm9ds0_mfd"

config LSM9DS0_MFD_I2C_ADDR
	hex "LSM9DS0_MFD I2C slave address"
	default 0x1E
	depends on LSM9DS0_MFD
	help
	  Specify the I2C slave address for the LSM9DS0_MFD.

	  0x1E: GND
	  0x1F: VCC

config LSM9DS0_MFD_I2C_MASTER_DEV_NAME
	string "I2C master where LSM9DS0 gyroscope is connected"
	depends on LSM9DS0_MFD
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which LSM9DS0_MFD
	  is connected.

config LSM9DS0_MFD_ACCEL_ENABLE
	bool "Enable accelerometer"
	depends on LSM9DS0_MFD
	default y
	help
	  Enable/disable accelerometer totally by stripping everything related
	  in driver.

config LSM9DS0_MFD_MAGN_ENABLE
	bool "Enable magnetometer"
	depends on LSM9DS0_MFD
	default y
	help
	  Enable/disable magnetometer totally by stripping everything related in
	  driver.

config LSM9DS0_MFD_TEMP_ENABLE
	bool "Enable temperature sensor"
	depends on LSM9DS0_MFD
	default n
	help
	  Enable/disable temperature sensor totally by stripping everything
	  related in driver.

menu "Attributes"
	depends on LSM9DS0_MFD

choice
	prompt "Accelerometer sampling rate"
	default LSM9DS0_MFD_ACCEL_SAMPLING_RATE_25
	depends on LSM9DS0_MFD_ACCEL_ENABLE
	help
	  Specify the default sampling rate frequency for accelerometer.

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_0
	bool
	prompt "0 Hz (power down)"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_3_125
	bool
	prompt "3.125 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_6_25
	bool
	prompt "6.25 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_12_5
	bool
	prompt "12.5 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_25
	bool
	prompt "25 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_50
	bool
	prompt "50 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_100
	bool
	prompt "100 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_200
	bool
	prompt "200 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_400
	bool
	prompt "400 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_800
	bool
	prompt "800 Hz"

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_1600
	bool
	prompt "1600 Hz"

endchoice

config LSM9DS0_MFD_ACCEL_SAMPLING_RATE_RUNTIME
	bool "Enable dynamic sampling rate for accelerometer"
	depends on LSM9DS0_MFD_ACCEL_ENABLE
	default n
	help
	  Enable alteration of accelerometer sampling rate attribute at
	  runtime.

choice
	prompt "Accelerometer full-scale"
	default LSM9DS0_MFD_ACCEL_FULL_SCALE_2
	depends on LSM9DS0_MFD_ACCEL_ENABLE
	help
	  Specify the default full-scale for accelerometer.

config LSM9DS0_MFD_ACCEL_FULL_SCALE_2
	bool
	prompt "2G"

config LSM9DS0_MFD_ACCEL_FULL_SCALE_4
	bool
	prompt "4G"

config LSM9DS0_MFD_ACCEL_FULL_SCALE_6
	bool
	prompt "6G"

config LSM9DS0_MFD_ACCEL_FULL_SCALE_8
	bool
	prompt "8G"

config LSM9DS0_MFD_ACCEL_FULL_SCALE_16
	bool
	prompt "16G"

endchoice

config LSM9DS0_MFD_ACCEL_FULL_SCALE_RUNTIME
	bool "Enable dynamic full-scale for accelerometer"
	depends on LSM9DS0_MFD_ACCEL_ENABLE
	default n
	help
	  Enable alteration of accelerometer full-scale attribute at
	  runtime.

config LSM9DS0_MFD_ACCEL_ENABLE_X
	bool "Enable accelerometer X axis"
	depends on LSM9DS0_MFD_ACCEL_ENABLE
	default y

config LSM9DS0_MFD_ACCEL_ENABLE_Y
	bool "Enable accelerometer Y axis"
	depends on LSM9DS0_MFD_ACCEL_ENABLE
	default y

config LSM9DS0_MFD_ACCEL_ENABLE_Z
	bool "Enable accelerometer Z axis"
	depends on LSM9DS0_MFD_ACCEL_ENABLE
	default y

choice
	prompt "Magnetometer sampling rate"
	default LSM9DS0_MFD_MAGN_SAMPLING_RATE_25
	depends on LSM9DS0_MFD_MAGN_ENABLE
	help
	  Specify the default sampling rate frequency for magnetometer.

config LSM9DS0_MFD_MAGN_SAMPLING_RATE_3_125
	bool
	prompt "3.125 Hz"

config LSM9DS0_MFD_MAGN_SAMPLING_RATE_6_25
	bool
	prompt "6.25 Hz"

config LSM9DS0_MFD_MAGN_SAMPLING_RATE_12_5
	bool
	prompt "12.5 Hz"

config LSM9DS0_MFD_MAGN_SAMPLING_RATE_25
	bool
	prompt "25 Hz"

config LSM9DS0_MFD_MAGN_SAMPLING_RATE_50
	bool
	prompt "50 Hz"

config LSM9DS0_MFD_MAGN_SAMPLING_RATE_100
	bool
	prompt "100 Hz"

endchoice

config LSM9DS0_MFD_MAGN_SAMPLING_RATE_RUNTIME
	bool "Enable dynamic sampling rate for magnetometer"
	depends on LSM9DS0_MFD_MAGN_ENABLE
	default n
	help
	  Enable alteration of magnetometer sampling rate attribute at
	  runtime.

choice
	prompt "Magnetometer full-scale"
	default LSM9DS0_MFD_MAGN_FULL_SCALE_2
	depends on LSM9DS0_MFD_MAGN_ENABLE
	help
	  Specify the default full-scale for magnetometer.

config LSM9DS0_MFD_MAGN_FULL_SCALE_2
	bool
	prompt "2 Gauss"

config LSM9DS0_MFD_MAGN_FULL_SCALE_4
	bool
	prompt "4 Gauss"

config LSM9DS0_MFD_MAGN_FULL_SCALE_8
	bool
	prompt "8 Gauss"

config LSM9DS0_MFD_MAGN_FULL_SCALE_12
	bool
	prompt "12 Gauss"

endchoice

config LSM9DS0_MFD_MAGN_FULL_SCALE_RUNTIME
	bool "Enable dynamic full-scale for magnetometer"
	depends on LSM9DS0_MFD_MAGN_ENABLE
	default n
	help
	  Enable alteration of magnetometer full-scale attribute at
	  runtime.

endmenu
