Skip to content

Commit dfa0e89

Browse files
committed
[nrf fromlist] Replace clock api with clock api v2
Replaced old clock_control.h api with nrf_clock_control.h api. Old api is still available when CONFIG_CLOCK_CONTROL_NRF is set. Upstream PR #: 99290 Signed-off-by: Michal Frankiewicz <[email protected]>
1 parent 41e91e6 commit dfa0e89

File tree

29 files changed

+762
-76
lines changed

29 files changed

+762
-76
lines changed

drivers/audio/dmic_nrfx_pdm.c

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,23 @@ BUILD_ASSERT((DMIC_NRFX_AUDIO_CLOCK_FREQ == NRF_AUXPLL_FREQ_DIV_AUDIO_48K) ||
3030
(DMIC_NRFX_AUDIO_CLOCK_FREQ == NRF_AUXPLL_FREQ_DIV_AUDIO_44K1),
3131
"Unsupported Audio AUXPLL frequency selection for PDM");
3232
#define DMIC_NRFX_CLOCK_FREQ MHZ(32)
33-
#else
33+
#elif CONFIG_CLOCK_CONTROL_NRF
3434
#define DMIC_NRFX_CLOCK_FREQ MHZ(32)
3535
#define DMIC_NRFX_AUDIO_CLOCK_FREQ DT_PROP_OR(DT_NODELABEL(aclk), clock_frequency, \
3636
DT_PROP_OR(DT_NODELABEL(clock), hfclkaudio_frequency, 0))
37+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO)
38+
#define DMIC_NRFX_CLOCK_FREQ MHZ(32)
39+
#define DMIC_NRFX_AUDIO_CLOCK_FREQ \
40+
DT_PROP_OR(DT_NODELABEL(aclk), clock_frequency, \
41+
DT_PROP_OR(DT_NODELABEL(hfclkaudio), hfclkaudio_frequency, 0))
42+
#endif
43+
44+
#if defined(CONFIG_CLOCK_CONTORL_NRF)
45+
#define HFCLKAUDIO_NODE clock
46+
#define HFCLKAUDIO_NODE_DESC "hfclkaudio-frequency in the nordic,nrf-clock node, "
47+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO)
48+
#define HFCLKAUDIO_NODE hfclkaudio
49+
#define HFCLKAUDIO_NODE_DESC "hfclkaudio-frequency in the nordic,nrf-clock-hfclkaudio node, "
3750
#endif
3851

