# 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
	select I2C if $(dt_compat_on_bus,$(DT_COMPAT_ST_LPS22HH),i2c)
	select I3C if $(dt_compat_on_bus,$(DT_COMPAT_ST_LPS22HH),i3c)
	select SPI if $(dt_compat_on_bus,$(DT_COMPAT_ST_LPS22HH),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
