# Kconfig.bmp280 - BMP280 temperature and pressure sensor 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 BMP280
	bool "BMP280 temperature and pressure sensor"
	depends on SENSOR && I2C
	default n
	help
	 Enable driver for BMP280 I2C-based temperature and pressure sensor.

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

config BMP280_DEV_NAME
	string "BMP280 device name"
	depends on BMP280
	default "BMP280"

config BMP280_INIT_PRIORITY
	int
	depends on BMP280
	default 70
	prompt "Init priority"
	help
	 Device driver initialization priority.

config BMP280_I2C_ADDR
	hex "BMP280 I2C slave address"
	depends on BMP280
	default 0x76
	help
	 Specify the I2C slave address for the BMP280.

config BMP280_I2C_MASTER_DEV_NAME
	string "I2C master where BMP280 is connected"
	depends on BMP280
	default "I2C_0"
	help
	 Specify the device name of the I2C master device to which BMP280 is
	 connected.

choice
	prompt "BMP280 pressure oversampling"
	depends on BMP280
	default BMP280_PRESS_OVER_16X
	help
	  Select pressure oversampling for the BMP280 sensor.  Higher values
	  lead to more accurate readings, but higher power consumption.
config BMP280_PRESS_OVER_1X
	bool "x1"
config BMP280_PRESS_OVER_2X
	bool "x2"
config BMP280_PRESS_OVER_4X
	bool "x4"
config BMP280_PRESS_OVER_8X
	bool "x8"
config BMP280_PRESS_OVER_16X
	bool "x16"
endchoice

choice
	prompt "BMP280 temperature oversampling"
	depends on BMP280
	default BMP280_TEMP_OVER_2X
	help
	  Select temperature oversampling for the BMP280 sensor.  Higher values
	  lead to more accurate readings, but higher power consumption.
config BMP280_TEMP_OVER_1X
	bool "x1"
config BMP280_TEMP_OVER_2X
	bool "x2"
config BMP280_TEMP_OVER_4X
	bool "x4"
config BMP280_TEMP_OVER_8X
	bool "x8"
config BMP280_TEMP_OVER_16X
	bool "x16"
endchoice

choice
	prompt "BMP280 standby time"
	depends on BMP280
	default BMP280_STANDBY_1000MS
	help
	  Select standby time between measeurements for the BMP280 sensor.
	  Higher values lead to lower power consumption.
config BMP280_STANDBY_05MS
	bool "0.5ms"
config BMP280_STANDBY_62MS
	bool "62.5ms"
config BMP280_STANDBY_125MS
	bool "125ms"
config BMP280_STANDBY_250MS
	bool "250ms"
config BMP280_STANDBY_500MS
	bool "500ms"
config BMP280_STANDBY_1000MS
	bool "1000ms"
config BMP280_STANDBY_2000MS
	bool "2000ms"
config BMP280_STANDBY_4000MS
	bool "4000ms"
endchoice

choice
	prompt "BMP280 filter coefficient"
	depends on BMP280
	default BMP280_FILTER_4
	help
	  Select the filter coefficient for the BMP280 sensor.
config BMP280_FILTER_OFF
	bool "filter off"
config BMP280_FILTER_2
	bool "2"
config BMP280_FILTER_4
	bool "4"
config BMP280_FILTER_8
	bool "8"
config BMP280_FILTER_16
	bool "16"
endchoice
