# Kconfig - LSM6DS0 accelerometer and gyroscope sensor configuration
# options

#
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

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

if !HAS_DTS_I2C_DEVICE

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.

endif

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