diff options
author | Dinh Nguyen <dinguyen@kernel.org> | 2018-05-02 10:28:32 -0400 |
---|---|---|
committer | Stephen Boyd <sboyd@kernel.org> | 2018-05-15 17:54:52 -0400 |
commit | 1ace0dfd754feef171e9209c8266efb198f5c19c (patch) | |
tree | abff2fc034e49b3f167d8e8c4d8456c32562b91a | |
parent | 60cc43fc888428bb2f18f08997432d426a243338 (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.c | 39 |
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 | ||
263 | static struct stratix10_clock_data *__socfpga_s10_clk_init(struct device_node *np, | 263 | static 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 | |||
290 | err_data: | ||
291 | kfree(clk_data); | ||
292 | err: | ||
293 | return NULL; | ||
294 | } | 293 | } |
295 | 294 | ||
296 | static int s10_clkmgr_init(struct device_node *np) | 295 | static 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 | ||
318 | static int s10_clkmgr_probe(struct platform_device *pdev) | 317 | static 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 | ||
327 | static const struct of_device_id stratix10_clkmgr_match_table[] = { | 322 | static const struct of_device_id stratix10_clkmgr_match_table[] = { |