Skip to content

Commit 7687271

Browse files
committed
[nrf fromlist] treewide: 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 28047ac commit 7687271

File tree

29 files changed

+776
-80
lines changed

29 files changed

+776
-80
lines changed

drivers/audio/dmic_nrfx_pdm.c

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,23 @@ BUILD_ASSERT((AUXPLL_FREQUENCY_SETTING == NRF_AUXPLL_FREQ_DIV_AUDIO_48K) ||
3333
#define DMIC_NRFX_AUDIO_CLOCK_FREQ CLOCK_CONTROL_NRF_AUXPLL_GET_FREQ(NODE_AUDIO_AUXPLL)
3434

3535
#define DMIC_NRFX_CLOCK_FREQ MHZ(32)
36-
37-
#else
36+
#elif CONFIG_CLOCK_CONTROL_NRF
3837
#define DMIC_NRFX_CLOCK_FREQ MHZ(32)
3938
#define DMIC_NRFX_AUDIO_CLOCK_FREQ DT_PROP_OR(DT_NODELABEL(aclk), clock_frequency, \
4039
DT_PROP_OR(DT_NODELABEL(clock), hfclkaudio_frequency, 0))
40+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO)
41+
#define DMIC_NRFX_CLOCK_FREQ MHZ(32)
42+
#define DMIC_NRFX_AUDIO_CLOCK_FREQ \
43+
DT_PROP_OR(DT_NODELABEL(aclk), clock_frequency, \
44+
DT_PROP_OR(DT_NODELABEL(hfclkaudio), hfclkaudio_frequency, 0))
45+
#endif
46+
47+
#if defined(CONFIG_CLOCK_CONTORL_NRF)
48+
#define HFCLKAUDIO_NODE clock
49+
#define HFCLKAUDIO_NODE_DESC "hfclkaudio-frequency in the nordic,nrf-clock node, "
50+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO)
51+
#define HFCLKAUDIO_NODE hfclkaudio
52+
#define HFCLKAUDIO_NODE_DESC "hfclkaudio-frequency in the nordic,nrf-clock-hfclkaudio node, "
4153
#endif
4254

