diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-11-20 07:19:33 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-11-20 20:40:23 -0500 |
commit | dbc517bf32985f2438ff706204a6dd1476b3dc98 (patch) | |
tree | 5641724bfbe6abd578bf6eabec1c6ed6ea3d218f /sound/soc/kirkwood/kirkwood-i2s.c | |
parent | 3ccdf5bbdf5f2488e4a36692d055ba9c43ae6717 (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.c | 53 |
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 | |||
469 | err_ioremap: | ||
470 | iounmap(priv->io); | ||
471 | err_iomem: | ||
472 | release_mem_region(priv->mem->start, SZ_16K); | ||
473 | err_alloc: | ||
474 | kfree(priv); | ||
475 | error: | ||
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 | } |