From 9b864920b64918f9ac894afc541723b538045622 Mon Sep 17 00:00:00 2001 From: Declan Snyder Date: Fri, 19 Sep 2025 17:15:57 -0500 Subject: [PATCH 1/3] include: clock_control: Add generic macros for clock consumers Add generic macros for clock consumer to get arbitrary data from DT clocks specifiers that doesn't need to leak implementation details. This is an attempt of unification of clock control drivers but will require clock control drivers to actually all switch to using the clock_control_dt_spec as their clock_control_subsys_t, and for clock consumers to actually use the opaque macros. However, nobody is actually forced to use these macros (at least, not any more than they are already forced to couple to driver-specific subsys structure), it's just they should switch if they want to reap the benefit of the unification. Signed-off-by: Declan Snyder --- include/zephyr/drivers/clock_control.h | 187 +++++++++++++++++++++++++ 1 file changed, 187 insertions(+) diff --git a/include/zephyr/drivers/clock_control.h b/include/zephyr/drivers/clock_control.h index d09daf9638604..323986618e5df 100644 --- a/include/zephyr/drivers/clock_control.h +++ b/include/zephyr/drivers/clock_control.h @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -51,6 +52,28 @@ enum clock_control_status { CLOCK_CONTROL_STATUS_UNKNOWN }; +/** @cond INTERNAL_HIDDEN */ + +/* This is a useful way to encode opaque data, this is private structure not part of API */ +struct clock_control_dt_spec { + uint32_t *cells; /* the cells in the DT phandle specifier */ + size_t len; /* the number of cells in the DT phandle specifier */ +}; + +#define ZPRIV_CLOCK_CONTROL_DT_DEFINE(node_id, prop, idx) \ + static uint32_t _CONCAT_6(zpriv_clock_control_cells_, node_id, _, prop, _, idx) = { \ + DT_FOREACH_PHA_CELL_BY_IDX_SEP(node_id, prop, idx, DT_PHA_BY_IDX, (,)) \ + }; \ + static struct clock_control_dt_spec \ + _CONCAT_6(zpriv_clock_control_, node_id, _, prop, _, idx) = { \ + .cells = \ + &(_CONCAT_6(zpriv_clock_control_cells_, node_id, _, prop, _, idx)), \ + .len = DT_PHA_NUM_CELLS_BY_IDX(node_id, prop, idx), \ + } /* intentionally require semicolon */ + +/** @endcond */ + + /** * clock_control_subsys_t is a type to identify a clock controller sub-system. * Such data pointed is opaque and relevant only to the clock controller @@ -66,6 +89,170 @@ typedef void *clock_control_subsys_t; */ typedef void *clock_control_subsys_rate_t; + +/** + * @brief Static initializer for a @p clock_control_subsys_t from devicetree + * + * This returns a static initializer for a @p clock_control_subsys_t value given a devicetree node + * identifier, a property specifying a clock controller and an index into that property. + * + * @param node_id devicetree node identifier + * @param prop lowercase-and-underscores property name + * @param idx logical index into "prop" + */ +#define CLOCK_CONTROL_DT_SPEC_DEFINE_BY_IDX(node_id, prop, idx) \ + ZPRIV_CLOCK_CONTROL_DT_DEFINE(node_id, prop, idx) + +/** + * @brief Static initializer for a @p clock_control_subsys_t from devicetree + * + * This returns a static initializer for a @p clock_control_subsys_t value given a devicetree node + * identifier, a property specifying a clock controller and a name of a specifier in that property. + * Property must have clock-names. + * + * @param node_id devicetree node identifier + * @param prop lowercase-and-underscores property name + * @param name lowercase-and-underscores name of a specifier in "prop" + */ +#define CLOCK_CONTROL_DT_SPEC_DEFINE_BY_NAME(node_id, prop, name) \ + ZPRIV_CLOCK_CONTROL_DT_DEFINE(node_id, prop, DT_PHA_ELEM_IDX_BY_NAME(node_id, prop, name)) + +/** + * @brief Static initializer for a @p clock_control_subsys_t from devicetree + * + * This returns a static initializer for a @p clock_control_subsys_t value given a devicetree node + * identifier and a property specifying a clock controller. + * + * This is equivalent to CLOCK_CONTROL_DT_SPEC_DEFINE_BY_IDX(node_id, prop, 0). + * + * @param node_id devicetree node identifier + * @param prop lowercase-and-underscores property name + */ +#define CLOCK_CONTROL_DT_SPEC_DEFINE(node_id, prop) \ + ZPRIV_CLOCK_CONTROL_DT_DEFINE(node_id, prop, 0) + +/** + * @brief Static initializer for a @p clock_control_subsys_t from devicetree instance + * + * This is equivalent to + * CLOCK_CONTROL_DT_SPEC_DEFINE_BY_IDX(DT_DRV_INST(inst), prop, idx). + * + * @param inst DT_DRV_COMPAT instance number + * @param prop lowercase-and-underscores property name + * @param idx logical index into "prop" + */ +#define CLOCK_CONTROL_DT_SPEC_INST_DEFINE_BY_IDX(inst, prop, idx) \ + CLOCK_CONTROL_DT_SPEC_DEFINE_BY_IDX(DT_DRV_INST(inst), prop, idx) + +/** + * @brief Static initializer for a @p clock_control_subsys_t from devicetree instance + * + * This is equivalent to + * CLOCK_CONTROL_DT_SPEC_DEFINE_BY_NAME(DT_DRV_INST(inst), prop, name). + * + * @param inst DT_DRV_COMPAT instance number + * @param prop lowercase-and-underscores property name + * @param name lowercase-and-underscores name of a specifier in "prop" + */ +#define CLOCK_CONTROL_DT_SPEC_INST_DEFINE_BY_NAME(inst, prop, name) \ + CLOCK_CONTROL_DT_SPEC_DEFINE_BY_NAME(DT_DRV_INST(inst), prop, name) + +/** + * @brief Static initializer for a @p clock_control_subsys_t from devicetree instance + * + * This is equivalent to + * CLOCK_CONTROL_DT_SPEC_DEFINE(DT_DRV_INST(inst), prop). + * + * @param inst DT_DRV_COMPAT instance number + * @param prop lowercase-and-underscores property name + */ +#define CLOCK_CONTROL_DT_SPEC_INST_DEFINE(inst, prop) \ + CLOCK_CONTROL_DT_SPEC_DEFINE(DT_DRV_INST(inst), prop) + +/** + * @brief Get a @p clock_control_subsys_t for a devicetree node + * + * This returns a @p clock_control_subsys_t for the clock controller phandle at + * index "idx". + * + * @param node_id devicetree node identifier + * @param prop lowercase-and-underscores property name + * @param idx logical index into "prop" + * @return clock_control_subsys_t with the given information + */ +#define CLOCK_CONTROL_DT_SPEC_GET_BY_IDX(node_id, prop, idx) \ + (clock_control_subsys_t) &(_CONCAT_6(zpriv_clock_control_, node_id, _, prop, _, idx)) + +/** + * @brief Get a @p clock_control_subsys_t for a devicetree node + * + * This returns a @p clock_control_subsys_t for the clock controller phandle at + * the element named "name". Property must have clock-names. + * + * @param node_id devicetree node identifier + * @param prop lowercase-and-underscores property name + * @param name lowercase-and-underscores name of a specifier in "prop" + * @return clock_control_subsys_t with the given information + */ +#define CLOCK_CONTROL_DT_SPEC_GET_BY_NAME(node_id, prop, name) \ + CLOCK_CONTROL_DT_SPEC_GET_BY_IDX(node_id, prop, \ + DT_PHA_ELEM_IDX_BY_NAME(node_id, prop, name)) + +/** + * @brief Get a @p clock_control_subsys_t for a devicetree node + * + * This returns a @p clock_control_subsys_t for the clock controller phandle at + * index 0. + * + * @param node_id devicetree node identifier + * @param prop lowercase-and-underscores property name + * @return clock_control_subsys_t with the given information + */ +#define CLOCK_CONTROL_DT_SPEC_GET(node_id, prop) \ + CLOCK_CONTROL_DT_SPEC_GET_BY_IDX(node_id, prop, 0) + +/** + * @brief Get a @p clock_control_subsys_t for a devicetree instance + * + * This is equivalent to + * CLOCK_CONTROL_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst), prop, idx). + * + * @param inst DT_DRV_COMPAT instance number + * @param prop lowercase-and-underscores property name + * @param idx logical index into "prop" + * @return clock_control_subsys_t with the given information + */ +#define CLOCK_CONTROL_DT_SPEC_INST_GET_BY_IDX(inst, prop, idx) \ + CLOCK_CONTROL_DT_SPEC_GET_BY_IDX(DT_DRV_INST(inst), prop, idx) + +/** + * @brief Get a @p clock_control_subsys_t for a devicetree instance + * + * This is equivalent to + * CLOCK_CONTROL_DT_SPEC_GET_BY_NAME(DT_DRV_INST(inst), prop, name). + * + * @param inst DT_DRV_COMPAT instance number + * @param prop lowercase-and-underscores property name + * @param name lowercase-and-underscores name of a specifier in "prop" + * @return clock_control_subsys_t with the given information + */ +#define CLOCK_CONTROL_DT_SPEC_INST_GET_BY_NAME(inst, prop, name) \ + CLOCK_CONTROL_DT_SPEC_GET_BY_NAME(DT_DRV_INST(inst), prop, name) + +/** + * @brief Get a @p clock_control_subsys_t for a devicetree instance + * + * This is equivalent to + * CLOCK_CONTROL_DT_SPEC_GET(DT_DRV_INST(inst), prop). + * + * @param inst DT_DRV_COMPAT instance number + * @param prop lowercase-and-underscores property name + * @return clock_control_subsys_t with the given information + */ +#define CLOCK_CONTROL_DT_SPEC_INST_GET(inst, prop) \ + CLOCK_CONTROL_DT_SPEC_GET(DT_DRV_INST(inst), prop) + + /** @brief Callback called on clock started. * * @param dev Device structure whose driver controls the clock. From a190843451cb311f06bfabdb4d9222f50543a028 Mon Sep 17 00:00:00 2001 From: Declan Snyder Date: Fri, 19 Sep 2025 18:25:29 -0500 Subject: [PATCH 2/3] drivers: nxp: Convert to unified clock control macros Convert NXP clock control drivers and clock consumer drivers to the new unified macros. This has to be all in one commit because it is very hard to make it bisectable otherwise. This is because many of the drivers are actually benefitting from these macros due to they have a bunch of code that is coupling to multiple different consumers and so forth. NOTE: right now this commit is only containing clock driver changes, not consumers. And they are not finished Signed-off-by: Declan Snyder --- .../clock_control/clock_control_mcux_sim.c | 36 ++++++++++ .../clock_control/clock_control_mcux_syscon.c | 65 +++++++++++++++++-- drivers/serial/uart_mcux_flexcomm.c | 5 +- 3 files changed, 99 insertions(+), 7 deletions(-) diff --git a/drivers/clock_control/clock_control_mcux_sim.c b/drivers/clock_control/clock_control_mcux_sim.c index 5b354b99a83fa..cbd3792325761 100644 --- a/drivers/clock_control/clock_control_mcux_sim.c +++ b/drivers/clock_control/clock_control_mcux_sim.c @@ -15,6 +15,42 @@ #include LOG_MODULE_REGISTER(clock_control); +struct kinetis_sim_spec { + uint32_t name; + uint32_t offset; + uint32_t bits; +}; + +static int kinetis_sim_get_spec(clock_control_subsys_t subsys, struct kinetis_sim_spec *spec) +{ + struct clock_control_dt_spec *dt_spec = subsys; + + if (dt_spec->len != 3) { + return -EINVAL; + } + + spec->name = dt_spec->cells[0]; + spec->offset = dt_spec->cells[1]; + spec->bits = dt_spec->cells[2]; + + return 0; +} + +static int kinetis_sim_get_key(clock_control_subsys_t subsys, uint32_t *key) +{ + struct kinetis_sim_spec spec; + int ret; + + ret = kinetis_sim_get_spec(subsys, &spec); + if (ret) { + return ret; + } + + *key = CLK_GATE_DEFINE(spec.offset, spec.bits); + + return 0; +} + static int mcux_sim_on(const struct device *dev, clock_control_subsys_t sub_system) { diff --git a/drivers/clock_control/clock_control_mcux_syscon.c b/drivers/clock_control/clock_control_mcux_syscon.c index 4887b189937ae..c4bb1c46cfe65 100644 --- a/drivers/clock_control/clock_control_mcux_syscon.c +++ b/drivers/clock_control/clock_control_mcux_syscon.c @@ -15,9 +15,48 @@ #include LOG_MODULE_REGISTER(clock_control); +struct lpc_syscon_spec { + uint32_t name; +}; + +static int lpc_syscon_get_spec(clock_control_subsys_t subsys, struct lpc_syscon_spec *spec) +{ + struct clock_control_dt_spec *dt_spec = subsys; + + if (dt_spec->len != 1) { + return -EINVAL; + } + + spec->name = *(dt_spec->cells); + + return 0; +} + +static int lpc_syscon_get_name(clock_control_subsys_t dt_spec, uint32_t *name) +{ + struct lpc_syscon_spec spec; + int ret; + + ret = lpc_syscon_get_spec(dt_spec, &spec); + if (ret) { + return ret; + } + + *name = spec.name; + + return 0; +} + static int mcux_lpc_syscon_clock_control_on(const struct device *dev, - clock_control_subsys_t sub_system) + clock_control_subsys_t subsys) { + uint32_t sub_system; + + lpc_syscon_get_name(subsys, &sub_system); + if (ret) { + return ret; + } + #if defined(CONFIG_CAN_MCUX_MCAN) if ((uint32_t)sub_system == MCUX_MCAN_CLK) { CLOCK_EnableClock(kCLOCK_Mcan); @@ -149,7 +188,12 @@ static int mcux_lpc_syscon_clock_control_get_subsys_rate(const struct device *de clock_control_subsys_t sub_system, uint32_t *rate) { - uint32_t clock_name = (uint32_t)sub_system; + uint32_t clock_name = 0; + + lpc_syscon_get_name(sub_system, &clock_name); + if (ret) { + return ret; + } switch (clock_name) { @@ -602,9 +646,14 @@ __weak int flexspi_clock_set_freq(uint32_t clock_name, uint32_t freq) static int SYSCON_SET_FUNC_ATTR mcux_lpc_syscon_clock_control_set_subsys_rate( const struct device *dev, clock_control_subsys_t subsys, clock_control_subsys_rate_t rate) { - uint32_t clock_name = (uintptr_t)subsys; + uint32_t clock_name; uint32_t clock_rate = (uintptr_t)rate; + lpc_syscon_get_name(subsys, &clock_name); + if (ret) { + return ret; + } + switch (clock_name) { case MCUX_FLEXSPI_CLK: #if defined(CONFIG_MEMC) @@ -632,10 +681,16 @@ static int SYSCON_SET_FUNC_ATTR mcux_lpc_syscon_clock_control_set_subsys_rate( static int mcux_lpc_syscon_clock_control_configure(const struct device *dev, clock_control_subsys_t sub_system, void *data) { + uint32_t clock_name = 0; + int flexcomm_num = -1; + + lpc_syscon_get_name(sub_system, &clock_name); + if (ret) { + return ret; + } + #ifdef CONFIG_SOC_SERIES_RW6XX #define FLEXCOMM_LP_CLK_DECODE(n) (n & 0x80) - uint32_t clock_name = (uint32_t)sub_system; - int flexcomm_num = -1; switch (clock_name) { case MCUX_FLEXCOMM0_CLK: diff --git a/drivers/serial/uart_mcux_flexcomm.c b/drivers/serial/uart_mcux_flexcomm.c index 08a1c1edb28bc..d8fee6963d478 100644 --- a/drivers/serial/uart_mcux_flexcomm.c +++ b/drivers/serial/uart_mcux_flexcomm.c @@ -1417,8 +1417,7 @@ static void serial_mcux_flexcomm_##n##_pm_exit(enum pm_state state) \ static const struct mcux_flexcomm_config mcux_flexcomm_##n##_config = { \ .base = (USART_Type *)DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .baud_rate = DT_INST_PROP(n, current_speed), \ .parity = DT_INST_ENUM_IDX(n, parity), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ @@ -1438,6 +1437,8 @@ static struct mcux_flexcomm_data mcux_flexcomm_##n##_data = { \ \ PINCTRL_DT_INST_DEFINE(n); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ UART_MCUX_FLEXCOMM_PM_UNLOCK_FUNC_DEFINE(n) \ UART_MCUX_FLEXCOMM_WAKEUP_CFG_DEFINE(n) \ UART_MCUX_FLEXCOMM_PM_HANDLES_DEFINE(n) \ From c84b6aeb530aa12345af0ca59e16ace02897233d Mon Sep 17 00:00:00 2001 From: Declan Snyder Date: Fri, 19 Sep 2025 22:23:18 -0500 Subject: [PATCH 3/3] WIP converting NXP clock consumers there might be some copy paste mistakes and stuff, it's just a concept commit at the moment this one will be squashed into the previous one for bisectability --- drivers/adc/adc_mcux_lpadc.c | 3 ++- drivers/audio/dmic_mcux.c | 4 ++-- drivers/can/can_mcux_flexcan.c | 5 +++-- drivers/can/can_mcux_mcan.c | 3 ++- drivers/counter/counter_mcux_ctimer.c | 4 ++-- drivers/counter/counter_mcux_ftm.c | 3 ++- drivers/counter/counter_mcux_lpit.c | 5 ++++- drivers/counter/counter_mcux_qtmr.c | 3 ++- drivers/counter/counter_mcux_tpm.c | 3 ++- drivers/counter/counter_nxp_mrt.c | 6 ++++-- drivers/counter/counter_nxp_pit.c | 6 ++++-- drivers/ethernet/eth_nxp_enet.c | 6 ++++-- .../eth_nxp_enet_qos/eth_nxp_enet_qos.c | 3 ++- drivers/gpio/gpio_lpc11u6x.c | 4 +++- drivers/i2c/i2c_lpc11u6x.c | 4 +++- drivers/i2c/i2c_mcux_flexcomm.c | 4 ++-- drivers/i2c/i2c_mcux_lpi2c.c | 4 ++-- drivers/i2c/i2c_mcux_lpi2c_rtio.c | 4 +++- drivers/i2c/i2c_nxp_ii2c.c | 4 ++-- drivers/i2s/i2s_mcux_sai.c | 4 +++- drivers/i3c/i3c_mcux.c | 3 ++- drivers/input/input_mcux_kpp.c | 5 +++-- drivers/mdio/mdio_nxp_enet.c | 4 ++-- drivers/mdio/mdio_nxp_enet_qos.c | 3 +++ drivers/mdio/mdio_nxp_imx_netc.c | 3 ++- drivers/memc/memc_mcux_flexspi.c | 4 ++-- drivers/mipi_dbi/mipi_dbi_nxp_lcdic.c | 2 ++ drivers/mipi_dsi/dsi_mcux_2l.c | 9 ++++++--- drivers/misc/mcux_flexio/mcux_flexio.c | 5 +++-- drivers/pinctrl/pinctrl_nxp_port.c | 17 ++--------------- drivers/pwm/pwm_mcux.c | 3 ++- drivers/pwm/pwm_mcux_ctimer.c | 3 ++- drivers/pwm/pwm_mcux_ftm.c | 4 ++-- drivers/pwm/pwm_mcux_pwt.c | 3 +++ drivers/pwm/pwm_mcux_qtmr.c | 3 ++- drivers/pwm/pwm_mcux_sctimer.c | 3 ++- drivers/pwm/pwm_mcux_tpm.c | 4 ++-- drivers/pwm/pwm_nxp_flexio.c | 3 ++- drivers/sdhc/imx_usdhc.c | 4 +++- drivers/sdhc/mcux_sdif.c | 4 +++- drivers/serial/uart_lpc11u6x.c | 7 +++++-- drivers/serial/uart_mcux.c | 3 ++- drivers/serial/uart_mcux_iuart.c | 4 +++- drivers/serial/uart_mcux_lpsci.c | 4 +++- drivers/serial/uart_mcux_lpuart.c | 3 ++- drivers/spi/spi_mcux_dspi.c | 3 ++- drivers/spi/spi_mcux_ecspi.c | 3 ++- drivers/spi/spi_mcux_flexcomm.c | 3 ++- drivers/spi/spi_nxp_lpspi/spi_nxp_lpspi_priv.h | 3 ++- drivers/video/video_mcux_mipi_csi2rx.c | 8 +++++--- drivers/watchdog/wdt_mcux_rtwdog.c | 3 ++- drivers/watchdog/wdt_mcux_wdog.c | 5 +++-- drivers/watchdog/wdt_mcux_wdog32.c | 4 +++- 53 files changed, 139 insertions(+), 85 deletions(-) diff --git a/drivers/adc/adc_mcux_lpadc.c b/drivers/adc/adc_mcux_lpadc.c index 7804bdec94bd9..cea44408a6b0c 100644 --- a/drivers/adc/adc_mcux_lpadc.c +++ b/drivers/adc/adc_mcux_lpadc.c @@ -562,6 +562,7 @@ static DEVICE_API(adc, mcux_lpadc_driver_api) = { static void mcux_lpadc_config_func_##n(const struct device *dev); \ \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static const struct mcux_lpadc_config mcux_lpadc_config_##n = { \ .base = (ADC_Type *)DT_INST_REG_ADDR(n), \ .voltage_ref = DT_INST_PROP(n, voltage_ref), \ @@ -575,7 +576,7 @@ static DEVICE_API(adc, mcux_lpadc_driver_api) = { (DEVICE_DT_GET(DT_PHANDLE(DT_DRV_INST(n),\ nxp_references))), (NULL)),\ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks),\ .ref_supply_val = COND_CODE_1(\ DT_INST_NODE_HAS_PROP(n, nxp_references),\ (DT_PHA(DT_DRV_INST(n), nxp_references, vref_mv)), \ diff --git a/drivers/audio/dmic_mcux.c b/drivers/audio/dmic_mcux.c index 751ecaba04a69..9985ecae284ae 100644 --- a/drivers/audio/dmic_mcux.c +++ b/drivers/audio/dmic_mcux.c @@ -709,11 +709,11 @@ static const struct _dmic_ops dmic_ops = { }; \ \ PINCTRL_DT_INST_DEFINE(idx); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(idx, clocks); \ static struct mcux_dmic_cfg mcux_dmic_cfg##idx = { \ .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(idx)), \ - .clock_name = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(idx, name), \ + .clock_name = CLOCK_CONTROL_DT_SPEC_INST_GET(idx, clocks), \ .use2fs = DT_INST_PROP(idx, use2fs), \ }; \ \ diff --git a/drivers/can/can_mcux_flexcan.c b/drivers/can/can_mcux_flexcan.c index e3a8caac98916..f145a937a6f59 100644 --- a/drivers/can/can_mcux_flexcan.c +++ b/drivers/can/can_mcux_flexcan.c @@ -1425,6 +1425,8 @@ static DEVICE_API(can, mcux_flexcan_fd_driver_api) = { #define FLEXCAN_DEVICE_INIT_MCUX(id) \ PINCTRL_DT_INST_DEFINE(id); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, clocks); \ + \ static void mcux_flexcan_irq_config_##id(const struct device *dev); \ static void mcux_flexcan_irq_enable_##id(void); \ static void mcux_flexcan_irq_disable_##id(void); \ @@ -1433,8 +1435,7 @@ static DEVICE_API(can, mcux_flexcan_fd_driver_api) = { DEVICE_MMIO_NAMED_ROM_INIT(flexcan_mmio, DT_DRV_INST(id)), \ .common = CAN_DT_DRIVER_CONFIG_INST_GET(id, 0, FLEXCAN_MAX_BITRATE(id)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(id)), \ - .clock_subsys = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(id, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(id, clocks), \ .clk_source = DT_INST_PROP(id, clk_source), \ IF_ENABLED(CONFIG_CAN_MCUX_FLEXCAN_FD, ( \ .flexcan_fd = DT_INST_NODE_HAS_COMPAT(id, FLEXCAN_FD_DRV_COMPAT), \ diff --git a/drivers/can/can_mcux_mcan.c b/drivers/can/can_mcux_mcan.c index a5bfe0d724608..85bac77e3a497 100644 --- a/drivers/can/can_mcux_mcan.c +++ b/drivers/can/can_mcux_mcan.c @@ -195,6 +195,7 @@ static const struct can_mcan_ops mcux_mcan_ops = { #define MCUX_MCAN_INIT(n) \ CAN_MCAN_DT_INST_BUILD_ASSERT_MRAM_CFG(n); \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static void mcux_mcan_irq_config_##n(const struct device *dev); \ \ @@ -206,7 +207,7 @@ static const struct can_mcan_ops mcux_mcan_ops = { .mram = (mem_addr_t)POINTER_TO_UINT(&mcux_mcan_mram_##n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(n, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = mcux_mcan_irq_config_##n, \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .reset = RESET_DT_SPEC_INST_GET(n), \ diff --git a/drivers/counter/counter_mcux_ctimer.c b/drivers/counter/counter_mcux_ctimer.c index a77b64b969466..9248417bf9a57 100644 --- a/drivers/counter/counter_mcux_ctimer.c +++ b/drivers/counter/counter_mcux_ctimer.c @@ -318,6 +318,7 @@ static DEVICE_API(counter, mcux_ctimer_driver_api) = { #define COUNTER_LPC_CTIMER_DEVICE(id) \ static void mcux_lpc_ctimer_irq_config_##id(const struct device *dev); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, clocks); \ static struct mcux_lpc_ctimer_config mcux_lpc_ctimer_config_##id = { \ .info = { \ .max_top_value = UINT32_MAX, \ @@ -326,8 +327,7 @@ static DEVICE_API(counter, mcux_ctimer_driver_api) = { },\ .base = (CTIMER_Type *)DT_INST_REG_ADDR(id), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(id)), \ - .clock_subsys = \ - (clock_control_subsys_t)(DT_INST_CLOCKS_CELL(id, name)),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(id, clocks),\ .mode = DT_INST_PROP(id, mode), \ .input = DT_INST_PROP(id, input), \ .prescale = DT_INST_PROP(id, prescale), \ diff --git a/drivers/counter/counter_mcux_ftm.c b/drivers/counter/counter_mcux_ftm.c index c82b382731349..dedd7be7c5b76 100644 --- a/drivers/counter/counter_mcux_ftm.c +++ b/drivers/counter/counter_mcux_ftm.c @@ -170,6 +170,7 @@ static DEVICE_API(counter, mcux_ftm_driver_api) = { #define COUNTER_MCUX_FTM_DEVICE_INIT(n) \ static struct mcux_ftm_data mcux_ftm_data_##n; \ static void mcux_ftm_irq_config_##n(const struct device *dev); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static const struct mcux_ftm_config mcux_ftm_config_##n = { \ .info = \ @@ -179,7 +180,7 @@ static DEVICE_API(counter, mcux_ftm_driver_api) = { }, \ .base = (FTM_Type *)DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .ftm_clock_source = (ftm_clock_source_t)(DT_INST_ENUM_IDX(n, clock_source) + 1U), \ .prescale = TO_FTM_PRESCALE_DIVIDE(DT_INST_PROP(n, prescaler)), \ .irq_config_func = mcux_ftm_irq_config_##n, \ diff --git a/drivers/counter/counter_mcux_lpit.c b/drivers/counter/counter_mcux_lpit.c index e2b818ffa6eeb..68b970949af6e 100644 --- a/drivers/counter/counter_mcux_lpit.c +++ b/drivers/counter/counter_mcux_lpit.c @@ -235,6 +235,9 @@ static DEVICE_API(counter, mcux_lpit_driver_api) = { #define COUNTER_MCUX_LPIT_DEVICE_INIT(n) \ \ /* Setup the IRQ either for parent irq or per channel irq */ \ + MCUX_LPIT_SETUP_IRQ_CONFIG(n) \ + \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ MCUX_LPIT_SETUP_IRQ_CONFIG(n) \ \ /* Create channel declarations */ \ @@ -277,7 +280,7 @@ static DEVICE_API(counter, mcux_lpit_driver_api) = { .num_channels = DT_INST_FOREACH_CHILD_SEP_VARGS(n, DT_NODE_HAS_COMPAT, (+), \ nxp_lpit_channel), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .data = mcux_lpit_##n##_channel_datas, \ .channels = mcux_lpit_##n##_channels, \ }; \ diff --git a/drivers/counter/counter_mcux_qtmr.c b/drivers/counter/counter_mcux_qtmr.c index 7deb027b7dba3..da4cbb4d4c694 100644 --- a/drivers/counter/counter_mcux_qtmr.c +++ b/drivers/counter/counter_mcux_qtmr.c @@ -302,13 +302,14 @@ static DEVICE_API(counter, mcux_qtmr_driver_api) = { }; #define TMR_DEVICE_INIT_MCUX(n) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static struct mcux_qtmr_data mcux_qtmr_data_ ## n; \ \ static const struct mcux_qtmr_config mcux_qtmr_config_ ## n = { \ .base = (void *)DT_REG_ADDR(DT_INST_PARENT(n)), \ .clock_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(DT_INST_PARENT(n))), \ .clock_subsys = \ - (clock_control_subsys_t)DT_CLOCKS_CELL(DT_INST_PARENT(n), name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .info = { \ .max_top_value = UINT16_MAX, \ .freq = DT_INST_PROP_OR(n, freq, 0), \ diff --git a/drivers/counter/counter_mcux_tpm.c b/drivers/counter/counter_mcux_tpm.c index 059b057ada2a1..8e780833c0a79 100644 --- a/drivers/counter/counter_mcux_tpm.c +++ b/drivers/counter/counter_mcux_tpm.c @@ -271,12 +271,13 @@ static DEVICE_API(counter, mcux_tpm_driver_api) = { #define TPM_DEVICE_INIT_MCUX(n) \ static struct mcux_tpm_data mcux_tpm_data_ ## n; \ static void mcux_tpm_irq_config_ ## n(void); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static const struct mcux_tpm_config mcux_tpm_config_ ## n = { \ DEVICE_MMIO_NAMED_ROM_INIT(tpm_mmio, DT_DRV_INST(n)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .tpm_clock_source = kTPM_SystemClock, \ .prescale = TO_TPM_PRESCALE_DIVIDE(DT_INST_PROP(n, prescaler)), \ .info = { \ diff --git a/drivers/counter/counter_nxp_mrt.c b/drivers/counter/counter_nxp_mrt.c index b08a6765fc42c..41ba3aea24cb9 100644 --- a/drivers/counter/counter_nxp_mrt.c +++ b/drivers/counter/counter_nxp_mrt.c @@ -338,6 +338,9 @@ DEVICE_API(counter, nxp_mrt_api) = { /* Initialize all the data structs for active channels */ \ DT_INST_FOREACH_CHILD_STATUS_OKAY(n, NXP_MRT_CHANNEL_DATA_INIT) \ \ + /* Define clock control subsystem */ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ /* Create an array of const pointers to the data structs */ \ static struct nxp_mrt_channel_data *const nxp_mrt_##n##_channel_datas \ [DT_INST_PROP(n, num_channels)] = { \ @@ -367,8 +370,7 @@ DEVICE_API(counter, nxp_mrt_api) = { }, \ .base = (MRT_Type *)DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = nxp_mrt_##n##_irq_config_func, \ .data = nxp_mrt_##n##_channel_datas, \ .channels = nxp_mrt_##n##_channels, \ diff --git a/drivers/counter/counter_nxp_pit.c b/drivers/counter/counter_nxp_pit.c index a8fac38b879c6..94efffa827294 100644 --- a/drivers/counter/counter_nxp_pit.c +++ b/drivers/counter/counter_nxp_pit.c @@ -311,6 +311,9 @@ static DEVICE_API(counter, nxp_pit_driver_api) = { #define COUNTER_NXP_PIT_DEVICE_INIT(n) \ \ /* Setup the IRQ either for parent irq or per channel irq */ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ + /* Setup the IRQ either for parent irq or per channel irq */ \ NXP_PIT_SETUP_IRQ_CONFIG(n) \ \ /* Create channel declarations */ \ @@ -359,8 +362,7 @@ static DEVICE_API(counter, nxp_pit_driver_api) = { .num_channels = DT_INST_FOREACH_CHILD_SEP_VARGS( \ n, DT_NODE_HAS_COMPAT, (+), nxp_pit_channel), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .data = nxp_pit_##n##_channel_datas, \ .channels = nxp_pit_##n##_channels, \ }; \ diff --git a/drivers/ethernet/eth_nxp_enet.c b/drivers/ethernet/eth_nxp_enet.c index a19b3ec3f7ebb..48a43a92cf4d2 100644 --- a/drivers/ethernet/eth_nxp_enet.c +++ b/drivers/ethernet/eth_nxp_enet.c @@ -936,6 +936,8 @@ BUILD_ASSERT(NXP_ENET_PHY_MODE(DT_DRV_INST(n)) != NXP_ENET_RGMII_MODE || \ \ NXP_ENET_FRAMEINFO_ARRAY(n) \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ static void nxp_enet_##n##_irq_config_func(void) \ { \ DT_INST_FOREACH_PROP_ELEM(n, interrupt_names, \ @@ -965,8 +967,8 @@ BUILD_ASSERT(NXP_ENET_PHY_MODE(DT_DRV_INST(n)) != NXP_ENET_RGMII_MODE || \ const struct nxp_enet_mac_config nxp_enet_##n##_config = { \ .irq_config_func = nxp_enet_##n##_irq_config_func, \ .module_dev = DEVICE_DT_GET(DT_INST_PARENT(n)), \ - .clock_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(DT_INST_PARENT(n))), \ - .clock_subsys = (void *)DT_CLOCKS_CELL_BY_IDX( \ + .clock_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(DT_DRV_INST(n))), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ DT_INST_PARENT(n), 0, name), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .buffer_config = {{ \ diff --git a/drivers/ethernet/eth_nxp_enet_qos/eth_nxp_enet_qos.c b/drivers/ethernet/eth_nxp_enet_qos/eth_nxp_enet_qos.c index aa89232a56001..95cc5f10b0a44 100644 --- a/drivers/ethernet/eth_nxp_enet_qos/eth_nxp_enet_qos.c +++ b/drivers/ethernet/eth_nxp_enet_qos/eth_nxp_enet_qos.c @@ -29,11 +29,12 @@ int nxp_enet_qos_init(const struct device *dev) #define NXP_ENET_QOS_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static const struct nxp_enet_qos_config enet_qos_##n##_config = { \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (void *)DT_INST_CLOCKS_CELL_BY_IDX(n, 0, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .base = (enet_qos_t *)DT_INST_REG_ADDR(n), \ }; \ \ diff --git a/drivers/gpio/gpio_lpc11u6x.c b/drivers/gpio/gpio_lpc11u6x.c index ac290187ae43c..45a25657da184 100644 --- a/drivers/gpio/gpio_lpc11u6x.c +++ b/drivers/gpio/gpio_lpc11u6x.c @@ -499,9 +499,11 @@ static DEVICE_API(gpio, gpio_lpc11u6x_driver_api) = { * shared between all the ports (IRQ lines, clock). */ +CLOCK_CONTROL_DT_SPEC_INST_DEFINE(0, clocks); + static const struct gpio_lpc11u6x_shared gpio_lpc11u6x_shared = { .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(0)), - .clock_subsys = (clock_control_subsys_t) DT_INST_PHA(0, clocks, clkid), + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(0, clocks), .gpio_base = DT_INST_REG_ADDR_BY_IDX(0, 0), .syscon_base = DT_INST_REG_ADDR_BY_IDX(0, 1), .nirqs = DT_NUM_IRQS(DT_DRV_INST(0)), diff --git a/drivers/i2c/i2c_lpc11u6x.c b/drivers/i2c/i2c_lpc11u6x.c index a00ac10dd5c6f..7cec40793d462 100644 --- a/drivers/i2c/i2c_lpc11u6x.c +++ b/drivers/i2c/i2c_lpc11u6x.c @@ -354,6 +354,8 @@ static DEVICE_API(i2c, i2c_api) = { \ static void lpc11u6x_i2c_isr_config_##idx(const struct device *dev); \ \ +CLOCK_CONTROL_DT_SPEC_INST_DEFINE(idx, clocks); \ + \ PINCTRL_DT_INST_DEFINE(idx); \ \ static const struct lpc11u6x_i2c_config i2c_cfg_##idx = { \ @@ -362,7 +364,7 @@ static const struct lpc11u6x_i2c_config i2c_cfg_##idx = { \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(idx)), \ .irq_config_func = lpc11u6x_i2c_isr_config_##idx, \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \ - .clkid = DT_INST_PHA_BY_IDX(idx, clocks, 0, clkid), \ + .clkid = CLOCK_CONTROL_DT_SPEC_INST_GET(idx, clocks), \ }; \ \ static struct lpc11u6x_i2c_data i2c_data_##idx; \ diff --git a/drivers/i2c/i2c_mcux_flexcomm.c b/drivers/i2c/i2c_mcux_flexcomm.c index 4527f2764da45..cb44be3959763 100644 --- a/drivers/i2c/i2c_mcux_flexcomm.c +++ b/drivers/i2c/i2c_mcux_flexcomm.c @@ -671,12 +671,12 @@ static DEVICE_API(i2c, mcux_flexcomm_driver_api) = { #define I2C_MCUX_FLEXCOMM_DEVICE(id) \ PINCTRL_DT_INST_DEFINE(id); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, clocks); \ static void mcux_flexcomm_config_func_##id(const struct device *dev); \ static const struct mcux_flexcomm_config mcux_flexcomm_config_##id = { \ .base = (I2C_Type *) DT_INST_REG_ADDR(id), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(id)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(id, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(id, clocks), \ .irq_config_func = mcux_flexcomm_config_func_##id, \ .bitrate = DT_INST_PROP(id, clock_frequency), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(id), \ diff --git a/drivers/i2c/i2c_mcux_lpi2c.c b/drivers/i2c/i2c_mcux_lpi2c.c index 81af8e2adc15b..16b2043e6402b 100644 --- a/drivers/i2c/i2c_mcux_lpi2c.c +++ b/drivers/i2c/i2c_mcux_lpi2c.c @@ -589,6 +589,7 @@ static DEVICE_API(i2c, mcux_lpi2c_driver_api) = { #define I2C_MCUX_LPI2C_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static void mcux_lpi2c_config_func_##n(const struct device *dev)\ { \ @@ -598,8 +599,7 @@ static DEVICE_API(i2c, mcux_lpi2c_driver_api) = { static const struct mcux_lpi2c_config mcux_lpi2c_config_##n = { \ DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks),\ .irq_config_func = mcux_lpi2c_config_func_##n, \ .bitrate = DT_INST_PROP(n, clock_frequency), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ diff --git a/drivers/i2c/i2c_mcux_lpi2c_rtio.c b/drivers/i2c/i2c_mcux_lpi2c_rtio.c index b5e2e12248d2c..c3ab82d7612b1 100644 --- a/drivers/i2c/i2c_mcux_lpi2c_rtio.c +++ b/drivers/i2c/i2c_mcux_lpi2c_rtio.c @@ -386,6 +386,8 @@ static DEVICE_API(i2c, mcux_lpi2c_driver_api) = { #define I2C_MCUX_LPI2C_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ static void mcux_lpi2c_config_func_##n(const struct device *dev)\ { \ I2C_MCUX_LPI2C_IRQ_SETUP_FUNC(n); \ @@ -395,7 +397,7 @@ static DEVICE_API(i2c, mcux_lpi2c_driver_api) = { DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = mcux_lpi2c_config_func_##n, \ .bitrate = DT_INST_PROP(n, clock_frequency), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ diff --git a/drivers/i2c/i2c_nxp_ii2c.c b/drivers/i2c/i2c_nxp_ii2c.c index bfe6cf1467e9c..0f6234b9e8ab7 100644 --- a/drivers/i2c/i2c_nxp_ii2c.c +++ b/drivers/i2c/i2c_nxp_ii2c.c @@ -379,14 +379,14 @@ static DEVICE_API(i2c, nxp_ii2c_driver_api) = { #define I2C_DEVICE_INIT_MCUX(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static void nxp_ii2c_config_func_ ## n(const struct device *dev); \ \ static const struct nxp_ii2c_config nxp_ii2c_config_ ## n = { \ DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks),\ .irq_config_func = nxp_ii2c_config_func_ ## n, \ .bitrate = DT_INST_PROP(n, clock_frequency), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ diff --git a/drivers/i2s/i2s_mcux_sai.c b/drivers/i2s/i2s_mcux_sai.c index 3a32e5a6e7137..1efb0344f13c5 100644 --- a/drivers/i2s/i2s_mcux_sai.c +++ b/drivers/i2s/i2s_mcux_sai.c @@ -1185,6 +1185,8 @@ static DEVICE_API(i2s, i2s_mcux_driver_api) = { #define I2S_MCUX_INIT(i2s_id) \ static void i2s_irq_connect_##i2s_id(const struct device *dev); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(i2s_id, clocks); \ + \ PINCTRL_DT_INST_DEFINE(i2s_id); \ \ static const struct i2s_mcux_config i2s_##i2s_id##_config = { \ @@ -1202,7 +1204,7 @@ static DEVICE_API(i2s, i2s_mcux_driver_api) = { .mclk_pin_offset = DT_PHA_BY_IDX(DT_DRV_INST(i2s_id), pinmuxes, 0, offset), \ .mclk_output = DT_INST_PROP_OR(i2s_id, mclk_output, 0), \ .clk_sub_sys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_IDX(i2s_id, 0, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(i2s_id, clocks), \ .ccm_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(i2s_id)), \ .irq_connect = i2s_irq_connect_##i2s_id, \ .pinctrl = PINCTRL_DT_INST_DEV_CONFIG_GET(i2s_id), \ diff --git a/drivers/i3c/i3c_mcux.c b/drivers/i3c/i3c_mcux.c index fa3bf994b42a1..526243cb82bdc 100644 --- a/drivers/i3c/i3c_mcux.c +++ b/drivers/i3c/i3c_mcux.c @@ -2123,6 +2123,7 @@ static DEVICE_API(i3c, mcux_i3c_driver_api) = { #define I3C_MCUX_DEVICE(id) \ PINCTRL_DT_INST_DEFINE(id); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, clocks); \ static void mcux_i3c_config_func_##id(const struct device *dev); \ static struct i3c_device_desc mcux_i3c_device_array_##id[] = \ I3C_DEVICE_ARRAY_DT_INST(id); \ @@ -2132,7 +2133,7 @@ static DEVICE_API(i3c, mcux_i3c_driver_api) = { .base = (I3C_Type *) DT_INST_REG_ADDR(id), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(id)), \ .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(id, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(id, clocks), \ .irq_config_func = mcux_i3c_config_func_##id, \ .common.dev_list.i3c = mcux_i3c_device_array_##id, \ .common.dev_list.num_i3c = ARRAY_SIZE(mcux_i3c_device_array_##id), \ diff --git a/drivers/input/input_mcux_kpp.c b/drivers/input/input_mcux_kpp.c index 3fb02ca1dd8e0..be9ebe84e4c8d 100644 --- a/drivers/input/input_mcux_kpp.c +++ b/drivers/input/input_mcux_kpp.c @@ -179,12 +179,13 @@ static int input_kpp_init(const struct device *dev) #define INPUT_KPP_INIT(n) \ static struct kpp_data kpp_data_##n; \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ PINCTRL_DT_INST_DEFINE(n); \ \ static const struct kpp_config kpp_config_##n = { \ .base = (KPP_Type *)DT_INST_REG_ADDR(n), \ - .clk_sub_sys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_IDX(n, 0, name), \ + .clk_sub_sys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .ccm_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ }; \ diff --git a/drivers/mdio/mdio_nxp_enet.c b/drivers/mdio/mdio_nxp_enet.c index b79e3e1502b86..107aba4702fff 100644 --- a/drivers/mdio/mdio_nxp_enet.c +++ b/drivers/mdio/mdio_nxp_enet.c @@ -240,13 +240,13 @@ static int nxp_enet_mdio_init(const struct device *dev) #define NXP_ENET_MDIO_INIT(inst) \ PINCTRL_DT_INST_DEFINE(inst); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(inst, clocks); \ \ static const struct nxp_enet_mdio_config nxp_enet_mdio_cfg_##inst = { \ .module_dev = DEVICE_DT_GET(DT_INST_PARENT(inst)), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst), \ .clock_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(DT_INST_PARENT(inst))), \ - .clock_subsys = (void *) DT_CLOCKS_CELL_BY_IDX( \ - DT_INST_PARENT(inst), 0, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(inst, clocks), \ .disable_preamble = DT_INST_PROP(inst, suppress_preamble), \ .mdc_freq = DT_INST_PROP(inst, clock_frequency), \ }; \ diff --git a/drivers/mdio/mdio_nxp_enet_qos.c b/drivers/mdio/mdio_nxp_enet_qos.c index 25a6a27a2095d..020f632fd011e 100644 --- a/drivers/mdio/mdio_nxp_enet_qos.c +++ b/drivers/mdio/mdio_nxp_enet_qos.c @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -259,6 +260,8 @@ static int nxp_enet_qos_mdio_init(const struct device *dev) #define NXP_ENET_QOS_MDIO_INIT(inst) \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(inst, clocks); \ + \ static const struct nxp_enet_qos_mdio_config \ nxp_enet_qos_mdio_cfg_##inst = { \ .enet_dev = DEVICE_DT_GET(DT_INST_PARENT(inst)), \ diff --git a/drivers/mdio/mdio_nxp_imx_netc.c b/drivers/mdio/mdio_nxp_imx_netc.c index c9afc4a4c4055..cdc10b196a615 100644 --- a/drivers/mdio/mdio_nxp_imx_netc.c +++ b/drivers/mdio/mdio_nxp_imx_netc.c @@ -96,6 +96,7 @@ static DEVICE_API(mdio, nxp_imx_netc_mdio_api) = { }; #define NXP_IMX_NETC_MDIO_INSTANCE_DEFINE(n) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ PINCTRL_DT_INST_DEFINE(n); \ static struct nxp_imx_netc_mdio_data nxp_imx_netc_mdio##n##_data; \ static const struct nxp_imx_netc_mdio_config nxp_imx_netc_mdio##n##_cfg = { \ @@ -103,7 +104,7 @@ static DEVICE_API(mdio, nxp_imx_netc_mdio_api) = { DEVICE_MMIO_NAMED_ROM_INIT_BY_NAME(pfconfig, DT_DRV_INST(n)), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ }; \ DEVICE_DT_INST_DEFINE(n, &nxp_imx_netc_mdio_initialize, NULL, \ &nxp_imx_netc_mdio##n##_data, &nxp_imx_netc_mdio##n##_cfg, \ diff --git a/drivers/memc/memc_mcux_flexspi.c b/drivers/memc/memc_mcux_flexspi.c index 2fe22f760d3e0..ccf5e60092eb0 100644 --- a/drivers/memc/memc_mcux_flexspi.c +++ b/drivers/memc/memc_mcux_flexspi.c @@ -442,6 +442,7 @@ static int memc_flexspi_pm_action(const struct device *dev, enum pm_device_actio #define MEMC_FLEXSPI(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static uint16_t buf_cfg_##n[] = \ DT_INST_PROP_OR(n, rx_buffer_config, {0}); \ \ @@ -464,8 +465,7 @@ static int memc_flexspi_pm_action(const struct device *dev, enum pm_device_actio sizeof(struct memc_flexspi_buf_cfg), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ }; \ \ PM_DEVICE_DT_INST_DEFINE(n, memc_flexspi_pm_action); \ diff --git a/drivers/mipi_dbi/mipi_dbi_nxp_lcdic.c b/drivers/mipi_dbi/mipi_dbi_nxp_lcdic.c index d1443fc764fbc..219153a22a5a9 100644 --- a/drivers/mipi_dbi/mipi_dbi_nxp_lcdic.c +++ b/drivers/mipi_dbi/mipi_dbi_nxp_lcdic.c @@ -946,6 +946,7 @@ static int mipi_dbi_lcdic_init(const struct device *dev) } \ \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static const struct mipi_dbi_lcdic_config \ mipi_dbi_lcdic_config_##n = { \ .base = (LCDIC_Type *)DT_INST_REG_ADDR(n), \ @@ -953,6 +954,7 @@ static int mipi_dbi_lcdic_init(const struct device *dev) .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = (clock_control_subsys_t) \ DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = mipi_dbi_lcdic_config_func_##n, \ .swap_bytes = DT_INST_PROP(n, nxp_swap_bytes), \ .write_active_min = \ diff --git a/drivers/mipi_dsi/dsi_mcux_2l.c b/drivers/mipi_dsi/dsi_mcux_2l.c index 14ec387960178..664017cd2eb28 100644 --- a/drivers/mipi_dsi/dsi_mcux_2l.c +++ b/drivers/mipi_dsi/dsi_mcux_2l.c @@ -828,6 +828,9 @@ static int mcux_mipi_dsi_init(const struct device *dev) #define MCUX_MIPI_DSI_DEVICE(id) \ COND_CODE_1(CONFIG_MIPI_DSI_MCUX_2L_SMARTDMA, \ (), (static void mipi_dsi_##n##_irq_config_func(const struct device *dev) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, dphy, clocks); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, esc, clocks); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, pixel, clocks); \ { \ IRQ_CONNECT(DT_INST_IRQN(id), DT_INST_IRQ(id, priority), \ mipi_dsi_isr, DEVICE_DT_INST_GET(id), 0); \ @@ -847,13 +850,13 @@ static int mcux_mipi_dsi_init(const struct device *dev) .dphy_ref_freq = DT_INST_PROP_OR(id, dphy_ref_frequency, 0), \ .bit_clk_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR_BY_NAME(id, dphy)), \ .bit_clk_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_NAME(id, dphy, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(id, dphy, clocks), \ .esc_clk_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR_BY_NAME(id, esc)), \ .esc_clk_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_NAME(id, esc, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(id, esc, clocks), \ .pixel_clk_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR_BY_NAME(id, pixel)), \ .pixel_clk_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_NAME(id, pixel, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(id, pixel, clocks), \ }; \ \ static struct mcux_mipi_dsi_data mipi_dsi_data_##id; \ diff --git a/drivers/misc/mcux_flexio/mcux_flexio.c b/drivers/misc/mcux_flexio/mcux_flexio.c index cef0ce1a62d68..4ccc739830daa 100644 --- a/drivers/misc/mcux_flexio/mcux_flexio.c +++ b/drivers/misc/mcux_flexio/mcux_flexio.c @@ -222,6 +222,8 @@ int nxp_flexio_child_attach(const struct device *dev, static void mcux_flexio_irq_enable_func_##n(void); \ static void mcux_flexio_irq_disable_func_##n(void); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ static nxp_flexio_map_child_t \ nxp_flexio_map_shifter_child_##n[MCUX_FLEXIO_SHIFTER_COUNT_MAX(n)] = {0}; \ static nxp_flexio_map_child_t \ @@ -237,8 +239,7 @@ int nxp_flexio_child_attach(const struct device *dev, static const struct mcux_flexio_config mcux_flexio_config_##n = { \ .base = (FLEXIO_Type *)DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = mcux_flexio_irq_config_func_##n, \ .irq_enable_func = mcux_flexio_irq_enable_func_##n, \ .irq_disable_func = mcux_flexio_irq_disable_func_##n, \ diff --git a/drivers/pinctrl/pinctrl_nxp_port.c b/drivers/pinctrl/pinctrl_nxp_port.c index 4af6602703f43..5b20cbfccd56c 100644 --- a/drivers/pinctrl/pinctrl_nxp_port.c +++ b/drivers/pinctrl/pinctrl_nxp_port.c @@ -71,24 +71,11 @@ static int pinctrl_mcux_init(const struct device *dev) return 0; } -#if DT_NODE_HAS_STATUS_OKAY(DT_INST(0, nxp_kinetis_sim)) -#define PINCTRL_MCUX_DT_INST_CLOCK_SUBSYS(n) \ - CLK_GATE_DEFINE(DT_INST_CLOCKS_CELL(n, offset), DT_INST_CLOCKS_CELL(n, bits)) -#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_scg_k4) -#define PINCTRL_MCUX_DT_INST_CLOCK_SUBSYS(n) \ - (DT_INST_CLOCKS_CELL(n, mrcc_offset) == 0 \ - ? 0 \ - : MAKE_MRCC_REGADDR(MRCC_BASE, DT_INST_CLOCKS_CELL(n, mrcc_offset))) -#else -#define PINCTRL_MCUX_DT_INST_CLOCK_SUBSYS(n) \ - DT_INST_CLOCKS_CELL(n, name) -#endif - #define PINCTRL_MCUX_INIT(n) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static const struct pinctrl_mcux_config pinctrl_mcux_##n##_config = {\ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t) \ - PINCTRL_MCUX_DT_INST_CLOCK_SUBSYS(n), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ }; \ \ DEVICE_DT_INST_DEFINE(n, \ diff --git a/drivers/pwm/pwm_mcux.c b/drivers/pwm/pwm_mcux.c index 308581731f0d8..49bbd17891974 100644 --- a/drivers/pwm/pwm_mcux.c +++ b/drivers/pwm/pwm_mcux.c @@ -246,6 +246,7 @@ static DEVICE_API(pwm, pwm_mcux_driver_api) = { #define PWM_DEVICE_INIT_MCUX(n) \ static struct pwm_mcux_data pwm_mcux_data_ ## n; \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static const struct pwm_mcux_config pwm_mcux_config_ ## n = { \ .base = (PWM_Type *)DT_REG_ADDR(DT_INST_PARENT(n)), \ @@ -255,7 +256,7 @@ static DEVICE_API(pwm, pwm_mcux_driver_api) = { .reload = DT_ENUM_IDX_OR(DT_DRV_INST(n), nxp_reload,\ kPWM_ReloadPwmFullCycle),\ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks),\ .run_wait = DT_INST_PROP(n, run_in_wait), \ .run_debug = DT_INST_PROP(n, run_in_debug), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ diff --git a/drivers/pwm/pwm_mcux_ctimer.c b/drivers/pwm/pwm_mcux_ctimer.c index 27d48211cc86f..ead97fef2f2da 100644 --- a/drivers/pwm/pwm_mcux_ctimer.c +++ b/drivers/pwm/pwm_mcux_ctimer.c @@ -262,11 +262,12 @@ static DEVICE_API(pwm, pwm_mcux_ctimer_driver_api) = { .is_period_channel_set = false, \ }; \ PWM_MCUX_CTIMER_PINCTRL_DEFINE(n) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static const struct pwm_mcux_ctimer_config pwm_mcux_ctimer_config_##n = { \ .base = (CTIMER_Type *)DT_INST_REG_ADDR(n), \ .prescale = DT_INST_PROP(n, prescaler), \ .clock_control = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_id = (clock_control_subsys_t)(DT_INST_CLOCKS_CELL(n, name)), \ + .clock_id = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ PWM_MCUX_CTIMER_PINCTRL_INIT(n)}; \ \ DEVICE_DT_INST_DEFINE(n, mcux_ctimer_pwm_init, NULL, &pwm_mcux_ctimer_data_##n, \ diff --git a/drivers/pwm/pwm_mcux_ftm.c b/drivers/pwm/pwm_mcux_ftm.c index a8d578371777f..1c73c37038211 100644 --- a/drivers/pwm/pwm_mcux_ftm.c +++ b/drivers/pwm/pwm_mcux_ftm.c @@ -576,8 +576,7 @@ FTM_ISR_FUNC(6, 7) static const struct mcux_ftm_config mcux_ftm_config_##n = { \ .base = (FTM_Type *)DT_INST_REG_ADDR(n),\ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .ftm_clock_source = (ftm_clock_source_t)(DT_INST_ENUM_IDX(n, clock_source) + 1U), \ .prescale = TO_FTM_PRESCALE_DIVIDE(DT_INST_PROP(n, prescaler)),\ .channel_count = FSL_FEATURE_FTM_CHANNEL_COUNTn((FTM_Type *) \ @@ -588,6 +587,7 @@ static const struct mcux_ftm_config mcux_ftm_config_##n = { \ } #define FTM_DEVICE(n) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ PINCTRL_DT_INST_DEFINE(n); \ static struct mcux_ftm_data mcux_ftm_data_##n; \ static const struct mcux_ftm_config mcux_ftm_config_##n; \ diff --git a/drivers/pwm/pwm_mcux_pwt.c b/drivers/pwm/pwm_mcux_pwt.c index 13c0401b49960..a22430f28512a 100644 --- a/drivers/pwm/pwm_mcux_pwt.c +++ b/drivers/pwm/pwm_mcux_pwt.c @@ -338,6 +338,8 @@ static DEVICE_API(pwm, mcux_pwt_driver_api) = { #define PWT_DEVICE(n) \ static void mcux_pwt_config_func_##n(const struct device *dev); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ PINCTRL_DT_INST_DEFINE(n); \ \ static const struct mcux_pwt_config mcux_pwt_config_##n = { \ @@ -345,6 +347,7 @@ static DEVICE_API(pwm, mcux_pwt_driver_api) = { .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = \ (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .pwt_clock_source = kPWT_BusClock, \ .prescale = \ TO_PWT_PRESCALE_DIVIDE(DT_INST_PROP(n, prescaler)), \ diff --git a/drivers/pwm/pwm_mcux_qtmr.c b/drivers/pwm/pwm_mcux_qtmr.c index 44b33b829f718..0096cdc934a8d 100644 --- a/drivers/pwm/pwm_mcux_qtmr.c +++ b/drivers/pwm/pwm_mcux_qtmr.c @@ -156,6 +156,7 @@ static DEVICE_API(pwm, pwm_mcux_qtmr_driver_api) = { #define PWM_MCUX_QTMR_DEVICE_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static struct pwm_mcux_qtmr_data pwm_mcux_qtmr_data_##n; \ \ static const struct pwm_mcux_qtmr_config pwm_mcux_qtmr_config_##n = { \ @@ -163,7 +164,7 @@ static DEVICE_API(pwm, pwm_mcux_qtmr_driver_api) = { .prescaler = DT_INST_PROP(n, prescaler), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ }; \ \ DEVICE_DT_INST_DEFINE(n, mcux_qtmr_pwm_init, NULL, &pwm_mcux_qtmr_data_##n, \ diff --git a/drivers/pwm/pwm_mcux_sctimer.c b/drivers/pwm/pwm_mcux_sctimer.c index 9f572f452ee1e..b44c130b1ac29 100644 --- a/drivers/pwm/pwm_mcux_sctimer.c +++ b/drivers/pwm/pwm_mcux_sctimer.c @@ -250,6 +250,7 @@ static DEVICE_API(pwm, pwm_mcux_sctimer_driver_api) = { #define PWM_MCUX_SCTIMER_DEVICE_INIT_MCUX(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static struct pwm_mcux_sctimer_data pwm_mcux_sctimer_data_##n; \ \ static const struct pwm_mcux_sctimer_config pwm_mcux_sctimer_config_##n = { \ @@ -257,7 +258,7 @@ static DEVICE_API(pwm, pwm_mcux_sctimer_driver_api) = { .prescale = DT_INST_PROP(n, prescaler), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ }; \ \ DEVICE_DT_INST_DEFINE(n, \ diff --git a/drivers/pwm/pwm_mcux_tpm.c b/drivers/pwm/pwm_mcux_tpm.c index a9282ddd494c2..94b2f3152f356 100644 --- a/drivers/pwm/pwm_mcux_tpm.c +++ b/drivers/pwm/pwm_mcux_tpm.c @@ -228,12 +228,12 @@ static DEVICE_API(pwm, mcux_tpm_driver_api) = { #define TO_TPM_PRESCALE_DIVIDE(val) _DO_CONCAT(kTPM_Prescale_Divide_, val) #define TPM_DEVICE(n) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ PINCTRL_DT_INST_DEFINE(n); \ static const struct mcux_tpm_config mcux_tpm_config_##n = { \ DEVICE_MMIO_NAMED_ROM_INIT(base, DT_DRV_INST(n)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t) \ - DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .tpm_clock_source = kTPM_SystemClock, \ .prescale = TO_TPM_PRESCALE_DIVIDE(DT_INST_PROP(n, prescaler)), \ .channel_count = FSL_FEATURE_TPM_CHANNEL_COUNTn((TPM_Type *) \ diff --git a/drivers/pwm/pwm_nxp_flexio.c b/drivers/pwm/pwm_nxp_flexio.c index cf644a4527699..1830093a1df16 100644 --- a/drivers/pwm/pwm_nxp_flexio.c +++ b/drivers/pwm/pwm_nxp_flexio.c @@ -320,6 +320,7 @@ static DEVICE_API(pwm, pwm_nxp_flexio_driver_api) = { #define PWM_NXP_FLEXIO_PWM_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ FLEXIO_PWM_PULSE_GEN_CONFIG(n) \ FLEXIO_PWM_TIMER_INDEX_INIT(n) \ FLEXIO_PWM_CHILD_CONFIG(n) \ @@ -328,7 +329,7 @@ static DEVICE_API(pwm, pwm_nxp_flexio_driver_api) = { .flexio_base = (FLEXIO_Type *)DT_REG_ADDR(DT_INST_PARENT(n)), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .clock_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(DT_INST_PARENT(n))), \ - .clock_subsys = (clock_control_subsys_t)DT_CLOCKS_CELL(DT_INST_PARENT(n), name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .child = &mcux_flexio_pwm_child_##n, \ FLEXIO_PWM_PULSE_GEN_GET_CONFIG(n) \ }; \ diff --git a/drivers/sdhc/imx_usdhc.c b/drivers/sdhc/imx_usdhc.c index f0b3e5a299f3e..7bd8c4be890c7 100644 --- a/drivers/sdhc/imx_usdhc.c +++ b/drivers/sdhc/imx_usdhc.c @@ -1078,10 +1078,12 @@ static DEVICE_API(sdhc, usdhc_api) = { \ PINCTRL_DT_INST_DEFINE(n); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ static const struct usdhc_config usdhc_##n##_config = { \ DEVICE_MMIO_NAMED_ROM_INIT(usdhc_mmio, DT_DRV_INST(n)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .nusdhc = n, \ .pwr_gpio = GPIO_DT_SPEC_INST_GET_OR(n, pwr_gpios, {0}), \ .detect_gpio = GPIO_DT_SPEC_INST_GET_OR(n, cd_gpios, {0}), \ diff --git a/drivers/sdhc/mcux_sdif.c b/drivers/sdhc/mcux_sdif.c index 1790b59950e6d..ff122db320123 100644 --- a/drivers/sdhc/mcux_sdif.c +++ b/drivers/sdhc/mcux_sdif.c @@ -424,6 +424,8 @@ static DEVICE_API(sdhc, sdif_api) = { #define MCUX_SDIF_INIT(n) \ static void sdif_##n##_irq_config_func(const struct device *dev) \ + \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ { \ IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \ mcux_sdif_isr, DEVICE_DT_INST_GET(n), 0); \ @@ -440,7 +442,7 @@ static DEVICE_API(sdhc, sdif_api) = { .data_timeout = DT_INST_PROP(n, data_timeout), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = sdif_##n##_irq_config_func, \ }; \ \ diff --git a/drivers/serial/uart_lpc11u6x.c b/drivers/serial/uart_lpc11u6x.c index e9a1355d0d6b1..c8bc0ad2461ba 100644 --- a/drivers/serial/uart_lpc11u6x.c +++ b/drivers/serial/uart_lpc11u6x.c @@ -380,6 +380,8 @@ static void lpc11u6x_uart0_isr_config(const struct device *dev); PINCTRL_DT_DEFINE(DT_NODELABEL(uart0)); +CLOCK_CONTROL_DT_SPEC_DEFINE(DT_NODELABEL(uart0), clocks); + BUILD_ASSERT(DT_PROP(DT_NODELABEL(uart0), rx_invert) == 0, "rx-invert not supported for UART0"); BUILD_ASSERT(DT_PROP(DT_NODELABEL(uart0), tx_invert) == 0, @@ -390,7 +392,7 @@ static const struct lpc11u6x_uart0_config uart0_config = { DT_REG_ADDR(DT_NODELABEL(uart0)), .clock_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(DT_NODELABEL(uart0))), .pincfg = PINCTRL_DT_DEV_CONFIG_GET(DT_NODELABEL(uart0)), - .clkid = DT_PHA_BY_IDX(DT_NODELABEL(uart0), clocks, 0, clkid), + .clkid = CLOCK_CONTROL_DT_SPEC_GET(DT_NODELABEL(uart0), clocks), .baudrate = DT_PROP(DT_NODELABEL(uart0), current_speed), #ifdef CONFIG_UART_INTERRUPT_DRIVEN .irq_config_func = lpc11u6x_uart0_isr_config, @@ -855,13 +857,14 @@ static DEVICE_API(uart, uartx_api) = { #define LPC11U6X_UARTX_INIT(idx) \ +CLOCK_CONTROL_DT_SPEC_DEFINE(DT_NODELABEL(uart##idx), clocks); \ PINCTRL_DT_DEFINE(DT_NODELABEL(uart##idx)); \ \ static const struct lpc11u6x_uartx_config uart_cfg_##idx = { \ .base = (struct lpc11u6x_uartx_regs *) \ DT_REG_ADDR(DT_NODELABEL(uart##idx)), \ .clock_dev = DEVICE_DT_GET(DT_CLOCKS_CTLR(DT_NODELABEL(uart##idx))), \ - .clkid = DT_PHA_BY_IDX(DT_NODELABEL(uart##idx), clocks, 0, clkid), \ + .clkid = CLOCK_CONTROL_DT_SPEC_GET(DT_NODELABEL(uart##idx), clocks), \ .pincfg = PINCTRL_DT_DEV_CONFIG_GET(DT_NODELABEL(uart##idx)), \ .baudrate = DT_PROP(DT_NODELABEL(uart##idx), current_speed), \ .rx_invert = DT_PROP(DT_NODELABEL(uart##idx), rx_invert), \ diff --git a/drivers/serial/uart_mcux.c b/drivers/serial/uart_mcux.c index e7218f7b6905a..c57391c09249c 100644 --- a/drivers/serial/uart_mcux.c +++ b/drivers/serial/uart_mcux.c @@ -397,7 +397,7 @@ static DEVICE_API(uart, uart_mcux_driver_api) = { static const struct uart_mcux_config uart_mcux_##n##_config = { \ .base = (UART_Type *)DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ IRQ_FUNC_INIT \ } @@ -436,6 +436,7 @@ static const struct uart_mcux_config uart_mcux_##n##_config = { \ #define UART_MCUX_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ \ static struct uart_mcux_data uart_mcux_##n##_data = { \ .uart_cfg = { \ diff --git a/drivers/serial/uart_mcux_iuart.c b/drivers/serial/uart_mcux_iuart.c index 2024efa760378..583ce78265549 100644 --- a/drivers/serial/uart_mcux_iuart.c +++ b/drivers/serial/uart_mcux_iuart.c @@ -327,7 +327,7 @@ static DEVICE_API(uart, mcux_iuart_driver_api) = { static const struct mcux_iuart_config mcux_iuart_##n##_config = { \ .base = (UART_Type *) DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .baud_rate = DT_INST_PROP(n, current_speed), \ .parity = DT_INST_ENUM_IDX(n, parity), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ @@ -349,6 +349,8 @@ static const struct mcux_iuart_config mcux_iuart_##n##_config = { \ CONFIG_SERIAL_INIT_PRIORITY, \ &mcux_iuart_driver_api); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ PINCTRL_DT_INST_DEFINE(n); \ \ IUART_MCUX_CONFIG_FUNC(n) \ diff --git a/drivers/serial/uart_mcux_lpsci.c b/drivers/serial/uart_mcux_lpsci.c index 421f3b5b11b03..0e705e3398935 100644 --- a/drivers/serial/uart_mcux_lpsci.c +++ b/drivers/serial/uart_mcux_lpsci.c @@ -317,7 +317,7 @@ static DEVICE_API(uart, mcux_lpsci_driver_api) = { static const struct mcux_lpsci_config mcux_lpsci_##n##_config = { \ .base = (UART0_Type *)DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .baud_rate = DT_INST_PROP(n, current_speed), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ IRQ_FUNC_INIT \ @@ -326,6 +326,8 @@ static const struct mcux_lpsci_config mcux_lpsci_##n##_config = { \ #define MCUX_LPSCI_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ static struct mcux_lpsci_data mcux_lpsci_##n##_data; \ \ static const struct mcux_lpsci_config mcux_lpsci_##n##_config; \ diff --git a/drivers/serial/uart_mcux_lpuart.c b/drivers/serial/uart_mcux_lpuart.c index 7faf225302984..9fae049d9154f 100644 --- a/drivers/serial/uart_mcux_lpuart.c +++ b/drivers/serial/uart_mcux_lpuart.c @@ -1515,7 +1515,7 @@ static DEVICE_API(uart, mcux_lpuart_driver_api) = { static const struct mcux_lpuart_config mcux_lpuart_##n##_config = { \ .base = (LPUART_Type *) DT_INST_REG_ADDR(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .baud_rate = DT_INST_PROP(n, current_speed), \ .flow_ctrl = FLOW_CONTROL(n), \ .parity = DT_INST_ENUM_IDX(n, parity), \ @@ -1534,6 +1534,7 @@ static const struct mcux_lpuart_config mcux_lpuart_##n##_config = { \ \ static struct mcux_lpuart_data mcux_lpuart_##n##_data; \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ PINCTRL_DT_INST_DEFINE(n); \ MCUX_LPUART_IRQ_DEFINE(n) \ \ diff --git a/drivers/spi/spi_mcux_dspi.c b/drivers/spi/spi_mcux_dspi.c index 7cbb6f12b6bf0..e6e66cfcff3d1 100644 --- a/drivers/spi/spi_mcux_dspi.c +++ b/drivers/spi/spi_mcux_dspi.c @@ -894,6 +894,7 @@ static DEVICE_API(spi, spi_mcux_driver_api) = { #define SPI_MCUX_DSPI_DEVICE(id) \ PINCTRL_DT_INST_DEFINE(id); \ static void spi_mcux_config_func_##id(const struct device *dev);\ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, clocks); \ TX_BUFFER(id); \ RX_BUFFER(id); \ static struct spi_mcux_data spi_mcux_data_##id = { \ @@ -906,7 +907,7 @@ static DEVICE_API(spi, spi_mcux_driver_api) = { .base = (SPI_Type *)DT_INST_REG_ADDR(id), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(id)), \ .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(id, name), \ + CLOCK_CONTROL_DT_SPEC_INST_GET(id, clocks), \ .irq_config_func = spi_mcux_config_func_##id, \ .pcs_sck_delay = \ DT_INST_PROP_OR(id, pcs_sck_delay, 0), \ diff --git a/drivers/spi/spi_mcux_ecspi.c b/drivers/spi/spi_mcux_ecspi.c index 8138e7fdc2a7e..ea676c9456192 100644 --- a/drivers/spi/spi_mcux_ecspi.c +++ b/drivers/spi/spi_mcux_ecspi.c @@ -317,13 +317,14 @@ static DEVICE_API(spi, spi_mcux_driver_api) = { #define SPI_MCUX_ECSPI_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static void spi_mcux_config_func_##n(const struct device *dev); \ \ static const struct spi_mcux_config spi_mcux_config_##n = { \ .base = (ECSPI_Type *) DT_INST_REG_ADDR(n), \ .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = spi_mcux_config_func_##n, \ }; \ \ diff --git a/drivers/spi/spi_mcux_flexcomm.c b/drivers/spi/spi_mcux_flexcomm.c index 9edafe02096c7..a208efaa2ce91 100644 --- a/drivers/spi/spi_mcux_flexcomm.c +++ b/drivers/spi/spi_mcux_flexcomm.c @@ -946,12 +946,13 @@ static DEVICE_API(spi, spi_mcux_driver_api) = { #define SPI_MCUX_FLEXCOMM_DEVICE(id) \ SPI_MCUX_FLEXCOMM_IRQ_HANDLER_DECL(id); \ PINCTRL_DT_INST_DEFINE(id); \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(id, clocks); \ static const struct spi_mcux_config spi_mcux_config_##id = { \ .base = \ (SPI_Type *)DT_INST_REG_ADDR(id), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(id)), \ .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(id, name),\ + CLOCK_CONTROL_DT_SPEC_INST_GET(id, clocks), \ SPI_MCUX_FLEXCOMM_IRQ_HANDLER_FUNC(id) \ .pre_delay = DT_INST_PROP_OR(id, pre_delay, 0), \ .post_delay = DT_INST_PROP_OR(id, post_delay, 0), \ diff --git a/drivers/spi/spi_nxp_lpspi/spi_nxp_lpspi_priv.h b/drivers/spi/spi_nxp_lpspi/spi_nxp_lpspi_priv.h index 2f0d24238ce5d..80b9cd10db5dd 100644 --- a/drivers/spi/spi_nxp_lpspi/spi_nxp_lpspi_priv.h +++ b/drivers/spi/spi_nxp_lpspi/spi_nxp_lpspi_priv.h @@ -93,9 +93,10 @@ int lpspi_wait_tx_fifo_empty(const struct device *dev); #define SPI_LPSPI_CONFIG_INIT(n) \ static const struct lpspi_config lpspi_config_##n = { \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name), \ + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .irq_config_func = lpspi_config_func_##n, \ .pcs_sck_delay = DT_INST_PROP_OR(n, pcs_sck_delay, 0), \ .sck_pcs_delay = DT_INST_PROP_OR(n, sck_pcs_delay, 0), \ diff --git a/drivers/video/video_mcux_mipi_csi2rx.c b/drivers/video/video_mcux_mipi_csi2rx.c index 5ff096437ca4b..e72a334a6d590 100644 --- a/drivers/video/video_mcux_mipi_csi2rx.c +++ b/drivers/video/video_mcux_mipi_csi2rx.c @@ -312,12 +312,14 @@ static int mipi_csi2rx_init(const struct device *dev) #define SOURCE_DEV(n) DEVICE_DT_GET(DT_NODE_REMOTE_DEVICE(DT_INST_ENDPOINT_BY_ID(n, 1, 0))) #define MIPI_CSI2RX_INIT(n) \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ + \ static struct mipi_csi2rx_data mipi_csi2rx_data_##n = { \ .csi2rxConfig.laneNum = DT_PROP_LEN(DT_INST_ENDPOINT_BY_ID(n, 1, 0), data_lanes), \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_root = (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_IDX(n, 0, name), \ - .clock_ui = (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_IDX(n, 1, name), \ - .clock_esc = (clock_control_subsys_t)DT_INST_CLOCKS_CELL_BY_IDX(n, 2, name), \ + .clock_root = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks, 0), \ + .clock_ui = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks, 1), \ + .clock_esc = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks, 2), \ }; \ \ static const struct mipi_csi2rx_config mipi_csi2rx_config_##n = { \ diff --git a/drivers/watchdog/wdt_mcux_rtwdog.c b/drivers/watchdog/wdt_mcux_rtwdog.c index 57a026917dc3a..130024862542f 100644 --- a/drivers/watchdog/wdt_mcux_rtwdog.c +++ b/drivers/watchdog/wdt_mcux_rtwdog.c @@ -202,6 +202,7 @@ static DEVICE_API(wdt, mcux_rtwdog_api) = { #define MCUX_RTWDOG_INIT(n) \ \ + CLOCK_CONTROL_DT_SPEC_INST_DEFINE(n, clocks); \ static struct mcux_rtwdog_data mcux_rtwdog_data_##n; \ static void mcux_rtwdog_config_func_##n(const struct device *dev); \ \ @@ -209,7 +210,7 @@ static DEVICE_API(wdt, mcux_rtwdog_api) = { .base = (RTWDOG_Type *)DT_INST_REG_ADDR(n), \ .irq_config_func = mcux_rtwdog_config_func_##n, \ .clock_frequency = DT_INST_PROP_BY_PHANDLE(n, clocks, clock_frequency), \ - .clk_source = TO_RTWDOG_CLK_SRC(DT_INST_PROP(n, clk_source)), \ + .clk_source = CLOCK_CONTROL_DT_SPEC_INST_GET(n, clocks), \ .clk_divider = TO_RTWDOG_CLK_DIV(DT_INST_PROP(n, clk_divider)), \ }; \ static void mcux_rtwdog_config_func_##n(const struct device *dev) \ diff --git a/drivers/watchdog/wdt_mcux_wdog.c b/drivers/watchdog/wdt_mcux_wdog.c index 5a18f46a4f620..22dd89b0252f7 100644 --- a/drivers/watchdog/wdt_mcux_wdog.c +++ b/drivers/watchdog/wdt_mcux_wdog.c @@ -165,11 +165,12 @@ static DEVICE_API(wdt, mcux_wdog_api) = { static void mcux_wdog_config_func_0(const struct device *dev); +CLOCK_CONTROL_DT_SPEC_INST_DEFINE(0, clocks); + static const struct mcux_wdog_config mcux_wdog_config_0 = { .base = (WDOG_Type *) DT_INST_REG_ADDR(0), .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(0)), - .clock_subsys = (clock_control_subsys_t) - DT_INST_CLOCKS_CELL(0, name), + .clock_subsys = CLOCK_CONTROL_DT_SPEC_INST_GET(0, clocks), .irq_config_func = mcux_wdog_config_func_0, }; diff --git a/drivers/watchdog/wdt_mcux_wdog32.c b/drivers/watchdog/wdt_mcux_wdog32.c index d38fe0e122e63..f9539ca88909b 100644 --- a/drivers/watchdog/wdt_mcux_wdog32.c +++ b/drivers/watchdog/wdt_mcux_wdog32.c @@ -190,6 +190,8 @@ static DEVICE_API(wdt, mcux_wdog32_api) = { static void mcux_wdog32_config_func_0(const struct device *dev); +CLOCK_CONTROL_DT_SPEC_INST_DEFINE(0, clocks); + static const struct mcux_wdog32_config mcux_wdog32_config_0 = { .base = (WDOG_Type *) DT_INST_REG_ADDR(0), #if DT_NODE_HAS_PROP(DT_INST_PHANDLE(0, clocks), clock_frequency) @@ -197,7 +199,7 @@ static const struct mcux_wdog32_config mcux_wdog32_config_0 = { #else /* !DT_NODE_HAS_PROP(DT_INST_PHANDLE(0, clocks), clock_frequency) */ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(0)), .clock_subsys = (clock_control_subsys_t) - DT_INST_CLOCKS_CELL(0, name), + CLOCK_CONTROL_DT_SPEC_INST_GET(0, clocks), #endif /* DT_NODE_HAS_PROP(DT_INST_PHANDLE(0, clocks), clock_frequency) */ .clk_source = TO_WDOG32_CLK_SRC(DT_INST_PROP(0, clk_source)),