aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/sh_flctl.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2013-11-27 05:27:44 -0500
committerBrian Norris <computersforpeace@gmail.com>2014-01-03 14:22:23 -0500
commitf7b5e849d516e3955715689678602ac55b952e2a (patch)
treef150b0ac98b12918d897f485a20f43ab1e2f7841 /drivers/mtd/nand/sh_flctl.c
parent82ae816e160c6d349784daa03800006090d38fd0 (diff)
mtd: sh_flctl: use devm_* managed allocators
This simplifies error and cleanup code paths. Cc: David Woodhouse <dwmw2@infradead.org> Cc: linux-mtd@lists.infradead.org Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd/nand/sh_flctl.c')
-rw-r--r--drivers/mtd/nand/sh_flctl.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
index 0f135cbaed89..50f1cb93324f 100644
--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -1094,38 +1094,32 @@ static int flctl_probe(struct platform_device *pdev)
1094 struct mtd_info *flctl_mtd; 1094 struct mtd_info *flctl_mtd;
1095 struct nand_chip *nand; 1095 struct nand_chip *nand;
1096 struct sh_flctl_platform_data *pdata; 1096 struct sh_flctl_platform_data *pdata;
1097 int ret = -ENXIO; 1097 int ret;
1098 int irq; 1098 int irq;
1099 struct mtd_part_parser_data ppdata = {}; 1099 struct mtd_part_parser_data ppdata = {};
1100 1100
1101 flctl = kzalloc(sizeof(struct sh_flctl), GFP_KERNEL); 1101 flctl = devm_kzalloc(&pdev->dev, sizeof(struct sh_flctl), GFP_KERNEL);
1102 if (!flctl) { 1102 if (!flctl) {
1103 dev_err(&pdev->dev, "failed to allocate driver data\n"); 1103 dev_err(&pdev->dev, "failed to allocate driver data\n");
1104 return -ENOMEM; 1104 return -ENOMEM;
1105 } 1105 }
1106 1106
1107 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1107 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1108 if (!res) { 1108 flctl->reg = devm_ioremap_resource(&pdev->dev, res);
1109 dev_err(&pdev->dev, "failed to get I/O memory\n"); 1109 if (IS_ERR(flctl->reg))
1110 goto err_iomap; 1110 return PTR_ERR(flctl->reg);
1111 }
1112
1113 flctl->reg = ioremap(res->start, resource_size(res));
1114 if (flctl->reg == NULL) {
1115 dev_err(&pdev->dev, "failed to remap I/O memory\n");
1116 goto err_iomap;
1117 }
1118 1111
1119 irq = platform_get_irq(pdev, 0); 1112 irq = platform_get_irq(pdev, 0);
1120 if (irq < 0) { 1113 if (irq < 0) {
1121 dev_err(&pdev->dev, "failed to get flste irq data\n"); 1114 dev_err(&pdev->dev, "failed to get flste irq data\n");
1122 goto err_flste; 1115 return -ENXIO;
1123 } 1116 }
1124 1117
1125 ret = request_irq(irq, flctl_handle_flste, IRQF_SHARED, "flste", flctl); 1118 ret = devm_request_irq(&pdev->dev, irq, flctl_handle_flste, IRQF_SHARED,
1119 "flste", flctl);
1126 if (ret) { 1120 if (ret) {
1127 dev_err(&pdev->dev, "request interrupt failed.\n"); 1121 dev_err(&pdev->dev, "request interrupt failed.\n");
1128 goto err_flste; 1122 return ret;
1129 } 1123 }
1130 1124
1131 if (pdev->dev.of_node) 1125 if (pdev->dev.of_node)
@@ -1135,8 +1129,7 @@ static int flctl_probe(struct platform_device *pdev)
1135 1129
1136 if (!pdata) { 1130 if (!pdata) {
1137 dev_err(&pdev->dev, "no setup data defined\n"); 1131 dev_err(&pdev->dev, "no setup data defined\n");
1138 ret = -EINVAL; 1132 return -EINVAL;
1139 goto err_pdata;
1140 } 1133 }
1141 1134
1142 platform_set_drvdata(pdev, flctl); 1135 platform_set_drvdata(pdev, flctl);
@@ -1190,12 +1183,6 @@ static int flctl_probe(struct platform_device *pdev)
1190err_chip: 1183err_chip:
1191 flctl_release_dma(flctl); 1184 flctl_release_dma(flctl);
1192 pm_runtime_disable(&pdev->dev); 1185 pm_runtime_disable(&pdev->dev);
1193err_pdata:
1194 free_irq(irq, flctl);
1195err_flste:
1196 iounmap(flctl->reg);
1197err_iomap:
1198 kfree(flctl);
1199 return ret; 1186 return ret;
1200} 1187}
1201 1188
@@ -1206,9 +1193,6 @@ static int flctl_remove(struct platform_device *pdev)
1206 flctl_release_dma(flctl); 1193 flctl_release_dma(flctl);
1207 nand_release(&flctl->mtd); 1194 nand_release(&flctl->mtd);
1208 pm_runtime_disable(&pdev->dev); 1195 pm_runtime_disable(&pdev->dev);
1209 free_irq(platform_get_irq(pdev, 0), flctl);
1210 iounmap(flctl->reg);
1211 kfree(flctl);
1212 1196
1213 return 0; 1197 return 0;
1214} 1198}