# 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
