# Kconfig - LSM6DSL accelerometer and gyroscope sensor configuration
# options

#
# Copyright (c) 2017 Linaro Limited
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig LSM6DSL
	bool "LSM6DSL I2C accelerometer and gyroscope Chip"
	depends on I2C
	default n
	help
	  Enable driver for LSM6DSL I2C-based accelerometer and gyroscope
	  sensor.

config LSM6DSL_DEV_NAME
	string "LSM6DSL device name"
	depends on LSM6DSL && !HAS_DTS_I2C_DEVICE
	default "LSM6DSL"

config LSM6DSL_I2C_ADDR
	hex
	prompt "LSM6DSL I2C address"
	depends on LSM6DSL && !HAS_DTS_I2C_DEVICE
	default 0x6A
	range 0x6A 0x6B
	help
	  I2C address of the LSM6DSL sensor.
	  Use 0x6A if the SA0 pin is pulled to GND or 0x6B if the SA0 pin
	  is pulled to VCC.

config LSM6DSL_I2C_MASTER_DEV_NAME
	string "I2C master where LSM6DSL chip is connected"
	depends on LSM6DSL && !HAS_DTS_I2C_DEVICE
	default I2C_0_NAME
	help
	  Specify the device name of the I2C master device to which LSM6DSL is
	  connected.

config LSM6DSL_ENABLE_TEMP
	bool "Enable temperature"
	depends on LSM6DSL
	default n
	help
	  Enable/disable temperature

menu "Attributes"
	depends on LSM6DSL

config LSM6DSL_GYRO_FULLSCALE
	int
	prompt "Gyroscope full-scale range"
	depends on LSM6DSL
	default 2000
	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 125, 245, 500, 1000 and 2000.

config LSM6DSL_GYRO_SAMPLING_RATE
	int
	prompt "Output data rate"
	depends on LSM6DSL
	default 26
	help
	  Specify the default gyroscope output data rate expressed in samples
	  per second (Hz).
	  Data rates supported by the chip are 0, 13, 26, 52, 104, 208, 416,
	  833, 1660, 3330, 6660.

config LSM6DSL_ACCEL_FULLSCALE
	int
	prompt "Accelerometer full-scale range"
	depends on LSM6DSL
	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 LSM6DSL_ACCEL_SAMPLING_RATE
	int
	prompt "Output data rate"
	depends on LSM6DSL
	default 26
	help
	  Specify the default accelerometer output data rate expressed in
	  samples per second (Hz).
	  Data rates supported by the chip are 0, 2, 13, 26, 52, 104, 208,
	  416, 833, 1660, 3330, 6660.

endmenu
