aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuman Anna <s-anna@ti.com>2014-02-28 15:42:32 -0500
committerJoerg Roedel <joro@8bytes.org>2014-03-04 11:00:58 -0500
commitf129b3dfb5517c91295da9fe0d2e584d8da25518 (patch)
tree12cf6aaaa836ac52e880f826780e147e96640a96
parent0414855fdc4a40da05221fc6062cccbc0c30f169 (diff)
iommu/omap: Convert to devm_* interfaces
Use the various devm_ interfaces to simplify the cleanup in probe and remove functions. Signed-off-by: Florian Vaussard <florian.vaussard@epfl.ch> Signed-off-by: Suman Anna <s-anna@ti.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Joerg Roedel <joro@8bytes.org>
-rw-r--r--drivers/iommu/omap-iommu.c52
1 files changed, 10 insertions, 42 deletions
diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index bcd78a720630..fff2ffdc26f4 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -941,7 +941,7 @@ static int omap_iommu_probe(struct platform_device *pdev)
941 struct resource *res; 941 struct resource *res;
942 struct iommu_platform_data *pdata = pdev->dev.platform_data; 942 struct iommu_platform_data *pdata = pdev->dev.platform_data;
943 943
944 obj = kzalloc(sizeof(*obj) + MMU_REG_SIZE, GFP_KERNEL); 944 obj = devm_kzalloc(&pdev->dev, sizeof(*obj) + MMU_REG_SIZE, GFP_KERNEL);
945 if (!obj) 945 if (!obj)
946 return -ENOMEM; 946 return -ENOMEM;
947 947
@@ -958,33 +958,18 @@ static int omap_iommu_probe(struct platform_device *pdev)
958 INIT_LIST_HEAD(&obj->mmap); 958 INIT_LIST_HEAD(&obj->mmap);
959 959
960 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 960 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
961 if (!res) { 961 obj->regbase = devm_ioremap_resource(obj->dev, res);
962 err = -ENODEV; 962 if (IS_ERR(obj->regbase))
963 goto err_mem; 963 return PTR_ERR(obj->regbase);
964 }
965
966 res = request_mem_region(res->start, resource_size(res),
967 dev_name(&pdev->dev));
968 if (!res) {
969 err = -EIO;
970 goto err_mem;
971 }
972
973 obj->regbase = ioremap(res->start, resource_size(res));
974 if (!obj->regbase) {
975 err = -ENOMEM;
976 goto err_ioremap;
977 }
978 964
979 irq = platform_get_irq(pdev, 0); 965 irq = platform_get_irq(pdev, 0);
980 if (irq < 0) { 966 if (irq < 0)
981 err = -ENODEV; 967 return -ENODEV;
982 goto err_irq; 968
983 } 969 err = devm_request_irq(obj->dev, irq, iommu_fault_handler, IRQF_SHARED,
984 err = request_irq(irq, iommu_fault_handler, IRQF_SHARED, 970 dev_name(obj->dev), obj);
985 dev_name(&pdev->dev), obj);
986 if (err < 0) 971 if (err < 0)
987 goto err_irq; 972 return err;
988 platform_set_drvdata(pdev, obj); 973 platform_set_drvdata(pdev, obj);
989 974
990 pm_runtime_irq_safe(obj->dev); 975 pm_runtime_irq_safe(obj->dev);
@@ -992,34 +977,17 @@ static int omap_iommu_probe(struct platform_device *pdev)
992 977
993 dev_info(&pdev->dev, "%s registered\n", obj->name); 978 dev_info(&pdev->dev, "%s registered\n", obj->name);
994 return 0; 979 return 0;
995
996err_irq:
997 iounmap(obj->regbase);
998err_ioremap:
999 release_mem_region(res->start, resource_size(res));
1000err_mem:
1001 kfree(obj);
1002 return err;
1003} 980}
1004 981
1005static int omap_iommu_remove(struct platform_device *pdev) 982static int omap_iommu_remove(struct platform_device *pdev)
1006{ 983{
1007 int irq;
1008 struct resource *res;
1009 struct omap_iommu *obj = platform_get_drvdata(pdev); 984 struct omap_iommu *obj = platform_get_drvdata(pdev);
1010 985
1011 iopgtable_clear_entry_all(obj); 986 iopgtable_clear_entry_all(obj);
1012 987
1013 irq = platform_get_irq(pdev, 0);
1014 free_irq(irq, obj);
1015 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1016 release_mem_region(res->start, resource_size(res));
1017 iounmap(obj->regbase);
1018
1019 pm_runtime_disable(obj->dev); 988 pm_runtime_disable(obj->dev);
1020 989
1021 dev_info(&pdev->dev, "%s removed\n", obj->name); 990 dev_info(&pdev->dev, "%s removed\n", obj->name);
1022 kfree(obj);
1023 return 0; 991 return 0;
1024} 992}
1025 993