diff options
author | Jingoo Han <jg1.han@samsung.com> | 2013-12-25 20:40:52 -0500 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2014-01-03 14:22:27 -0500 |
commit | 82402aeb8c81edab9249b9e330b21e88723f539e (patch) | |
tree | 95bc479fae15213f5ab75002e846dd1ca9cd8967 /drivers/mtd/devices/docg3.c | |
parent | 30b2afc8471ea06a6d18b9f6bc183dafb99de1f9 (diff) |
mtd: docg3: Use devm_*() functions
Use devm_*() functions to make cleanup paths simpler.
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd/devices/docg3.c')
-rw-r--r-- | drivers/mtd/devices/docg3.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c index 4f091c1a9981..dd5e1018d37b 100644 --- a/drivers/mtd/devices/docg3.c +++ b/drivers/mtd/devices/docg3.c | |||
@@ -2047,21 +2047,21 @@ static int __init docg3_probe(struct platform_device *pdev) | |||
2047 | ress = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 2047 | ress = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
2048 | if (!ress) { | 2048 | if (!ress) { |
2049 | dev_err(dev, "No I/O memory resource defined\n"); | 2049 | dev_err(dev, "No I/O memory resource defined\n"); |
2050 | goto noress; | 2050 | return ret; |
2051 | } | 2051 | } |
2052 | base = ioremap(ress->start, DOC_IOSPACE_SIZE); | 2052 | base = devm_ioremap(dev, ress->start, DOC_IOSPACE_SIZE); |
2053 | 2053 | ||
2054 | ret = -ENOMEM; | 2054 | ret = -ENOMEM; |
2055 | cascade = kzalloc(sizeof(*cascade) * DOC_MAX_NBFLOORS, | 2055 | cascade = devm_kzalloc(dev, sizeof(*cascade) * DOC_MAX_NBFLOORS, |
2056 | GFP_KERNEL); | 2056 | GFP_KERNEL); |
2057 | if (!cascade) | 2057 | if (!cascade) |
2058 | goto nomem1; | 2058 | return ret; |
2059 | cascade->base = base; | 2059 | cascade->base = base; |
2060 | mutex_init(&cascade->lock); | 2060 | mutex_init(&cascade->lock); |
2061 | cascade->bch = init_bch(DOC_ECC_BCH_M, DOC_ECC_BCH_T, | 2061 | cascade->bch = init_bch(DOC_ECC_BCH_M, DOC_ECC_BCH_T, |
2062 | DOC_ECC_BCH_PRIMPOLY); | 2062 | DOC_ECC_BCH_PRIMPOLY); |
2063 | if (!cascade->bch) | 2063 | if (!cascade->bch) |
2064 | goto nomem2; | 2064 | return ret; |
2065 | 2065 | ||
2066 | for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) { | 2066 | for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) { |
2067 | mtd = doc_probe_device(cascade, floor, dev); | 2067 | mtd = doc_probe_device(cascade, floor, dev); |
@@ -2101,11 +2101,6 @@ err_probe: | |||
2101 | for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) | 2101 | for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) |
2102 | if (cascade->floors[floor]) | 2102 | if (cascade->floors[floor]) |
2103 | doc_release_device(cascade->floors[floor]); | 2103 | doc_release_device(cascade->floors[floor]); |
2104 | nomem2: | ||
2105 | kfree(cascade); | ||
2106 | nomem1: | ||
2107 | iounmap(base); | ||
2108 | noress: | ||
2109 | return ret; | 2104 | return ret; |
2110 | } | 2105 | } |
2111 | 2106 | ||
@@ -2119,7 +2114,6 @@ static int __exit docg3_release(struct platform_device *pdev) | |||
2119 | { | 2114 | { |
2120 | struct docg3_cascade *cascade = platform_get_drvdata(pdev); | 2115 | struct docg3_cascade *cascade = platform_get_drvdata(pdev); |
2121 | struct docg3 *docg3 = cascade->floors[0]->priv; | 2116 | struct docg3 *docg3 = cascade->floors[0]->priv; |
2122 | void __iomem *base = cascade->base; | ||
2123 | int floor; | 2117 | int floor; |
2124 | 2118 | ||
2125 | doc_unregister_sysfs(pdev, cascade); | 2119 | doc_unregister_sysfs(pdev, cascade); |
@@ -2129,8 +2123,6 @@ static int __exit docg3_release(struct platform_device *pdev) | |||
2129 | doc_release_device(cascade->floors[floor]); | 2123 | doc_release_device(cascade->floors[floor]); |
2130 | 2124 | ||
2131 | free_bch(docg3->cascade->bch); | 2125 | free_bch(docg3->cascade->bch); |
2132 | kfree(cascade); | ||
2133 | iounmap(base); | ||
2134 | return 0; | 2126 | return 0; |
2135 | } | 2127 | } |
2136 | 2128 | ||