aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDinh Nguyen <dinguyen@kernel.org>2018-05-02 10:28:32 -0400
committerStephen Boyd <sboyd@kernel.org>2018-05-15 17:54:52 -0400
commit1ace0dfd754feef171e9209c8266efb198f5c19c (patch)
treeabff2fc034e49b3f167d8e8c4d8456c32562b91a
parent60cc43fc888428bb2f18f08997432d426a243338 (diff)
clk: socfpga: stratix10: use platform driver APIs
Use platform driver APIs to map memory so that it will automatically free the memory in case of errors. Signed-off-by: Dinh Nguyen <dinguyen@kernel.org> [sboyd@kernel.org: Return -ENOMEM error pointers, check for error pointer at call site] Signed-off-by: Stephen Boyd <sboyd@kernel.org>
-rw-r--r--drivers/clk/socfpga/clk-s10.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/drivers/clk/socfpga/clk-s10.c b/drivers/clk/socfpga/clk-s10.c
index 3a11c382a663..1ffe3f05f2fc 100644
--- a/drivers/clk/socfpga/clk-s10.c
+++ b/drivers/clk/socfpga/clk-s10.c
@@ -260,46 +260,45 @@ static int s10_clk_register_pll(const struct stratix10_pll_clock *clks,
260 return 0; 260 return 0;
261} 261}
262 262
263static struct stratix10_clock_data *__socfpga_s10_clk_init(struct device_node *np, 263static struct stratix10_clock_data *__socfpga_s10_clk_init(struct platform_device *pdev,
264 int nr_clks) 264 int nr_clks)
265{ 265{
266 struct device_node *np = pdev->dev.of_node;
267 struct device *dev = &pdev->dev;
266 struct stratix10_clock_data *clk_data; 268 struct stratix10_clock_data *clk_data;
267 struct clk **clk_table; 269 struct clk **clk_table;
270 struct resource *res;
268 void __iomem *base; 271 void __iomem *base;
269 272
270 base = of_iomap(np, 0); 273 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
271 if (!base) { 274 base = devm_ioremap_resource(dev, res);
275 if (IS_ERR(base)) {
272 pr_err("%s: failed to map clock registers\n", __func__); 276 pr_err("%s: failed to map clock registers\n", __func__);
273 goto err; 277 return ERR_CAST(base);
274 } 278 }
275 279
276 clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL); 280 clk_data = devm_kzalloc(dev, sizeof(*clk_data), GFP_KERNEL);
277 if (!clk_data) 281 if (!clk_data)
278 goto err; 282 return ERR_PTR(-ENOMEM);
279 283
280 clk_data->base = base; 284 clk_data->base = base;
281 clk_table = kcalloc(nr_clks, sizeof(*clk_table), GFP_KERNEL); 285 clk_table = devm_kcalloc(dev, nr_clks, sizeof(*clk_table), GFP_KERNEL);
282 if (!clk_table) 286 if (!clk_table)
283 goto err_data; 287 return ERR_PTR(-ENOMEM);
284 288
285 clk_data->clk_data.clks = clk_table; 289 clk_data->clk_data.clks = clk_table;
286 clk_data->clk_data.clk_num = nr_clks; 290 clk_data->clk_data.clk_num = nr_clks;
287 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data->clk_data); 291 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data->clk_data);
288 return clk_data; 292 return clk_data;
289
290err_data:
291 kfree(clk_data);
292err:
293 return NULL;
294} 293}
295 294
296static int s10_clkmgr_init(struct device_node *np) 295static int s10_clkmgr_init(struct platform_device *pdev)
297{ 296{
298 struct stratix10_clock_data *clk_data; 297 struct stratix10_clock_data *clk_data;
299 298
300 clk_data = __socfpga_s10_clk_init(np, STRATIX10_NUM_CLKS); 299 clk_data = __socfpga_s10_clk_init(pdev, STRATIX10_NUM_CLKS);
301 if (!clk_data) 300 if (IS_ERR(clk_data))
302 return -ENOMEM; 301 return PTR_ERR(clk_data);
303 302
304 s10_clk_register_pll(s10_pll_clks, ARRAY_SIZE(s10_pll_clks), clk_data); 303 s10_clk_register_pll(s10_pll_clks, ARRAY_SIZE(s10_pll_clks), clk_data);
305 304
@@ -317,11 +316,7 @@ static int s10_clkmgr_init(struct device_node *np)
317 316
318static int s10_clkmgr_probe(struct platform_device *pdev) 317static int s10_clkmgr_probe(struct platform_device *pdev)
319{ 318{
320 struct device_node *np = pdev->dev.of_node; 319 return s10_clkmgr_init(pdev);
321
322 s10_clkmgr_init(np);
323
324 return 0;
325} 320}
326 321
327static const struct of_device_id stratix10_clkmgr_match_table[] = { 322static const struct of_device_id stratix10_clkmgr_match_table[] = {