Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions drivers/audio/dmic_nrfx_pdm.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,15 @@ LOG_MODULE_REGISTER(dmic_nrfx_pdm, CONFIG_AUDIO_DMIC_LOG_LEVEL);
#define DMIC_NRFX_CLOCK_FACTOR 8192
#define DMIC_NRFX_AUDIO_CLOCK_FREQ DT_PROP_OR(NODE_AUDIOPLL, frequency, 0)
#elif DT_NODE_HAS_STATUS_OKAY(NODE_AUDIO_AUXPLL)
#define DMIC_NRFX_AUDIO_CLOCK_FREQ DT_PROP(NODE_AUDIO_AUXPLL, nordic_frequency)
BUILD_ASSERT((DMIC_NRFX_AUDIO_CLOCK_FREQ == NRF_AUXPLL_FREQ_DIV_AUDIO_48K) ||
(DMIC_NRFX_AUDIO_CLOCK_FREQ == NRF_AUXPLL_FREQ_DIV_AUDIO_44K1),
#define AUXPLL_FREQUENCY_SETTING DT_PROP(NODE_AUDIO_AUXPLL, nordic_frequency)
BUILD_ASSERT((AUXPLL_FREQUENCY_SETTING == NRF_AUXPLL_FREQ_DIV_AUDIO_48K) ||
(AUXPLL_FREQUENCY_SETTING == NRF_AUXPLL_FREQ_DIV_AUDIO_44K1),
"Unsupported Audio AUXPLL frequency selection for PDM");

#define DMIC_NRFX_AUDIO_CLOCK_FREQ CLOCK_CONTROL_NRF_AUXPLL_GET_FREQ(NODE_AUDIO_AUXPLL)

#define DMIC_NRFX_CLOCK_FREQ MHZ(32)

#else
#define DMIC_NRFX_CLOCK_FREQ MHZ(32)
#define DMIC_NRFX_CLOCK_FACTOR 4096
Expand Down
23 changes: 23 additions & 0 deletions include/zephyr/drivers/clock_control/nrf_clock_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,29 @@ uint32_t z_nrf_clock_bt_ctlr_hf_get_startup_time_us(void);
/* Specifies that default precision of the clock is sufficient. */
#define NRF_CLOCK_CONTROL_PRECISION_DEFAULT 0

/* AUXPLL devicetree takes in raw register values, these are the actual frequencies outputted */
#define CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_MIN_HZ 80000000
#define CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_AUDIO_44K1_HZ 11289591
#define CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_USB24M_HZ 24000000
#define CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_AUDIO_48K_HZ 12287963

/* Internal helper macro to map DT property value to output frequency */
#define _CLOCK_CONTROL_NRF_AUXPLL_MAP_FREQ(freq_val) \
((freq_val) == NRF_AUXPLL_FREQ_DIV_MIN ? \
CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_MIN_HZ : \
(freq_val) == NRF_AUXPLL_FREQ_DIV_AUDIO_44K1 ? \
CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_AUDIO_44K1_HZ : \
(freq_val) == NRF_AUXPLL_FREQ_DIV_USB24M ? \
CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_USB24M_HZ : \
(freq_val) == NRF_AUXPLL_FREQ_DIV_AUDIO_48K ? \
CLOCK_CONTROL_NRF_AUXPLL_FREQ_OUT_AUDIO_48K_HZ : 0)

/* Public macro to get output frequency of AUXPLL */
#define CLOCK_CONTROL_NRF_AUXPLL_GET_FREQ(node) \
COND_CODE_1(DT_NODE_HAS_PROP(node, nordic_frequency), \
(_CLOCK_CONTROL_NRF_AUXPLL_MAP_FREQ(DT_PROP(node, nordic_frequency))), \
(0))

struct nrf_clock_spec {
uint32_t frequency;
uint16_t accuracy : 15;
Expand Down
15 changes: 4 additions & 11 deletions tests/drivers/clock_control/nrf_clock_control/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,17 +162,10 @@ static const struct test_clk_context lfclk_test_clk_contexts[] = {
#define AUXPLL_NODE DT_INST(0, AUXPLL_COMPAT)
#define AUXPLL_FREQ DT_PROP(AUXPLL_NODE, nordic_frequency)

/* Gets selected AUXPLL DIV and selects the expected frequency */
#if AUXPLL_FREQ == NRF_AUXPLL_FREQUENCY_DIV_MIN
#define AUXPLL_FREQ_OUT 80000000
#elif AUXPLL_FREQ == NRF_AUXPLL_FREQ_DIV_AUDIO_44K1
#define AUXPLL_FREQ_OUT 11289591
#elif AUXPLL_FREQ == NRF_AUXPLL_FREQ_DIV_USB_24M
#define AUXPLL_FREQ_OUT 24000000
#elif AUXPLL_FREQ == NRF_AUXPLL_FREQ_DIV_AUDIO_48K
#define AUXPLL_FREQ_OUT 12287963
#else
/*No use case for NRF_AUXPLL_FREQ_DIV_MAX or others yet*/

/* Gets expected AUXPLL frequency */
#define AUXPLL_FREQ_OUT CLOCK_CONTROL_NRF_AUXPLL_GET_FREQ(AUXPLL_NODE)
#if AUXPLL_FREQ_OUT == 0
#error "Unsupported AUXPLL frequency selection"
#endif

Expand Down