diff options
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; |