Skip to content

Commit af18d52

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 cae343a commit af18d52

File tree

29 files changed

+766
-71
lines changed

29 files changed

+766
-71
lines changed

drivers/audio/dmic_nrfx_pdm.c

Lines changed: 53 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,32 @@ 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+
{
522+
drv_data->clk_dev = DEVICE_DT_GET_ONE(COND_CODE_1((NRF_CLOCK_HAS_HFCLK),
523+
(nordic_nrf_clock_hfclk),
524+
(nordic_nrf_clock_xo)));
525+
}
526+
527+
__ASSERT_NO_MSG(drv_data->clk_dev != NULL);
489528
#elif CONFIG_CLOCK_CONTROL_NRFS_AUDIOPLL
490529
struct dmic_nrfx_pdm_drv_data *drv_data = dev->data;
491530

@@ -540,17 +579,16 @@ static const struct _dmic_ops dmic_ops = {
540579
NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(inst)); \
541580
BUILD_ASSERT(PDM_CLK_SRC(inst) != ACLK || NRF_PDM_HAS_SELECTABLE_CLOCK, \
542581
"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"); \
582+
BUILD_ASSERT( \
583+
PDM_CLK_SRC(inst) != ACLK || \
584+
DT_NODE_HAS_PROP(DT_NODELABEL(HFCLKAUDIO_NODE), hfclkaudio_frequency) || \
585+
DT_NODE_HAS_PROP(DT_NODELABEL(aclk), clock_frequency) || \
586+
DT_NODE_HAS_PROP(NODE_AUDIOPLL, frequency) || \
587+
DT_NODE_HAS_PROP(NODE_AUDIO_AUXPLL, nordic_frequency), \
588+
"Clock source ACLK requires one following defined frequency " \
589+
"properties: " HFCLKAUDIO_NODE_DESC "clock-frequency in the aclk node, " \
590+
"frequency in the audiopll node, " \
591+
"nordic-frequency in the audio_auxpll node"); \
554592
DEVICE_DT_INST_DEFINE(inst, pdm_nrfx_init##inst, NULL, &dmic_nrfx_pdm_data##inst, \
555593
&dmic_nrfx_pdm_cfg##inst, POST_KERNEL, \
556594
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: 3 additions & 17 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);
@@ -1208,7 +1195,6 @@ static DEVICE_API(i2s, tdm_nrf_drv_api) = {
12081195
sizeof(struct tdm_buf), ARRAY_SIZE(tx_msgs##idx)); \
12091196
k_msgq_init(&tdm_nrf_data##idx.rx_queue, (char *)rx_msgs##idx, \
12101197
sizeof(struct tdm_buf), ARRAY_SIZE(rx_msgs##idx)); \
1211-
clock_manager_init(dev); \
12121198
return 0; \
12131199
} \
12141200
BUILD_ASSERT((TDM_SCK_CLK_SRC(idx) != ACLK && TDM_MCK_CLK_SRC(idx) != ACLK) || \

0 commit comments

Comments
 (0)