# ST Microelectronics IIS2ICLX 2-axis accelerometer sensor driver

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

menuconfig IIS2ICLX
	bool "IIS2ICLX I2C/SPI accelerometer Chip"
	default y
	depends on DT_HAS_ST_IIS2ICLX_ENABLED
	select I2C if $(dt_compat_on_bus,$(DT_COMPAT_ST_IIS2ICLX),i2c)
	select SPI if $(dt_compat_on_bus,$(DT_COMPAT_ST_IIS2ICLX),spi)
	select HAS_STMEMSC
	select USE_STDC_IIS2ICLX
	help
	  Enable driver for IIS2ICLX accelerometer
	  sensor.

if IIS2ICLX

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

config IIS2ICLX_TRIGGER_NONE
	bool "No trigger"

config IIS2ICLX_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select IIS2ICLX_TRIGGER

config IIS2ICLX_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select IIS2ICLX_TRIGGER

endchoice

config IIS2ICLX_TRIGGER
	bool

if IIS2ICLX_TRIGGER

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

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

endif # IIS2ICLX_TRIGGER

config IIS2ICLX_ENABLE_TEMP
	bool "Temperature"
	help
	  Enable/disable temperature

config IIS2ICLX_SENSORHUB
	bool "I2C sensorhub feature"
	help
	  Enable/disable internal sensorhub. You can enable
	  a maximum of two external sensors (if more than two are enabled
	  the system would enumerate only the first two found)

if IIS2ICLX_SENSORHUB

config IIS2ICLX_EXT_LIS2MDL
	bool "LIS2MDL as external sensor"

config IIS2ICLX_EXT_IIS2MDC
	bool "IIS2MDC as external sensor"

config IIS2ICLX_EXT_LPS22HH
	bool "LPS22HH as external sensor"

config IIS2ICLX_EXT_HTS221
	bool "HTS221 as external sensor"

config IIS2ICLX_EXT_LPS22HB
	bool "LPS22HB as external sensor"

endif # IIS2ICLX_SENSORHUB

endif # IIS2ICLX
