aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRajendra Nayak <rnayak@codeaurora.org>2015-08-06 06:37:43 -0400
committerStephen Boyd <sboyd@codeaurora.org>2015-09-16 18:22:37 -0400
commit5e5cc241e9c448d1f6e5fdef843ab018a9947d5c (patch)
tree36f8b483cba8265e2c534467b47ac3ec797c4935
parent45dd0e55317ccb27fe8eae639275c2b3a2fb52e5 (diff)
clk: qcom: gdsc: Prepare common clk probe to register gdscs
The common clk probe registers a clk provider and a reset controller. Update it to register a genpd provider using the gdsc data provided by each platform. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r--drivers/clk/qcom/common.c15
-rw-r--r--drivers/clk/qcom/common.h2
2 files changed, 16 insertions, 1 deletions
diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c
index 2dedceefd21d..dc51a63c9625 100644
--- a/drivers/clk/qcom/common.c
+++ b/drivers/clk/qcom/common.c
@@ -22,6 +22,7 @@
22#include "clk-rcg.h" 22#include "clk-rcg.h"
23#include "clk-regmap.h" 23#include "clk-regmap.h"
24#include "reset.h" 24#include "reset.h"
25#include "gdsc.h"
25 26
26struct qcom_cc { 27struct qcom_cc {
27 struct qcom_reset_controller reset; 28 struct qcom_reset_controller reset;
@@ -121,8 +122,19 @@ int qcom_cc_really_probe(struct platform_device *pdev,
121 122
122 ret = reset_controller_register(&reset->rcdev); 123 ret = reset_controller_register(&reset->rcdev);
123 if (ret) 124 if (ret)
124 of_clk_del_provider(dev->of_node); 125 goto err_reset;
125 126
127 if (desc->gdscs && desc->num_gdscs) {
128 ret = gdsc_register(dev, desc->gdscs, desc->num_gdscs, regmap);
129 if (ret)
130 goto err_pd;
131 }
132
133 return 0;
134err_pd:
135 reset_controller_unregister(&reset->rcdev);
136err_reset:
137 of_clk_del_provider(dev->of_node);
126 return ret; 138 return ret;
127} 139}
128EXPORT_SYMBOL_GPL(qcom_cc_really_probe); 140EXPORT_SYMBOL_GPL(qcom_cc_really_probe);
@@ -141,6 +153,7 @@ EXPORT_SYMBOL_GPL(qcom_cc_probe);
141 153
142void qcom_cc_remove(struct platform_device *pdev) 154void qcom_cc_remove(struct platform_device *pdev)
143{ 155{
156 gdsc_unregister(&pdev->dev);
144 of_clk_del_provider(pdev->dev.of_node); 157 of_clk_del_provider(pdev->dev.of_node);
145 reset_controller_unregister(platform_get_drvdata(pdev)); 158 reset_controller_unregister(platform_get_drvdata(pdev));
146} 159}
diff --git a/drivers/clk/qcom/common.h b/drivers/clk/qcom/common.h
index 7a0e73713063..2892b71fbd71 100644
--- a/drivers/clk/qcom/common.h
+++ b/drivers/clk/qcom/common.h
@@ -28,6 +28,8 @@ struct qcom_cc_desc {
28 size_t num_clks; 28 size_t num_clks;
29 const struct qcom_reset_map *resets; 29 const struct qcom_reset_map *resets;
30 size_t num_resets; 30 size_t num_resets;
31 struct gdsc **gdscs;
32 size_t num_gdscs;
31}; 33};
32 34
33extern const struct freq_tbl *qcom_find_freq(const struct freq_tbl *f, 35extern const struct freq_tbl *qcom_find_freq(const struct freq_tbl *f,