From 36a1e64bc8414029324cb4e8a4828c13c170f3fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Chru=C5=9Bci=C5=84ski?= Date: Wed, 11 Dec 2024 12:55:57 +0100 Subject: [PATCH] [nrf fromlist] drivers: clock_control: nrf: Add helper macro for getting clock frequency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add NRF_PERIPH_GET_FREQUENCY() that returns the frequency of clock that is used for the node. Upstream PR #: 82133 Signed-off-by: Krzysztof Chruściński --- .../drivers/clock_control/nrf_clock_control.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/zephyr/drivers/clock_control/nrf_clock_control.h b/include/zephyr/drivers/clock_control/nrf_clock_control.h index 2578feffd2b..27ab518920f 100644 --- a/include/zephyr/drivers/clock_control/nrf_clock_control.h +++ b/include/zephyr/drivers/clock_control/nrf_clock_control.h @@ -319,6 +319,25 @@ int nrf_clock_control_cancel_or_release(const struct device *dev, #endif /* defined(CONFIG_CLOCK_CONTROL_NRF2) */ +/** @brief Get clock frequency that is used for the given node. + * + * Macro checks if node has clock property and if yes then if clock has clock_frequency property + * then it is returned. If it has supported_clock_frequency property with the list of supported + * frequencies then the last one is returned with assumption that they are ordered and the last + * one is the highest. If node does not have clock then 16 MHz is returned which is the default + * frequency. + * + * @param node Devicetree node. + * + * @return Frequency of the clock that is used for the node. + */ +#define NRF_PERIPH_GET_FREQUENCY(node) \ + COND_CODE_1(DT_CLOCKS_HAS_IDX(node, 0), \ + (COND_CODE_1(DT_NODE_HAS_PROP(DT_CLOCKS_CTLR(node), clock_frequency), \ + (DT_PROP(DT_CLOCKS_CTLR(node), clock_frequency)), \ + (DT_PROP_LAST(DT_CLOCKS_CTLR(node), supported_clock_frequency)))), \ + (DT_PROP_OR(node, max_frequency, NRFX_MHZ_TO_HZ(16)))) + #ifdef __cplusplus } #endif