From 955ecd3d90c8fdac0de9cf40f634f02adbf846ca Mon Sep 17 00:00:00 2001 From: Bjarki Arge Andreasen Date: Fri, 12 Dec 2025 12:55:52 +0100 Subject: [PATCH] [nrf fromlist] drivers: clock_control: nrfs_audiopll: disable clock on init The nrfs audiopll is automatically started if freq fraction or prescaler is requested. The initial state of the clock should be off, so send a disable request after setting initial freq fraction and prescaler. Upstream PR #: 100949 Signed-off-by: Bjarki Arge Andreasen --- .../clock_control_nrfs_audiopll.c | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/clock_control/clock_control_nrfs_audiopll.c b/drivers/clock_control/clock_control_nrfs_audiopll.c index c4df962144a0..fe18182af5a1 100644 --- a/drivers/clock_control/clock_control_nrfs_audiopll.c +++ b/drivers/clock_control/clock_control_nrfs_audiopll.c @@ -147,6 +147,22 @@ static int shim_nrfs_request_freq_sync(const struct device *dev, uint16_t freq_f return dev_data->evt == NRFS_AUDIOPLL_EVT_FREQ_CONFIRMED ? 0 : -EIO; } +static int shim_nrfs_request_disable_sync(const struct device *dev) +{ + struct shim_data *dev_data = dev->data; + nrfs_err_t err; + + LOG_DBG("send disable request"); + + err = nrfs_audiopll_disable_request(dev_data); + if (err != NRFS_SUCCESS) { + return -EIO; + } + + k_sem_take(&dev_data->evt_sem, K_FOREVER); + return dev_data->evt == NRFS_AUDIOPLL_EVT_DISABLED ? 0 : -EIO; +} + static int shim_nrfs_request_prescaler_sync(const struct device *dev, enum audiopll_prescaler_div div) { @@ -274,6 +290,13 @@ static int shim_init(const struct device *dev) return ret; } + /* Requesting freq or prescaler automatically enables clock, disable it */ + ret = shim_nrfs_request_disable_sync(dev); + if (ret) { + LOG_ERR("failed to disable clock"); + return ret; + } + nrfs_audiopll_uninit(); ret = onoff_manager_init(&dev_data->mgr, &shim_mgr_transitions);