# ST Microelectronics IIS2DLPC 3-axis accelerometer driver

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

menuconfig IIS2DLPC
	bool "IIS2DLPC I2C/SPI accelerometer sensor driver"
	depends on I2C || SPI
	select HAS_STMEMSC
	select USE_STDC_IIS2DLPC
	help
	  Enable driver for IIS2DLPC accelerometer sensor driver

if IIS2DLPC

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

config IIS2DLPC_TRIGGER_NONE
	bool "No trigger"

config IIS2DLPC_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select IIS2DLPC_TRIGGER

config IIS2DLPC_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select IIS2DLPC_TRIGGER

endchoice

config IIS2DLPC_TRIGGER
	bool

if IIS2DLPC_TRIGGER

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

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

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

config IIS2DLPC_INT_PIN_1
	bool "int1"

config IIS2DLPC_INT_PIN_2
	bool "int2"
endchoice

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

if IIS2DLPC_PULSE

choice
	prompt "Pulse interrupt source"
	default IIS2DLPC_ONLY_SINGLE

config IIS2DLPC_ONLY_SINGLE
	bool "single"

config IIS2DLPC_SINGLE_DOUBLE
	bool "single/double"

endchoice

config IIS2DLPC_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 IIS2DLPC_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 IIS2DLPC_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 IIS2DLPC_PULSE_X
	bool "Enable X axis for pulse"
	default y

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

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

config IIS2DLPC_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 IIS2DLPC_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 IIS2DLPC_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 # IIS2DLPC_PULSE

endif # IIS2DLPC_TRIGGER

choice
	prompt "Accelerometer Full-scale range setting"
	default IIS2DLPC_ACCEL_RANGE_RUNTIME

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

config IIS2DLPC_ACCEL_RANGE_2G
	bool "2G"

config IIS2DLPC_ACCEL_RANGE_4G
	bool "4G"

config IIS2DLPC_ACCEL_RANGE_8G
	bool "8G"

config IIS2DLPC_ACCEL_RANGE_16G
	bool "16G"
endchoice

choice
	prompt "Accelerometer sampling frequency (ODR)"
	default IIS2DLPC_ODR_RUNTIME

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

config IIS2DLPC_ODR_1_6
	bool "1.6 Hz"

config IIS2DLPC_ODR_12_5
	bool "12.5 Hz"

config IIS2DLPC_ODR_25
	bool "25 Hz"

config IIS2DLPC_ODR_50
	bool "50 Hz"

config IIS2DLPC_ODR_100
	bool "100 Hz"

config IIS2DLPC_ODR_200
	bool "200 Hz"

config IIS2DLPC_ODR_400
	bool "400 Hz"

config IIS2DLPC_ODR_800
	bool "800 Hz"

config IIS2DLPC_ODR_1600
	bool "1600 Hz"

endchoice

config IIS2DLPC_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 # IIS2DLPC
