diff options
author | Rajendra Nayak <rnayak@codeaurora.org> | 2015-08-06 06:37:43 -0400 |
---|---|---|
committer | Stephen Boyd <sboyd@codeaurora.org> | 2015-09-16 18:22:37 -0400 |
commit | 5e5cc241e9c448d1f6e5fdef843ab018a9947d5c (patch) | |
tree | 36f8b483cba8265e2c534467b47ac3ec797c4935 | |
parent | 45dd0e55317ccb27fe8eae639275c2b3a2fb52e5 (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.c | 15 | ||||
-rw-r--r-- | drivers/clk/qcom/common.h | 2 |
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 | ||
26 | struct qcom_cc { | 27 | struct 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; | ||
134 | err_pd: | ||
135 | reset_controller_unregister(&reset->rcdev); | ||
136 | err_reset: | ||
137 | of_clk_del_provider(dev->of_node); | ||
126 | return ret; | 138 | return ret; |
127 | } | 139 | } |
128 | EXPORT_SYMBOL_GPL(qcom_cc_really_probe); | 140 | EXPORT_SYMBOL_GPL(qcom_cc_really_probe); |
@@ -141,6 +153,7 @@ EXPORT_SYMBOL_GPL(qcom_cc_probe); | |||
141 | 153 | ||
142 | void qcom_cc_remove(struct platform_device *pdev) | 154 | void 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 | ||
33 | extern const struct freq_tbl *qcom_find_freq(const struct freq_tbl *f, | 35 | extern const struct freq_tbl *qcom_find_freq(const struct freq_tbl *f, |