diff options
author | H Hartley Sweeten <hartleys@visionengravers.com> | 2012-03-26 19:00:17 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-04-01 06:28:29 -0400 |
commit | 01651babb66fb7b51719ff3389a7bfc3ad25fe13 (patch) | |
tree | 77b7308f74de236973ebfc73a873f581d84a6486 | |
parent | e7cff0abf99a0895bc2094e08809bd5e0c4f6a4a (diff) |
ASoC: ep93xx-i2s: use devm_* helpers to cleanup probe
Use the devm_* helpers to cleanup the probe routine. This also eliminates
having to carry the mem value in the private data for the remove.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Tested-by: Mika Westerberg <mika.westerberg@iki.fi>
Acked-by: Mika Westerberg <mika.westerberg@iki.fi>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/ep93xx/ep93xx-i2s.c | 49 |
1 files changed, 14 insertions, 35 deletions
diff --git a/sound/soc/ep93xx/ep93xx-i2s.c b/sound/soc/ep93xx/ep93xx-i2s.c index f7a62348e3fe..8df8f6dc474f 100644 --- a/sound/soc/ep93xx/ep93xx-i2s.c +++ b/sound/soc/ep93xx/ep93xx-i2s.c | |||
@@ -63,7 +63,6 @@ struct ep93xx_i2s_info { | |||
63 | struct clk *sclk; | 63 | struct clk *sclk; |
64 | struct clk *lrclk; | 64 | struct clk *lrclk; |
65 | struct ep93xx_pcm_dma_params *dma_params; | 65 | struct ep93xx_pcm_dma_params *dma_params; |
66 | struct resource *mem; | ||
67 | void __iomem *regs; | 66 | void __iomem *regs; |
68 | }; | 67 | }; |
69 | 68 | ||
@@ -373,38 +372,22 @@ static int ep93xx_i2s_probe(struct platform_device *pdev) | |||
373 | struct resource *res; | 372 | struct resource *res; |
374 | int err; | 373 | int err; |
375 | 374 | ||
376 | info = kzalloc(sizeof(struct ep93xx_i2s_info), GFP_KERNEL); | 375 | info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); |
377 | if (!info) { | 376 | if (!info) |
378 | err = -ENOMEM; | 377 | return -ENOMEM; |
379 | goto fail; | ||
380 | } | ||
381 | |||
382 | dev_set_drvdata(&pdev->dev, info); | ||
383 | info->dma_params = ep93xx_i2s_dma_params; | ||
384 | 378 | ||
385 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 379 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
386 | if (!res) { | 380 | if (!res) |
387 | err = -ENODEV; | 381 | return -ENODEV; |
388 | goto fail_free_info; | ||
389 | } | ||
390 | 382 | ||
391 | info->mem = request_mem_region(res->start, resource_size(res), | 383 | info->regs = devm_request_and_ioremap(&pdev->dev, res); |
392 | pdev->name); | 384 | if (!info->regs) |
393 | if (!info->mem) { | 385 | return -ENXIO; |
394 | err = -EBUSY; | ||
395 | goto fail_free_info; | ||
396 | } | ||
397 | |||
398 | info->regs = ioremap(info->mem->start, resource_size(info->mem)); | ||
399 | if (!info->regs) { | ||
400 | err = -ENXIO; | ||
401 | goto fail_release_mem; | ||
402 | } | ||
403 | 386 | ||
404 | info->mclk = clk_get(&pdev->dev, "mclk"); | 387 | info->mclk = clk_get(&pdev->dev, "mclk"); |
405 | if (IS_ERR(info->mclk)) { | 388 | if (IS_ERR(info->mclk)) { |
406 | err = PTR_ERR(info->mclk); | 389 | err = PTR_ERR(info->mclk); |
407 | goto fail_unmap_mem; | 390 | goto fail; |
408 | } | 391 | } |
409 | 392 | ||
410 | info->sclk = clk_get(&pdev->dev, "sclk"); | 393 | info->sclk = clk_get(&pdev->dev, "sclk"); |
@@ -419,6 +402,9 @@ static int ep93xx_i2s_probe(struct platform_device *pdev) | |||
419 | goto fail_put_sclk; | 402 | goto fail_put_sclk; |
420 | } | 403 | } |
421 | 404 | ||
405 | dev_set_drvdata(&pdev->dev, info); | ||
406 | info->dma_params = ep93xx_i2s_dma_params; | ||
407 | |||
422 | err = snd_soc_register_dai(&pdev->dev, &ep93xx_i2s_dai); | 408 | err = snd_soc_register_dai(&pdev->dev, &ep93xx_i2s_dai); |
423 | if (err) | 409 | if (err) |
424 | goto fail_put_lrclk; | 410 | goto fail_put_lrclk; |
@@ -426,17 +412,12 @@ static int ep93xx_i2s_probe(struct platform_device *pdev) | |||
426 | return 0; | 412 | return 0; |
427 | 413 | ||
428 | fail_put_lrclk: | 414 | fail_put_lrclk: |
415 | dev_set_drvdata(&pdev->dev, NULL); | ||
429 | clk_put(info->lrclk); | 416 | clk_put(info->lrclk); |
430 | fail_put_sclk: | 417 | fail_put_sclk: |
431 | clk_put(info->sclk); | 418 | clk_put(info->sclk); |
432 | fail_put_mclk: | 419 | fail_put_mclk: |
433 | clk_put(info->mclk); | 420 | clk_put(info->mclk); |
434 | fail_unmap_mem: | ||
435 | iounmap(info->regs); | ||
436 | fail_release_mem: | ||
437 | release_mem_region(info->mem->start, resource_size(info->mem)); | ||
438 | fail_free_info: | ||
439 | kfree(info); | ||
440 | fail: | 421 | fail: |
441 | return err; | 422 | return err; |
442 | } | 423 | } |
@@ -446,12 +427,10 @@ static int __devexit ep93xx_i2s_remove(struct platform_device *pdev) | |||
446 | struct ep93xx_i2s_info *info = dev_get_drvdata(&pdev->dev); | 427 | struct ep93xx_i2s_info *info = dev_get_drvdata(&pdev->dev); |
447 | 428 | ||
448 | snd_soc_unregister_dai(&pdev->dev); | 429 | snd_soc_unregister_dai(&pdev->dev); |
430 | dev_set_drvdata(&pdev->dev, NULL); | ||
449 | clk_put(info->lrclk); | 431 | clk_put(info->lrclk); |
450 | clk_put(info->sclk); | 432 | clk_put(info->sclk); |
451 | clk_put(info->mclk); | 433 | clk_put(info->mclk); |
452 | iounmap(info->regs); | ||
453 | release_mem_region(info->mem->start, resource_size(info->mem)); | ||
454 | kfree(info); | ||
455 | return 0; | 434 | return 0; |
456 | } | 435 | } |
457 | 436 | ||