# ST Microelectronics LSM6DSO 6-axis IMU sensor driver

# Copyright (c) 2019 STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

menuconfig LSM6DSO
	bool "LSM6DSO I2C/SPI accelerometer and gyroscope Chip"
	depends on I2C || SPI
	select HAS_STMEMSC
	select USE_STDC_LSM6DSO
	help
	  Enable driver for LSM6DSO accelerometer and gyroscope
	  sensor.

if LSM6DSO

choice LSM6DSO_TRIGGER_MODE
	prompt "Trigger mode"
	help
	  Specify the type of triggering to be used by the driver.

config LSM6DSO_TRIGGER_NONE
	bool "No trigger"

config LSM6DSO_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select LSM6DSO_TRIGGER

config LSM6DSO_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select LSM6DSO_TRIGGER

endchoice

config LSM6DSO_TRIGGER
	bool

if LSM6DSO_TRIGGER

config LSM6DSO_THREAD_PRIORITY
	int "Thread priority"
	depends on LSM6DSO_TRIGGER_OWN_THREAD
	default 10
	help
	  Priority of thread used by the driver to handle interrupts.

config LSM6DSO_THREAD_STACK_SIZE
	int "Thread stack size"
	depends on LSM6DSO_TRIGGER_OWN_THREAD
	default 1024
	help
	  Stack size of thread used by the driver to handle interrupts.

choice LSM6DSO_INT_PIN
	prompt "Sensor INT pin number"
	default LSM6DSO_INT_PIN_1
	help
	  The number of LSM6DSO int pin used to generate interrupt to cpu.
	  Supported values are int1 or int2

config LSM6DSO_INT_PIN_1
	bool "int1"

config LSM6DSO_INT_PIN_2
	bool "int2"
endchoice

endif # LSM6DSO_TRIGGER

config LSM6DSO_ENABLE_TEMP
	bool "Enable temperature"
	help
	  Enable/disable temperature

config LSM6DSO_SENSORHUB
	bool "Enable I2C sensorhub feature"
	help
	  Enable/disable internal sensorhub. You can enable
	  a maximum of two external sensors (if more than two are enabled
	  the system would enumerate only the first two found)

if LSM6DSO_SENSORHUB

config LSM6DSO_EXT_LIS2MDL
	bool "Enable LIS2MDL as external sensor"
	default y

config LSM6DSO_EXT_LPS22HH
	bool "Enable LPS22HH as external sensor"
	default y

config LSM6DSO_EXT_HTS221
	bool "Enable HTS221 as external sensor"

config LSM6DSO_EXT_LPS22HB
	bool "Enable LPS22HB as external sensor"

endif # LSM6DSO_SENSORHUB

menu "Attributes"

config LSM6DSO_GYRO_FS
	int "Gyroscope full-scale range"
	default 0
	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:
	  0:  Full Scale selected at runtime
	  125:   +/- 125dps
	  250:   +/- 250dps
	  500:   +/- 500dps
	  1000:  +/- 1000dps
	  2000:  +/- 2000dps

config LSM6DSO_GYRO_ODR
	int "Gyroscope Output data rate frequency"
	range 0 10
	default 0
	help
	  Specify the default accelerometer output data rate expressed in
	  samples per second (Hz).
	  0: ODR selected at runtime
	  1: 12.5Hz
	  2: 26Hz
	  3: 52Hz
	  4: 104Hz
	  5: 208Hz
	  6: 416Hz
	  7: 833Hz
	  8: 1660Hz
	  9: 3330Hz
	  10: 6660Hz

config LSM6DSO_ACCEL_FS
	int "Accelerometer full-scale range"
	default 0
	help
	  Specify the default accelerometer full-scale range.
	  An X value for the config represents a range of +/- X G. Valid values
	  are:
	  0:  Full Scale selected at runtime
	  2:  +/- 2g
	  4:  +/- 4g
	  8:  +/- 8g
	  16: +/- 16g

config LSM6DSO_ACCEL_ODR
	int "Accelerometer Output data rate frequency"
	range 0 10
	default 0
	help
	  Specify the default accelerometer output data rate expressed in
	  samples per second (Hz).
	  0: ODR selected at runtime
	  1: 12.5Hz
	  2: 26Hz
	  3: 52Hz
	  4: 104Hz
	  5: 208Hz
	  6: 416Hz
	  7: 833Hz
	  8: 1660Hz
	  9: 3330Hz
	  10: 6660Hz
endmenu

endif # LSM6DSO
