# 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
