# BMA280 Three Axis Accelerometer configuration options

# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig BMA280
	bool "BMA280 Three Axis Accelerometer Family"
	depends on I2C
	help
	  Enable driver for BMA280 I2C-based triaxial accelerometer sensor
	  family.

if BMA280

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

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

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

endchoice

config BMA280_NAME
	string "Driver name"
	default "BMA280" if BMA280_CHIP_BMA280
	default "BMC150_ACCEL" if BMA280_CHIP_BMC150_ACCEL
	help
	  Device name with which the sensor is identified.

config BMA280_I2C_ADDR
	hex "BMA280 I2C address"
	default 0x18 if BMA280_CHIP_BMA280
	default 0x10 if BMA280_CHIP_BMC150_ACCEL
	help
	  I2C address of the BMA280 sensor.

	  0x10: Use if the SDO pin is pulled to GND.
	  0x10: Use if the SDO pin is pulled to VDDIO.
	  0x18: Use if the SDO pin is pulled to GND.
	  0x19: Use if the SDO pin is pulled to VDDIO.

config BMA280_I2C_MASTER_DEV_NAME
	string "I2C master device name"
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which chip is
	  connected.

choice
	prompt "Trigger mode"
	default BMA280_TRIGGER_GLOBAL_THREAD
	help
	  Specify the type of triggering to be used by the driver.

config BMA280_TRIGGER_NONE
	bool "No trigger"

config BMA280_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select BMA280_TRIGGER

config BMA280_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select BMA280_TRIGGER

endchoice

config BMA280_TRIGGER
	bool

config BMA280_GPIO_DEV_NAME
	string "GPIO device"
	default "GPIO_0"
	depends on 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 "Interrupt GPIO pin number"
	default 0
	depends on BMA280_TRIGGER
	help
	  The number of the GPIO on which the interrupt signal from the chip
	  will be received.

config BMA280_THREAD_PRIORITY
	int "Thread priority"
	depends on BMA280_TRIGGER_OWN_THREAD
	default 10
	help
	  Priority of thread used by the driver to handle interrupts.

config BMA280_THREAD_STACK_SIZE
	int "Thread stack size"
	depends on BMA280_TRIGGER_OWN_THREAD
	default 1024
	help
	  Stack size of thread used by the driver to handle interrupts.

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

config BMA280_PMU_RANGE_2G
	bool "+/-2g"

config BMA280_PMU_RANGE_4G
	bool "+/-4g"

config BMA280_PMU_RANGE_8G
	bool "+/-8g"

config BMA280_PMU_RANGE_16G
	bool "+/-16g"

endchoice

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

config BMA280_PMU_BW_1
	bool "7.81Hz"

config BMA280_PMU_BW_2
	bool "15.63HZ"

config BMA280_PMU_BW_3
	bool "31.25Hz"

config BMA280_PMU_BW_4
	bool "62.5Hz"

config BMA280_PMU_BW_5
	bool "125Hz"

config BMA280_PMU_BW_6
	bool "250HZ"

config BMA280_PMU_BW_7
	bool "500Hz"

config BMA280_PMU_BW_8
	bool "unfiltered"

endchoice

endif # BMA280
