Lines Matching +full:clk +full:- +full:provider
1 // SPDX-License-Identifier: GPL-2.0-or-later
8 #include <linux/clk.h>
9 #include <linux/clk-provider.h>
12 #include "clk.h"
41 * Each fine delay is between 44ps-77ps. Assume each fine delay is 60ps to
58 raw_value = readl(mmc_clock->reg) >> (mmc_clock->shift); in rockchip_mmc_get_phase()
88 * provider of MMC host. However, things may go wrong if in rockchip_mmc_set_phase()
97 pr_err("%s: invalid clk rate\n", __func__); in rockchip_mmc_set_phase()
98 return -EINVAL; in rockchip_mmc_set_phase()
106 * actually go non-monotonic. We don't go _too_ monotonic in rockchip_mmc_set_phase()
125 * don't overflow 32-bit / 64-bit numbers. in rockchip_mmc_set_phase()
138 writel(HIWORD_UPDATE(raw_value, 0x07ff, mmc_clock->shift), in rockchip_mmc_set_phase()
139 mmc_clock->reg); in rockchip_mmc_set_phase()
141 pr_debug("%s->set_phase(%d) delay_nums=%u reg[0x%p]=0x%03x actual_degrees=%d\n", in rockchip_mmc_set_phase()
143 mmc_clock->reg, raw_value>>(mmc_clock->shift), in rockchip_mmc_set_phase()
171 * clock provider be reparented from orphan to its real parent in the in rockchip_mmc_clk_rate_notify()
175 * set the max-frequency to match the boards' ability but we can't go in rockchip_mmc_clk_rate_notify()
178 if (ndata->old_rate <= ndata->new_rate) in rockchip_mmc_clk_rate_notify()
182 mmc_clock->cached_phase = in rockchip_mmc_clk_rate_notify()
183 rockchip_mmc_get_phase(&mmc_clock->hw); in rockchip_mmc_clk_rate_notify()
184 else if (mmc_clock->cached_phase != -EINVAL && in rockchip_mmc_clk_rate_notify()
186 rockchip_mmc_set_phase(&mmc_clock->hw, mmc_clock->cached_phase); in rockchip_mmc_clk_rate_notify()
191 struct clk *rockchip_clk_register_mmc(const char *name, in rockchip_clk_register_mmc()
197 struct clk *clk; in rockchip_clk_register_mmc() local
202 return ERR_PTR(-ENOMEM); in rockchip_clk_register_mmc()
210 mmc_clock->hw.init = &init; in rockchip_clk_register_mmc()
211 mmc_clock->reg = reg; in rockchip_clk_register_mmc()
212 mmc_clock->shift = shift; in rockchip_clk_register_mmc()
214 clk = clk_register(NULL, &mmc_clock->hw); in rockchip_clk_register_mmc()
215 if (IS_ERR(clk)) { in rockchip_clk_register_mmc()
216 ret = PTR_ERR(clk); in rockchip_clk_register_mmc()
220 mmc_clock->clk_rate_change_nb.notifier_call = in rockchip_clk_register_mmc()
222 ret = clk_notifier_register(clk, &mmc_clock->clk_rate_change_nb); in rockchip_clk_register_mmc()
226 return clk; in rockchip_clk_register_mmc()
228 clk_unregister(clk); in rockchip_clk_register_mmc()