# 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.

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
	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 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
