summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOdelu Kukatla <okukatla@codeaurora.org>2016-02-09 22:36:12 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:20:52 -0700
commit6320908170fd317321c38400a186479e40c30501 (patch)
tree95614e69987cd0bb3e045d9c6d8f015e1e04252c
parent290a09f4a3bac86ac3a3d0513360f8ab766f8e16 (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.c14
-rw-r--r--include/linux/clk/msm-clock-generic.h7
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;