Lines Matching refs:divider
21 static int get_div(struct tegra_clk_frac_div *divider, unsigned long rate,
26 div = div_frac_get(rate, parent_rate, divider->width,
27 divider->frac_width, divider->flags);
38 struct tegra_clk_frac_div *divider = to_clk_frac_div(hw);
43 reg = readl_relaxed(divider->reg);
45 if ((divider->flags & TEGRA_DIVIDER_UART) &&
49 div = (reg >> divider->shift) & div_mask(divider);
51 mul = get_mul(divider);
64 struct tegra_clk_frac_div *divider = to_clk_frac_div(hw);
71 div = get_div(divider, rate, output_rate);
75 mul = get_mul(divider);
83 struct tegra_clk_frac_div *divider = to_clk_frac_div(hw);
88 div = get_div(divider, rate, parent_rate);
92 if (divider->lock)
93 spin_lock_irqsave(divider->lock, flags);
95 val = readl_relaxed(divider->reg);
96 val &= ~(div_mask(divider) << divider->shift);
97 val |= div << divider->shift;
99 if (divider->flags & TEGRA_DIVIDER_UART) {
106 if (divider->flags & TEGRA_DIVIDER_FIXED)
107 val |= pll_out_override(divider);
109 writel_relaxed(val, divider->reg);
111 if (divider->lock)
112 spin_unlock_irqrestore(divider->lock, flags);
139 struct tegra_clk_frac_div *divider;
143 divider = kzalloc(sizeof(*divider), GFP_KERNEL);
144 if (!divider) {
145 pr_err("%s: could not allocate fractional divider clk\n",
156 divider->reg = reg;
157 divider->shift = shift;
158 divider->width = width;
159 divider->frac_width = frac_width;
160 divider->lock = lock;
161 divider->flags = clk_divider_flags;
164 divider->hw.init = &init;
166 clk = clk_register(NULL, ÷r->hw);
168 kfree(divider);