4355
struct dmic_nrfx_pdm_drv_data {
@@ -46,6 +58,9 @@ struct dmic_nrfx_pdm_drv_data {
4658
const struct device *audiopll_dev;
4759
#elif CONFIG_CLOCK_CONTROL_NRF
4860
struct onoff_manager *clk_mgr;
61+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
62+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
63+
const struct device *clk_dev;
4964
#endif
5065
struct onoff_client clk_cli;
5166
struct k_mem_slab *mem_slab;
@@ -91,6 +106,9 @@ static int request_clock(struct dmic_nrfx_pdm_drv_data *drv_data)
91106
return nrf_clock_control_request(drv_data->audiopll_dev, NULL, &drv_data->clk_cli);
92107
#elif CONFIG_CLOCK_CONTROL_NRF
93108
return onoff_request(drv_data->clk_mgr, &drv_data->clk_cli);
109+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
110+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
111+
return nrf_clock_control_request(drv_data->clk_dev, NULL, &drv_data->clk_cli);
94112
#else
95113
return -ENOTSUP;
96114
#endif
@@ -105,6 +123,9 @@ static int release_clock(struct dmic_nrfx_pdm_drv_data *drv_data)
105123
return nrf_clock_control_release(drv_data->audiopll_dev, NULL);
106124
#elif CONFIG_CLOCK_CONTROL_NRF
107125
return onoff_release(drv_data->clk_mgr);
126+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
127+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
128+
return nrf_clock_control_release(drv_data->clk_dev, NULL);
108129
#else
109130
return -ENOTSUP;
110131
#endif
@@ -478,14 +499,33 @@ static void init_clock_manager(const struct device *dev)
478499

479500
if (drv_cfg->clk_src == ACLK) {
480501
subsys = CLOCK_CONTROL_NRF_SUBSYS_HFAUDIO;
481-
} else
502+
} else {
482503
#endif
483-
{
484504
subsys = CLOCK_CONTROL_NRF_SUBSYS_HF;
505+
#if NRF_CLOCK_HAS_HFCLKAUDIO
485506
}
507+
#endif
486508

487509
drv_data->clk_mgr = z_nrf_clock_control_get_onoff(subsys);
488510
__ASSERT_NO_MSG(drv_data->clk_mgr != NULL);
511+
#elif defined(CONFIG_CLOCK_CONTROL_NRF_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRF_HFCLK) || \
512+
defined(CONFIG_CLOCK_CONTROL_NRF_XO)
513+
struct dmic_nrfx_pdm_drv_data *drv_data = dev->data;
514+
#if NRF_CLOCK_HAS_HFCLKAUDIO
515+
const struct dmic_nrfx_pdm_drv_cfg *drv_cfg = dev->config;
516+
517+
if (drv_cfg->clk_src == ACLK) {
518+
drv_data->clk_dev = DEVICE_DT_GET_ONE(nordic_nrf_clock_hfclkaudio);
519+
} else {
520+
#endif
521+
drv_data->clk_dev = DEVICE_DT_GET_ONE(COND_CODE_1((NRF_CLOCK_HAS_HFCLK),
522+
(nordic_nrf_clock_hfclk),
523+
(nordic_nrf_clock_xo)));
524+
#if NRF_CLOCK_HAS_HFCLKAUDIO
525+
}
526+
#endif
527+
528+
__ASSERT_NO_MSG(drv_data->clk_dev != NULL);
489529
#elif CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
490530
struct dmic_nrfx_pdm_drv_data *drv_data = dev->data;
491531

@@ -540,17 +580,16 @@ static const struct _dmic_ops dmic_ops = {
540580
NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(inst)); \
541581
BUILD_ASSERT(PDM_CLK_SRC(inst) != ACLK || NRF_PDM_HAS_SELECTABLE_CLOCK, \
542582
"Clock source ACLK is not available."); \
543-
BUILD_ASSERT(PDM_CLK_SRC(inst) != ACLK || \
544-
DT_NODE_HAS_PROP(DT_NODELABEL(clock), hfclkaudio_frequency) || \
545-
DT_NODE_HAS_PROP(DT_NODELABEL(aclk), clock_frequency) || \
546-
DT_NODE_HAS_PROP(NODE_AUDIOPLL, frequency) || \
547-
DT_NODE_HAS_PROP(NODE_AUDIO_AUXPLL, nordic_frequency), \
548-
"Clock source ACLK requires one following defined frequency " \
549-
"properties: " \
550-
"hfclkaudio-frequency in the nordic,nrf-clock node, " \
551-
"clock-frequency in the aclk node, " \
552-
"frequency in the audiopll node, " \
553-
"nordic-frequency in the audio_auxpll node"); \
583+
BUILD_ASSERT( \
584+
PDM_CLK_SRC(inst) != ACLK || \
585+
DT_NODE_HAS_PROP(DT_NODELABEL(HFCLKAUDIO_NODE), hfclkaudio_frequency) || \
586+
DT_NODE_HAS_PROP(DT_NODELABEL(aclk), clock_frequency) || \
587+
DT_NODE_HAS_PROP(NODE_AUDIOPLL, frequency) || \
588+
DT_NODE_HAS_PROP(NODE_AUDIO_AUXPLL, nordic_frequency), \
589+
"Clock source ACLK requires one following defined frequency " \
590+
"properties: " HFCLKAUDIO_NODE_DESC "clock-frequency in the aclk node, " \
591+
"frequency in the audiopll node, " \
592+
"nordic-frequency in the audio_auxpll node"); \
554593
DEVICE_DT_INST_DEFINE(inst, pdm_nrfx_init##inst, NULL, &dmic_nrfx_pdm_data##inst, \
555594
&dmic_nrfx_pdm_cfg##inst, POST_KERNEL, \
556595
CONFIG_AUDIO_DMIC_INIT_PRIORITY, &dmic_ops);

drivers/clock_control/clock_control_nrf_lfclk.c

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,19 @@ LOG_MODULE_REGISTER(clock_control_lfclk, CONFIG_CLOCK_CONTROL_LOG_LEVEL);
2020

2121
#define DT_DRV_COMPAT nordic_nrf_clock_lfclk
2222

23-
#define CTX_ONOFF BIT(6)
24-
#define CTX_API BIT(7)
25-
#define CTX_MASK (CTX_ONOFF | CTX_API)
23+
#define CTX_ONOFF BIT(6)
24+
#define CTX_API BIT(7)
25+
#define CTX_MASK (CTX_ONOFF | CTX_API)
2626

27-
#define STATUS_MASK 0x7
28-
#define GET_STATUS(flags) (flags & STATUS_MASK)
29-
#define GET_CTX(flags) (flags & CTX_MASK)
27+
#define STATUS_MASK 0x7
28+
#define GET_STATUS(flags) (flags & STATUS_MASK)
29+
#define GET_CTX(flags) (flags & CTX_MASK)
3030

3131
/* Helper logging macros which prepends subsys name to the log. */
3232
#ifdef CONFIG_LOG
33-
#define CLOCK_LOG(lvl, dev, ...) \
34-
LOG_##lvl("%s: " GET_ARG_N(1, __VA_ARGS__), \
35-
"lfclk" \
36-
COND_CODE_0(NUM_VA_ARGS_LESS_1(__VA_ARGS__),\
33+
#define CLOCK_LOG(lvl, dev, ...) \
34+
LOG_##lvl("%s: " GET_ARG_N(1, __VA_ARGS__), \
35+
"lfclk" COND_CODE_0(NUM_VA_ARGS_LESS_1(__VA_ARGS__),\
3736
(), (, GET_ARGS_LESS_N(1, __VA_ARGS__))))
3837
#else
3938
#define CLOCK_LOG(...)
@@ -51,6 +50,27 @@ LOG_MODULE_REGISTER(clock_control_lfclk, CONFIG_CLOCK_CONTROL_LOG_LEVEL);
5150
#define CLOCK_DEVICE_HF DEVICE_DT_GET_ONE(nordic_nrf_clock_xo)
5251
#endif
5352

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

5676
typedef struct {
@@ -68,7 +88,7 @@ typedef struct {
6888
#endif
6989
} lfclk_config_t;
7090

71-
#if CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH
91+
#if (LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_SYNTH)
7292
/* Client to request HFXO to synthesize low frequency clock. */
7393
static struct onoff_client lfsynth_cli;
7494
#endif
@@ -149,7 +169,7 @@ static void lfclk_start(void)
149169
anomaly_132_workaround();
150170
}
151171

152-
#if CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH
172+
#if (LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_SYNTH)
153173
sys_notify_init_spinwait(&lfsynth_cli.notify);
154174

155175
(void)nrf_clock_control_request(CLOCK_DEVICE_HF, NULL, &lfsynth_cli);
@@ -166,7 +186,7 @@ static void lfclk_stop(void)
166186

167187
nrfx_clock_lfclk_stop();
168188

169-
#if CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH
189+
#if (LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_SYNTH)
170190

171191
(void)nrf_clock_control_cancel_or_release(CLOCK_DEVICE_HF, NULL, &lfsynth_cli);
172192
#endif
@@ -234,16 +254,16 @@ static void lfclk_spinwait(enum nrf_lfclk_start_mode mode)
234254
/* For sources XTAL, EXT_LOW_SWING, and EXT_FULL_SWING,
235255
* NRF_CLOCK_LFCLK_XTAL is returned as the type of running clock.
236256
*/
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))
257+
((LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_XTAL) ||
258+
(LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING) ||
259+
(LFCLK_SRC == CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING))
240260
? NRF_CLOCK_LFCLK_XTAL
241-
: CLOCK_CONTROL_NRF_K32SRC;
261+
: K32SRC;
242262
nrf_clock_lfclk_t type;
243263

