diff options
author | James Hogan <james.hogan@imgtec.com> | 2013-07-29 07:24:58 -0400 |
---|---|---|
committer | Mike Turquette <mturquette@linaro.org> | 2013-08-19 15:27:15 -0400 |
commit | 7ef3dcc8145263cb5a8c7059f82d44c948eb46a8 (patch) | |
tree | cccb8923cc346c372cb2e7f077b141c11f7e5cac /drivers/clk/clk.c | |
parent | 5cfe10bb00e1b8c0aaa3f0c796c643bb1af6db82 (diff) |
clk: abstract parent cache
Abstract access to the clock parent cache by defining
clk_get_parent_by_index(clk, index). This allows access to parent
clocks from clock drivers.
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Cc: Mike Turquette <mturquette@linaro.org>
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Mike Turquette <mturquette@linaro.org>
Diffstat (limited to 'drivers/clk/clk.c')
-rw-r--r-- | drivers/clk/clk.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 56a00db61332..42c15a8ba34d 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c | |||
@@ -559,6 +559,19 @@ struct clk *__clk_get_parent(struct clk *clk) | |||
559 | return !clk ? NULL : clk->parent; | 559 | return !clk ? NULL : clk->parent; |
560 | } | 560 | } |
561 | 561 | ||
562 | struct clk *clk_get_parent_by_index(struct clk *clk, u8 index) | ||
563 | { | ||
564 | if (!clk || index >= clk->num_parents) | ||
565 | return NULL; | ||
566 | else if (!clk->parents) | ||
567 | return __clk_lookup(clk->parent_names[index]); | ||
568 | else if (!clk->parents[index]) | ||
569 | return clk->parents[index] = | ||
570 | __clk_lookup(clk->parent_names[index]); | ||
571 | else | ||
572 | return clk->parents[index]; | ||
573 | } | ||
574 | |||
562 | unsigned int __clk_get_enable_count(struct clk *clk) | 575 | unsigned int __clk_get_enable_count(struct clk *clk) |
563 | { | 576 | { |
564 | return !clk ? 0 : clk->enable_count; | 577 | return !clk ? 0 : clk->enable_count; |
@@ -1316,13 +1329,7 @@ static struct clk *__clk_init_parent(struct clk *clk) | |||
1316 | kzalloc((sizeof(struct clk*) * clk->num_parents), | 1329 | kzalloc((sizeof(struct clk*) * clk->num_parents), |
1317 | GFP_KERNEL); | 1330 | GFP_KERNEL); |
1318 | 1331 | ||
1319 | if (!clk->parents) | 1332 | ret = clk_get_parent_by_index(clk, index); |
1320 | ret = __clk_lookup(clk->parent_names[index]); | ||
1321 | else if (!clk->parents[index]) | ||
1322 | ret = clk->parents[index] = | ||
1323 | __clk_lookup(clk->parent_names[index]); | ||
1324 | else | ||
1325 | ret = clk->parents[index]; | ||
1326 | 1333 | ||
1327 | out: | 1334 | out: |
1328 | return ret; | 1335 | return ret; |