# 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 || SPI
	select HAS_STMEMSC
	select USE_STDC_LIS2DW12
	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

menuconfig LIS2DW12_PULSE
	bool "Pulse detection"
	help
	  Enable pulse (single/double tap) detection

if LIS2DW12_PULSE

choice
	prompt "Pulse interrupt source"
	default LIS2DW12_ONLY_SINGLE

config LIS2DW12_ONLY_SINGLE
	bool "single"

config LIS2DW12_SINGLE_DOUBLE
	bool "single/double"

endchoice

config LIS2DW12_PULSE_THSX
	hex "Pulse X-axis threshold"
	range 0 0x1F
	default 0x0E
	help
	  Threshold to start the pulse-event detection procedure on the X-axis.
	  Threshold values for each axis are unsigned 5-bit corresponding
	  to an 2g acceleration full-scale range.

config LIS2DW12_PULSE_THSY
	hex "Pulse Y-axis threshold"
	range 0 0x1F
	default 0x0E
	help
	  Threshold to start the pulse-event detection procedure on the Y-axis.
	  Threshold values for each axis are unsigned 5-bit corresponding
	  to an 2g acceleration full-scale range.

config LIS2DW12_PULSE_THSZ
	hex "Pulse Z-axis threshold"
	range 0 0x1F
	default 0x0E
	help
	  Threshold to start the pulse-event detection procedure on the Z-axis.
	  Threshold values for each axis are unsigned 5-bit corresponding
	  to an 2g acceleration full-scale range.

config LIS2DW12_PULSE_X
	bool "Enable X axis for pulse"
	default y

config LIS2DW12_PULSE_Y
	bool "Enable Y axis for pulse"
	default y

config LIS2DW12_PULSE_Z
	bool "Enable Z axis for pulse"
	default y

config LIS2DW12_PULSE_SHOCK
	hex "Shock value"
	range 0 0x03
	default 0x00
	help
	  Maximum duration of over-threshold event: this register represents
	  the maximum time of an over-threshold signal detection to be
	  recognized as a tap event. Where 0 equals 4*1/ODR and 1LSB = 8*1/ODR.

config LIS2DW12_PULSE_LTNCY
	hex "Latency value"
	range 0 0x0F
	default 0x05
	help
	  When double-tap recognition is enabled, this register expresses
	  the maximum time between two successive detected taps to
	  determine a double-tap event. Where 0 equals 16*1/ODR and
	  1LSB = 32*1/ODR.

config LIS2DW12_PULSE_QUIET
	hex "Quiet value"
	range 0 0x03
	default 0x00
	help
	  Expected quiet time after a tap detection: this register represents
	  the time after the first detected tap in which there must not be
	  any overthreshold event. Where 0 equals 2*1/ODR and 1LSB = 4*1/ODR.

endif # LIS2DW12_PULSE

endif # LIS2DW12_TRIGGER

choice
	prompt "Accelerometer Full-scale range setting"
	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)"
	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
