Lines Matching +full:init +full:- +full:delay
18 #include <linux/clk-provider.h>
50 * Each fine delay is between 44ps-77ps. Assume each fine delay is 60ps to
58 unsigned long rate = clk_get_rate(hw->clk); in rockchip_mmc_get_phase()
65 return -EINVAL; in rockchip_mmc_get_phase()
67 raw_value = readl(mmc_clock->reg) >> (mmc_clock->shift); in rockchip_mmc_get_phase()
87 unsigned long rate = clk_get_rate(hw->clk); in rockchip_mmc_set_phase()
91 u32 delay; in rockchip_mmc_set_phase() local
107 return -EINVAL; in rockchip_mmc_set_phase()
114 * Due to the inexact nature of the "fine" delay, we might in rockchip_mmc_set_phase()
115 * actually go non-monotonic. We don't go _too_ monotonic in rockchip_mmc_set_phase()
122 * On one extreme (if delay is actually 44ps): in rockchip_mmc_set_phase()
124 * The other (if delay is actually 77ps): in rockchip_mmc_set_phase()
127 * It's possible we might make a delay that is up to 25 in rockchip_mmc_set_phase()
133 * Convert to delay; do a little extra work to make sure we in rockchip_mmc_set_phase()
134 * don't overflow 32-bit / 64-bit numbers. in rockchip_mmc_set_phase()
136 delay = 10000000; /* PSECS_PER_SEC / 10000 / 10 */ in rockchip_mmc_set_phase()
137 delay *= remainder; in rockchip_mmc_set_phase()
138 delay = DIV_ROUND_CLOSEST(delay, in rockchip_mmc_set_phase()
142 delay_num = (u8) min_t(u32, delay, 255); in rockchip_mmc_set_phase()
147 writel(HIWORD_UPDATE(raw_value, 0x07ff, mmc_clock->shift), in rockchip_mmc_set_phase()
148 mmc_clock->reg); in rockchip_mmc_set_phase()
150 pr_debug("%s->set_phase(%d) delay_nums=%u reg[0x%p]=0x%03x actual_degrees=%d\n", in rockchip_mmc_set_phase()
152 mmc_clock->reg, raw_value>>(mmc_clock->shift), in rockchip_mmc_set_phase()
184 * set the max-frequency to match the boards' ability but we can't go in rockchip_mmc_clk_rate_notify()
187 if (ndata->old_rate <= ndata->new_rate) in rockchip_mmc_clk_rate_notify()
191 mmc_clock->cached_phase = in rockchip_mmc_clk_rate_notify()
192 rockchip_mmc_get_phase(&mmc_clock->hw); in rockchip_mmc_clk_rate_notify()
193 else if (mmc_clock->cached_phase != -EINVAL && in rockchip_mmc_clk_rate_notify()
195 rockchip_mmc_set_phase(&mmc_clock->hw, mmc_clock->cached_phase); in rockchip_mmc_clk_rate_notify()
204 struct clk_init_data init; in rockchip_clk_register_mmc() local
211 return ERR_PTR(-ENOMEM); in rockchip_clk_register_mmc()
213 init.name = name; in rockchip_clk_register_mmc()
214 init.flags = 0; in rockchip_clk_register_mmc()
215 init.num_parents = num_parents; in rockchip_clk_register_mmc()
216 init.parent_names = parent_names; in rockchip_clk_register_mmc()
217 init.ops = &rockchip_mmc_clk_ops; in rockchip_clk_register_mmc()
219 mmc_clock->hw.init = &init; in rockchip_clk_register_mmc()
220 mmc_clock->reg = reg; in rockchip_clk_register_mmc()
221 mmc_clock->shift = shift; in rockchip_clk_register_mmc()
223 clk = clk_register(NULL, &mmc_clock->hw); in rockchip_clk_register_mmc()
229 mmc_clock->clk_rate_change_nb.notifier_call = in rockchip_clk_register_mmc()
231 ret = clk_notifier_register(clk, &mmc_clock->clk_rate_change_nb); in rockchip_clk_register_mmc()