@@ -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_NRFX_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_NRFX_HFCLKAUDIO )
51+ #define HFCLKAUDIO_NODE hfclkaudio
52+ #define HFCLKAUDIO_NODE_DESC "hfclkaudio-frequency in the nordic,nrf-clock-hfclkaudio node, "
4153#endif
4254
4355struct 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_NRFX_HFCLKAUDIO ) || defined(CONFIG_CLOCK_CONTROL_NRFX_HFCLK ) || \
62+ defined(CONFIG_CLOCK_CONTROL_NRFX_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_NRFX_HFCLKAUDIO ) || defined(CONFIG_CLOCK_CONTROL_NRFX_HFCLK ) || \
110+ defined(CONFIG_CLOCK_CONTROL_NRFX_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_NRFX_HFCLKAUDIO ) || defined(CONFIG_CLOCK_CONTROL_NRFX_HFCLK ) || \
127+ defined(CONFIG_CLOCK_CONTROL_NRFX_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_NRFX_HFCLKAUDIO) || defined(CONFIG_CLOCK_CONTROL_NRFX_HFCLK) || \
512+ defined(CONFIG_CLOCK_CONTROL_NRFX_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);
0 commit comments