#include <linux/regmap.h>
#define CLK_PLL_1M 1000000
#define CLK_PLL_10M (CLK_PLL_1M * 10)
#define pindex(pll, member) \
(pll->factors[member].shift / (8 * sizeof(pll->regs_num)))
#define pshift(pll, member) \
(pll->factors[member].shift % (8 * sizeof(pll->regs_num)))
#define pwidth(pll, member) \
pll->factors[member].width
#define pmask(pll, member) \
((pwidth(pll, member)) ? \
GENMASK(pwidth(pll, member) + pshift(pll, member) - 1, \
pshift(pll, member)) : 0)
#define pinternal(pll, cfg, member) \
(cfg[pindex(pll, member)] & pmask(pll, member))
#define pinternal_val(pll, cfg, member) \
(pinternal(pll, cfg, member) >> pshift(pll, member))
static inline unsigned int
sprd_pll_read(const struct sprd_pll *pll, u8 index)
const struct sprd_clk_common *common = &pll->common;
if (WARN_ON(index >= pll->regs_num))
regmap_read(common->regmap, common->reg + index * 4, &val);
sprd_pll_write(const struct sprd_pll *pll, u8 index,
const struct sprd_clk_common *common = &pll->common;
unsigned int offset, reg;
if (WARN_ON(index >= pll->regs_num))
offset = common->reg + index * 4;