1 /*
2  * Copyright (c) 2021, Commonwealth Scientific and Industrial Research
3  * Organisation (CSIRO) ABN 41 687 119 230.
4  * Copyright (c) 2025 Analog Devices, Inc.
5  *
6  * SPDX-License-Identifier: Apache-2.0
7  */
8 
9 #include <zephyr/ztest.h>
10 #include <zephyr/devicetree.h>
11 #include <zephyr/device.h>
12 #include <zephyr/drivers/gpio.h>
13 #include <zephyr/drivers/adc.h>
14 #include <zephyr/drivers/mbox.h>
15 #include <zephyr/drivers/hwspinlock.h>
16 
17 #include <zephyr/linker/devicetree_regions.h>
18 
19 #define TEST_SRAM1 DT_NODELABEL(test_sram1)
20 #define TEST_SRAM2 DT_NODELABEL(test_sram2)
21 #define TEST_TEMP  DT_NODELABEL(test_temp_sensor)
22 
ZTEST(devicetree_api_ext,test_linker_regions)23 ZTEST(devicetree_api_ext, test_linker_regions)
24 {
25 	zassert_true(!strcmp(LINKER_DT_NODE_REGION_NAME(TEST_SRAM1), "SRAM_REGION"), "");
26 	zassert_true(!strcmp(LINKER_DT_NODE_REGION_NAME(TEST_SRAM2), "SRAM_REGION_2"), "");
27 }
28 
29 #define DT_DRV_COMPAT vnd_adc_temp_sensor
ZTEST(devicetree_api_ext,test_adc_dt_spec)30 ZTEST(devicetree_api_ext, test_adc_dt_spec)
31 {
32 	struct adc_dt_spec adc_spec;
33 
34 	/* ADC_DT_SPEC_GET_BY_NAME */
35 	adc_spec = (struct adc_dt_spec)ADC_DT_SPEC_GET_BY_NAME(TEST_TEMP, ch1);
36 	zassert_equal(adc_spec.channel_id, 10, "");
37 
38 	adc_spec = (struct adc_dt_spec)ADC_DT_SPEC_GET_BY_NAME(TEST_TEMP, ch2);
39 	zassert_equal(adc_spec.channel_id, 20, "");
40 
41 	/* ADC_DT_SPEC_INST_GET_BY_NAME */
42 	adc_spec = (struct adc_dt_spec)ADC_DT_SPEC_INST_GET_BY_NAME(0, ch1);
43 	zassert_equal(adc_spec.channel_id, 10, "");
44 
45 	adc_spec = (struct adc_dt_spec)ADC_DT_SPEC_INST_GET_BY_NAME(0, ch2);
46 	zassert_equal(adc_spec.channel_id, 20, "");
47 }
48 
49 DEVICE_DT_DEFINE(DT_NODELABEL(test_mbox), NULL, NULL, NULL, NULL, POST_KERNEL, 90, NULL);
50 DEVICE_DT_DEFINE(DT_NODELABEL(test_mbox_zero_cell), NULL, NULL, NULL, NULL, POST_KERNEL, 90, NULL);
ZTEST(devicetree_api_ext,test_mbox_dt_spec)51 ZTEST(devicetree_api_ext, test_mbox_dt_spec)
52 {
53 	const struct mbox_dt_spec channel_tx = MBOX_DT_SPEC_GET(TEST_TEMP, tx);
54 	const struct mbox_dt_spec channel_rx = MBOX_DT_SPEC_GET(TEST_TEMP, rx);
55 
56 	zassert_equal(channel_tx.channel_id, 1, "");
57 	zassert_equal(channel_rx.channel_id, 2, "");
58 
59 	const struct mbox_dt_spec channel_zero = MBOX_DT_SPEC_GET(TEST_TEMP, zero);
60 
61 	zassert_equal(channel_zero.channel_id, 0, "");
62 }
63 
64 #define TEST_HWSPINLOCK \
65 	DT_NODELABEL(test_hwspinlock)
66 
67 #define TEST_HWSPINLOCK_DEV \
68 	DT_NODELABEL(test_hwspinlock_dev)
69 
70 #define HWSPINLOCK_BY_IDX(node_id, prop, idx) \
71 	HWSPINLOCK_DT_SPEC_GET_BY_IDX(node_id, idx)
72 
73 static const struct hwspinlock_dt_spec spec[] = {
74 	DT_FOREACH_PROP_ELEM_SEP(TEST_HWSPINLOCK_DEV, hwlocks, HWSPINLOCK_BY_IDX, (,))
75 };
76 
77 static const struct hwspinlock_dt_spec rd =
78 	HWSPINLOCK_DT_SPEC_GET_BY_NAME(TEST_HWSPINLOCK_DEV, rd);
79 
80 static const struct hwspinlock_dt_spec wr =
81 	HWSPINLOCK_DT_SPEC_GET_BY_NAME(TEST_HWSPINLOCK_DEV, wr);
82 
ZTEST(devicetree_api_ext,test_hwspinlock_dt_spec)83 ZTEST(devicetree_api_ext, test_hwspinlock_dt_spec)
84 {
85 	for (int i = 0; i < ARRAY_SIZE(spec); i++) {
86 		zassert_equal(spec[i].dev, DEVICE_DT_GET(TEST_HWSPINLOCK));
87 		zassert_equal(spec[i].id, i + 1);
88 	}
89 
90 	zassert_equal(rd.dev, DEVICE_DT_GET(TEST_HWSPINLOCK));
91 	zassert_equal(rd.id, 1);
92 
93 	zassert_equal(wr.dev, DEVICE_DT_GET(TEST_HWSPINLOCK));
94 	zassert_equal(wr.id, 2);
95 }
96 
97 ZTEST_SUITE(devicetree_api_ext, NULL, NULL, NULL, NULL, NULL);
98