1# ICM42670-P ICM42670-S Six-Axis Motion Tracking device configuration options
2#
3# Copyright (c) 2024 TDK Invensense
4# Copyright (c) 2022 Esco Medical ApS
5# Copyright (c) 2020 TDK Invensense
6#
7# SPDX-License-Identifier: Apache-2.0
8config TDK_APEX
9	bool
10
11menuconfig ICM42X70
12	bool "ICM42670-P/-S Six-Axis or ICM42370-P Three-Axis Motion Tracking Device"
13	default y
14	depends on DT_HAS_INVENSENSE_ICM42670P_ENABLED \
15		|| DT_HAS_INVENSENSE_ICM42670S_ENABLED \
16		|| DT_HAS_INVENSENSE_ICM42370P_ENABLED
17	depends on ZEPHYR_HAL_TDK_MODULE
18	select SPI if $(dt_compat_on_bus,$(DT_COMPAT_INVENSENSE_ICM42670P),spi) \
19		|| $(dt_compat_on_bus,$(DT_COMPAT_INVENSENSE_ICM42670S),spi) \
20		|| $(dt_compat_on_bus,$(DT_COMPAT_INVENSENSE_ICM42370P),spi)
21	select I2C if $(dt_compat_on_bus,$(DT_COMPAT_INVENSENSE_ICM42670P),i2c) \
22		|| $(dt_compat_on_bus,$(DT_COMPAT_INVENSENSE_ICM42670S),i2c) \
23		|| $(dt_compat_on_bus,$(DT_COMPAT_INVENSENSE_ICM42370P),i2c)
24	select TDK_APEX if $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670p),apex,pedometer) \
25		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670p),apex,tilt) \
26		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670p),apex,smd) \
27		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670p),apex,wom) \
28		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670s),apex,pedometer) \
29		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670s),apex,tilt) \
30		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670s),apex,smd) \
31		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42670s),apex,wom) \
32		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42370p),apex,pedometer) \
33		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42370p),apex,tilt) \
34		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42370p),apex,smd) \
35		|| $(dt_node_str_prop_equals,$(dt_nodelabel_path,icm42370p),apex,wom)
36	select USE_EMD_ICM42670 if DT_HAS_INVENSENSE_ICM42670P_ENABLED || DT_HAS_INVENSENSE_ICM42670S_ENABLED
37	select USE_EMD_ICM42370 if DT_HAS_INVENSENSE_ICM42370P_ENABLED
38	select SENSOR_ASYNC_API
39	help
40	  Enable driver for ICM42x70 SPI-based or I2C-based Six-Axis or Three-Axis Motion Tracking device.
41
42if ICM42X70
43
44choice ICM42X70_TRIGGER_MODE
45	prompt "Trigger mode"
46	default ICM42X70_TRIGGER_NONE
47	help
48	  Specify the type of triggering to be used by the driver.
49
50config ICM42X70_TRIGGER_NONE
51	bool "No trigger"
52
53config ICM42X70_TRIGGER_GLOBAL_THREAD
54	bool "Use global thread"
55	depends on GPIO
56	depends on $(dt_compat_any_has_prop,$(DT_COMPAT_INVENSENSE_ICM42670P),int-gpios) \
57		|| $(dt_compat_any_has_prop,$(DT_COMPAT_INVENSENSE_ICM42670S),int-gpios) \
58		|| $(dt_compat_any_has_prop,$(DT_COMPAT_INVENSENSE_ICM42370P),int-gpios)
59	select ICM42X70_TRIGGER
60
61config ICM42X70_TRIGGER_OWN_THREAD
62	bool "Use own thread"
63	depends on GPIO
64	depends on $(dt_compat_any_has_prop,$(DT_COMPAT_INVENSENSE_ICM42670P),int-gpios) \
65		|| $(dt_compat_any_has_prop,$(DT_COMPAT_INVENSENSE_ICM42670S),int-gpios) \
66		|| $(dt_compat_any_has_prop,$(DT_COMPAT_INVENSENSE_ICM42370P),int-gpios)
67	select ICM42X70_TRIGGER
68
69endchoice
70
71config ICM42X70_TRIGGER
72	bool
73
74config ICM42X70_THREAD_PRIORITY
75	int "Thread priority"
76	depends on ICM42X70_TRIGGER_OWN_THREAD
77	default 10
78	help
79	  Priority of thread used by the driver to handle interrupts.
80
81config ICM42X70_THREAD_STACK_SIZE
82	int "Thread stack size"
83	depends on ICM42X70_TRIGGER_OWN_THREAD
84	default 1024
85	help
86	  Stack size of thread used by the driver to handle interrupts.
87
88endif # ICM42X70
89