zephyr/drivers/clock_control
Rubin Gerritsen f0a433fc03 drivers: clock_control: nrf2_lfclk: Fix selecting lowest power clock
The application or drivers can request the LFCLK with a given
precision and accuracy.
The driver should select the clock source which has
the lowest power consumption and still satisfies the requested
accuracy and precision.

Before this commit, this was not the case.
Consider the case where the BICR has configured the system
to have LFXO with accuracy of 20 ppm.
The existing code would have ordered the clock options as following:
```
[0] = {LFLPRC, 1000 ppm},
[1] = {LFRC, 500 ppm},
[2] = {SYNTH, 30 ppm},
[3] = {LFXO_PIERCE, 20 ppm},
[4] = {LFXO_PIERCE_HP, 20 ppm}
```

**Example 1**: The user requests the clock with an accuracy of 30 ppm.
The existing code would request the power hungry "SYNTH".

**Example 2**: The user requests a clock with an accuracy of 500 ppm.
The existing code would request the LFRC which consumes more power than
the LFXO.

This commit fixes this issue by ordering the clock sources according
to power consumption.
For the examples above we user request would result in requesting the
20 ppm LFXO.

Signed-off-by: Rubin Gerritsen <rubin.gerritsen@nordicsemi.no>
2025-06-05 15:16:28 -05:00
..
beetle_clock_control.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_agilex_ll.c
clock_agilex.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_adsp.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_agilex5_ll.c drivers: clock_control: Agilex5 clock control driver updates 2024-12-16 17:12:34 -05:00
clock_control_agilex5_ll.h drivers: clock_control: Agilex5 clock control driver updates 2024-12-16 17:12:34 -05:00
clock_control_agilex5.c drivers: clock_control: Agilex5 clock control driver updates 2024-12-16 17:12:34 -05:00
clock_control_ambiq.c soc: ambiq: Optimize the inclusion relationship of header files 2025-04-17 09:06:18 +02:00
clock_control_arm_scmi.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_ast10x0.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_esp32.c soc: espressif: convert rtc peripheral to clock subsystem 2025-06-02 17:38:08 +02:00
clock_control_fixed_rate.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_gd32.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_ifx_cat1.c drivers: timer: Add support for IFX Low power timer 2025-05-29 20:19:18 -04:00
clock_control_it51xxx.c drivers/clock: it51xxx: Disable eSPI pad before changing PLL sequence 2025-06-05 09:34:23 +02:00
clock_control_litex.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_litex.h sys: util: define bits per byte, nibble, and nibbles per byte 2024-10-15 19:05:06 +01:00
clock_control_lpc11u6x.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_lpc11u6x.h
clock_control_max32.c drivers: clock_control: clock_control_max32: Enable IPLL 2025-05-16 17:32:09 +02:00
clock_control_mchp_xec.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_mcux_ccm_rev2.c drivers: clock: ccm_rev2: add imx91 support 2025-02-11 22:08:59 +01:00
clock_control_mcux_ccm.c drivers: clock_control_mcux_ccm: use fixed 25M for PTP on RT10XX 2025-05-02 09:17:12 +02:00
clock_control_mcux_mcg.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_mcux_pcc.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_mcux_scg_k4.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_mcux_scg.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_mcux_sim.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_mcux_syscon.c drivers: clock_control_mcux_syscon: Added get support for I2S FLEXCOMM 2025-06-02 22:35:29 -04:00
clock_control_mspm0.c drivers: clock: ti: Add initial support TI MSPM0 clock module 2025-05-21 08:04:32 +02:00
clock_control_npcm.c style: add missing curly braces in if/while/for statements. 2025-05-17 14:10:33 +02:00
clock_control_npcx.c drivers: clock_control: npcx: add NPCXn variant support in clock init 2025-05-27 12:15:36 +01:00
clock_control_nrf2_audiopll.c drivers: clock_control: add nrfs_audiopll clock driver 2025-04-03 00:03:14 +02:00
clock_control_nrf2_common.c drivers: clock_control_nrf2_common: Add resetting of the on-off services 2025-05-16 17:32:35 +02:00
clock_control_nrf2_common.h drivers: clock_control_nrf2_common: Add resetting of the on-off services 2025-05-16 17:32:35 +02:00
clock_control_nrf2_fll16m.c drivers: clock_control: nrf2_fll16m: impl resolve and startup_time 2025-06-04 17:00:40 +02:00
clock_control_nrf2_global_hsfll.c drivers: clock_control: nrf2_global_hsfll: impl resolve 2025-06-04 17:00:40 +02:00
clock_control_nrf2_hfxo.c drivers: clock_control: nrf2_hfxo: impl resolve and startup_time 2025-06-04 17:00:40 +02:00
clock_control_nrf2_hsfll.c drivers: clock_control: nrf2_hsfll: impl resolve 2025-06-04 17:00:40 +02:00
clock_control_nrf2_lfclk.c drivers: clock_control: nrf2_lfclk: Fix selecting lowest power clock 2025-06-05 15:16:28 -05:00
clock_control_nrf_auxpll.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_nrf.c drivers: clock_control: z_nrf_clock: add get_startup_time API 2025-05-28 17:49:41 +02:00
clock_control_numaker_scc.c drivers: clock_control: support for Nuvoton m55m1x series 2025-03-12 14:04:23 +00:00
clock_control_nxp_s32.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_pwm.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_r8a779f0_cpg_mssr.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_r8a7795_cpg_mssr.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_renesas_cpg_mssr.c
clock_control_renesas_cpg_mssr.h
clock_control_renesas_ra_cgc.c drivers: timer: Add ULPT timer for power management on Renesas RA MCUs 2025-04-03 08:41:08 +02:00
clock_control_renesas_rx_pclk_cgc.c drivers: clock: Support clock control driver RX MCU 2025-05-02 09:18:16 +02:00
clock_control_renesas_rx_pll_cgc.c drivers: clock: Support clock control driver RX MCU 2025-05-02 09:18:16 +02:00
clock_control_renesas_rx_root_cgc.c drivers: clock: Support clock control driver RX MCU 2025-05-02 09:18:16 +02:00
clock_control_renesas_rz_cpg.c drivers: clock control: Initial support for RZ/G3S 2025-02-13 09:11:19 +01:00
clock_control_renesas_rza2m_cpg_lld.c drivers: clock control: Initial support for RZ/A2M 2025-04-25 14:05:01 +02:00
clock_control_renesas_rza2m_cpg_lld.h drivers: clock control: Initial support for RZ/A2M 2025-04-25 14:05:01 +02:00
clock_control_renesas_rza2m_cpg.c drivers: clock control: Initial support for RZ/A2M 2025-04-25 14:05:01 +02:00
clock_control_rpi_pico.c drivers: clock_control: Calling tick_start directly to start wdt 2025-03-07 19:47:41 +01:00
clock_control_rts5912_sccon.c driver: clock_control: Add clock controller initial version of RTS5912. 2025-01-10 11:58:02 +01:00
clock_control_rv32m1_pcc.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_sam_pmc.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_sama7g5_pmc.c drivers: clock_control: microchip: add drivers for sama7g5 PMC 2025-05-28 08:14:08 +02:00
clock_control_sama7g5_sckc.c drivers: clock_control: microchip: add support for sama7g5 SCKC 2025-05-28 08:14:08 +02:00
clock_control_si32_ahb.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_si32_apb.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_si32_pll.c style: add missing curly braces in if/while/for statements. 2025-05-17 14:10:33 +02:00
clock_control_silabs_series.c drivers: clock_control: Place API into iterable section 2024-11-29 21:46:34 +01:00
clock_control_silabs_siwx91x.c drivers: i2s: siwx91x: I2S clock initialization for siwx91x 2025-05-20 15:24:50 +02:00
clock_control_smartbond.c include: zephyr: sys: time_units: Make z_clock_hw_cycles_per_sec unsigned 2025-03-28 12:21:07 +01:00
clock_control_wch_rcc.c modules: Update hal_wch 2025-05-24 18:03:53 +02:00
clock_stm32_ll_common.c drivers: clock_control: remove inline attributes in stm32 clock drivers 2025-03-21 14:40:36 -04:00
clock_stm32_ll_common.h drivers: clock control: stm32 function to get 48MHz freq 2024-12-13 20:05:11 +01:00
clock_stm32_ll_h5.c drivers: clock_control: remove inline attributes in stm32 clock drivers 2025-03-21 14:40:36 -04:00
clock_stm32_ll_h7.c drivers: clock control: stm32H7RS has a PLL2 & 3 or HCLK5 output 2025-05-21 17:35:06 +02:00
clock_stm32_ll_mp1.c drivers: clock_control: remove inline attributes in stm32 clock drivers 2025-03-21 14:40:36 -04:00
clock_stm32_ll_mp13.c clock_control: stm32: add handling of clocks for the stm32mp13 2025-05-14 11:03:41 +01:00
clock_stm32_ll_n6.c drivers: clock_control: get_status handler for stm32n6 2025-03-26 16:19:09 +01:00
clock_stm32_ll_u5.c drivers: clock_control: remove inline attributes in stm32 clock drivers 2025-03-21 14:40:36 -04:00
clock_stm32_ll_wb0.c drivers: clock_control: remove inline attributes in stm32 clock drivers 2025-03-21 14:40:36 -04:00
clock_stm32_ll_wba.c drivers: clock_control: remove inline attributes in stm32 clock drivers 2025-03-21 14:40:36 -04:00
clock_stm32_mco.c drivers: clock: stm32-mco: support MCO with enable bit 2025-05-14 11:03:41 +01:00
clock_stm32_mux.c drivers: clock_control: remove '&' when assigning clock_control_xxx_init 2024-06-27 08:50:20 -04:00
clock_stm32c0.c
clock_stm32f0_f3.c drivers: clock: stm32f1,f3: fix adc prescaler 2024-06-04 13:39:14 +02:00
clock_stm32f1.c drivers: clock_control: Add clock sources to common enabled_clock check 2024-09-16 20:19:57 +02:00
clock_stm32f2_f4_f7.c drivers: clock control of stm32f4 serie w/o clk 48M on PLL I2S 2025-02-06 10:42:36 +01:00
clock_stm32g0_u0.c drivers: clock_control: Add stm32u0 clock control support 2024-08-26 11:28:04 -04:00
clock_stm32g4.c
clock_stm32l0_l1.c drivers: clock_control: stm32: adding config_regulator_voltage for L0 2024-05-30 09:47:12 -05:00
clock_stm32l4_l5_wb_wl.c
CMakeLists.txt drivers: clock_control: microchip: add support for sama7g5 SCKC 2025-05-28 08:14:08 +02:00
Kconfig drivers: clock: ti: Add initial support TI MSPM0 clock module 2025-05-21 08:04:32 +02:00
Kconfig.agilex5
Kconfig.ambiq
Kconfig.arm_scmi firmware: scmi: add support for clock management protocol 2024-08-19 10:05:16 -04:00
Kconfig.aspeed
Kconfig.beetle
Kconfig.cavs
Kconfig.esp32 soc: espressif: convert rtc peripheral to clock subsystem 2025-06-02 17:38:08 +02:00
Kconfig.fixed
Kconfig.gd32
Kconfig.ifx_cat1
Kconfig.it51xxx drivers/clock: Add clock drivers of it51xxx 2025-04-08 10:48:26 +02:00
Kconfig.litex
Kconfig.lpc11u6x boards: nxp: Removing CONFIG_PINCTRL from the boards defconfig 2024-10-15 19:09:45 -04:00
Kconfig.max32 drivers: Add MAX32690 clock control driver 2024-05-29 07:30:12 +02:00
Kconfig.mcux_ccm
Kconfig.mcux_ccm_rev2
Kconfig.mcux_mcg
Kconfig.mcux_pcc
Kconfig.mcux_scg drivers: clock_control: Add MCUX SCG K4 driver 2024-09-20 15:14:11 -05:00
Kconfig.mcux_sim
Kconfig.mcux_syscon boards: nxp: Removing CONFIG_PINCTRL from the boards defconfig 2024-10-15 19:09:45 -04:00
Kconfig.mspm0 drivers: clock: ti: Add initial support TI MSPM0 clock module 2025-05-21 08:04:32 +02:00
Kconfig.npcm drivers: clock_control: add npcm clock control driver 2024-11-16 15:06:25 -05:00
Kconfig.npcx
Kconfig.nrf drivers: clock_control: nrf: adapt NRF_HFINT_CALIBRATION option 2025-05-28 17:49:41 +02:00
Kconfig.nrf_auxpll drivers: clock_control: nrf_auxpll: add initial driver 2024-05-29 08:30:42 -07:00
Kconfig.numaker
Kconfig.nxp_s32
Kconfig.pwm
Kconfig.rcar
Kconfig.renesas_ra_cgc dts: bindings: clock: Change clock control binding for Renesas RA 2024-08-19 09:59:27 -04:00
Kconfig.renesas_rx_cgc drivers: clock: Support clock control driver RX MCU 2025-05-02 09:18:16 +02:00
Kconfig.renesas_rz_cpg drivers: clock control: Initial support for RZ/A2M 2025-04-25 14:05:01 +02:00
Kconfig.rpi_pico soc: raspberrypi: Drop PINCTRL from Kconfig.defconfig 2024-11-25 14:42:01 +01:00
Kconfig.rts5912 drivers: kconfig: Fix bleeding options 2025-01-31 11:50:12 +01:00
Kconfig.rv32m1
Kconfig.sam drivers: clock_control: microchip: add support for sama7g5 SCKC 2025-05-28 08:14:08 +02:00
Kconfig.si32 drivers: clock_control: Add initial SiM3U1xx support 2024-08-26 18:51:36 +02:00
Kconfig.silabs drivers: clock_control: silabs: Add clock control driver 2024-09-30 17:12:01 +01:00
Kconfig.siwx91x drivers: clock: Add dumb clock driver for SiWx91x 2025-02-11 22:07:11 +01:00
Kconfig.smartbond dts/bindings/renesas,smartbond-lp-osc: Substitute calibration-interval 2024-05-21 18:43:43 +02:00
Kconfig.stm32 drivers: clock_control: stm32: don't enable RUNTIME_NMI all the time 2025-05-28 15:38:31 +02:00
Kconfig.wch_rcc drivers: add the ch32v00x clock controller 2024-11-26 14:41:46 +00:00
Kconfig.xec
nrf_clock_calibration.c driver: clock_control: Add to nrf clock control calib in progres API 2024-12-12 16:21:11 +01:00
nrf_clock_calibration.h