sh_clk: added clk_set_parent/clk_get_parent support
PATCH 1/1 sh_clk: added clk_set_parent/clk_get_parent support
Hi all
I would add the following functions in the clock framework
- clk_set_parent
- clk_get_parent
and the utility function
- clk_for_each
Regards
Francesco
From 8b12a8d0c9d8adb86c70debbd2318ae7ef57784b Mon Sep 17 00:00:00 2001
From: Francesco Virlinzi <[email protected]>
Date: Tue, 10 Mar 2009 08:46:11 +0100
Subject: [PATCH] Clk set_parent/get_parent
This patch:
- adds set_parent/get_parent support
- adds clk_for_each utility function
- changes the callback function to return a value
--- arch/sh/include/asm/clock.h | 9 ++++-- arch/sh/kernel/cpu/clock.c | 61 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 7 deletions(-)
arch/sh/include/asm/clock.h +6 -3
@@ -10,11 +10,12 @@struct clk ;struct clk_ops { -void (*init)(struct clk *clk); -void (*enable)(struct clk *clk); -void (*disable)(struct clk *clk); +int (*init)(struct clk *clk); +int (*enable)(struct clk *clk); +int (*disable)(struct clk *clk);void (*recalc)(struct clk *clk);int (*set_rate)(struct clk *clk,unsigned long rate,int algo_id); +int (*set_parent)(struct clk *clk,struct clk *parent);long (*round_rate)(struct clk *clk,unsigned long rate); };
@@ -49,6 +50,8 @@ void clk_recalc_rate(struct clk *);int clk_register (struct clk *);void clk_unregister (struct clk *); +int clk_for_each (int (*fn)(struct clk *clk,void *data),void *data); +static inline int clk_always_enable (const char *id) {struct clk *clk;
arch/sh/kernel/cpu/clock.c +57 -4
97 lines not on this page · raw message
Signature · 1 line
1.5.6.6
Hi Francesco,
Thanks for your work on this!
Quoted 3 lines · Francesco VIRLINZI
I would add the following functions in the clock framework
-clk_set_parent
-clk_get_parent
1) I agree about adding the functions above.
Quoted 2 lines
and the utility function
-clk_for_each
2) As much as I like functions like this, where is this used?
(From patch header)
Quoted 1 line
- changes the callback function to return a value
3) These changes break other code. You need to update cpu/sh4a/clock-* files as well. I agree about init and enable, but why does the disable callback need to return something?
Please break out 1) and resubmit it inline to begin with. Let's deal with 2) and 3) separately.
Cheers,
/ magnus
Quoted 18 lines · Magnus Damm
Hi Francesco,
Thanks for your work on this!
Quoted 3 lines · Francesco VIRLINZI
I would add the following functions in the clock framework
-clk_set_parent
-clk_get_parent1) I agree about adding the functions above.
Quoted 2 lines
and the utility function
-clk_for_each2) As much as I like functions like this, where is this used?
(From patch header)
Quoted 9 lines
Quoted 1 line
- changes the callback function to return a value
3) These changes break other code. You need to update cpu/sh4a/clock-* files as well. I agree about init and enable, but why does the disable callback need to return something?
Please break out 1) and resubmit it inline to begin with. Let's deal with 2) and 3) separately.
Agreed. 1) can be merged as is, as it doesn't really impact anything, and matches updates to linux/clk.h, even if we don't use them today. 2) needs a user before we consider merging it, and 3) needs to include the updates to all of the clock files if we are to merge it, as this change will have to be made in one shot. It's not clear why the return value is something we care about in most of these cases, so I'm rather less enthusiastic about making such a sweeping change.
For now, I'll fold 1) in to the tree. 2) and 3) can be added later if and when the aforementioned issues are resolved.
PATCH 1/1 sh_clk: added clk_set_parent/clk_get_parent v2
In reply to Francesco VIRLINZIFrom 96d7aa00af83ecb4a3660ace507221b959aa12f1 Mon Sep 17 00:00:00 2001
From: Francesco Virlinzi <[email protected]>
Date: Wed, 11 Mar 2009 08:09:16 +0100
Subject: [PATCH] sh_clk: Add clk_set_parent/clk_get_parent support
This patch adds the clk_set_parent/clk_get_parent in the sh clock framework
--- arch/sh/include/asm/clock.h | 1 + arch/sh/kernel/cpu/clock.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-)
arch/sh/include/asm/clock.h +1 -0
@@ -15,6 +15,7 @@ struct clk_ops {void (*disable)(struct clk *clk);void (*recalc)(struct clk *clk);int (*set_rate)(struct clk *clk,unsigned long rate,int algo_id); +int (*set_parent)(struct clk *clk,struct clk *parent);long (*round_rate)(struct clk *clk,unsigned long rate); };
arch/sh/kernel/cpu/clock.c +29 -0
@@ -239,6 +239,35 @@ void clk_recalc_rate(struct clk *clk) }EXPORT_SYMBOL_GPL (clk_recalc_rate); +int clk_set_parent (struct clk *clk,struct clk *parent) +{ +int ret = -EINVAL ; +struct clk *old; + +if (!parent || !clk) +return ret; + + old = clk->parent; +if (likely (clk->ops && clk->ops->set_parent)) { +unsigned long flags; +spin_lock_irqsave (&clock_lock, flags); + ret = clk->ops->set_parent (clk, parent); +spin_unlock_irqrestore (&clock_lock, flags); + clk->parent = (ret ? old : parent); + } + +if (unlikely (clk->flags &CLK_RATE_PROPAGATES )) +propagate_rate (clk); +return ret; +} +EXPORT_SYMBOL_GPL (clk_set_parent); + +struct clk *clk_get_parent (struct clk *clk) +{ +return clk->parent; +} +EXPORT_SYMBOL_GPL (clk_get_parent); +long clk_round_rate (struct clk *clk,unsigned long rate) {if (likely (clk->ops && clk->ops->round_rate)) {
Signature · 1 line
1.5.6.6
Paul Mundt
AppliedRe: [PATCH] sh_clk: added clk_set_parent/clk_get_parent v2
In reply to Francesco VIRLINZIQuoted 3 lines · Francesco VIRLINZI
This patch adds the clk_set_parent/clk_get_parent in the sh clock framework
Signed-off-by Francesco Virlinzi <[email protected]>
Quoted 3 lines · Francesco VIRLINZI
This patch adds the hibernation support in the clock framework
Signed-off-by Francesco Virlinzi <[email protected]>
Applied, thanks.