q6sstop-qcs404.c (c95baf12f5077419db01313ab61c2aac007d40cd) q6sstop-qcs404.c (72cfc73f4663abe0b5c420d255c932ae5e7c126d)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/bitops.h>
7#include <linux/err.h>
8#include <linux/module.h>

--- 145 unchanged lines hidden (view full) ---

154};
155MODULE_DEVICE_TABLE(of, q6sstopcc_qcs404_match_table);
156
157static int q6sstopcc_qcs404_probe(struct platform_device *pdev)
158{
159 const struct qcom_cc_desc *desc;
160 int ret;
161
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/bitops.h>
7#include <linux/err.h>
8#include <linux/module.h>

--- 145 unchanged lines hidden (view full) ---

154};
155MODULE_DEVICE_TABLE(of, q6sstopcc_qcs404_match_table);
156
157static int q6sstopcc_qcs404_probe(struct platform_device *pdev)
158{
159 const struct qcom_cc_desc *desc;
160 int ret;
161
162 pm_runtime_enable(&pdev->dev);
163 ret = pm_clk_create(&pdev->dev);
162 ret = devm_pm_runtime_enable(&pdev->dev);
164 if (ret)
163 if (ret)
165 goto disable_pm_runtime;
164 return ret;
166
165
166 ret = devm_pm_clk_create(&pdev->dev);
167 if (ret)
168 return ret;
169
167 ret = pm_clk_add(&pdev->dev, NULL);
168 if (ret < 0) {
169 dev_err(&pdev->dev, "failed to acquire iface clock\n");
170 ret = pm_clk_add(&pdev->dev, NULL);
171 if (ret < 0) {
172 dev_err(&pdev->dev, "failed to acquire iface clock\n");
170 goto destroy_pm_clk;
173 return ret;
171 }
172
173 q6sstop_regmap_config.name = "q6sstop_tcsr";
174 desc = &tcsr_qcs404_desc;
175
176 ret = qcom_cc_probe_by_index(pdev, 1, desc);
177 if (ret)
174 }
175
176 q6sstop_regmap_config.name = "q6sstop_tcsr";
177 desc = &tcsr_qcs404_desc;
178
179 ret = qcom_cc_probe_by_index(pdev, 1, desc);
180 if (ret)
178 goto destroy_pm_clk;
181 return ret;
179
180 q6sstop_regmap_config.name = "q6sstop_cc";
181 desc = &q6sstop_qcs404_desc;
182
183 ret = qcom_cc_probe_by_index(pdev, 0, desc);
184 if (ret)
182
183 q6sstop_regmap_config.name = "q6sstop_cc";
184 desc = &q6sstop_qcs404_desc;
185
186 ret = qcom_cc_probe_by_index(pdev, 0, desc);
187 if (ret)
185 goto destroy_pm_clk;
188 return ret;
186
187 return 0;
189
190 return 0;
188
189destroy_pm_clk:
190 pm_clk_destroy(&pdev->dev);
191
192disable_pm_runtime:
193 pm_runtime_disable(&pdev->dev);
194
195 return ret;
196}
197
191}
192
198static int q6sstopcc_qcs404_remove(struct platform_device *pdev)
199{
200 pm_clk_destroy(&pdev->dev);
201 pm_runtime_disable(&pdev->dev);
202
203 return 0;
204}
205
206static const struct dev_pm_ops q6sstopcc_pm_ops = {
207 SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
208};
209
210static struct platform_driver q6sstopcc_qcs404_driver = {
211 .probe = q6sstopcc_qcs404_probe,
193static const struct dev_pm_ops q6sstopcc_pm_ops = {
194 SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
195};
196
197static struct platform_driver q6sstopcc_qcs404_driver = {
198 .probe = q6sstopcc_qcs404_probe,
212 .remove = q6sstopcc_qcs404_remove,
213 .driver = {
214 .name = "qcs404-q6sstopcc",
215 .of_match_table = q6sstopcc_qcs404_match_table,
216 .pm = &q6sstopcc_pm_ops,
217 },
218};
219
220module_platform_driver(q6sstopcc_qcs404_driver);
221
222MODULE_DESCRIPTION("QTI QCS404 Q6SSTOP Clock Controller Driver");
223MODULE_LICENSE("GPL v2");
199 .driver = {
200 .name = "qcs404-q6sstopcc",
201 .of_match_table = q6sstopcc_qcs404_match_table,
202 .pm = &q6sstopcc_pm_ops,
203 },
204};
205
206module_platform_driver(q6sstopcc_qcs404_driver);
207
208MODULE_DESCRIPTION("QTI QCS404 Q6SSTOP Clock Controller Driver");
209MODULE_LICENSE("GPL v2");