summaryrefslogtreecommitdiff
path: root/drivers/clk/qcom/clk-branch.c
diff options
context:
space:
mode:
authorOdelu Kukatla <okukatla@codeaurora.org>2016-06-06 22:19:53 +0530
committerOdelu Kukatla <okukatla@codeaurora.org>2016-08-07 03:34:55 +0530
commit221bd201287d302791aa6698a3747d8b7919851e (patch)
treed30d22eaa536264abb1007d5afa0bb821cff8d3f /drivers/clk/qcom/clk-branch.c
parent405ccdf00c15ded98c601481b00ceb692020fea5 (diff)
clk: qcom: Add support for gate clocks
Add gate clocks support where the clocks could be - Either a branch clock with no branch halt check during enable/disable. - Clocks which have just enable/disable bit. Change-Id: Ia3adcab26f54a4b34a08fec031be5dfb029376c2 Signed-off-by: Odelu Kukatla <okukatla@codeaurora.org>
Diffstat (limited to 'drivers/clk/qcom/clk-branch.c')
-rw-r--r--drivers/clk/qcom/clk-branch.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/clk/qcom/clk-branch.c b/drivers/clk/qcom/clk-branch.c
index 3d7b14a8ef28..76310e249fb2 100644
--- a/drivers/clk/qcom/clk-branch.c
+++ b/drivers/clk/qcom/clk-branch.c
@@ -154,6 +154,42 @@ const struct clk_ops clk_branch2_ops = {
};
EXPORT_SYMBOL_GPL(clk_branch2_ops);
+static int clk_gate_toggle(struct clk_hw *hw, bool en)
+{
+ struct clk_gate2 *gt = to_clk_gate2(hw);
+ int ret = 0;
+
+ if (en) {
+ ret = clk_enable_regmap(hw);
+ if (ret)
+ return ret;
+ } else {
+ clk_disable_regmap(hw);
+ }
+
+ if (gt->udelay)
+ udelay(gt->udelay);
+
+ return ret;
+}
+
+static int clk_gate2_enable(struct clk_hw *hw)
+{
+ return clk_gate_toggle(hw, true);
+}
+
+static void clk_gate2_disable(struct clk_hw *hw)
+{
+ clk_gate_toggle(hw, false);
+}
+
+const struct clk_ops clk_gate2_ops = {
+ .enable = clk_gate2_enable,
+ .disable = clk_gate2_disable,
+ .is_enabled = clk_is_enabled_regmap,
+};
+EXPORT_SYMBOL_GPL(clk_gate2_ops);
+
const struct clk_ops clk_branch_simple_ops = {
.enable = clk_enable_regmap,
.disable = clk_disable_regmap,