# 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_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
	select LIS3DH_TRIGGER
	select SENSOR_DELAYED_WORK

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
