1 /*
2  * Copyright (c) 2018 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <nrf_erratas.h>
8 
9 /* Use the NRF_RTC instance for coarse radio event scheduling */
10 #define NRF_RTC NRF_RTC0
11 
12 /* HAL abstraction of event timer prescaler value */
13 #define HAL_EVENT_TIMER_PRESCALER_VALUE 4U
14 
15 /* NRF Radio HW timing constants
16  * - provided in US and NS (for higher granularity)
17  * - based on empirical measurements and sniffer logs
18  */
19 
20 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
21  * in microseconds for LE 1M PHY.
22  */
23 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_FAST_NS 41050 /* 40.1 + 0.95 */
24 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_FAST_US \
25 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_FAST_NS)
26 
27 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
28  * in microseconds for LE 1M PHY.
29  */
30 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NS 141050 /*140.1 + 0.95*/
31 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_US \
32 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NS)
33 
34 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode
35  * and no HW TIFS auto-switch) in microseconds for LE 1M PHY.
36  */
37 /* 129 + 0.95 */
38 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS 129950
39 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US \
40 	HAL_RADIO_NS2US_ROUND( \
41 		HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS)
42 
43 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
44  * in microseconds for LE 2M PHY.
45  */
46 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_FAST_NS 40000 /* 40.1 - 0.1 */
47 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_FAST_US \
48 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_FAST_NS)
49 
50 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
51  * in microseconds for LE 2M PHY.
52  */
53 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NS 144500 /* 144.6 - 0.1 */
54 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_US \
55 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NS)
56 
57 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode
58  * and no HW TIFS auto-switch) in microseconds for LE 2M PHY.
59  */
60 /* 129 - 0.1 */
61 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS 128900
62 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US \
63 	HAL_RADIO_NS2US_ROUND( \
64 		HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS)
65 
66 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
67  * in microseconds for LE 1M PHY.
68  */
69 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_FAST_NS 40300 /* 40.1 + 0.2 */
70 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_FAST_US \
71 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_FAST_NS)
72 
73 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
74  * in microseconds for LE 1M PHY.
75  */
76 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NS 140300 /*140.1 + 0.2*/
77 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_US \
78 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NS)
79 
80 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
81  * no HW TIFS auto-switch) in microseconds for LE 1M PHY.
82  */
83 /* 129 + 0.2 */
84 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS 129200
85 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US \
86 	HAL_RADIO_NS2US_CEIL( \
87 		HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS)
88 
89 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
90  * in microseconds for LE 2M PHY.
91  */
92 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_FAST_NS 40300 /* 40.1 + 0.2 */
93 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_FAST_US \
94 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_FAST_NS)
95 
96 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
97  * in microseconds for LE 2M PHY.
98  */
99 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NS 144800 /* 144.6 + 0.2 */
100 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_US \
101 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NS)
102 
103 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
104  * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
105  */
106 /* 129 + 0.2 */
107 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS 129200
108 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US \
109 	HAL_RADIO_NS2US_CEIL(\
110 		HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS)
111 
112 #define HAL_RADIO_NRF52810_TX_CHAIN_DELAY_NS     600 /* 0.6 */
113 #define HAL_RADIO_NRF52810_TX_CHAIN_DELAY_US \
114 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52810_TX_CHAIN_DELAY_NS)
115 
116 #define HAL_RADIO_NRF52810_RX_CHAIN_DELAY_1M_NS  9400 /* 9.4 */
117 #define HAL_RADIO_NRF52810_RX_CHAIN_DELAY_1M_US \
118 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52810_RX_CHAIN_DELAY_1M_NS)
119 
120 #define HAL_RADIO_NRF52810_RX_CHAIN_DELAY_2M_NS  5450 /* 5.0 + 0.45 */
121 #define HAL_RADIO_NRF52810_RX_CHAIN_DELAY_2M_US \
122 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52810_RX_CHAIN_DELAY_2M_NS)
123 
124 #if defined(CONFIG_BT_CTLR_RADIO_ENABLE_FAST)
125 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_US \
126 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_FAST_US
127 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_NS \
128 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_FAST_NS
129 
130 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_US \
131 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_FAST_US
132 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_NS \
133 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_FAST_NS
134 
135 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_US \
136 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_FAST_US
137 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_NS \
138 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_FAST_NS
139 
140 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_US \
141 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_FAST_US
142 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_NS \
143 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_FAST_NS
144 
145 #else /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
146 #if defined(CONFIG_BT_CTLR_TIFS_HW)
147 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_US \
148 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_US
149 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_NS \
150 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NS
151 
152 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_US \
153 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_US
154 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_NS \
155 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NS
156 
157 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_US \
158 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_US
159 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_NS \
160 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NS
161 
162 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_US \
163 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_US
164 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_NS \
165 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NS
166 
167 #else /* !CONFIG_BT_CTLR_TIFS_HW */
168 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_US \
169 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US
170 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_NS \
171 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS
172 
173 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_US \
174 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US
175 #define HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_NS \
176 	HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS
177 
178 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_US \
179 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US
180 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_NS \
181 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS
182 
183 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_US \
184 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US
185 #define HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_NS \
186 	HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS
187 #endif /* !CONFIG_BT_CTLR_TIFS_HW */
188 #endif /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
189 
190 /* HAL abstraction of Radio bitfields */
191 #define HAL_NRF_RADIO_EVENT_END              NRF_RADIO_EVENT_END
192 #define HAL_RADIO_EVENTS_END                 EVENTS_END
193 #define HAL_RADIO_INTENSET_DISABLED_Msk      RADIO_INTENSET_DISABLED_Msk
194 #define HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk RADIO_SHORTS_END_DISABLE_Msk
195 
196 /* HAL abstraction of Radio IRQ number */
197 #define HAL_RADIO_IRQn                          RADIO_IRQn
198 
hal_radio_reset(void)199 static inline void hal_radio_reset(void)
200 {
201 	/* nRF52810 itself is not affected with these anomalies but it might be
202 	 * needed to address them when DEVELOP_IN_NRF52832 is used.
203 	 */
204 	if (nrf52_errata_102() || nrf52_errata_106() || nrf52_errata_107()) {
205 		/* Workaround for nRF52 anomalies 102, 106, and 107. */
206 		*(volatile uint32_t *)0x40001774 =
207 			((*(volatile uint32_t *)0x40001774) & 0xfffffffe)
208 			| 0x01000000;
209 	}
210 }
211 
hal_radio_stop(void)212 static inline void hal_radio_stop(void)
213 {
214 	/* TODO: Add any required cleanup of actions taken in hal_radio_reset()
215 	 */
216 }
217 
hal_radio_ram_prio_setup(void)218 static inline void hal_radio_ram_prio_setup(void)
219 {
220 	struct {
221 		uint32_t volatile reserved_0[0x5a0 >> 2];
222 		uint32_t volatile bridge_type;
223 		uint32_t volatile reserved_1[((0xe00 - 0x5a0) >> 2) - 1];
224 		struct {
225 			uint32_t volatile CPU0;
226 			uint32_t volatile SPIS1;
227 			uint32_t volatile RADIO;
228 			uint32_t volatile ECB;
229 			uint32_t volatile CCM;
230 			uint32_t volatile AAR;
231 			uint32_t volatile SAADC;
232 			uint32_t volatile UARTE;
233 			uint32_t volatile SERIAL0;
234 			uint32_t volatile SERIAL2;
235 			uint32_t volatile NFCT;
236 			uint32_t volatile I2S;
237 			uint32_t volatile PDM;
238 			uint32_t volatile PWM;
239 		} RAMPRI;
240 	} volatile *NRF_AMLI = (void volatile *)0x40000000UL;
241 
242 	NRF_AMLI->RAMPRI.CPU0    = 0xFFFFFFFFUL;
243 	NRF_AMLI->RAMPRI.SPIS1   = 0xFFFFFFFFUL;
244 	NRF_AMLI->RAMPRI.RADIO   = 0x00000000UL;
245 	NRF_AMLI->RAMPRI.ECB     = 0xFFFFFFFFUL;
246 	NRF_AMLI->RAMPRI.CCM     = 0x00000000UL;
247 	NRF_AMLI->RAMPRI.AAR     = 0xFFFFFFFFUL;
248 	NRF_AMLI->RAMPRI.SAADC   = 0xFFFFFFFFUL;
249 	NRF_AMLI->RAMPRI.UARTE   = 0xFFFFFFFFUL;
250 	NRF_AMLI->RAMPRI.SERIAL0 = 0xFFFFFFFFUL;
251 	NRF_AMLI->RAMPRI.SERIAL2 = 0xFFFFFFFFUL;
252 	NRF_AMLI->RAMPRI.NFCT    = 0xFFFFFFFFUL;
253 	NRF_AMLI->RAMPRI.I2S     = 0xFFFFFFFFUL;
254 	NRF_AMLI->RAMPRI.PDM     = 0xFFFFFFFFUL;
255 	NRF_AMLI->RAMPRI.PWM     = 0xFFFFFFFFUL;
256 }
257 
hal_radio_phy_mode_get(uint8_t phy,uint8_t flags)258 static inline uint32_t hal_radio_phy_mode_get(uint8_t phy, uint8_t flags)
259 {
260 	ARG_UNUSED(flags);
261 	uint32_t mode;
262 
263 	switch (phy) {
264 	case BIT(0):
265 	default:
266 		mode = RADIO_MODE_MODE_Ble_1Mbit;
267 		break;
268 
269 	case BIT(1):
270 		mode = RADIO_MODE_MODE_Ble_2Mbit;
271 		break;
272 	}
273 
274 	return mode;
275 }
276 
hal_radio_tx_power_min_get(void)277 static inline uint32_t hal_radio_tx_power_min_get(void)
278 {
279 	return RADIO_TXPOWER_TXPOWER_Neg40dBm;
280 }
281 
hal_radio_tx_power_max_get(void)282 static inline uint32_t hal_radio_tx_power_max_get(void)
283 {
284 	return RADIO_TXPOWER_TXPOWER_Pos4dBm;
285 }
286 
hal_radio_tx_power_floor(int8_t tx_power_lvl)287 static inline uint32_t hal_radio_tx_power_floor(int8_t tx_power_lvl)
288 {
289 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos4dBm) {
290 		return RADIO_TXPOWER_TXPOWER_Pos4dBm;
291 	}
292 
293 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos3dBm) {
294 		return RADIO_TXPOWER_TXPOWER_Pos3dBm;
295 	}
296 
297 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_0dBm) {
298 		return RADIO_TXPOWER_TXPOWER_0dBm;
299 	}
300 
301 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg4dBm) {
302 		return RADIO_TXPOWER_TXPOWER_Neg4dBm;
303 	}
304 
305 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg8dBm) {
306 		return RADIO_TXPOWER_TXPOWER_Neg8dBm;
307 	}
308 
309 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg12dBm) {
310 		return RADIO_TXPOWER_TXPOWER_Neg12dBm;
311 	}
312 
313 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg16dBm) {
314 		return RADIO_TXPOWER_TXPOWER_Neg16dBm;
315 	}
316 
317 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg20dBm) {
318 		return RADIO_TXPOWER_TXPOWER_Neg20dBm;
319 	}
320 
321 	/* Note: The -30 dBm power level is deprecated so ignore it! */
322 	return RADIO_TXPOWER_TXPOWER_Neg40dBm;
323 }
324 
hal_radio_tx_ready_delay_us_get(uint8_t phy,uint8_t flags)325 static inline uint32_t hal_radio_tx_ready_delay_us_get(uint8_t phy, uint8_t flags)
326 {
327 	ARG_UNUSED(flags);
328 
329 	switch (phy) {
330 	default:
331 	case BIT(0):
332 		return HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_US;
333 	case BIT(1):
334 		return HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_US;
335 	}
336 }
337 
hal_radio_rx_ready_delay_us_get(uint8_t phy,uint8_t flags)338 static inline uint32_t hal_radio_rx_ready_delay_us_get(uint8_t phy, uint8_t flags)
339 {
340 	ARG_UNUSED(flags);
341 
342 	switch (phy) {
343 	default:
344 	case BIT(0):
345 		return HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_US;
346 	case BIT(1):
347 		return HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_US;
348 	}
349 }
350 
hal_radio_tx_chain_delay_us_get(uint8_t phy,uint8_t flags)351 static inline uint32_t hal_radio_tx_chain_delay_us_get(uint8_t phy, uint8_t flags)
352 {
353 	ARG_UNUSED(phy);
354 	ARG_UNUSED(flags);
355 
356 	return HAL_RADIO_NRF52810_TX_CHAIN_DELAY_US;
357 }
358 
hal_radio_rx_chain_delay_us_get(uint8_t phy,uint8_t flags)359 static inline uint32_t hal_radio_rx_chain_delay_us_get(uint8_t phy, uint8_t flags)
360 {
361 	ARG_UNUSED(flags);
362 
363 	switch (phy) {
364 	default:
365 	case BIT(0):
366 		return HAL_RADIO_NRF52810_RX_CHAIN_DELAY_1M_US;
367 	case BIT(1):
368 		return HAL_RADIO_NRF52810_RX_CHAIN_DELAY_2M_US;
369 	}
370 }
371 
hal_radio_tx_ready_delay_ns_get(uint8_t phy,uint8_t flags)372 static inline uint32_t hal_radio_tx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
373 {
374 	ARG_UNUSED(flags);
375 
376 	switch (phy) {
377 	default:
378 	case BIT(0):
379 		return HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_1M_NS;
380 	case BIT(1):
381 		return HAL_RADIO_NRF52810_TXEN_TXIDLE_TX_2M_NS;
382 	}
383 }
384 
hal_radio_rx_ready_delay_ns_get(uint8_t phy,uint8_t flags)385 static inline uint32_t hal_radio_rx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
386 {
387 	ARG_UNUSED(flags);
388 
389 	switch (phy) {
390 	default:
391 	case BIT(0):
392 		return HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_1M_NS;
393 	case BIT(1):
394 		return HAL_RADIO_NRF52810_RXEN_RXIDLE_RX_2M_NS;
395 	}
396 }
397 
hal_radio_tx_chain_delay_ns_get(uint8_t phy,uint8_t flags)398 static inline uint32_t hal_radio_tx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
399 {
400 	ARG_UNUSED(phy);
401 	ARG_UNUSED(flags);
402 
403 	return HAL_RADIO_NRF52810_TX_CHAIN_DELAY_US;
404 }
405 
hal_radio_rx_chain_delay_ns_get(uint8_t phy,uint8_t flags)406 static inline uint32_t hal_radio_rx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
407 {
408 	ARG_UNUSED(flags);
409 
410 	switch (phy) {
411 	default:
412 	case BIT(0):
413 		return HAL_RADIO_NRF52810_RX_CHAIN_DELAY_1M_NS;
414 	case BIT(1):
415 		return HAL_RADIO_NRF52810_RX_CHAIN_DELAY_2M_NS;
416 	}
417 }
418