Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: clk-alpha-pll: Add support for Regera PLL ops

Regera PLL ops are required to control the Regera PLL from clock
controller drivers, hence add the Regera PLL ops and configure
function.

Signed-off-by: Taniya Das <quic_tdas@quicinc.com>
Signed-off-by: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20240731062916.2680823-6-quic_skakitap@quicinc.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>

authored by

Taniya Das and committed by
Bjorn Andersson
0c31f6a3 a689c296

+36 -1
+31 -1
drivers/clk/qcom/clk-alpha-pll.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 2 2 /* 3 3 * Copyright (c) 2015, 2018, The Linux Foundation. All rights reserved. 4 - * Copyright (c) 2021, 2023, Qualcomm Innovation Center, Inc. All rights reserved. 4 + * Copyright (c) 2021, 2023-2024, Qualcomm Innovation Center, Inc. All rights reserved. 5 5 */ 6 6 7 7 #include <linux/kernel.h> ··· 2657 2657 .set_rate = clk_alpha_pll_stromer_plus_set_rate, 2658 2658 }; 2659 2659 EXPORT_SYMBOL_GPL(clk_alpha_pll_stromer_plus_ops); 2660 + 2661 + void clk_regera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, 2662 + const struct alpha_pll_config *config) 2663 + { 2664 + clk_alpha_pll_write_config(regmap, PLL_L_VAL(pll), config->l); 2665 + clk_alpha_pll_write_config(regmap, PLL_ALPHA_VAL(pll), config->alpha); 2666 + clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL(pll), config->config_ctl_val); 2667 + clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U(pll), config->config_ctl_hi_val); 2668 + clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U1(pll), config->config_ctl_hi1_val); 2669 + clk_alpha_pll_write_config(regmap, PLL_USER_CTL(pll), config->user_ctl_val); 2670 + clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U(pll), config->user_ctl_hi_val); 2671 + clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U1(pll), config->user_ctl_hi1_val); 2672 + clk_alpha_pll_write_config(regmap, PLL_TEST_CTL(pll), config->test_ctl_val); 2673 + clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U(pll), config->test_ctl_hi_val); 2674 + clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U1(pll), config->test_ctl_hi1_val); 2675 + 2676 + /* Set operation mode to STANDBY */ 2677 + regmap_write(regmap, PLL_OPMODE(pll), PLL_STANDBY); 2678 + } 2679 + EXPORT_SYMBOL_GPL(clk_regera_pll_configure); 2680 + 2681 + const struct clk_ops clk_alpha_pll_regera_ops = { 2682 + .enable = clk_zonda_pll_enable, 2683 + .disable = clk_zonda_pll_disable, 2684 + .is_enabled = clk_alpha_pll_is_enabled, 2685 + .recalc_rate = clk_trion_pll_recalc_rate, 2686 + .round_rate = clk_alpha_pll_round_rate, 2687 + .set_rate = clk_zonda_pll_set_rate, 2688 + }; 2689 + EXPORT_SYMBOL_GPL(clk_alpha_pll_regera_ops);
+5
drivers/clk/qcom/clk-alpha-pll.h
··· 23 23 CLK_ALPHA_PLL_TYPE_LUCID = CLK_ALPHA_PLL_TYPE_TRION, 24 24 CLK_ALPHA_PLL_TYPE_AGERA, 25 25 CLK_ALPHA_PLL_TYPE_ZONDA, 26 + CLK_ALPHA_PLL_TYPE_REGERA = CLK_ALPHA_PLL_TYPE_ZONDA, 26 27 CLK_ALPHA_PLL_TYPE_ZONDA_OLE, 27 28 CLK_ALPHA_PLL_TYPE_LUCID_EVO, 28 29 CLK_ALPHA_PLL_TYPE_LUCID_OLE, ··· 194 193 extern const struct clk_ops clk_alpha_pll_rivian_evo_ops; 195 194 #define clk_alpha_pll_postdiv_rivian_evo_ops clk_alpha_pll_postdiv_fabia_ops 196 195 196 + extern const struct clk_ops clk_alpha_pll_regera_ops; 197 + 197 198 void clk_alpha_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, 198 199 const struct alpha_pll_config *config); 199 200 void clk_huayra_2290_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, ··· 219 216 const struct alpha_pll_config *config); 220 217 void clk_stromer_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, 221 218 const struct alpha_pll_config *config); 219 + void clk_regera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, 220 + const struct alpha_pll_config *config); 222 221 223 222 #endif