diff options
| author | Odelu Kukatla <okukatla@codeaurora.org> | 2016-02-09 22:36:12 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:20:52 -0700 |
| commit | 6320908170fd317321c38400a186479e40c30501 (patch) | |
| tree | 95614e69987cd0bb3e045d9c6d8f015e1e04252c | |
| parent | 290a09f4a3bac86ac3a3d0513360f8ab766f8e16 (diff) | |
clk: msm: clock-local: Add support to set the post_div for debug mux
Update the clock framework to support the setting of post_div for
debug mux so as to divide the clock by post_div.
CRs-Fixed: 977413
Change-Id: I7299bdb0953dcf65fbf2a38b7578e2e54446c0d7
Signed-off-by: Odelu Kukatla <okukatla@codeaurora.org>
| -rw-r--r-- | drivers/clk/msm/clock-local2.c | 14 | ||||
| -rw-r--r-- | include/linux/clk/msm-clock-generic.h | 7 |
2 files changed, 17 insertions, 4 deletions
diff --git a/drivers/clk/msm/clock-local2.c b/drivers/clk/msm/clock-local2.c index 934219df53ef..56ee6d0d7c89 100644 --- a/drivers/clk/msm/clock-local2.c +++ b/drivers/clk/msm/clock-local2.c @@ -1023,18 +1023,20 @@ unsigned long measure_get_rate(struct clk *c) u64 raw_count_short, raw_count_full; unsigned ret; u32 sample_ticks = 0x10000; - u32 multiplier = 0x1; + u32 multiplier = to_mux_clk(c)->post_div + 1; struct measure_clk_data *data = to_mux_clk(c)->priv; regval = readl_relaxed(MUX_REG(to_mux_clk(c))); - /* clear post divider bits */ + /* clear and set post divider bits */ regval &= ~BM(15, 12); + regval |= BVAL(15, 12, to_mux_clk(c)->post_div); writel_relaxed(regval, MUX_REG(to_mux_clk(c))); ret = clk_prepare_enable(data->cxo); if (ret) { pr_warn("CXO clock failed to enable. Can't measure\n"); - return 0; + ret = 0; + goto fail; } spin_lock_irqsave(&local_clock_reg_lock, flags); @@ -1076,6 +1078,12 @@ unsigned long measure_get_rate(struct clk *c) clk_disable_unprepare(data->cxo); +fail: + regval = readl_relaxed(MUX_REG(to_mux_clk(c))); + /* clear post divider bits */ + regval &= ~BM(15, 12); + writel_relaxed(regval, MUX_REG(to_mux_clk(c))); + return ret; } diff --git a/include/linux/clk/msm-clock-generic.h b/include/linux/clk/msm-clock-generic.h index 6d5468acf744..d7186a363a3f 100644 --- a/include/linux/clk/msm-clock-generic.h +++ b/include/linux/clk/msm-clock-generic.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2015, The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -81,6 +81,11 @@ struct mux_clk { u32 mask; u32 shift; u32 en_mask; + /* + * Set post divider for debug mux in order to divide the clock + * by post_div + 1. + */ + u32 post_div; int low_power_sel; void *priv; |
