Line data Source code
1 0 : /*
2 : * Copyright (c) 2021 Nordic Semiconductor ASA
3 : * SPDX-License-Identifier: Apache-2.0
4 : */
5 :
6 : #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NRF_PINCTRL_H_
7 : #define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NRF_PINCTRL_H_
8 :
9 : /*
10 : * The whole nRF pin configuration information is encoded in a 32-bit bitfield
11 : * organized as follows:
12 : *
13 : * - 31..24: Pin function.
14 : * - 19-23: Reserved.
15 : * - 18: Associated peripheral belongs to GD FAST ACTIVE1 (nRF54H only)
16 : * - 17: Clockpin enable.
17 : * - 16: Pin inversion mode.
18 : * - 15: Pin low power mode.
19 : * - 14..11: Pin output drive configuration.
20 : * - 10..9: Pin pull configuration.
21 : * - 8..0: Pin number (combination of port and pin).
22 : */
23 :
24 : /**
25 : * @name nRF pin configuration bit field positions and masks.
26 : * @{
27 : */
28 :
29 : /** Position of the function field. */
30 1 : #define NRF_FUN_POS 24U
31 : /** Mask for the function field. */
32 1 : #define NRF_FUN_MSK 0xFFU
33 : /** Position of the GPD FAST ACTIVE1 */
34 1 : #define NRF_GPD_FAST_ACTIVE1_POS 18U
35 : /** Mask for the GPD FAST ACTIVE1 */
36 1 : #define NRF_GPD_FAST_ACTIVE1_MSK 0x1U
37 : /** Position of the clockpin enable field. */
38 1 : #define NRF_CLOCKPIN_ENABLE_POS 17U
39 : /** Mask for the clockpin enable field. */
40 1 : #define NRF_CLOCKPIN_ENABLE_MSK 0x1U
41 : /** Position of the invert field. */
42 1 : #define NRF_INVERT_POS 16U
43 : /** Mask for the invert field. */
44 1 : #define NRF_INVERT_MSK 0x1U
45 : /** Position of the low power field. */
46 1 : #define NRF_LP_POS 15U
47 : /** Mask for the low power field. */
48 1 : #define NRF_LP_MSK 0x1U
49 : /** Position of the drive configuration field. */
50 1 : #define NRF_DRIVE_POS 11U
51 : /** Mask for the drive configuration field. */
52 1 : #define NRF_DRIVE_MSK 0xFU
53 : /** Position of the pull configuration field. */
54 1 : #define NRF_PULL_POS 9U
55 : /** Mask for the pull configuration field. */
56 1 : #define NRF_PULL_MSK 0x3U
57 : /** Position of the pin field. */
58 1 : #define NRF_PIN_POS 0U
59 : /** Mask for the pin field. */
60 1 : #define NRF_PIN_MSK 0x1FFU
61 :
62 : /** @} */
63 :
64 : /**
65 : * @name nRF pinctrl pin functions.
66 : * @{
67 : */
68 :
69 : /** UART TX */
70 1 : #define NRF_FUN_UART_TX 0U
71 : /** UART RX */
72 1 : #define NRF_FUN_UART_RX 1U
73 : /** UART RTS */
74 1 : #define NRF_FUN_UART_RTS 2U
75 : /** UART CTS */
76 1 : #define NRF_FUN_UART_CTS 3U
77 : /** SPI master SCK */
78 1 : #define NRF_FUN_SPIM_SCK 4U
79 : /** SPI master MOSI */
80 1 : #define NRF_FUN_SPIM_MOSI 5U
81 : /** SPI master MISO */
82 1 : #define NRF_FUN_SPIM_MISO 6U
83 : /** SPI slave SCK */
84 1 : #define NRF_FUN_SPIS_SCK 7U
85 : /** SPI slave MOSI */
86 1 : #define NRF_FUN_SPIS_MOSI 8U
87 : /** SPI slave MISO */
88 1 : #define NRF_FUN_SPIS_MISO 9U
89 : /** SPI slave CSN */
90 1 : #define NRF_FUN_SPIS_CSN 10U
91 : /** TWI master SCL */
92 1 : #define NRF_FUN_TWIM_SCL 11U
93 : /** TWI master SDA */
94 1 : #define NRF_FUN_TWIM_SDA 12U
95 : /** I2S SCK in master mode */
96 1 : #define NRF_FUN_I2S_SCK_M 13U
97 : /** I2S SCK in slave mode */
98 1 : #define NRF_FUN_I2S_SCK_S 14U
99 : /** I2S LRCK in master mode */
100 1 : #define NRF_FUN_I2S_LRCK_M 15U
101 : /** I2S LRCK in slave mode */
102 1 : #define NRF_FUN_I2S_LRCK_S 16U
103 : /** I2S SDIN */
104 1 : #define NRF_FUN_I2S_SDIN 17U
105 : /** I2S SDOUT */
106 1 : #define NRF_FUN_I2S_SDOUT 18U
107 : /** I2S MCK */
108 1 : #define NRF_FUN_I2S_MCK 19U
109 : /** PDM CLK */
110 1 : #define NRF_FUN_PDM_CLK 20U
111 : /** PDM DIN */
112 1 : #define NRF_FUN_PDM_DIN 21U
113 : /** PWM OUT0 */
114 1 : #define NRF_FUN_PWM_OUT0 22U
115 : /** PWM OUT1 */
116 1 : #define NRF_FUN_PWM_OUT1 23U
117 : /** PWM OUT2 */
118 1 : #define NRF_FUN_PWM_OUT2 24U
119 : /** PWM OUT3 */
120 1 : #define NRF_FUN_PWM_OUT3 25U
121 : /** QDEC A */
122 1 : #define NRF_FUN_QDEC_A 26U
123 : /** QDEC B */
124 1 : #define NRF_FUN_QDEC_B 27U
125 : /** QDEC LED */
126 1 : #define NRF_FUN_QDEC_LED 28U
127 : /** QSPI SCK */
128 1 : #define NRF_FUN_QSPI_SCK 29U
129 : /** QSPI CSN */
130 1 : #define NRF_FUN_QSPI_CSN 30U
131 : /** QSPI IO0 */
132 1 : #define NRF_FUN_QSPI_IO0 31U
133 : /** QSPI IO1 */
134 1 : #define NRF_FUN_QSPI_IO1 32U
135 : /** QSPI IO2 */
136 1 : #define NRF_FUN_QSPI_IO2 33U
137 : /** QSPI IO3 */
138 1 : #define NRF_FUN_QSPI_IO3 34U
139 : /** EXMIF CK */
140 1 : #define NRF_FUN_EXMIF_CK 35U
141 : /** EXMIF DQ0 */
142 1 : #define NRF_FUN_EXMIF_DQ0 36U
143 : /** EXMIF DQ1 */
144 1 : #define NRF_FUN_EXMIF_DQ1 37U
145 : /** EXMIF DQ2 */
146 1 : #define NRF_FUN_EXMIF_DQ2 38U
147 : /** EXMIF DQ3 */
148 1 : #define NRF_FUN_EXMIF_DQ3 39U
149 : /** EXMIF DQ4 */
150 1 : #define NRF_FUN_EXMIF_DQ4 40U
151 : /** EXMIF DQ5 */
152 1 : #define NRF_FUN_EXMIF_DQ5 41U
153 : /** EXMIF DQ6 */
154 1 : #define NRF_FUN_EXMIF_DQ6 42U
155 : /** EXMIF DQ7 */
156 1 : #define NRF_FUN_EXMIF_DQ7 43U
157 : /** EXMIF CS0 */
158 1 : #define NRF_FUN_EXMIF_CS0 44U
159 : /** EXMIF CS1 */
160 1 : #define NRF_FUN_EXMIF_CS1 45U
161 : /** CAN TX */
162 1 : #define NRF_FUN_CAN_TX 46U
163 : /** CAN RX */
164 1 : #define NRF_FUN_CAN_RX 47U
165 : /** TWIS SCL */
166 1 : #define NRF_FUN_TWIS_SCL 48U
167 : /** TWIS SDA */
168 1 : #define NRF_FUN_TWIS_SDA 49U
169 : /** EXMIF RWDS */
170 1 : #define NRF_FUN_EXMIF_RWDS 50U
171 : /** GRTC fast clock output */
172 1 : #define NRF_FUN_GRTC_CLKOUT_FAST 55U
173 : /** GRTC slow clock output */
174 1 : #define NRF_FUN_GRTC_CLKOUT_32K 56U
175 : /** TDM SCK in master mode */
176 1 : #define NRF_FUN_TDM_SCK_M 71U
177 : /** TDM SCK in slave mode */
178 1 : #define NRF_FUN_TDM_SCK_S 72U
179 : /** TDM LRCK in master mode */
180 1 : #define NRF_FUN_TDM_FSYNC_M 73U
181 : /** TDM LRCK in slave mode */
182 1 : #define NRF_FUN_TDM_FSYNC_S 74U
183 : /** TDM SDIN */
184 1 : #define NRF_FUN_TDM_SDIN 75U
185 : /** TDM SDOUT */
186 1 : #define NRF_FUN_TDM_SDOUT 76U
187 : /** TDM MCK */
188 1 : #define NRF_FUN_TDM_MCK 77U
189 :
190 : /** @} */
191 :
192 : /**
193 : * @name nRF pinctrl output drive.
194 : * @{
195 : */
196 :
197 : /** Standard '0', standard '1'. */
198 1 : #define NRF_DRIVE_S0S1 0U
199 : /** High drive '0', standard '1'. */
200 1 : #define NRF_DRIVE_H0S1 1U
201 : /** Standard '0', high drive '1'. */
202 1 : #define NRF_DRIVE_S0H1 2U
203 : /** High drive '0', high drive '1'. */
204 1 : #define NRF_DRIVE_H0H1 3U
205 : /** Disconnect '0' standard '1'. */
206 1 : #define NRF_DRIVE_D0S1 4U
207 : /** Disconnect '0', high drive '1'. */
208 1 : #define NRF_DRIVE_D0H1 5U
209 : /** Standard '0', disconnect '1'. */
210 1 : #define NRF_DRIVE_S0D1 6U
211 : /** High drive '0', disconnect '1'. */
212 1 : #define NRF_DRIVE_H0D1 7U
213 : /** Extra high drive '0', extra high drive '1'. */
214 1 : #define NRF_DRIVE_E0E1 8U
215 :
216 : /** @} */
217 :
218 : /**
219 : * @name nRF pinctrl pull-up/down.
220 : * @note Values match nrf_gpio_pin_pull_t constants.
221 : * @{
222 : */
223 :
224 : /** Pull-up disabled. */
225 1 : #define NRF_PULL_NONE 0U
226 : /** Pull-down enabled. */
227 1 : #define NRF_PULL_DOWN 1U
228 : /** Pull-up enabled. */
229 1 : #define NRF_PULL_UP 3U
230 :
231 : /** @} */
232 :
233 : /**
234 : * @name nRF pinctrl low power mode.
235 : * @{
236 : */
237 :
238 : /** Input. */
239 1 : #define NRF_LP_DISABLE 0U
240 : /** Output. */
241 1 : #define NRF_LP_ENABLE 1U
242 :
243 : /** @} */
244 :
245 : /**
246 : * @name nRF pinctrl helpers to indicate disconnected pins.
247 : * @{
248 : */
249 :
250 : /** Indicates that a pin is disconnected */
251 1 : #define NRF_PIN_DISCONNECTED NRF_PIN_MSK
252 :
253 : /** @} */
254 :
255 : /**
256 : * @brief Utility macro to build nRF psels property entry.
257 : *
258 : * @param fun Pin function configuration (see NRF_FUNC_{name} macros).
259 : * @param port Port (0 or 15).
260 : * @param pin Pin (0..31).
261 : */
262 1 : #define NRF_PSEL(fun, port, pin) \
263 : ((((((port) * 32U) + (pin)) & NRF_PIN_MSK) << NRF_PIN_POS) | \
264 : ((NRF_FUN_ ## fun & NRF_FUN_MSK) << NRF_FUN_POS))
265 :
266 : /**
267 : * @brief Utility macro to build nRF psels property entry when a pin is disconnected.
268 : *
269 : * This can be useful in situations where code running before Zephyr, e.g. a bootloader
270 : * configures pins that later needs to be disconnected.
271 : *
272 : * @param fun Pin function configuration (see NRF_FUN_{name} macros).
273 : */
274 1 : #define NRF_PSEL_DISCONNECTED(fun) \
275 : (NRF_PIN_DISCONNECTED | \
276 : ((NRF_FUN_ ## fun & NRF_FUN_MSK) << NRF_FUN_POS))
277 :
278 : #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_NRF_PINCTRL_H_ */
|