Lines Matching refs:fd

53 static inline u32 clk_fd_readl(struct clk_fractional_divider *fd)
55 if (fd->flags & CLK_FRAC_DIVIDER_BIG_ENDIAN)
56 return ioread32be(fd->reg);
58 return readl(fd->reg);
61 static inline void clk_fd_writel(struct clk_fractional_divider *fd, u32 val)
63 if (fd->flags & CLK_FRAC_DIVIDER_BIG_ENDIAN)
64 iowrite32be(val, fd->reg);
66 writel(val, fd->reg);
71 struct clk_fractional_divider *fd = to_clk_fd(hw);
77 if (fd->lock)
78 spin_lock_irqsave(fd->lock, flags);
80 __acquire(fd->lock);
82 val = clk_fd_readl(fd);
84 if (fd->lock)
85 spin_unlock_irqrestore(fd->lock, flags);
87 __release(fd->lock);
89 mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift;
90 nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift;
92 m = (val & mmask) >> fd->mshift;
93 n = (val & nmask) >> fd->nshift;
95 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) {
125 struct clk_fractional_divider *fd = to_clk_fd(hw);
131 * by (scale - fd->nwidth) bits.
135 if (fd->flags & CLK_FRAC_DIVIDER_POWER_OF_TWO_PS) {
138 if (scale > fd->nwidth)
139 rate <<= scale - fd->nwidth;
142 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) {
143 max_m = BIT(fd->mwidth);
144 max_n = BIT(fd->nwidth);
146 max_m = GENMASK(fd->mwidth - 1, 0);
147 max_n = GENMASK(fd->nwidth - 1, 0);
157 struct clk_fractional_divider *fd = to_clk_fd(hw);
164 if (fd->approximation)
165 fd->approximation(hw, rate, parent_rate, &m, &n);
178 struct clk_fractional_divider *fd = to_clk_fd(hw);
184 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) {
185 max_m = BIT(fd->mwidth);
186 max_n = BIT(fd->nwidth);
188 max_m = GENMASK(fd->mwidth - 1, 0);
189 max_n = GENMASK(fd->nwidth - 1, 0);
193 if (fd->flags & CLK_FRAC_DIVIDER_ZERO_BASED) {
198 mmask = GENMASK(fd->mwidth - 1, 0) << fd->mshift;
199 nmask = GENMASK(fd->nwidth - 1, 0) << fd->nshift;
201 if (fd->lock)
202 spin_lock_irqsave(fd->lock, flags);
204 __acquire(fd->lock);
206 val = clk_fd_readl(fd);
208 val |= (m << fd->mshift) | (n << fd->nshift);
209 clk_fd_writel(fd, val);
211 if (fd->lock)
212 spin_unlock_irqrestore(fd->lock, flags);
214 __release(fd->lock);
266 struct clk_fractional_divider *fd;
271 fd = kzalloc(sizeof(*fd), GFP_KERNEL);
272 if (!fd)
281 fd->reg = reg;
282 fd->mshift = mshift;
283 fd->mwidth = mwidth;
284 fd->nshift = nshift;
285 fd->nwidth = nwidth;
286 fd->flags = clk_divider_flags;
287 fd->lock = lock;
288 fd->hw.init = &init;
290 hw = &fd->hw;
293 kfree(fd);
319 struct clk_fractional_divider *fd;
321 fd = to_clk_fd(hw);
324 kfree(fd);