# Micropower, 3-Axis, +/-200g Digital Accelerometer

# Copyright (c) 2018 Analog Devices Inc.
# SPDX-License-Identifier: Apache-2.0

menuconfig ADXL372
	bool "ADXL372 Three Axis High-g I2C/SPI accelerometer"
	depends on (I2C && HAS_DTS_I2C) || SPI
	help
	  Enable driver for ADXL372 Three-Axis Digital Accelerometers.

if ADXL372

choice ADXL372_BUS_TYPE
	prompt "Interface type"
	help
	  Select interface the digital interface type for the ADXL372

config ADXL372_I2C
	depends on I2C
	bool "I2C Interface"

config ADXL372_SPI
	depends on SPI
	bool "SPI Interface"

endchoice

choice
	prompt "Operating mode"
	default ADXL372_PEAK_DETECT_MODE

config ADXL372_PEAK_DETECT_MODE
	bool "Max Peak detect mode"
	help
	  In most high-g applications, a single (3-axis) acceleration sample at
	  the peak of an impact event contains sufficient information
	  about the event, and the full acceleration history is not required.
	  In this mode the device returns only the over threshold
	  Peak Acceleration between two consecutive sample fetches.

config ADXL372_MEASUREMENT_MODE
	bool "Measurement Mode"
	help
	  In this mode, acceleration data is provided continuously at the
	  output data rate (ODR).

endchoice

choice
	prompt "Accelerometer sampling frequency (ODR)"
	default ADXL372_ODR_6400HZ if ADXL372_PEAK_DETECT_MODE
	default ADXL372_ODR_400HZ if ADXL372_MEASUREMENT_MODE

config ADXL372_ODR_400HZ
	bool "400 Hz"

config ADXL372_ODR_800HZ
	bool "800 Hz"

config ADXL372_ODR_1600HZ
	bool "1600 Hz"

config ADXL372_ODR_3200HZ
	bool "3200 Hz"

config ADXL372_ODR_6400HZ
	bool "6400 Hz"

endchoice

choice
	prompt "Low-Pass (Antialiasing) Filter corner frequency"
	default ADXL372_BW_200HZ if ADXL372_ODR_400HZ
	default ADXL372_BW_400HZ if ADXL372_ODR_800HZ
	default ADXL372_BW_800HZ if ADXL372_ODR_1600HZ
	default ADXL372_BW_1600HZ if ADXL372_ODR_3200HZ
	default ADXL372_BW_3200HZ if ADXL372_ODR_6400HZ
	help
	  High g events often include acceleration content over a wide range
	  of frequencies. The ADC of the ADXL372 samples the input acceleration
	  at the user selected ODR.
	  In the absence of antialiasing filters, input signals whose frequency
	  is more than half the ODR alias or fold into the measurement bandwidth
	  can lead to inaccurate measurements.

config ADXL372_LPF_DISABLE
	bool "Disabled"

config ADXL372_BW_200HZ
	bool "200 Hz"

config ADXL372_BW_400HZ
	bool "400 Hz"

config ADXL372_BW_800HZ
	bool "800 Hz"

config ADXL372_BW_1600HZ
	bool "1600 Hz"

config ADXL372_BW_3200HZ
	bool "3200 Hz"

endchoice

choice
	prompt "High-Pass Filter corner frequency"
	default ADXL372_HPF_CORNER0
	help
	  The ADXL372 offers a one-pole, high-pass filter with a user
	  selectable −3 dB frequency. Applications that do not require dc
	  acceleration measurements can use the high-pass filter to minimize
	  constant or slow varying offset errors including initial bias,
	  bias drift due to temperature, and bias drift due to supply voltage

config ADXL372_HPF_DISABLE
	bool "Disabled"

config ADXL372_HPF_CORNER0
	bool "ODR/210"

config ADXL372_HPF_CORNER1
	bool "ODR/411"

config ADXL372_HPF_CORNER2
	bool "ODR/812"

config ADXL372_HPF_CORNER3
	bool "ODR/1616"

endchoice


config ADXL372_ACTIVITY_THRESHOLD
	int "Activity threshold in mg"
	range 0 200000
	default 500
	help
	  Threshold for activity detection.

config ADXL372_INACTIVITY_THRESHOLD
	int "In-activity threshold in mg"
	range 0 200000
	default 400
	help
	  Threshold for in-activity detection.

config ADXL372_ACTIVITY_TIME
	int "Activity time"
	range 0 255
	default 1
	help
	  The activity timer implements a robust activity detection that
	  minimizes false positive motion triggers. When the timer is used,
	  only sustained motion can trigger activity detection.
	  Number of multiples of 3.3 ms activity timer for which above threshold
	  acceleration is required to detect activity. It is 3.3 ms per code
	  for 6400 Hz ODR, and it is 6.6 ms per code for 3200 Hz ODR and below.

config ADXL372_INACTIVITY_TIME
	int "In-activity time"
	range 0 255
	default 2
	help
	  The time that all enabled axes must be lower than the inactivity
	  threshold for an inactivity event to be detected. Number of multiples
	  of 26 ms inactivity timer for which below threshold acceleration is
	  required to detect inactivity. It is 26 ms per code for 3200 Hz ODR
	  and below, and it is 13 ms per code for 6400 Hz ODR.

config ADXL372_REFERENCED_ACTIVITY_DETECTION_MODE
	bool "Use referenced activity/in-activity detection"
	default y
	help
	  Activity detection can be configured as referenced or absolute.
	  When using absolute activity detection, acceleration samples are
	  compared directly to a user set threshold to determine whether
	  motion is present. In many applications, it is advantageous for
	  activity detection to be based not on an absolute threshold,
	  but on a deviation from a reference point or orientation.

choice
	prompt "Trigger mode"
	default ADXL372_TRIGGER_NONE
	help
	  Specify the type of triggering used by the driver.

config ADXL372_TRIGGER_NONE
	bool "No trigger"

config ADXL372_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select ADXL372_TRIGGER

config ADXL372_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select ADXL372_TRIGGER

endchoice

config ADXL372_TRIGGER
	bool

config ADXL372_THREAD_PRIORITY
	int "Thread priority"
	depends on ADXL372_TRIGGER_OWN_THREAD && ADXL372_TRIGGER
	default 10
	help
	  Priority of thread used by the driver to handle interrupts.

config ADXL372_THREAD_STACK_SIZE
	int "Thread stack size"
	depends on ADXL372_TRIGGER_OWN_THREAD && ADXL372_TRIGGER
	default 1024
	help
	  Stack size of thread used by the driver to handle interrupts.

endif # ADXL372
