/* * SPDX-License-Identifier: Apache-2.0 * * Copyright (C) 2022 Google, LLC * */ #include #define DT_DRV_COMPAT fixed_clock struct fixed_rate_clock_config { uint32_t rate; }; static int fixed_rate_clk_on(const struct device *dev, clock_control_subsys_t sys) { ARG_UNUSED(dev); ARG_UNUSED(sys); return 0; } static int fixed_rate_clk_off(const struct device *dev, clock_control_subsys_t sys) { ARG_UNUSED(dev); ARG_UNUSED(sys); return 0; } static enum clock_control_status fixed_rate_clk_get_status(const struct device *dev, clock_control_subsys_t sys) { return CLOCK_CONTROL_STATUS_ON; } static int fixed_rate_clk_get_rate(const struct device *dev, clock_control_subsys_t sys, uint32_t *rate) { const struct fixed_rate_clock_config *config = dev->config; ARG_UNUSED(sys); *rate = config->rate; return 0; } static const struct clock_control_driver_api fixed_rate_clk_api = { .on = fixed_rate_clk_on, .off = fixed_rate_clk_off, .get_status = fixed_rate_clk_get_status, .get_rate = fixed_rate_clk_get_rate }; static int fixed_rate_clk_init(const struct device *dev) { ARG_UNUSED(dev); return 0; } #define FIXED_CLK_INIT(idx) \ static const struct fixed_rate_clock_config fixed_rate_clock_config_##idx = { \ .rate = DT_INST_PROP(idx, clock_frequency), \ }; \ DEVICE_DT_INST_DEFINE(idx, \ fixed_rate_clk_init, \ NULL, NULL, \ &fixed_rate_clock_config_##idx, \ PRE_KERNEL_1, \ CONFIG_CLOCK_CONTROL_INIT_PRIORITY, \ &fixed_rate_clk_api \ ); DT_INST_FOREACH_STATUS_OKAY(FIXED_CLK_INIT)