# ST Microelectronics LSM6DSO16IS 6-axis IMU sensor driver

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

menuconfig LSM6DSO16IS
	bool "LSM6DSO16IS I2C/SPI accelerometer and gyroscope Chip"
	default y
	depends on DT_HAS_ST_LSM6DSO16IS_ENABLED
	select I2C if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO16IS),i2c)
	select SPI if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSO16IS),spi)
	select HAS_STMEMSC
	select USE_STDC_LSM6DSO16IS
	help
	  Enable driver for LSM6DSO16IS accelerometer and gyroscope
	  sensor.

if LSM6DSO16IS

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

config LSM6DSO16IS_TRIGGER_NONE
	bool "No trigger"

config LSM6DSO16IS_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select LSM6DSO16IS_TRIGGER

config LSM6DSO16IS_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select LSM6DSO16IS_TRIGGER

endchoice

config LSM6DSO16IS_TRIGGER
	bool

if LSM6DSO16IS_TRIGGER

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

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

endif # LSM6DSO16IS_TRIGGER

config LSM6DSO16IS_ENABLE_TEMP
	bool "Temperature"
	help
	  Enable/disable temperature

config LSM6DSO16IS_SENSORHUB
	bool "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 LSM6DSO16IS_SENSORHUB

config LSM6DSO16IS_EXT_LIS2MDL
	bool "LIS2MDL as external sensor"
	default y

config LSM6DSO16IS_EXT_LPS22HH
	bool "LPS22HH as external sensor"

config LSM6DSO16IS_EXT_HTS221
	bool "HTS221 as external sensor"

config LSM6DSO16IS_EXT_LPS22HB
	bool "LPS22HB as external sensor"

config LSM6DSO16IS_EXT_LPS22DF
	bool "LPS22DF as external sensor"
	default y

endif # LSM6DSO16IS_SENSORHUB

endif # LSM6DSO16IS
