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

config LPS25HB_SYS_LOG_LEVEL
	int "LPS25HB Log level"
	depends on SYS_LOG && LPS25HB
	default 0
	range 0 4
	help
	Sets log level for LPS25HB 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 LPS25HB_DEV_NAME
	string
	prompt "Device name"
	default "lps25hb"
	depends on LPS25HB
	help
	Device name with which the LPS25HB sensor is identified.

config LPS25HB_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on LPS25HB
	default 70
	help
	Device driver initialization priority.

config LPS25HB_I2C_ADDR
	hex
	prompt "I2C address"
	depends on LPS25HB
	default "0x5C"
	help
	I2C address of the LPS25HB sensor.
	Use 0x5C if the SA0 pin is pulled to GND or 0x5D if the SA0
	pin is pulled to VDD.

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

menu "Attributes"
	depends on LPS25HB

config LPS25HB_SAMPLING_RATE
	int
	prompt "Output data rate"
	depends on LPS25HB
	default 25
	help
	Sensor output data rate expressed in samples per second.
	Data rates supported by the chip are 1, 7, 13, 25.

endmenu
