aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/kirkwood/kirkwood-i2s.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2012-11-20 07:19:33 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-11-20 20:40:23 -0500
commitdbc517bf32985f2438ff706204a6dd1476b3dc98 (patch)
tree5641724bfbe6abd578bf6eabec1c6ed6ea3d218f /sound/soc/kirkwood/kirkwood-i2s.c
parent3ccdf5bbdf5f2488e4a36692d055ba9c43ae6717 (diff)
ASoC: kirkwood-i2s: use devm_* APIs
Simplify the cleanup paths in the driver by using the devm_* APIs, ensuring that all error paths are correctly checked. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/kirkwood/kirkwood-i2s.c')
-rw-r--r--sound/soc/kirkwood/kirkwood-i2s.c53
1 files changed, 15 insertions, 38 deletions
diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c
index 1d5db484d2df..f059f401bdad 100644
--- a/sound/soc/kirkwood/kirkwood-i2s.c
+++ b/sound/soc/kirkwood/kirkwood-i2s.c
@@ -406,57 +406,47 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev)
406 struct kirkwood_dma_data *priv; 406 struct kirkwood_dma_data *priv;
407 int err; 407 int err;
408 408
409 priv = kzalloc(sizeof(struct kirkwood_dma_data), GFP_KERNEL); 409 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
410 if (!priv) { 410 if (!priv) {
411 dev_err(&pdev->dev, "allocation failed\n"); 411 dev_err(&pdev->dev, "allocation failed\n");
412 err = -ENOMEM; 412 return -ENOMEM;
413 goto error;
414 } 413 }
415 dev_set_drvdata(&pdev->dev, priv); 414 dev_set_drvdata(&pdev->dev, priv);
416 415
417 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 416 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
418 if (!mem) { 417 if (!mem) {
419 dev_err(&pdev->dev, "platform_get_resource failed\n"); 418 dev_err(&pdev->dev, "platform_get_resource failed\n");
420 err = -ENXIO; 419 return -ENXIO;
421 goto err_alloc;
422 } 420 }
423 421
424 priv->mem = request_mem_region(mem->start, SZ_16K, DRV_NAME); 422 priv->io = devm_request_and_ioremap(&pdev->dev, mem);
425 if (!priv->mem) {
426 dev_err(&pdev->dev, "request_mem_region failed\n");
427 err = -EBUSY;
428 goto err_alloc;
429 }
430
431 priv->io = ioremap(priv->mem->start, SZ_16K);
432 if (!priv->io) { 423 if (!priv->io) {
433 dev_err(&pdev->dev, "ioremap failed\n"); 424 dev_err(&pdev->dev, "devm_request_and_ioremap failed\n");
434 err = -ENOMEM; 425 return -ENOMEM;
435 goto err_iomem;
436 } 426 }
437 427
438 priv->irq = platform_get_irq(pdev, 0); 428 priv->irq = platform_get_irq(pdev, 0);
439 if (priv->irq <= 0) { 429 if (priv->irq <= 0) {
440 dev_err(&pdev->dev, "platform_get_irq failed\n"); 430 dev_err(&pdev->dev, "platform_get_irq failed\n");
441 err = -ENXIO; 431 return -ENXIO;
442 goto err_ioremap;
443 } 432 }
444 433
445 if (!data) { 434 if (!data) {
446 dev_err(&pdev->dev, "no platform data ?!\n"); 435 dev_err(&pdev->dev, "no platform data ?!\n");
447 err = -EINVAL; 436 return -EINVAL;
448 goto err_ioremap;
449 } 437 }
450 438
451 priv->burst = data->burst; 439 priv->burst = data->burst;
452 440
453 priv->clk = clk_get(&pdev->dev, NULL); 441 priv->clk = devm_clk_get(&pdev->dev, NULL);
454 if (IS_ERR(priv->clk)) { 442 if (IS_ERR(priv->clk)) {
455 dev_err(&pdev->dev, "no clock\n"); 443 dev_err(&pdev->dev, "no clock\n");
456 err = PTR_ERR(priv->clk); 444 return PTR_ERR(priv->clk);
457 goto err_ioremap;
458 } 445 }
459 clk_prepare_enable(priv->clk); 446
447 err = clk_prepare_enable(priv->clk);
448 if (err < 0)
449 return err;
460 450
461 err = snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai); 451 err = snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai);
462 if (!err) 452 if (!err)
@@ -464,15 +454,7 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev)
464 dev_err(&pdev->dev, "snd_soc_register_dai failed\n"); 454 dev_err(&pdev->dev, "snd_soc_register_dai failed\n");
465 455
466 clk_disable_unprepare(priv->clk); 456 clk_disable_unprepare(priv->clk);
467 clk_put(priv->clk); 457
468
469err_ioremap:
470 iounmap(priv->io);
471err_iomem:
472 release_mem_region(priv->mem->start, SZ_16K);
473err_alloc:
474 kfree(priv);
475error:
476 return err; 458 return err;
477} 459}
478 460
@@ -483,11 +465,6 @@ static __devexit int kirkwood_i2s_dev_remove(struct platform_device *pdev)
483 snd_soc_unregister_dai(&pdev->dev); 465 snd_soc_unregister_dai(&pdev->dev);
484 466
485 clk_disable_unprepare(priv->clk); 467 clk_disable_unprepare(priv->clk);
486 clk_put(priv->clk);
487
488 iounmap(priv->io);
489 release_mem_region(priv->mem->start, SZ_16K);
490 kfree(priv);
491 468
492 return 0; 469 return 0;
493} 470}