# 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

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

config FXOS8700_I2C_NAME
	string "I2C device name"
	depends on FXOS8700 && !HAS_DTS_I2C
	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.

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

config FXOS8700_GPIO_NAME
	string "GPIO device name"
	depends on FXOS8700_TRIGGER

config FXOS8700_GPIO_PIN
	int "GPIO pin"
	depends on FXOS8700_TRIGGER

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
