# 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 Family"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for BMA280 I2C-based triaxial accelerometer sensor
	  family.

config BMA280_SYS_LOG_LEVEL
	int "BMA280 Gyro Log level"
	depends on SYS_LOG && BMA280
	default 0
	range 0 4
	help
	  Sets log level for BMA280 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

choice
	prompt "Chip type"
	depends on BMA280
	default BMA280_CHIP_BMA280
	help
	  Choose desired chip type from the BMA280 family.

config BMA280_CHIP_BMA280
	bool
	prompt "BMA280"
	help
	  Choose this option to enable the BMA280 chip.

config BMA280_CHIP_BMC150_ACCEL
	bool
	prompt "BMC150_ACCEL"
	help
	  Choose this option to enable the accelerometer of the BMC150 chip.

endchoice

config BMA280_NAME
	string
	prompt "Driver name"
	default "BMA280" if BMA280_CHIP_BMA280
	default "BMC150_ACCEL" if BMA280_CHIP_BMC150_ACCEL
	depends on BMA280
	help
	  Device name with which the 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 if BMA280_CHIP_BMA280
	default BMA280_I2C_ADDR_0x10 if BMA280_CHIP_BMC150_ACCEL
	help
	  I2C address of the BMA280 sensor.

config BMA280_I2C_ADDR_0x10
	bool
	prompt "0x10"
	depends on BMA280_CHIP_BMC150_ACCEL
	help
	  Choose this option if the SDO pin is pulled to GND.

config BMA280_I2C_ADDR_0x11
	bool
	prompt "0x11"
	depends on BMA280_CHIP_BMC150_ACCEL
	help
	  Choose this option if the SDO pin is pulled to VDDIO.

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

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

endchoice

config BMA280_I2C_MASTER_DEV_NAME
	string
	prompt "I2C master device name"
	depends on BMA280
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which chip 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 && SYSTEM_WORKQUEUE
	select BMA280_TRIGGER

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 chip's 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 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
