aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2016-11-02 07:28:17 -0400
committerMark Brown <broonie@kernel.org>2016-11-02 11:15:01 -0400
commitd8dbb4b327a84a7d373c8c4bf173bcab22f102ff (patch)
tree05d9aab93f1b6ca90f17f2653b273f431012ed52
parent990fcfefc925a959e204a44fc479efcc236ebced (diff)
ASoC: samsung: pcm: Conversion to use devm_ioremap_resource()
This simplifies the code a bit and removes a hard coded IO memory region size. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/samsung/pcm.c60
1 files changed, 16 insertions, 44 deletions
diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c
index c484985812ed..d50a6377c23d 100644
--- a/sound/soc/samsung/pcm.c
+++ b/sound/soc/samsung/pcm.c
@@ -499,13 +499,6 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev)
499 499
500 pcm_pdata = pdev->dev.platform_data; 500 pcm_pdata = pdev->dev.platform_data;
501 501
502 /* Check for availability of necessary resource */
503 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
504 if (!mem_res) {
505 dev_err(&pdev->dev, "Unable to get register resource\n");
506 return -ENXIO;
507 }
508
509 if (pcm_pdata && pcm_pdata->cfg_gpio && pcm_pdata->cfg_gpio(pdev)) { 502 if (pcm_pdata && pcm_pdata->cfg_gpio && pcm_pdata->cfg_gpio(pdev)) {
510 dev_err(&pdev->dev, "Unable to configure gpio\n"); 503 dev_err(&pdev->dev, "Unable to configure gpio\n");
511 return -EINVAL; 504 return -EINVAL;
@@ -519,36 +512,26 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev)
519 /* Default is 128fs */ 512 /* Default is 128fs */
520 pcm->sclk_per_fs = 128; 513 pcm->sclk_per_fs = 128;
521 514
515 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
516 pcm->regs = devm_ioremap_resource(&pdev->dev, mem_res);
517 if (IS_ERR(pcm->regs))
518 return PTR_ERR(pcm->regs);
519
522 pcm->cclk = devm_clk_get(&pdev->dev, "audio-bus"); 520 pcm->cclk = devm_clk_get(&pdev->dev, "audio-bus");
523 if (IS_ERR(pcm->cclk)) { 521 if (IS_ERR(pcm->cclk)) {
524 dev_err(&pdev->dev, "failed to get audio-bus\n"); 522 dev_err(&pdev->dev, "failed to get audio-bus clock\n");
525 ret = PTR_ERR(pcm->cclk); 523 return PTR_ERR(pcm->cclk);
526 goto err1;
527 } 524 }
528 clk_prepare_enable(pcm->cclk); 525 clk_prepare_enable(pcm->cclk);
529 526
530 /* record our pcm structure for later use in the callbacks */ 527 /* record our pcm structure for later use in the callbacks */
531 dev_set_drvdata(&pdev->dev, pcm); 528 dev_set_drvdata(&pdev->dev, pcm);
532 529
533 if (!request_mem_region(mem_res->start,
534 resource_size(mem_res), "samsung-pcm")) {
535 dev_err(&pdev->dev, "Unable to request register region\n");
536 ret = -EBUSY;
537 goto err2;
538 }
539
540 pcm->regs = ioremap(mem_res->start, 0x100);
541 if (pcm->regs == NULL) {
542 dev_err(&pdev->dev, "cannot ioremap registers\n");
543 ret = -ENXIO;
544 goto err3;
545 }
546
547 pcm->pclk = devm_clk_get(&pdev->dev, "pcm"); 530 pcm->pclk = devm_clk_get(&pdev->dev, "pcm");
548 if (IS_ERR(pcm->pclk)) { 531 if (IS_ERR(pcm->pclk)) {
549 dev_err(&pdev->dev, "failed to get pcm_clock\n"); 532 dev_err(&pdev->dev, "failed to get pcm clock\n");
550 ret = -ENOENT; 533 ret = PTR_ERR(pcm->pclk);
551 goto err4; 534 goto err_dis_cclk;
552 } 535 }
553 clk_prepare_enable(pcm->pclk); 536 clk_prepare_enable(pcm->pclk);
554 537
@@ -569,7 +552,7 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev)
569 NULL, NULL); 552 NULL, NULL);
570 if (ret) { 553 if (ret) {
571 dev_err(&pdev->dev, "failed to get register DMA: %d\n", ret); 554 dev_err(&pdev->dev, "failed to get register DMA: %d\n", ret);
572 goto err5; 555 goto err_dis_pclk;
573 } 556 }
574 557
575 pm_runtime_enable(&pdev->dev); 558 pm_runtime_enable(&pdev->dev);
@@ -578,36 +561,25 @@ static int s3c_pcm_dev_probe(struct platform_device *pdev)
578 &s3c_pcm_dai[pdev->id], 1); 561 &s3c_pcm_dai[pdev->id], 1);
579 if (ret != 0) { 562 if (ret != 0) {
580 dev_err(&pdev->dev, "failed to get register DAI: %d\n", ret); 563 dev_err(&pdev->dev, "failed to get register DAI: %d\n", ret);
581 goto err6; 564 goto err_dis_pm;
582 } 565 }
583 566
584 return 0; 567 return 0;
585err6: 568
569err_dis_pm:
586 pm_runtime_disable(&pdev->dev); 570 pm_runtime_disable(&pdev->dev);
587err5: 571err_dis_pclk:
588 clk_disable_unprepare(pcm->pclk); 572 clk_disable_unprepare(pcm->pclk);
589err4: 573err_dis_cclk:
590 iounmap(pcm->regs);
591err3:
592 release_mem_region(mem_res->start, resource_size(mem_res));
593err2:
594 clk_disable_unprepare(pcm->cclk); 574 clk_disable_unprepare(pcm->cclk);
595err1:
596 return ret; 575 return ret;
597} 576}
598 577
599static int s3c_pcm_dev_remove(struct platform_device *pdev) 578static int s3c_pcm_dev_remove(struct platform_device *pdev)
600{ 579{
601 struct s3c_pcm_info *pcm = &s3c_pcm[pdev->id]; 580 struct s3c_pcm_info *pcm = &s3c_pcm[pdev->id];
602 struct resource *mem_res;
603 581
604 pm_runtime_disable(&pdev->dev); 582 pm_runtime_disable(&pdev->dev);
605
606 iounmap(pcm->regs);
607
608 mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
609 release_mem_region(mem_res->start, resource_size(mem_res));
610
611 clk_disable_unprepare(pcm->cclk); 583 clk_disable_unprepare(pcm->cclk);
612 clk_disable_unprepare(pcm->pclk); 584 clk_disable_unprepare(pcm->pclk);
613 585