# ST Microelectronics LIS2DW12 3-axis accelerometer driver
#
# Copyright (c) 2019 STMicroelectronics
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig LIS2DW12
	bool "LIS2DW12 I2C/SPI accelerometer sensor driver"
	depends on (I2C && HAS_DTS_I2C) || (SPI && HAS_DTS_SPI)
	help
	  Enable driver for LIS2DW12 accelerometer sensor driver

if LIS2DW12

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

config LIS2DW12_TRIGGER_NONE
	bool "No trigger"

config LIS2DW12_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select LIS2DW12_TRIGGER

config LIS2DW12_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select LIS2DW12_TRIGGER

endchoice

config LIS2DW12_TRIGGER
	bool

if LIS2DW12_TRIGGER

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

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

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

config LIS2DW12_INT_PIN_1
	bool "int1"

config LIS2DW12_INT_PIN_2
	bool "int2"
endchoice

endif # LIS2DW12_TRIGGER

choice
	prompt "Accelerometer Full-scale range setting"
	depends on LIS2DW12
	default LIS2DW12_ACCEL_RANGE_RUNTIME

config LIS2DW12_ACCEL_RANGE_RUNTIME
	bool "Set at runtime (Default 2G)"

config LIS2DW12_ACCEL_RANGE_2G
	bool "2G"

config LIS2DW12_ACCEL_RANGE_4G
	bool "4G"

config LIS2DW12_ACCEL_RANGE_8G
	bool "8G"

config LIS2DW12_ACCEL_RANGE_16G
	bool "16G"
endchoice

choice
	prompt "Accelerometer sampling frequency (ODR)"
	depends on LIS2DW12
	default LIS2DW12_ODR_RUNTIME

config LIS2DW12_ODR_RUNTIME
	bool "Set at runtime (Default 100 Hz)"

config LIS2DW12_ODR_1_6
	bool "1.6 Hz"

config LIS2DW12_ODR_12_5
	bool "12.5 Hz"

config LIS2DW12_ODR_25
	bool "25 Hz"

config LIS2DW12_ODR_50
	bool "50 Hz"

config LIS2DW12_ODR_100
	bool "100 Hz"

config LIS2DW12_ODR_200
	bool "200 Hz"

config LIS2DW12_ODR_400
	bool "400 Hz"

config LIS2DW12_ODR_800
	bool "800 Hz"

config LIS2DW12_ODR_1600
	bool "1600 Hz"

endchoice

config LIS2DW12_POWER_MODE
	int "Sensor Power Modes"
	range 0 4
	default 0
	help
	  Specify the sensor power mode
	  0: Low Power M1
	  1: Low Power M2
	  2: Low Power M3
	  3: Low Power M4
	  4: High Performance

endif # LIS2DW12
