aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu/exynos-iommu.c
diff options
context:
space:
mode:
authorCho KyongHo <pullip.cho@samsung.com>2014-05-12 02:14:54 -0400
committerJoerg Roedel <jroedel@suse.de>2014-05-13 13:12:54 -0400
commit46c16d1e4c11ffa0481b1dd6841e0bcabcf278e7 (patch)
treefb66666d1dbccfad38e4b402652db49de7d16a23 /drivers/iommu/exynos-iommu.c
parente5cf63c3025c2cb7e1db78658827f6ab2a7a039f (diff)
iommu/exynos: Use managed device helper functions
This patch uses managed device helper functions in the probe(). Signed-off-by: Cho KyongHo <pullip.cho@samsung.com> Signed-off-by: Shaik Ameer Basha <shaik.ameer@samsung.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu/exynos-iommu.c')
-rw-r--r--drivers/iommu/exynos-iommu.c68
1 files changed, 25 insertions, 43 deletions
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index be7a7b9c2d59..c86e3745e98f 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -343,8 +343,7 @@ static bool __exynos_sysmmu_disable(struct sysmmu_drvdata *data)
343 343
344 __raw_writel(CTRL_DISABLE, data->sfrbase + REG_MMU_CTRL); 344 __raw_writel(CTRL_DISABLE, data->sfrbase + REG_MMU_CTRL);
345 345
346 if (!IS_ERR(data->clk)) 346 clk_disable(data->clk);
347 clk_disable(data->clk);
348 347
349 disabled = true; 348 disabled = true;
350 data->pgtable = 0; 349 data->pgtable = 0;
@@ -387,8 +386,7 @@ static int __exynos_sysmmu_enable(struct sysmmu_drvdata *data,
387 goto finish; 386 goto finish;
388 } 387 }
389 388
390 if (!IS_ERR(data->clk)) 389 clk_enable(data->clk);
391 clk_enable(data->clk);
392 390
393 data->pgtable = pgtable; 391 data->pgtable = pgtable;
394 392
@@ -499,49 +497,43 @@ void exynos_sysmmu_tlb_invalidate(struct device *dev)
499 497
500static int exynos_sysmmu_probe(struct platform_device *pdev) 498static int exynos_sysmmu_probe(struct platform_device *pdev)
501{ 499{
502 int ret; 500 int irq, ret;
503 struct device *dev = &pdev->dev; 501 struct device *dev = &pdev->dev;
504 struct sysmmu_drvdata *data; 502 struct sysmmu_drvdata *data;
505 struct resource *res; 503 struct resource *res;
506 504
507 data = kzalloc(sizeof(*data), GFP_KERNEL); 505 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
508 if (!data) { 506 if (!data)
509 dev_dbg(dev, "Not enough memory\n"); 507 return -ENOMEM;
510 ret = -ENOMEM;
511 goto err_alloc;
512 }
513 508
514 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 509 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
515 if (!res) { 510 data->sfrbase = devm_ioremap_resource(dev, res);
516 dev_dbg(dev, "Unable to find IOMEM region\n"); 511 if (IS_ERR(data->sfrbase))
517 ret = -ENOENT; 512 return PTR_ERR(data->sfrbase);
518 goto err_init;
519 }
520 513
521 data->sfrbase = ioremap(res->start, resource_size(res)); 514 irq = platform_get_irq(pdev, 0);
522 if (!data->sfrbase) { 515 if (irq <= 0) {
523 dev_dbg(dev, "Unable to map IOMEM @ PA:%#x\n", res->start);
524 ret = -ENOENT;
525 goto err_res;
526 }
527
528 ret = platform_get_irq(pdev, 0);
529 if (ret <= 0) {
530 dev_dbg(dev, "Unable to find IRQ resource\n"); 516 dev_dbg(dev, "Unable to find IRQ resource\n");
531 goto err_irq; 517 return irq;
532 } 518 }
533 519
534 ret = request_irq(ret, exynos_sysmmu_irq, 0, 520 ret = devm_request_irq(dev, irq, exynos_sysmmu_irq, 0,
535 dev_name(dev), data); 521 dev_name(dev), data);
536 if (ret) { 522 if (ret) {
537 dev_dbg(dev, "Unabled to register interrupt handler\n"); 523 dev_err(dev, "Unabled to register handler of irq %d\n", irq);
538 goto err_irq; 524 return ret;
539 } 525 }
540 526
541 if (dev_get_platdata(dev)) { 527 data->clk = devm_clk_get(dev, "sysmmu");
542 data->clk = clk_get(dev, "sysmmu"); 528 if (IS_ERR(data->clk)) {
543 if (IS_ERR(data->clk)) 529 dev_err(dev, "Failed to get clock!\n");
544 dev_dbg(dev, "No clock descriptor registered\n"); 530 return PTR_ERR(data->clk);
531 } else {
532 ret = clk_prepare(data->clk);
533 if (ret) {
534 dev_err(dev, "Failed to prepare clk\n");
535 return ret;
536 }
545 } 537 }
546 538
547 data->sysmmu = dev; 539 data->sysmmu = dev;
@@ -554,17 +546,7 @@ static int exynos_sysmmu_probe(struct platform_device *pdev)
554 546
555 pm_runtime_enable(dev); 547 pm_runtime_enable(dev);
556 548
557 dev_dbg(dev, "Initialized\n");
558 return 0; 549 return 0;
559err_irq:
560 free_irq(platform_get_irq(pdev, 0), data);
561err_res:
562 iounmap(data->sfrbase);
563err_init:
564 kfree(data);
565err_alloc:
566 dev_err(dev, "Failed to initialize\n");
567 return ret;
568} 550}
569 551
570static struct platform_driver exynos_sysmmu_driver = { 552static struct platform_driver exynos_sysmmu_driver = {