mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 19:47:08 +02:00
clk: qcom: clk-alpha-pll: Add support for controlling lucid_ole
Add programming sequence support for managing lucid_ole. Change-Id: Id230731d0c58663ab1244ce9046c9083f7004b90 Signed-off-by: Vivek Aknurwar <viveka@codeaurora.org>
This commit is contained in:
parent
dec56fe0c0
commit
e8ab729668
|
|
@ -236,6 +236,10 @@ EXPORT_SYMBOL_GPL(clk_alpha_pll_regs);
|
|||
#define LUCID_EVO_PLL_L_VAL_MASK GENMASK(15, 0)
|
||||
#define LUCID_EVO_PLL_CAL_L_VAL_MASK GENMASK(31, 16)
|
||||
#define LUCID_EVO_PLL_CAL_L_VAL_SHIFT 16
|
||||
#define LUCID_OLE_PROCESS_CAL_L_VAL_MASK GENMASK(23, 16)
|
||||
#define LUCID_OLE_PROCESS_CAL_L_VAL_SHIFT 16
|
||||
#define LUCID_OLE_RINGOSC_CAL_L_VAL_MASK GENMASK(31, 24)
|
||||
#define LUCID_OLE_RINGOSC_CAL_L_VAL_SHIFT 24
|
||||
|
||||
/* ZONDA PLL specific */
|
||||
#define ZONDA_PLL_OUT_MASK 0xf
|
||||
|
|
@ -2977,14 +2981,22 @@ int clk_lucid_evo_pll_configure(struct clk_alpha_pll *pll,
|
|||
ret |= regmap_update_bits(regmap, PLL_L_VAL(pll),
|
||||
LUCID_EVO_PLL_L_VAL_MASK, config->l);
|
||||
|
||||
if (config->cal_l)
|
||||
if (config->cal_l_ringosc) {
|
||||
ret |= regmap_update_bits(regmap, PLL_L_VAL(pll),
|
||||
LUCID_EVO_PLL_CAL_L_VAL_MASK,
|
||||
config->cal_l << LUCID_EVO_PLL_CAL_L_VAL_SHIFT);
|
||||
else
|
||||
LUCID_OLE_PROCESS_CAL_L_VAL_MASK,
|
||||
config->cal_l << LUCID_OLE_PROCESS_CAL_L_VAL_SHIFT);
|
||||
ret |= regmap_update_bits(regmap, PLL_L_VAL(pll),
|
||||
LUCID_EVO_PLL_CAL_L_VAL_MASK,
|
||||
TRION_PLL_CAL_VAL << LUCID_EVO_PLL_CAL_L_VAL_SHIFT);
|
||||
LUCID_OLE_RINGOSC_CAL_L_VAL_MASK,
|
||||
config->cal_l_ringosc <<
|
||||
LUCID_OLE_RINGOSC_CAL_L_VAL_SHIFT);
|
||||
} else if (config->cal_l) {
|
||||
ret |= regmap_update_bits(regmap, PLL_L_VAL(pll),
|
||||
LUCID_EVO_PLL_CAL_L_VAL_MASK,
|
||||
config->cal_l << LUCID_EVO_PLL_CAL_L_VAL_SHIFT);
|
||||
} else {
|
||||
ret |= regmap_write(regmap, PLL_CAL_L_VAL(pll),
|
||||
TRION_PLL_CAL_VAL << LUCID_EVO_PLL_CAL_L_VAL_SHIFT);
|
||||
}
|
||||
|
||||
if (config->alpha)
|
||||
ret |= regmap_write(regmap, PLL_ALPHA_VAL(pll), config->alpha);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ enum {
|
|||
CLK_ALPHA_PLL_TYPE_ZONDA_5LPE,
|
||||
CLK_ALPHA_PLL_TYPE_REGERA,
|
||||
CLK_ALPHA_PLL_TYPE_LUCID_EVO,
|
||||
CLK_ALPHA_PLL_TYPE_LUCID_OLE = CLK_ALPHA_PLL_TYPE_LUCID_EVO,
|
||||
CLK_ALPHA_PLL_TYPE_RIVIAN_EVO,
|
||||
CLK_ALPHA_PLL_TYPE_MAX,
|
||||
};
|
||||
|
|
@ -111,6 +112,7 @@ struct clk_alpha_pll_postdiv {
|
|||
struct alpha_pll_config {
|
||||
u32 l;
|
||||
u32 cal_l;
|
||||
u32 cal_l_ringosc;
|
||||
u32 alpha;
|
||||
u32 alpha_hi;
|
||||
u32 config_ctl_val;
|
||||
|
|
@ -170,6 +172,10 @@ extern const struct clk_ops clk_alpha_pll_lucid_evo_ops;
|
|||
extern const struct clk_ops clk_alpha_pll_fixed_lucid_evo_ops;
|
||||
extern const struct clk_ops clk_alpha_pll_postdiv_lucid_evo_ops;
|
||||
|
||||
#define clk_alpha_pll_lucid_ole_ops clk_alpha_pll_lucid_evo_ops
|
||||
#define clk_alpha_pll_fixed_lucid_ole_ops clk_alpha_pll_fixed_lucid_evo_ops
|
||||
#define clk_alpha_pll_postdiv_lucid_ole_ops clk_alpha_pll_postdiv_lucid_evo_ops
|
||||
|
||||
extern const struct clk_ops clk_alpha_pll_rivian_evo_ops;
|
||||
|
||||
void clk_alpha_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
|
||||
|
|
@ -193,6 +199,8 @@ int clk_regera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap,
|
|||
int clk_lucid_evo_pll_configure(struct clk_alpha_pll *pll,
|
||||
struct regmap *regmap,
|
||||
const struct alpha_pll_config *config);
|
||||
#define clk_lucid_ole_pll_configure(pll, regmap, config) \
|
||||
clk_lucid_evo_pll_configure(pll, regmap, config)
|
||||
int clk_rivian_evo_pll_configure(struct clk_alpha_pll *pll,
|
||||
struct regmap *regmap,
|
||||
const struct alpha_pll_config *config);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user