# 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 SENSOR && I2C
	default n
	help
	  Enable driver for LSM6DS0 I2C-based accelerometer and gyroscope
	  sensor.

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