Lines Matching full:fd

53 static inline u32 clk_fd_readl(struct clk_fractional_divider *fd)  in clk_fd_readl()  argument
55 if (fd->flags & CLK_FRAC_DIVIDER_BIG_ENDIAN) in clk_fd_readl()
56 return ioread32be(fd->reg); in clk_fd_readl()
58 return readl(fd->reg); in clk_fd_readl()
61 static inline void clk_fd_writel(struct clk_fractional_divider *fd, u32 val) in clk_fd_writel() argument
63 if (fd->flags & CLK_FRAC_DIVIDER_BIG_ENDIAN) in clk_fd_writel()
64 iowrite32be(val, fd->reg); in clk_fd_writel()
66 writel(val, fd->reg); in clk_fd_writel()
71 struct clk_fractional_divider *fd = to_clk_fd(hw); in clk_fd_get_div() local
77 if (fd->lock) in clk_fd_get_div()
78 spin_lock_irqsave(fd->lock, flags); in clk_fd_get_div()
80 __acquire(fd->lock); in clk_fd_get_div()
82 val = clk_fd_readl(fd); in clk_fd_get_div()
84 if (fd->lock) in clk_fd_get_div()
85 spin_unlock_irqrestore(fd->lock, flags); in clk_fd_get_div()
87 __release(fd->lock); in clk_fd_get_div()
89 mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift; in clk_fd_get_div()
90 nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift; in clk_fd_get_div()
92 m = (val & mmask) >> fd->mshift; in clk_fd_get_div()
93 n = (val & nmask) >> fd->nshift; in clk_fd_get_div()
95 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) { in clk_fd_get_div()
125 struct clk_fractional_divider *fd = to_clk_fd(hw); in clk_fractional_divider_general_approximation() local
131 * by (scale - fd->nwidth) bits. in clk_fractional_divider_general_approximation()
135 if (fd->flags & CLK_FRAC_DIVIDER_POWER_OF_TWO_PS) { in clk_fractional_divider_general_approximation()
138 if (scale > fd->nwidth) in clk_fractional_divider_general_approximation()
139 rate <<= scale - fd->nwidth; in clk_fractional_divider_general_approximation()
142 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) { in clk_fractional_divider_general_approximation()
143 max_m = BIT(fd->mwidth); in clk_fractional_divider_general_approximation()
144 max_n = BIT(fd->nwidth); in clk_fractional_divider_general_approximation()
146 max_m = GENMASK(fd->mwidth - 1, 0); in clk_fractional_divider_general_approximation()
147 max_n = GENMASK(fd->nwidth - 1, 0); in clk_fractional_divider_general_approximation()
157 struct clk_fractional_divider *fd = to_clk_fd(hw); in clk_fd_determine_rate() local
167 if (fd->approximation) in clk_fd_determine_rate()
168 fd->approximation(hw, req->rate, &req->best_parent_rate, &m, &n); in clk_fd_determine_rate()
185 struct clk_fractional_divider *fd = to_clk_fd(hw); in clk_fd_set_rate() local
191 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) { in clk_fd_set_rate()
192 max_m = BIT(fd->mwidth); in clk_fd_set_rate()
193 max_n = BIT(fd->nwidth); in clk_fd_set_rate()
195 max_m = GENMASK(fd->mwidth - 1, 0); in clk_fd_set_rate()
196 max_n = GENMASK(fd->nwidth - 1, 0); in clk_fd_set_rate()
200 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) { in clk_fd_set_rate()
205 mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift; in clk_fd_set_rate()
206 nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift; in clk_fd_set_rate()
208 if (fd->lock) in clk_fd_set_rate()
209 spin_lock_irqsave(fd->lock, flags); in clk_fd_set_rate()
211 __acquire(fd->lock); in clk_fd_set_rate()
213 val = clk_fd_readl(fd); in clk_fd_set_rate()
215 val |= (m << fd->mshift) | (n << fd->nshift); in clk_fd_set_rate()
216 clk_fd_writel(fd, val); in clk_fd_set_rate()
218 if (fd->lock) in clk_fd_set_rate()
219 spin_unlock_irqrestore(fd->lock, flags); in clk_fd_set_rate()
221 __release(fd->lock); in clk_fd_set_rate()
273 struct clk_fractional_divider *fd; in clk_hw_register_fractional_divider() local
278 fd = kzalloc(sizeof(*fd), GFP_KERNEL); in clk_hw_register_fractional_divider()
279 if (!fd) in clk_hw_register_fractional_divider()
288 fd->reg = reg; in clk_hw_register_fractional_divider()
289 fd->mshift = mshift; in clk_hw_register_fractional_divider()
290 fd->mwidth = mwidth; in clk_hw_register_fractional_divider()
291 fd->nshift = nshift; in clk_hw_register_fractional_divider()
292 fd->nwidth = nwidth; in clk_hw_register_fractional_divider()
293 fd->flags = clk_divider_flags; in clk_hw_register_fractional_divider()
294 fd->lock = lock; in clk_hw_register_fractional_divider()
295 fd->hw.init = &init; in clk_hw_register_fractional_divider()
297 hw = &fd->hw; in clk_hw_register_fractional_divider()
300 kfree(fd); in clk_hw_register_fractional_divider()
326 struct clk_fractional_divider *fd; in clk_hw_unregister_fractional_divider() local
328 fd = to_clk_fd(hw); in clk_hw_unregister_fractional_divider()
331 kfree(fd); in clk_hw_unregister_fractional_divider()