diff options
author | Odelu Kukatla <okukatla@codeaurora.org> | 2016-06-06 22:19:53 +0530 |
---|---|---|
committer | Odelu Kukatla <okukatla@codeaurora.org> | 2016-08-07 03:34:55 +0530 |
commit | 221bd201287d302791aa6698a3747d8b7919851e (patch) | |
tree | d30d22eaa536264abb1007d5afa0bb821cff8d3f /drivers/clk/qcom/clk-branch.c | |
parent | 405ccdf00c15ded98c601481b00ceb692020fea5 (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.c | 36 |
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, |