# Kconfig - 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
	default n
	help
	  Enable driver for the FXOS8700 accelerometer/magnetometer

if !HAS_DTS_I2C_DEVICE

config FXOS8700_NAME
	string "Device name"
	depends on FXOS8700
	default "FXOS8700"

config FXOS8700_I2C_NAME
	string "I2C device name"
	depends on FXOS8700
	default I2C_0_NAME

config FXOS8700_I2C_ADDRESS
	hex "I2C address"
	depends on FXOS8700
	range 0x1c 0x1f
	default 0x1d
	help
	  The I2C slave address can be configured by the SA0 and SA1 input
	  pins. This option should usually be set by the board defconfig.

endif # !HAS_DTS_I2C_DEVICE

config FXOS8700_WHOAMI
	hex "WHOAMI value"
	depends on FXOS8700
	range 0x00 0xff
	default 0xc7
	help
	  The datasheet defines the value of the WHOAMI register, but some
	  pre-production devices can have a different value. It is unlikely you
	  should need to change this configuration option from the default.

choice
	prompt "Mode"
	depends on FXOS8700
	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 && (FXOS8700_MODE_MAGN || FXOS8700_MODE_HYBRID)
	default n
	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"
	depends on FXOS8700
	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 "Trigger mode"
	depends on FXOS8700
	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
	depends on FXOS8700
	default n

if !HAS_DTS_GPIO_DEVICE

config FXOS8700_GPIO_NAME
	string "GPIO device name"
	depends on FXOS8700_TRIGGER

config FXOS8700_GPIO_PIN
	int "GPIO pin"
	depends on FXOS8700_TRIGGER

endif

config FXOS8700_DRDY_INT1
	bool "Data ready interrupt to INT1 pin"
	depends on FXOS8700_TRIGGER
	default n
	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"
	default n
	help
	  Enable pulse detection

if FXOS8700_PULSE

config FXOS8700_PULSE_INT1
	bool "Pulse interrupt to INT1 pin"
	default n
	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

endif # FXOS8700_TRIGGER
