# ST Microelectronics ISM330DHCX 6-axis IMU sensor driver

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

menuconfig ISM330DHCX
	bool "ISM330DHCX I2C/SPI accelerometer and gyroscope Chip"
	depends on I2C || SPI
	select HAS_STMEMSC
	select USE_STDC_ISM330DHCX
	help
	  Enable driver for ISM330DHCX accelerometer and gyroscope
	  sensor.

if ISM330DHCX

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

config ISM330DHCX_TRIGGER_NONE
	bool "No trigger"

config ISM330DHCX_TRIGGER_GLOBAL_THREAD
	bool "Use global thread"
	depends on GPIO
	select ISM330DHCX_TRIGGER

config ISM330DHCX_TRIGGER_OWN_THREAD
	bool "Use own thread"
	depends on GPIO
	select ISM330DHCX_TRIGGER

endchoice

config ISM330DHCX_TRIGGER
	bool

if ISM330DHCX_TRIGGER

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

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

endif # ISM330DHCX_TRIGGER

config ISM330DHCX_ENABLE_TEMP
	bool "Enable temperature"
	help
	  Enable/disable temperature

config ISM330DHCX_SENSORHUB
	bool "Enable 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 ISM330DHCX_SENSORHUB

config ISM330DHCX_EXT_LIS2MDL
	bool "Enable LIS2MDL as external sensor"

config ISM330DHCX_EXT_IIS2MDC
	bool "Enable IIS2MDC as external sensor"

config ISM330DHCX_EXT_LPS22HH
	bool "Enable LPS22HH as external sensor"

config ISM330DHCX_EXT_HTS221
	bool "Enable HTS221 as external sensor"

config ISM330DHCX_EXT_LPS22HB
	bool "Enable LPS22HB as external sensor"

endif # ISM330DHCX_SENSORHUB

endif # ISM330DHCX