3952
struct dmic_nrfx_pdm_drv_data {
@@ -42,6 +55,9 @@ struct dmic_nrfx_pdm_drv_data {
4255
const struct device *audiopll_dev;
4356
#elif CONFIG_CLOCK_CONTROL_NRF
4457
struct onoff_manager *clk_mgr;
58+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
59+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
60+
const struct device *clk_dev;
4561
#endif
4662
struct onoff_client clk_cli;
4763
struct k_mem_slab *mem_slab;
@@ -87,6 +103,9 @@ static int request_clock(struct dmic_nrfx_pdm_drv_data *drv_data)
87103
return nrf_clock_control_request(drv_data->audiopll_dev, NULL, &drv_data->clk_cli);
88104
#elif CONFIG_CLOCK_CONTROL_NRF
89105
return onoff_request(drv_data->clk_mgr, &drv_data->clk_cli);
106+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
107+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
108+
return nrf_clock_control_request(drv_data->clk_dev, NULL, &drv_data->clk_cli);
90109
#else
91110
return -ENOTSUP;
92111
#endif
@@ -101,6 +120,9 @@ static int release_clock(struct dmic_nrfx_pdm_drv_data *drv_data)
101120
return nrf_clock_control_release(drv_data->audiopll_dev, NULL);
102121
#elif CONFIG_CLOCK_CONTROL_NRF
103122
return onoff_release(drv_data->clk_mgr);
123+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
124+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
125+
return nrf_clock_control_release(drv_data->clk_dev, NULL);
104126
#else
105127
return -ENOTSUP;
106128
#endif
@@ -482,6 +504,23 @@ static void init_clock_manager(const struct device *dev)
482504

483505
drv_data->clk_mgr = z_nrf_clock_control_get_onoff(subsys);
484506
__ASSERT_NO_MSG(drv_data->clk_mgr != NULL);
507+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
508+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
509+
struct dmic_nrfx_pdm_drv_data *drv_data = dev->data;
510+
#if NRF_CLOCK_HAS_HFCLKAUDIO
511+
const struct dmic_nrfx_pdm_drv_cfg *drv_cfg = dev->config;
512+
513+
if (drv_cfg->clk_src == ACLK) {
514+
drv_data->clk_dev = DEVICE_DT_GET_ONE(nordic_nrf_clock_hfclkaudio);
515+
} else
516+
#endif
517+
{
518+
drv_data->clk_dev = DEVICE_DT_GET_ONE(COND_CODE_1((NRF_CLOCK_HAS_HFCLK),
519+
(nordic_nrf_clock_hfclk),
520+
(nordic_nrf_clock_xo)));
521+
}
522+
523+
__ASSERT_NO_MSG(drv_data->clk_dev != NULL);
485524
#elif CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
486525
struct dmic_nrfx_pdm_drv_data *drv_data = dev->data;
487526

@@ -536,17 +575,16 @@ static const struct _dmic_ops dmic_ops = {
536575
NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(inst)); \
537576
BUILD_ASSERT(PDM_CLK_SRC(inst) != ACLK || NRF_PDM_HAS_SELECTABLE_CLOCK, \
538577
"Clock source ACLK is not available."); \
539-
BUILD_ASSERT(PDM_CLK_SRC(inst) != ACLK || \
540-
DT_NODE_HAS_PROP(DT_NODELABEL(clock), hfclkaudio_frequency) || \
541-
DT_NODE_HAS_PROP(DT_NODELABEL(aclk), clock_frequency) || \
542-
DT_NODE_HAS_PROP(NODE_AUDIOPLL, frequency) || \
543-
DT_NODE_HAS_PROP(NODE_AUDIO_AUXPLL, nordic_frequency), \
544-
"Clock source ACLK requires one following defined frequency " \
545-
"properties: " \
546-
"hfclkaudio-frequency in the nordic,nrf-clock node, " \
547-
"clock-frequency in the aclk node, " \
548-
"frequency in the audiopll node, " \
549-
"nordic-frequency in the audio_auxpll node"); \
578+
BUILD_ASSERT( \
579+
PDM_CLK_SRC(inst) != ACLK || \
580+
DT_NODE_HAS_PROP(DT_NODELABEL(HFCLKAUDIO_NODE), hfclkaudio_frequency) || \
581+
DT_NODE_HAS_PROP(DT_NODELABEL(aclk), clock_frequency) || \
582+
DT_NODE_HAS_PROP(NODE_AUDIOPLL, frequency) || \
583+
DT_NODE_HAS_PROP(NODE_AUDIO_AUXPLL, nordic_frequency), \
584+
"Clock source ACLK requires one following defined frequency " \
585+
"properties: " HFCLKAUDIO_NODE_DESC "clock-frequency in the aclk node, " \
586+
"frequency in the audiopll node, " \
587+
"nordic-frequency in the audio_auxpll node"); \
550588
DEVICE_DT_INST_DEFINE(inst, pdm_nrfx_init##inst, NULL, &dmic_nrfx_pdm_data##inst, \
551589
&dmic_nrfx_pdm_cfg##inst, POST_KERNEL, \
552590
CONFIG_AUDIO_DMIC_INIT_PRIORITY, &dmic_ops);

drivers/clock_control/clock_control_nrf_lfclk.c

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,28 @@ LOG_MODULE_REGISTER(clock_control_lfclk, CONFIG_CLOCK_CONTROL_LOG_LEVEL);
5151
#define CLOCK_DEVICE_HF DEVICE_DT_GET_ONE(nordic_nrf_clock_xo)
5252
#endif
5353

54+
#define LFCLK_SRC (DT_STRING_TOKEN(DT_NODELABEL(lfclk), k32src))
55+
56+
#if ((LFCLK_SRC != CLOCK_CONTROL_NRF_K32SRC_RC) && \
57+
(LFCLK_SRC != CLOCK_CONTROL_NRF_K32SRC_XTAL) && \
58+
(LFCLK_SRC != CLOCK_CONTROL_NRF_K32SRC_SYNTH) && \
59+
(LFCLK_SRC != CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING) && \
60+
(LFCLK_SRC != CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING))
61+
#error "Unsupported LFCLK source configured in devicetree"
62+
#endif
63+
64+
#if (DT_STRING_TOKEN(DT_NODELABEL(lfclk), k32src) == CLOCK_CONTROL_NRF_K32SRC_RC)
65+
#define K32SRC NRF_CLOCK_LFCLK_RC
66+
#elif (DT_STRING_TOKEN(DT_NODELABEL(lfclk), k32src) == CLOCK_CONTROL_NRF_K32SRC_XTAL)
67+
#define K32SRC NRF_CLOCK_LFCLK_XTAL
68+
#elif (DT_STRING_TOKEN(DT_NODELABEL(lfclk), k32src) == CLOCK_CONTROL_NRF_K32SRC_SYNTH)
69+
#define K32SRC NRF_CLOCK_LFCLK_SYNTH
70+
#elif (DT_STRING_TOKEN(DT_NODELABEL(lfclk), k32src) == CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING)
71+
#define K32SRC NRF_CLOCK_LFCLK_XTAL_LOW_SWING
72+
#elif (DT_STRING_TOKEN(DT_NODELABEL(lfclk), k32src) == CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING)
73+
#define K32SRC NRF_CLOCK_LFCLK_XTAL_FULL_SWING
74+
#endif
75+
5476
typedef void (*clk_ctrl_func_t)(void);
5577

5678
typedef struct {
@@ -68,7 +90,7 @@ typedef struct {
6890
#endif
6991
} lfclk_config_t;
7092

71-
#if CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH
93+
#if (LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_SYNTH)
7294
/* Client to request HFXO to synthesize low frequency clock. */
7395
static struct onoff_client lfsynth_cli;
7496
#endif
@@ -149,7 +171,7 @@ static void lfclk_start(void)
149171
anomaly_132_workaround();
150172
}
151173

152-
#if CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH
174+
#if (LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_SYNTH)
153175
sys_notify_init_spinwait(&lfsynth_cli.notify);
154176

155177
(void)nrf_clock_control_request(CLOCK_DEVICE_HF, NULL, &lfsynth_cli);
@@ -166,7 +188,7 @@ static void lfclk_stop(void)
166188

167189
nrfx_clock_lfclk_stop();
168190

169-
#if CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH
191+
#if (LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_SYNTH)
170192

171193
(void)nrf_clock_control_cancel_or_release(CLOCK_DEVICE_HF, NULL, &lfsynth_cli);
172194
#endif
@@ -234,16 +256,16 @@ static void lfclk_spinwait(enum nrf_lfclk_start_mode mode)
234256
/* For sources XTAL, EXT_LOW_SWING, and EXT_FULL_SWING,
235257
* NRF_CLOCK_LFCLK_XTAL is returned as the type of running clock.
236258
*/
237-
(IS_ENABLED(CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL) ||
238-
IS_ENABLED(CONFIG_CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING) ||
239-
IS_ENABLED(CONFIG_CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING))
259+
((LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_XTAL) ||
260+
(LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING) ||
261+
(LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING))
240262
? NRF_CLOCK_LFCLK_XTAL
241-
: CLOCK_CONTROL_NRF_K32SRC;
263+
: K32SRC;
242264
nrf_clock_lfclk_t type;
243265

244266
if ((mode == CLOCK_CONTROL_NRF_LF_START_AVAILABLE) &&
245267
(target_type == NRF_CLOCK_LFCLK_XTAL) &&
246-
(nrf_clock_lf_srccopy_get(NRF_CLOCK) == CLOCK_CONTROL_NRF_K32SRC)) {
268+
(nrf_clock_lf_srccopy_get(NRF_CLOCK) == K32SRC)) {
247269
/* If target clock source is using XTAL then due to two-stage
248270
* clock startup sequence, RC might already be running.
249271
* It can be determined by checking current LFCLK source. If it
@@ -266,7 +288,7 @@ static void lfclk_spinwait(enum nrf_lfclk_start_mode mode)
266288
/* Synth source start is almost instant and LFCLKSTARTED may
267289
* happen before calling idle. That would lead to deadlock.
268290
*/
269-
if (!IS_ENABLED(CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH)) {
291+
if (LFCLK_SRC != CLOCK_CONTROL_NRF_K32SRC_SYNTH) {
270292
if (isr_mode || !IS_ENABLED(CONFIG_MULTITHREADING)) {
271293
k_cpu_atomic_idle(key);
272294
} else {
@@ -277,12 +299,9 @@ static void lfclk_spinwait(enum nrf_lfclk_start_mode mode)
277299
/* Clock interrupt is locked, LFCLKSTARTED is handled here. */
278300
if ((target_type == NRF_CLOCK_LFCLK_XTAL)
279301
&& (nrf_clock_lf_src_get(NRF_CLOCK) == NRF_CLOCK_LFCLK_RC)
280-
&& nrf_clock_event_check(NRF_CLOCK,
281-
NRF_CLOCK_EVENT_LFCLKSTARTED)) {
282-
nrf_clock_event_clear(NRF_CLOCK,
283-
NRF_CLOCK_EVENT_LFCLKSTARTED);
284-
nrf_clock_lf_src_set(NRF_CLOCK,
285-
CLOCK_CONTROL_NRF_K32SRC);
302+
&& nrf_clock_event_check(NRF_CLOCK, NRF_CLOCK_EVENT_LFCLKSTARTED)) {
303+
nrf_clock_event_clear(NRF_CLOCK, NRF_CLOCK_EVENT_LFCLKSTARTED);
304+
nrf_clock_lf_src_set(NRF_CLOCK, K32SRC);
286305

287306
/* Clear pending interrupt, otherwise new clock event
288307
* would not wake up from idle.

drivers/clock_control/nrf_clock_calibration.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
#include <zephyr/drivers/clock_control.h>
88
#include "nrf_clock_calibration.h"
99
#include <zephyr/drivers/clock_control/nrf_clock_control.h>
10+
#if defined(CONFIG_CLOCK_CONTROL_NRF)
1011
#include <nrfx_clock.h>
12+
#else
13+
#include <nrfx_clock_lfclk.h>
14+
#endif
1115
#include <zephyr/logging/log.h>
1216
#include <stdlib.h>
1317

@@ -155,7 +159,11 @@ static void cal_lf_callback(struct onoff_manager *mgr,
155159
/* Start actual HW calibration assuming that HFCLK XTAL is on. */
156160
static void start_hw_cal(void)
157161
{
162+
#if defined(CONFIG_CLOCK_CONTROL_NRF)
158163
nrfx_clock_calibration_start();
164+
#else
165+
nrfx_clock_lfclk_calibration_start();
166+
#endif
159167
calib_skip_cnt = CONFIG_CLOCK_CONTROL_NRF_CALIBRATION_MAX_SKIP;
160168
}
161169

drivers/counter/counter_nrfx_rtc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ static int init_rtc(const struct device *dev, uint32_t prescaler)
528528
NRF_RTC_Type *rtc = nrfx_config->rtc;
529529
int err;
530530

531-
#ifdef CONFIG_CLOCK_CONTROL_NRF
531+
#ifndef HALTIUM_XXAA
532532
z_nrf_clock_control_lf_on(CLOCK_CONTROL_NRF_LF_START_NOWAIT);
533533
#endif
534534

drivers/i2s/i2s_nrf_tdm.c

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,6 @@ struct tdm_drv_cfg {
106106
};
107107

108108
struct tdm_drv_data {
109-
#if CONFIG_CLOCK_CONTROL_NRF
110-
struct onoff_manager *clk_mgr;
111-
#endif
112109
struct onoff_client clk_cli;
113110
struct stream_cfg tx;
114111
struct k_msgq tx_queue;
@@ -129,9 +126,7 @@ struct tdm_drv_data {
129126

130127
static int audio_clock_request(struct tdm_drv_data *drv_data)
131128
{
132-
#if DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRF
133-
return onoff_request(drv_data->clk_mgr, &drv_data->clk_cli);
134-
#elif DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
129+
#if DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
135130
return nrf_clock_control_request(audiopll, &aclk_spec, &drv_data->clk_cli);
136131
#else
137132
(void)drv_data;
@@ -142,9 +137,7 @@ static int audio_clock_request(struct tdm_drv_data *drv_data)
142137

143138
static int audio_clock_release(struct tdm_drv_data *drv_data)
144139
{
145-
#if DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRF
146-
return onoff_release(drv_data->clk_mgr);
147-
#elif DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
140+
#if DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
148141
(void)drv_data;
149142

150143
return nrf_clock_control_release(audiopll, &aclk_spec);
@@ -1110,20 +1103,6 @@ static void data_handler(const struct device *dev, const tdm_buffers_t *released
11101103
}
11111104
}
11121105

1113-
static void clock_manager_init(const struct device *dev)
1114-
{
1115-
#if CONFIG_CLOCK_CONTROL_NRF && NRF_CLOCK_HAS_HFCLKAUDIO
1116-
clock_control_subsys_t subsys;
1117-
struct tdm_drv_data *drv_data = dev->data;
1118-
1119-
subsys = CLOCK_CONTROL_NRF_SUBSYS_HFAUDIO;
1120-
drv_data->clk_mgr = z_nrf_clock_control_get_onoff(subsys);
1121-
__ASSERT_NO_MSG(drv_data->clk_mgr != NULL);
1122-
#else
1123-
(void)dev;
1124-
#endif
1125-
}
1126-
11271106
static int data_init(const struct device *dev)
11281107
{
11291108
struct tdm_drv_data *drv_data = dev->data;
@@ -1190,7 +1169,6 @@ static DEVICE_API(i2s, tdm_nrf_drv_api) = {
11901169
sizeof(struct tdm_buf), ARRAY_SIZE(tx_msgs##idx)); \
11911170
k_msgq_init(&tdm_nrf_data##idx.rx_queue, (char *)rx_msgs##idx, \
11921171
sizeof(struct tdm_buf), ARRAY_SIZE(rx_msgs##idx)); \
1193-
clock_manager_init(dev); \
11941172
return 0; \
11951173
} \
11961174
BUILD_ASSERT((TDM_SCK_CLK_SRC(idx) != ACLK && TDM_MCK_CLK_SRC(idx) != ACLK) || \

0 commit comments

Comments
 (0)