Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
devicetree.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024, Ambiq Micro Inc. <www.ambiq.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_MSPI_DEVICETREE_H_
14#define ZEPHYR_INCLUDE_DRIVERS_MSPI_DEVICETREE_H_
15
22
23#include <zephyr/drivers/gpio.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
38#define MSPI_DEVICE_CONFIG_DT(mspi_dev) \
39 { \
40 .ce_num = DT_PROP_OR(mspi_dev, mspi_hardware_ce_num, 0), \
41 .freq = DT_PROP(mspi_dev, mspi_max_frequency), \
42 .io_mode = DT_ENUM_IDX_OR(mspi_dev, mspi_io_mode, \
43 MSPI_IO_MODE_SINGLE), \
44 .data_rate = DT_ENUM_IDX_OR(mspi_dev, mspi_data_rate, \
45 MSPI_DATA_RATE_SINGLE), \
46 .cpp = DT_ENUM_IDX_OR(mspi_dev, mspi_cpp_mode, MSPI_CPP_MODE_0), \
47 .endian = DT_ENUM_IDX_OR(mspi_dev, mspi_endian, \
48 MSPI_XFER_LITTLE_ENDIAN), \
49 .ce_polarity = DT_ENUM_IDX_OR(mspi_dev, mspi_ce_polarity, \
50 MSPI_CE_ACTIVE_LOW), \
51 .dqs_enable = DT_PROP(mspi_dev, mspi_dqs_enable), \
52 .rx_dummy = DT_PROP_OR(mspi_dev, rx_dummy, 0), \
53 .tx_dummy = DT_PROP_OR(mspi_dev, tx_dummy, 0), \
54 .read_cmd = DT_PROP_OR(mspi_dev, read_command, 0), \
55 .write_cmd = DT_PROP_OR(mspi_dev, write_command, 0), \
56 .cmd_length = DT_ENUM_IDX_OR(mspi_dev, command_length, 0), \
57 .addr_length = DT_ENUM_IDX_OR(mspi_dev, address_length, 0), \
58 .mem_boundary = COND_CODE_1(DT_NODE_HAS_PROP(mspi_dev, ce_break_config), \
59 (DT_PROP_BY_IDX(mspi_dev, ce_break_config, 0)), \
60 (0)), \
61 .time_to_break = COND_CODE_1(DT_NODE_HAS_PROP(mspi_dev, ce_break_config), \
62 (DT_PROP_BY_IDX(mspi_dev, ce_break_config, 1)), \
63 (0)), \
64 }
65
74#define MSPI_DEVICE_CONFIG_DT_INST(inst) MSPI_DEVICE_CONFIG_DT(DT_DRV_INST(inst))
75
85#define MSPI_XIP_CONFIG_DT_NO_CHECK(mspi_dev) \
86 { \
87 .enable = DT_PROP_BY_IDX(mspi_dev, xip_config, 0), \
88 .address_offset = DT_PROP_BY_IDX(mspi_dev, xip_config, 1), \
89 .size = DT_PROP_BY_IDX(mspi_dev, xip_config, 2), \
90 .permission = DT_PROP_BY_IDX(mspi_dev, xip_config, 3), \
91 }
92
102#define MSPI_XIP_CONFIG_DT(mspi_dev) \
103 COND_CODE_1(DT_NODE_HAS_PROP(mspi_dev, xip_config), \
104 (MSPI_XIP_CONFIG_DT_NO_CHECK(mspi_dev)), \
105 ({}))
106
115#define MSPI_XIP_CONFIG_DT_INST(inst) MSPI_XIP_CONFIG_DT(DT_DRV_INST(inst))
116
126#define MSPI_SCRAMBLE_CONFIG_DT_NO_CHECK(mspi_dev) \
127 { \
128 .enable = DT_PROP_BY_IDX(mspi_dev, scramble_config, 0), \
129 .address_offset = DT_PROP_BY_IDX(mspi_dev, scramble_config, 1), \
130 .size = DT_PROP_BY_IDX(mspi_dev, scramble_config, 2), \
131 }
132
142#define MSPI_SCRAMBLE_CONFIG_DT(mspi_dev) \
143 COND_CODE_1(DT_NODE_HAS_PROP(mspi_dev, scramble_config), \
144 (MSPI_SCRAMBLE_CONFIG_DT_NO_CHECK(mspi_dev)), \
145 ({}))
146
155#define MSPI_SCRAMBLE_CONFIG_DT_INST(inst) MSPI_SCRAMBLE_CONFIG_DT(DT_DRV_INST(inst))
156
166#define MSPI_DEVICE_ID_DT(mspi_dev) \
167 { \
168 .ce = MSPI_DEV_CE_GPIOS_DT_SPEC_GET(mspi_dev), \
169 .dev_idx = DT_REG_ADDR(mspi_dev), \
170 }
171
180#define MSPI_DEVICE_ID_DT_INST(inst) MSPI_DEVICE_ID_DT(DT_DRV_INST(inst))
181
182
220#define MSPI_DEV_CE_GPIOS_DT_SPEC_GET(mspi_dev) \
221 GPIO_DT_SPEC_GET_BY_IDX_OR(DT_BUS(mspi_dev), ce_gpios, \
222 DT_REG_ADDR_RAW(mspi_dev), {})
223
233#define MSPI_DEV_CE_GPIOS_DT_SPEC_INST_GET(inst) \
234 MSPI_DEV_CE_GPIOS_DT_SPEC_GET(DT_DRV_INST(inst))
235
236
247#define MSPI_CE_GPIOS_DT_SPEC_GET(node_id) \
248{ \
249 COND_CODE_1(DT_NODE_HAS_PROP(node_id, ce_gpios), \
250 (DT_FOREACH_PROP_ELEM_SEP(node_id, ce_gpios, GPIO_DT_SPEC_GET_BY_IDX, (,))), \
251 ()) \
252}
253
263#define MSPI_CE_GPIOS_DT_SPEC_INST_GET(inst) \
264 MSPI_CE_GPIOS_DT_SPEC_GET(DT_DRV_INST(inst))
265
304#define MSPI_CE_CONTROL_INIT(node_id, delay_) \
305 { \
306 .gpio = MSPI_DEV_CE_GPIOS_DT_SPEC_GET(node_id), .delay = (delay_), \
307 }
308
322#define MSPI_CE_CONTROL_INIT_INST(inst, delay_) MSPI_CE_CONTROL_INIT(DT_DRV_INST(inst), delay_)
323
324#ifdef __cplusplus
325}
326#endif
327
331
332#endif /* ZEPHYR_INCLUDE_DRIVERS_MSPI_DEVICETREE_H_ */
Main header file for GPIO driver API.