diff options
Diffstat (limited to 'drivers/clk/clk-devres.c')
-rw-r--r-- | drivers/clk/clk-devres.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index d854e26a8ddb..12c87457eca1 100644 --- a/drivers/clk/clk-devres.c +++ b/drivers/clk/clk-devres.c | |||
@@ -70,6 +70,30 @@ int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, | |||
70 | } | 70 | } |
71 | EXPORT_SYMBOL_GPL(devm_clk_bulk_get); | 71 | EXPORT_SYMBOL_GPL(devm_clk_bulk_get); |
72 | 72 | ||
73 | int __must_check devm_clk_bulk_get_all(struct device *dev, | ||
74 | struct clk_bulk_data **clks) | ||
75 | { | ||
76 | struct clk_bulk_devres *devres; | ||
77 | int ret; | ||
78 | |||
79 | devres = devres_alloc(devm_clk_bulk_release, | ||
80 | sizeof(*devres), GFP_KERNEL); | ||
81 | if (!devres) | ||
82 | return -ENOMEM; | ||
83 | |||
84 | ret = clk_bulk_get_all(dev, &devres->clks); | ||
85 | if (ret > 0) { | ||
86 | *clks = devres->clks; | ||
87 | devres->num_clks = ret; | ||
88 | devres_add(dev, devres); | ||
89 | } else { | ||
90 | devres_free(devres); | ||
91 | } | ||
92 | |||
93 | return ret; | ||
94 | } | ||
95 | EXPORT_SYMBOL_GPL(devm_clk_bulk_get_all); | ||
96 | |||
73 | static int devm_clk_match(struct device *dev, void *res, void *data) | 97 | static int devm_clk_match(struct device *dev, void *res, void *data) |
74 | { | 98 | { |
75 | struct clk **c = res; | 99 | struct clk **c = res; |