# ST Microelectronics LSM6DSV16X 6-axis IMU sensor driver

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

menuconfig LSM6DSV16X
	bool "LSM6DSV16X/LSM6DSV32X I3C/I2C/SPI accelerometer and gyroscope chip"
	default y
	depends on DT_HAS_ST_LSM6DSV16X_ENABLED || DT_HAS_ST_LSM6DSV32X_ENABLED
	depends on ZEPHYR_HAL_ST_MODULE
	select I2C if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV16X),i2c) ||\
		      $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV32X),i2c)
	select I3C if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV16X),i3c) ||\
		      $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV32X),i3c)
	select SPI if $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV16X),spi) ||\
		      $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV32X),spi)
	select HAS_STMEMSC
	select USE_STDC_LSM6DSV16X
	select RTIO_WORKQ if SENSOR_ASYNC_API
	help
	  Enable driver for LSM6DSV16X accelerometer and gyroscope
	  sensor.

if LSM6DSV16X

config LSM6DSV16X_STREAM
	bool "Use hardware FIFO to stream data"
	select LSM6DSV16X_TRIGGER
	default y
	depends on I2C_RTIO || SPI_RTIO || I3C_RTIO
	depends on SENSOR_ASYNC_API
	help
	  Use this config option to enable streaming sensor data via RTIO subsystem.

choice LSM6DSV16X_TRIGGER_MODE
	default LSM6DSV16X_TRIGGER_GLOBAL_THREAD if LSM6DSV16X_STREAM
	default LSM6DSV16X_TRIGGER_NONE
	prompt "Trigger mode"
	help
	  Specify the type of triggering to be used by the driver.

config LSM6DSV16X_TRIGGER_NONE
	bool "No trigger"

config LSM6DSV16X_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO || I3C
	depends on $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV16X),int1-gpios) ||\
		   $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV16X),int2-gpios) ||\
		   $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV16X),i3c) ||\
		   $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV32X),int1-gpios) ||\
		   $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV32X),int2-gpios) ||\
		   $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV32X),i3c)
	select LSM6DSV16X_TRIGGER

config LSM6DSV16X_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO || I3C
	depends on $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV16X),int1-gpios) ||\
		   $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV16X),int2-gpios) ||\
		   $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV16X),i3c) ||\
		   $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV32X),int1-gpios) ||\
		   $(dt_compat_any_has_prop,$(DT_COMPAT_ST_LSM6DSV32X),int2-gpios) ||\
		   $(dt_compat_on_bus,$(DT_COMPAT_ST_LSM6DSV32X),i3c)
	select LSM6DSV16X_TRIGGER

endchoice

config LSM6DSV16X_TRIGGER
	bool

if LSM6DSV16X_TRIGGER

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

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

endif # LSM6DSV16X_TRIGGER

config LSM6DSV16X_ENABLE_TEMP
	bool "Temperature"
	help
	  Enable/disable temperature

config LSM6DSV16X_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 LSM6DSV16X_SENSORHUB

config LSM6DSV16X_EXT_LIS2MDL
	bool "LIS2MDL as external sensor"
	default y

config LSM6DSV16X_EXT_LPS22HH
	bool "LPS22HH as external sensor"

config LSM6DSV16X_EXT_HTS221
	bool "HTS221 as external sensor"

config LSM6DSV16X_EXT_LPS22HB
	bool "LPS22HB as external sensor"

config LSM6DSV16X_EXT_LPS22DF
	bool "LPS22DF as external sensor"
	default y

endif # LSM6DSV16X_SENSORHUB

endif # LSM6DSV16X
