diff options
author | Suman Anna <s-anna@ti.com> | 2014-02-28 15:42:32 -0500 |
---|---|---|
committer | Joerg Roedel <joro@8bytes.org> | 2014-03-04 11:00:58 -0500 |
commit | f129b3dfb5517c91295da9fe0d2e584d8da25518 (patch) | |
tree | 12cf6aaaa836ac52e880f826780e147e96640a96 | |
parent | 0414855fdc4a40da05221fc6062cccbc0c30f169 (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.c | 52 |
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 | |||
996 | err_irq: | ||
997 | iounmap(obj->regbase); | ||
998 | err_ioremap: | ||
999 | release_mem_region(res->start, resource_size(res)); | ||
1000 | err_mem: | ||
1001 | kfree(obj); | ||
1002 | return err; | ||
1003 | } | 980 | } |
1004 | 981 | ||
1005 | static int omap_iommu_remove(struct platform_device *pdev) | 982 | static 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 | ||