# Kconfig - LSM6DS0 accelerometer and gyroscope sensor 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 LSM6DS0
	bool "LSM6DS0 I2C accelerometer and gyroscope Chip"
	depends on SENSOR && I2C && NANO_TIMEOUTS
	default n
	help
	  Enable driver for LSM6DS0 I2C-based accelerometer and gyroscope
	  sensor.

config LSM6DS0_SYS_LOG_LEVEL
	int "LSM6DS0 Log level"
	depends on SYS_LOG && LSM6DS0
	default 0
	range 0 4
	help
	Sets log level for LSM6DS0 driver.
	Levels are:

	- 0 OFF: do not write

	- 1 ERROR: only write SYS_LOG_ERR

	- 2 WARNING: write SYS_LOG_WRN in addition to previous level

	- 3 INFO: write SYS_LOG_INF in addition to previous levels

	- 4 DEBUG: write SYS_LOG_DBG in addition to previous levels

config LSM6DS0_DEV_NAME
	string "LSM6DS0 device name"
	depends on LSM6DS0
	default "lsm6ds0"

config LSM6DS0_I2C_ADDR
	hex
	prompt "LSM6DS0 I2C address"
	depends on LSM6DS0
	default 0x6B
	help
	  I2C address of the LSM6DS0 sensor.
	  Use 0x6A if the SA0 pin is pulled to GND or 0x6B if the SA0 pin
	  is pulled to VCC.

config LSM6DS0_I2C_MASTER_DEV_NAME
	string "I2C master where LSM6DS0 chip is connected"
	depends on LSM6DS0
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which LSM6DS0 is
	  connected.

config LSM6DS0_ACCEL_ENABLE_X_AXIS
	bool "Enable accelerometer X axis"
	depends on LSM6DS0
	default y
	help
	  Enable/disable accelerometer X axis totally by stripping everything
	  related in driver.

config LSM6DS0_ACCEL_ENABLE_Y_AXIS
	bool "Enable accelerometer Y axis"
	depends on LSM6DS0
	default y
	help
	  Enable/disable accelerometer Y axis totally by stripping everything
	  related in driver.

config LSM6DS0_ACCEL_ENABLE_Z_AXIS
	bool "Enable accelerometer Z axis"
	depends on LSM6DS0
	default y
	help
	  Enable/disable accelerometer Z axis totally by stripping everything
	  related in driver.

config LSM6DS0_GYRO_ENABLE_X_AXIS
	bool "Enable gyroscope X axis"
	depends on LSM6DS0
	default y
	help
	  Enable/disable gyroscope X axis totally by stripping everything
	  related in driver.

config LSM6DS0_GYRO_ENABLE_Y_AXIS
	bool "Enable gyroscope Y axis"
	depends on LSM6DS0
	default y
	help
	  Enable/disable gyroscope Y axis totally by stripping everything
	  related in driver.

config LSM6DS0_GYRO_ENABLE_Z_AXIS
	bool "Enable gyroscope Z axis"
	depends on LSM6DS0
	default y
	help
	  Enable/disable gyroscope Z axis totally by stripping everything
	  related in driver.

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

menu "Attributes"
	depends on LSM6DS0

config LSM6DS0_GYRO_FULLSCALE
	int
	prompt "Gyroscope full-scale range"
	depends on LSM6DS0
	default 245
	help
	  Specify the default gyroscope full-scale range.
	  An X value for the config represents a range of +/- X degree per
	  second. Valid values are 245, 500 and 2000.

config LSM6DS0_GYRO_SAMPLING_RATE
	int
	prompt "Output data rate"
	depends on LIS3MDL
	default 15
	help
	  Specify the default gyroscope output data rate expressed in samples
	  per second (Hz).
	  Data rates supported by the chip are 0, 15, 60, 119, 238, 476,
	  952.

config LSM6DS0_ACCEL_FULLSCALE
	int
	prompt "Accelerometer full-scale range"
	depends on LSM6DS0
	default 2
	help
	  Specify the default accelerometer full-scale range.
	  An X value for the config represents a range of +/- X G. Valid values
	  are 2, 4, 8 and 16.

config LSM6DS0_ACCEL_SAMPLING_RATE
	int
	prompt "Output data rate"
	depends on LIS3MDL
	default 10
	help
	  Specify the default accelerometer output data rate expressed in
	  samples per second (Hz).
	  Data rates supported by the chip are 0, 10, 50, 119, 238, 476, 952.

endmenu
