# Kconfig.bma280 - BMA280 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 BMA280
	bool
	prompt "BMA280 Three Axis Accelerometer"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for BMA280 I2C-based triaxial accelerometer sensor.

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

config BMA280_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on BMA280
	default 70
	help
	  Device driver initialization priority.

choice
	prompt "I2C address"
	depends on BMA280
	default BMA280_I2C_ADDR_0x18
	help
	  I2C address of the BMA280 sensor.

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

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

endchoice

config BMA280_I2C_MASTER_DEV_NAME
	string
	prompt "I2C master where BMA280 is connected"
	depends on BMA280
	default "I2C0"
	help
	  Specify the device name of the I2C master device to which BMA280 is
	  connected.

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

config BMA280_TRIGGER_NONE
	bool
	prompt "No trigger"

config BMA280_TRIGGER_GLOBAL_FIBER
	bool
	prompt "Use global fiber"
	depends on GPIO
	select BMA280_TRIGGER
	select SENSOR_DELAYED_WORK

config BMA280_TRIGGER_OWN_FIBER
	bool
	prompt "Use own fiber"
	depends on GPIO
	select BMA280_TRIGGER

endchoice

config BMA280_TRIGGER
	bool
	depends on BMA280

config BMA280_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on BMA280 && BMA280_TRIGGER
	help
	  The device name of the GPIO device to which the BMA280 interrupt pins
	  are connected.

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

config BMA280_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on BMA280 && BMA280_TRIGGER_OWN_FIBER
	default 10
	help
	  Priority of fiber used by the driver to handle interrupts.

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

choice
	prompt "Acceleration measurement range"
	depends on BMA280
	default BMA280_PMU_RANGE_2G
	help
	  Measurement range for acceleration values.

config BMA280_PMU_RANGE_2G
	bool
	prompt "+/-2g"

config BMA280_PMU_RANGE_4G
	bool
	prompt "+/-4g"

config BMA280_PMU_RANGE_8G
	bool
	prompt "+/-8g"

config BMA280_PMU_RANGE_16G
	bool
	prompt "+/-16g"

endchoice

choice
	prompt "Acceleration data filter bandwidth"
	depends on BMA280
	default BMA280_PMU_BW_7
	help
	  Bandwidth of filtered acceleration data.

config BMA280_PMU_BW_1
	bool
	prompt "7.81Hz"

config BMA280_PMU_BW_2
	bool
	prompt "15.63HZ"

config BMA280_PMU_BW_3
	bool
	prompt "31.25Hz"

config BMA280_PMU_BW_4
	bool
	prompt "62.5Hz"

config BMA280_PMU_BW_5
	bool
	prompt "125Hz"

config BMA280_PMU_BW_6
	bool
	prompt "250HZ"

config BMA280_PMU_BW_7
	bool
	prompt "500Hz"

config BMA280_PMU_BW_8
	bool
	prompt "unfiltered"

endchoice
