# Kconfig.lis3dh - LIS3DH Three Axis Accelerometer configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menuconfig LIS3DH
	bool
	prompt "LIS3DH Three Axis Accelerometer"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for LIS3DH I2C-based triaxial accelerometer sensor.

config LIS3DH_SYS_LOG_LEVEL
	int "LIS3DH Log level"
	depends on SYS_LOG && LIS3DH
	default 0
	range 0 4
	help
	Sets log level for LIS3DH driver.
	Levels are:

	- 0 OFF: do not write

	- 1 ERROR: only write SYS_LOG_ERR

	- 2 WARNING: write SYS_LOG_WRN in addition to previous level

	- 3 INFO: write SYS_LOG_INF in addition to previous levels

	- 4 DEBUG: write SYS_LOG_DBG in addition to previous levels

config LIS3DH_NAME
	string
	prompt "Driver name"
	default "LIS3DH"
	depends on LIS3DH
	help
	  Device name with which the LIS3DH sensor is identified.

config LIS3DH_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on LIS3DH
	default 70
	help
	  Device driver initialization priority.

choice
	prompt "I2C address"
	depends on LIS3DH
	default LIS3DH_I2C_ADDR_0x18
	help
	  I2C address of the LIS3DH sensor.

config LIS3DH_I2C_ADDR_0x18
	bool
	prompt "0x18"
	help
	  Choose this option if the SDO pin is pulled to GND.

config LIS3DH_I2C_ADDR_0x19
	bool
	prompt "0x19"
	help
	  Choose this option if the SDO pin is pulled to VDDIO.

endchoice

config LIS3DH_I2C_MASTER_DEV_NAME
	string
	prompt "I2C master where LIS3DH is connected"
	depends on LIS3DH
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which LIS3DH is
	  connected.

choice
	prompt "Trigger mode"
	depends on LIS3DH
	default LIS3DH_TRIGGER_GLOBAL_FIBER
	help
	  Specify the type of triggering to be used by the driver.

config LIS3DH_TRIGGER_NONE
	bool
	prompt "No trigger"

config LIS3DH_TRIGGER_GLOBAL_FIBER
	bool
	prompt "Use global fiber"
	depends on GPIO && SYSTEM_WORKQUEUE
	select LIS3DH_TRIGGER

config LIS3DH_TRIGGER_OWN_FIBER
	bool
	prompt "Use own fiber"
	depends on GPIO
	select LIS3DH_TRIGGER

endchoice

config LIS3DH_TRIGGER
	bool
	depends on LIS3DH

config LIS3DH_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on LIS3DH && LIS3DH_TRIGGER
	help
	  The device name of the GPIO device to which the LIS3DH interrupt pins
	  are connected.

config LIS3DH_GPIO_PIN_NUM
	int
	prompt "Interrupt GPIO pin number"
	default 0
	depends on LIS3DH && LIS3DH_TRIGGER
	help
	  The number of the GPIO on which the interrupt signal from the LIS3DH
	  chip will be received.

config LIS3DH_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on LIS3DH && LIS3DH_TRIGGER_OWN_FIBER
	default 10
	help
	  Priority of fiber used by the driver to handle interrupts.

config LIS3DH_FIBER_STACK_SIZE
	int
	prompt "Fiber stack size"
	depends on LIS3DH && LIS3DH_TRIGGER_OWN_FIBER
	default 1024
	help
	  Stack size of fiber used by the driver to handle interrupts.

choice
	prompt "Acceleration measurement range"
	depends on LIS3DH
	default LIS3DH_ACCEL_RANGE_2G
	help
	  Measurement full scale range for acceleration values.

config LIS3DH_ACCEL_RANGE_2G
	bool
	prompt "+/-2g"

config LIS3DH_ACCEL_RANGE_4G
	bool
	prompt "+/-4g"

config LIS3DH_ACCEL_RANGE_8G
	bool
	prompt "+/-8g"

config LIS3DH_ACCEL_RANGE_16G
	bool
	prompt "+/-16g"

endchoice

choice
	prompt "Power mode"
	depends on LIS3DH
	default LIS3DH_POWER_MODE_NORMAL
	help
	  Choose between normal or low power operation mode for chip.

config LIS3DH_POWER_MODE_NORMAL
	bool
	prompt "normal"

config LIS3DH_POWER_MODE_LOW
	bool
	prompt "low"

endchoice

choice
	prompt "Data rate frequency"
	depends on LIS3DH
	default LIS3DH_ODR_1
	help
	  Data rate frequency of acceleration data.

config LIS3DH_ODR_1
	bool
	prompt "1Hz"

config LIS3DH_ODR_2
	bool
	prompt "10Hz"

config LIS3DH_ODR_3
	bool
	prompt "25Hz"

config LIS3DH_ODR_4
	bool
	prompt "50Hz"

config LIS3DH_ODR_5
	bool
	prompt "100Hz"

config LIS3DH_ODR_6
	bool
	prompt "200Hz"

config LIS3DH_ODR_7
	bool
	prompt "400Hz"

config LIS3DH_ODR_8
	bool
	prompt "1.6KHz"
	depends on LIS3DH_POWER_MODE_LOW

config LIS3DH_ODR_9_NORMAL
	bool
	prompt "1.25KHz"
	depends on LIS3DH_POWER_MODE_NORMAL

config LIS3DH_ODR_9_LOW
	bool
	prompt "5KHz"
	depends on LIS3DH_POWER_MODE_LOW

endchoice
