# ST Microelectronics LPS22HH pressure and temperature sensor

# Copyright (c) 2019 STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

menuconfig LPS22HH
	bool "LPS22HH pressure and temperature"
	default y
	depends on DT_HAS_ST_LPS22HH_ENABLED
	depends on I2C || SPI
	select HAS_STMEMSC
	select USE_STDC_LPS22HH
	help
	  Enable driver for LPS22HH I2C-based pressure and temperature
	  sensor.

if LPS22HH

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

config LPS22HH_TRIGGER_NONE
	bool "No trigger"

config LPS22HH_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select LPS22HH_TRIGGER

config LPS22HH_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select LPS22HH_TRIGGER

endchoice # LPS22HH_TRIGGER_MODE

config LPS22HH_TRIGGER
	bool

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

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

endif # LPS22HH
