# FXOS8700 6-axis accelerometer/magnetometer

# Copyright (c) 2016 Freescale Semiconductor, Inc.
# SPDX-License-Identifier: Apache-2.0

menuconfig FXOS8700
	bool "FXOS8700 accelerometer/magnetometer driver"
	depends on I2C && HAS_DTS_I2C && HAS_DTS_GPIO
	help
	  Enable driver for the FXOS8700 accelerometer/magnetometer.
	  The driver also supports MMA8451Q, MMA8652FC and MMA8653FC
	  accelerometers. If the driver is used with one of these
	  accelerometers then the Accelerometer-only mode should be selected."

if FXOS8700

choice
	prompt "Mode"
	default FXOS8700_MODE_ACCEL

config FXOS8700_MODE_ACCEL
	bool "Accelerometer-only mode"

config FXOS8700_MODE_MAGN
	bool "Magnetometer-only mode"

config FXOS8700_MODE_HYBRID
	bool "Hybrid (accel+mag) mode"

endchoice

config FXOS8700_TEMP
	bool "Enable temperature"
	depends on FXOS8700_MODE_MAGN || FXOS8700_MODE_HYBRID
	help
	  Enable the temperature sensor. Note that the temperature sensor is
	  uncalibrated and its output for a given temperature may vary from one
	  device to the next.

choice
	prompt "Range"
	default FXOS8700_RANGE_8G

config FXOS8700_RANGE_8G
	bool "8g (0.976 mg/LSB)"

config FXOS8700_RANGE_4G
	bool "4g (0.488 mg/LSB)"

config FXOS8700_RANGE_2G
	bool "2g (0.244 mg/LSB)"

endchoice

choice
	prompt "Power mode"
	default FXOS8700_PM_NORMAL

config FXOS8700_PM_NORMAL
	bool "Normal power mode"

config FXOS8700_PM_LOW_NOISE_LOW_POWER
	bool "Low noise low power mode"

config FXOS8700_PM_HIGH_RESOLUTION
	bool "High resolution power mode"

config FXOS8700_PM_LOW_POWER
	bool "Low power mode"

endchoice

choice
	prompt "Trigger mode"
	default FXOS8700_TRIGGER_NONE

config FXOS8700_TRIGGER_NONE
	bool "No trigger"

config FXOS8700_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	select FXOS8700_TRIGGER

config FXOS8700_TRIGGER_OWN_THREAD
	bool "Use own thread"
	select FXOS8700_TRIGGER

endchoice

config FXOS8700_TRIGGER
	bool

config FXOS8700_DRDY_INT1
	bool "Data ready interrupt to INT1 pin"
	depends on FXOS8700_TRIGGER
	help
	  Say Y to route data ready interrupt to INT1 pin. Say N to route to
	  INT2 pin.

if FXOS8700_TRIGGER

config FXOS8700_THREAD_PRIORITY
	int "Own thread priority"
	depends on FXOS8700_TRIGGER_OWN_THREAD
	default 10

config FXOS8700_THREAD_STACK_SIZE
	int "Own thread stack size"
	depends on FXOS8700_TRIGGER_OWN_THREAD
	default 1024

menuconfig FXOS8700_PULSE
	bool "Pulse detection"
	help
	  Enable pulse detection

if FXOS8700_PULSE

config FXOS8700_PULSE_INT1
	bool "Pulse interrupt to INT1 pin"
	help
	  Say Y to route pulse interrupt to INT1 pin. Say N to route to INT2 pin.

config FXOS8700_PULSE_CFG
	hex "Pulse configuration register"
	range 0 0xff
	default 0x3f

config FXOS8700_PULSE_THSX
	hex "Pulse X-axis threshold"
	range 0 0x7f
	default 0x20
	help
	  Threshold to start the pulse-event detection procedure on the X-axis.
	  Threshold values for each axis are unsigned 7-bit numbers with a
	  fixed resolution of 0.063 g/LSB, corresponding to an 8g acceleration
	  full-scale range.

config FXOS8700_PULSE_THSY
	hex "Pulse Y-axis threshold"
	range 0 0x7f
	default 0x20
	help
	  Threshold to start the pulse-event detection procedure on the Y-axis.
	  Threshold values for each axis are unsigned 7-bit numbers with a
	  fixed resolution of 0.063 g/LSB, corresponding to an 8g acceleration
	  full-scale range.

config FXOS8700_PULSE_THSZ
	hex "Pulse Z-axis threshold"
	range 0 0x7f
	default 0x40
	help
	  Threshold to start the pulse-event detection procedure on the Z-axis.
	  Threshold values for each axis are unsigned 7-bit numbers with a
	  fixed resolution of 0.063 g/LSB, corresponding to an 8g acceleration
	  full-scale range.

config FXOS8700_PULSE_TMLT
	hex "Pulse time limit"
	range 0 0x7f
	default 0x18
	help
	  The maximum time interval that can elapse between the start of the
	  acceleration on the selected channel exceeding the specified
	  threshold and the end when the channel acceleration goes back below
	  the specified threshold. The resolution depends upon the sample rate
	  (ODR) and the high-pass filter configuration
	  (HP_FILTER_CUTOFF[pls_hpf_en]). For ODR=800 Hz and pls_hpf_en=0, the
	  resolution is 0.625 ms/LSB.

config FXOS8700_PULSE_LTCY
	hex "Pulse latency"
	range 0 0xff
	default 0x28
	help
	  The time interval that starts after the first pulse detection where
	  the pulse-detection function ignores the start of a new pulse. The
	  resolution depends upon the sample rate (ODR) and the high-pass filter
	  configuration (HP_FILTER_CUTOFF[pls_hpf_en]). For ODR=800 Hz and
	  pls_hpf_en=0, the resolution is 1.25 ms/LSB.

config FXOS8700_PULSE_WIND
	hex "Pulse window"
	range 0 0xff
	default 0x3c
	help
	  The maximum interval of time that can elapse after the end of the
	  latency interval in which the start of the second pulse event must be
	  detected provided the device has been configured for double pulse
	  detection. The detected second pulse width must be shorter than the
	  time limit constraint specified by the PULSE_TMLT register, but the
	  end of the double pulse need not finish within the time specified by
	  the PULSE_WIND register. The resolution depends upon the sample rate
	  (ODR) and the high-pass filter configuration
	  (HP_FILTER_CUTOFF[pls_hpf_en]). For ODR=800 Hz and pls_hpf_en=0, the
	  resolution is 1.25 ms/LSB.

endif # FXOS8700_PULSE

menuconfig FXOS8700_MOTION
	bool "Motion detection"
	help
	  Enable motion detection

if FXOS8700_MOTION

config FXOS8700_MOTION_INT1
	bool "Motion interrupt to INT1 pin"
	help
	  Say Y to route motion interrupt to INT1 pin. Say N to route to INT2 pin.

endif # FXOS8700_MOTION

endif # FXOS8700_TRIGGER

endif # FXOS8700
