diff options
author | Kaz Fukuoka <kfukuoka@nvidia.com> | 2013-08-27 18:18:56 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-16 17:40:31 -0700 |
commit | 36942d1a119d7623e5a95e59d20d5ed22de4cde4 (patch) | |
tree | df5b81c0d2cd81a74ff79b3d6d56719d0ac9ef57 /arch/arm/mach-tegra/tegra12_emc.c | |
parent | 62693487194ec26dd9f64b004c5a81fd43de2dfc (diff) |
ARM: tegra12: clock: Round emc rate up/down
Added support for bidirectional up/down rounding of emc rate.
Ported from Tegra14 Change-Id: I9c83db11478fab1894b694d34ce9025fe6ce2ee7
Change-Id: Ifc8a33257b2063f13377d9a2bffeb2dde38d12d0
Signed-off-by: Kaz Fukuoka <kfukuoka@nvidia.com>
Reviewed-on: http://git-master/r/267575
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/tegra12_emc.c')
-rw-r--r-- | arch/arm/mach-tegra/tegra12_emc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/tegra12_emc.c b/arch/arm/mach-tegra/tegra12_emc.c index f65dae3e354c..5b062a64373e 100644 --- a/arch/arm/mach-tegra/tegra12_emc.c +++ b/arch/arm/mach-tegra/tegra12_emc.c @@ -781,9 +781,10 @@ int tegra_emc_set_rate(unsigned long rate) return 0; } -long tegra_emc_round_rate(unsigned long rate) +long tegra_emc_round_rate_updown(unsigned long rate, bool up) { int i; + unsigned long table_rate; if (!tegra_emc_table) return clk_get_rate_locked(emc); /* no table - no rate change */ @@ -801,11 +802,15 @@ long tegra_emc_round_rate(unsigned long rate) if (tegra_emc_clk_sel[i].input == NULL) continue; /* invalid entry */ - if (tegra_emc_table[i].rate >= rate) { - pr_debug("%s: using %lu\n", - __func__, tegra_emc_table[i].rate); + table_rate = tegra_emc_table[i].rate; + if (table_rate >= rate) { + if (!up && i && (table_rate > rate)) { + i--; + table_rate = tegra_emc_table[i].rate; + } + pr_debug("%s: using %lu\n", __func__, table_rate); last_round_idx = i; - return tegra_emc_table[i].rate * 1000; + return table_rate * 1000; } } |