244264
if ((mode == CLOCK_CONTROL_NRF_LF_START_AVAILABLE) &&
245265
(target_type == NRF_CLOCK_LFCLK_XTAL) &&
246-
(nrf_clock_lf_srccopy_get(NRF_CLOCK) == CLOCK_CONTROL_NRF_K32SRC)) {
266+
(nrf_clock_lf_srccopy_get(NRF_CLOCK) == K32SRC)) {
247267
/* If target clock source is using XTAL then due to two-stage
248268
* clock startup sequence, RC might already be running.
249269
* It can be determined by checking current LFCLK source. If it
@@ -266,7 +286,7 @@ static void lfclk_spinwait(enum nrf_lfclk_start_mode mode)
266286
/* Synth source start is almost instant and LFCLKSTARTED may
267287
* happen before calling idle. That would lead to deadlock.
268288
*/
269-
if (!IS_ENABLED(CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH)) {
289+
if (LFCLK_SRC != CLOCK_CONTROL_NRF_K32SRC_SYNTH) {
270290
if (isr_mode || !IS_ENABLED(CONFIG_MULTITHREADING)) {
271291
k_cpu_atomic_idle(key);
272292
} else {
@@ -277,12 +297,9 @@ static void lfclk_spinwait(enum nrf_lfclk_start_mode mode)
277297
/* Clock interrupt is locked, LFCLKSTARTED is handled here. */
278298
if ((target_type == NRF_CLOCK_LFCLK_XTAL)
279299
&& (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);
300+
&& nrf_clock_event_check(NRF_CLOCK, NRF_CLOCK_EVENT_LFCLKSTARTED)) {
301+
nrf_clock_event_clear(NRF_CLOCK, NRF_CLOCK_EVENT_LFCLKSTARTED);
302+
nrf_clock_lf_src_set(NRF_CLOCK, K32SRC);
286303

287304
/* Clear pending interrupt, otherwise new clock event
288305
* 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: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,6 @@ struct tdm_drv_data {
113113
#if CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL || DT_NODE_HAS_STATUS_OKAY(NODE_AUDIO_AUXPLL)
114114
const struct device *audiopll;
115115
struct nrf_clock_spec aclk_spec;
116-
#elif CONFIG_CLOCK_CONTROL_NRF
117-
struct onoff_manager *clk_mgr;
118116
#endif
119117
struct onoff_client clk_cli;
120118
struct stream_cfg tx;
@@ -136,9 +134,7 @@ struct tdm_drv_data {
136134

137135
static int audio_clock_request(struct tdm_drv_data *drv_data)
138136
{
139-
#if DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRF
140-
return onoff_request(drv_data->clk_mgr, &drv_data->clk_cli);
141-
#elif (DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL) || \
137+
#if (DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL) || \
142138
DT_NODE_HAS_STATUS_OKAY(NODE_AUDIO_AUXPLL)
143139
return nrf_clock_control_request(drv_data->audiopll, &drv_data->aclk_spec,
144140
&drv_data->clk_cli);
@@ -151,9 +147,7 @@ static int audio_clock_request(struct tdm_drv_data *drv_data)
151147

152148
static int audio_clock_release(struct tdm_drv_data *drv_data)
153149
{
154-
#if DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRF
155-
return onoff_release(drv_data->clk_mgr);
156-
#elif (DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL) || \
150+
#if (DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL) || \
157151
DT_NODE_HAS_STATUS_OKAY(NODE_AUDIO_AUXPLL)
158152
return nrf_clock_control_release(drv_data->audiopll, &drv_data->aclk_spec);
159153
#else
@@ -1120,14 +1114,7 @@ static void data_handler(const struct device *dev, const tdm_buffers_t *released
11201114

11211115
static void clock_manager_init(const struct device *dev)
11221116
{
1123-
#if CONFIG_CLOCK_CONTROL_NRF && NRF_CLOCK_HAS_HFCLKAUDIO
1124-
clock_control_subsys_t subsys;
1125-
struct tdm_drv_data *drv_data = dev->data;
1126-
1127-
subsys = CLOCK_CONTROL_NRF_SUBSYS_HFAUDIO;
1128-
drv_data->clk_mgr = z_nrf_clock_control_get_onoff(subsys);
1129-
__ASSERT_NO_MSG(drv_data->clk_mgr != NULL);
1130-
#elif DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
1117+
#if DT_NODE_HAS_STATUS_OKAY(NODE_ACLK) && CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
11311118
struct tdm_drv_data *drv_data = dev->data;
11321119

11331120
drv_data->audiopll = DEVICE_DT_GET(NODE_ACLK);

0 commit comments

Comments
 (0)