[PATCH RFC v1 5/5] clk: introduce clk_core_enable_lock and clk_core_disable_lock functions
Dong Aisheng
aisheng.dong at freescale.com
Wed Apr 15 07:26:39 PDT 2015
This can be usefully when clock core wants to enable/disable clocks.
Then we don't have to convert the struct clk_core to struct clk to call
clk_enable/clk_disable which is a bit un-align with exist using.
Cc: Mike Turquette <mturquette at linaro.org>
Cc: Stephen Boyd <sboyd at codeaurora.org>
Signed-off-by: Dong Aisheng <aisheng.dong at freescale.com>
---
drivers/clk/clk.c | 79 +++++++++++++++++++++++++------------------------------
1 file changed, 36 insertions(+), 43 deletions(-)
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index f2470e5..6c481e7 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -48,6 +48,8 @@ static int clk_core_prepare(struct clk_core *clk);
static void clk_core_unprepare(struct clk_core *clk);
static int clk_core_enable(struct clk_core *clk);
static void clk_core_disable(struct clk_core *clk);
+static int clk_core_enable_lock(struct clk_core *clk);
+static void clk_core_disable_lock(struct clk_core *clk);
/*** private data structures ***/
@@ -523,9 +525,7 @@ static void clk_disable_unused_subtree(struct clk_core *clk)
if (clk->flags & CLK_SET_PARENT_ON && parent) {
clk_core_prepare(parent->core);
- flags = clk_enable_lock();
- clk_core_enable(parent->core);
- clk_enable_unlock(flags);
+ clk_core_enable_lock(parent->core);
}
flags = clk_enable_lock();
@@ -553,9 +553,7 @@ static void clk_disable_unused_subtree(struct clk_core *clk)
unlock_out:
clk_enable_unlock(flags);
if (clk->flags & CLK_SET_PARENT_ON && parent) {
- flags = clk_enable_lock();
- clk_core_disable(parent->core);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(parent->core);
clk_core_unprepare(parent->core);
}
}
@@ -1050,6 +1048,15 @@ static void clk_core_disable(struct clk_core *clk)
clk_core_disable(clk->parent);
}
+static void clk_core_disable_lock(struct clk_core *clk)
+{
+ unsigned long flags;
+
+ flags = clk_enable_lock();
+ clk_core_disable(clk);
+ clk_enable_unlock(flags);
+}
+
/**
* clk_disable - gate a clock
* @clk: the clk being gated
@@ -1108,6 +1115,18 @@ static int clk_core_enable(struct clk_core *clk)
return 0;
}
+static int clk_core_enable_lock(struct clk_core *clk)
+{
+ unsigned long flags;
+ int ret;
+
+ flags = clk_enable_lock();
+ ret = clk_core_enable(clk);
+ clk_enable_unlock(flags);
+
+ return ret;
+}
+
/**
* clk_enable - ungate a clock
* @clk: the clk being ungated
@@ -1489,20 +1508,13 @@ static struct clk_core *__clk_set_parent_before(struct clk_core *clk,
*/
if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) {
clk_core_prepare(parent);
- flags = clk_enable_lock();
- clk_core_enable(parent);
- clk_enable_unlock(flags);
+ clk_core_enable_lock(parent);
if (clk->prepare_count) {
- flags = clk_enable_lock();
- clk_core_enable(clk);
- clk_enable_unlock(flags);
+ clk_core_enable_lock(clk);
} else {
-
clk_core_prepare(old_parent);
- flags = clk_enable_lock();
- clk_core_enable(old_parent);
- clk_enable_unlock(flags);
+ clk_core_enable_lock(old_parent);
}
}
@@ -1518,26 +1530,18 @@ static void __clk_set_parent_after(struct clk_core *clk,
struct clk_core *parent,
struct clk_core *old_parent)
{
- unsigned long flags;
-
/*
* Finish the migration of prepare state and undo the changes done
* for preventing a race with clk_enable().
*/
if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) {
- flags = clk_enable_lock();
- clk_core_disable(old_parent);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(old_parent);
clk_core_unprepare(old_parent);
if (clk->prepare_count) {
- flags = clk_enable_lock();
- clk_core_disable(clk);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(clk);
} else {
- flags = clk_enable_lock();
- clk_core_disable(parent);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(parent);
clk_core_unprepare(parent);
}
}
@@ -1566,19 +1570,13 @@ static int __clk_set_parent(struct clk_core *clk, struct clk_core *parent,
clk_enable_unlock(flags);
if (clk->prepare_count || clk->flags & CLK_SET_PARENT_ON) {
- flags = clk_enable_lock();
- clk_core_disable(parent);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(parent);
clk_core_unprepare(parent);
if (clk->prepare_count) {
- flags = clk_enable_lock();
- clk_core_disable(clk);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(clk);
} else {
- flags = clk_enable_lock();
- clk_core_disable(old_parent);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(old_parent);
clk_core_unprepare(old_parent);
}
@@ -1798,7 +1796,6 @@ static void clk_change_rate(struct clk_core *clk)
bool skip_set_rate = false;
struct clk_core *old_parent;
struct clk_core *parent = NULL;
- unsigned long flags;
old_rate = clk->rate;
@@ -1831,9 +1828,7 @@ static void clk_change_rate(struct clk_core *clk)
if (clk->flags & CLK_SET_PARENT_ON && parent) {
clk_core_prepare(parent);
- flags = clk_enable_lock();
- clk_core_enable(parent);
- clk_enable_unlock(flags);
+ clk_core_enable_lock(parent);
}
if (!skip_set_rate && clk->ops->set_rate)
@@ -1844,9 +1839,7 @@ static void clk_change_rate(struct clk_core *clk)
clk->rate = clk_recalc(clk, best_parent_rate);
if (clk->flags & CLK_SET_PARENT_ON && parent) {
- flags = clk_enable_lock();
- clk_core_disable(parent);
- clk_enable_unlock(flags);
+ clk_core_disable_lock(parent);
clk_core_unprepare(parent);
}
--
1.9.1
More information about the linux-arm-kernel
mailing list