diff options
author | Rhyland Klein <rklein@nvidia.com> | 2015-06-18 17:28:32 -0400 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2015-12-17 07:37:54 -0500 |
commit | 17e9273a9e00a1fc8a64d6de3c7bb9e5020b1b73 (patch) | |
tree | 89222073f3bc755fc0dcae9f8e127b6da574c19a | |
parent | b985114e2f946de069b00002bd46a4efba5334eb (diff) |
clk: tegra: pll: Add dyn_ramp callback
Add a callback to the pll_params for custom dynamic ramping
functions which can be specified per PLL.
Reviewed-by: Benson Leung <bleung@chromium.org>
Signed-off-by: Bill Huang <bilhuang@nvidia.com>
Signed-off-by: Rhyland Klein <rklein@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r-- | drivers/clk/tegra/clk-pll.c | 7 | ||||
-rw-r--r-- | drivers/clk/tegra/clk.h | 4 |
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c index 1decca98008f..8901004025e7 100644 --- a/drivers/clk/tegra/clk-pll.c +++ b/drivers/clk/tegra/clk-pll.c | |||
@@ -669,6 +669,13 @@ static int _program_pll(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg, | |||
669 | 669 | ||
670 | _get_pll_mnp(pll, &old_cfg); | 670 | _get_pll_mnp(pll, &old_cfg); |
671 | 671 | ||
672 | if (state && pll->params->defaults_set && pll->params->dyn_ramp && | ||
673 | (cfg->m == old_cfg.m) && (cfg->p == old_cfg.p)) { | ||
674 | ret = pll->params->dyn_ramp(pll, cfg); | ||
675 | if (!ret) | ||
676 | return 0; | ||
677 | } | ||
678 | |||
672 | if (state) | 679 | if (state) |
673 | _clk_pll_disable(hw); | 680 | _clk_pll_disable(hw); |
674 | 681 | ||
diff --git a/drivers/clk/tegra/clk.h b/drivers/clk/tegra/clk.h index c78d9d088a6d..8dac213fa672 100644 --- a/drivers/clk/tegra/clk.h +++ b/drivers/clk/tegra/clk.h | |||
@@ -213,6 +213,8 @@ struct tegra_clk_pll; | |||
213 | * is already enabled, it will be done the first | 213 | * is already enabled, it will be done the first |
214 | * time the rate is changed while the PLL is | 214 | * time the rate is changed while the PLL is |
215 | * disabled. | 215 | * disabled. |
216 | * @dyn_ramp: Callback which can be used to define a custom | ||
217 | * dynamic ramp function for a given PLL. | ||
216 | * | 218 | * |
217 | * Flags: | 219 | * Flags: |
218 | * TEGRA_PLL_USE_LOCK - This flag indicated to use lock bits for | 220 | * TEGRA_PLL_USE_LOCK - This flag indicated to use lock bits for |
@@ -284,6 +286,8 @@ struct tegra_clk_pll_params { | |||
284 | unsigned long (*adjust_vco)(struct tegra_clk_pll_params *pll_params, | 286 | unsigned long (*adjust_vco)(struct tegra_clk_pll_params *pll_params, |
285 | unsigned long parent_rate); | 287 | unsigned long parent_rate); |
286 | void (*set_defaults)(struct tegra_clk_pll *pll); | 288 | void (*set_defaults)(struct tegra_clk_pll *pll); |
289 | int (*dyn_ramp)(struct tegra_clk_pll *pll, | ||
290 | struct tegra_clk_pll_freq_table *cfg); | ||
287 | }; | 291 | }; |
288 | 292 | ||
289 | #define TEGRA_PLL_USE_LOCK BIT(0) | 293 | #define TEGRA_PLL_USE_LOCK BIT(0) |