aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/nuc900_nand.c
diff options
context:
space:
mode:
authorJingoo Han <jg1.han@samsung.com>2013-12-25 20:44:59 -0500
committerBrian Norris <computersforpeace@gmail.com>2014-01-03 14:22:28 -0500
commite8009ca0360954f5bd3db5b2128a11ce0e994ab9 (patch)
tree5526dd4c1c3d5caa046011b98705e52724b333b5 /drivers/mtd/nand/nuc900_nand.c
parent133432a7e2b848ada53910df16c420d297e5c65a (diff)
mtd: nuc900_nand: 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/nand/nuc900_nand.c')
-rw-r--r--drivers/mtd/nand/nuc900_nand.c55
1 files changed, 13 insertions, 42 deletions
diff --git a/drivers/mtd/nand/nuc900_nand.c b/drivers/mtd/nand/nuc900_nand.c
index 52115151e4a7..661fd1417000 100644
--- a/drivers/mtd/nand/nuc900_nand.c
+++ b/drivers/mtd/nand/nuc900_nand.c
@@ -241,12 +241,10 @@ static int nuc900_nand_probe(struct platform_device *pdev)
241{ 241{
242 struct nuc900_nand *nuc900_nand; 242 struct nuc900_nand *nuc900_nand;
243 struct nand_chip *chip; 243 struct nand_chip *chip;
244 int retval;
245 struct resource *res; 244 struct resource *res;
246 245
247 retval = 0; 246 nuc900_nand = devm_kzalloc(&pdev->dev, sizeof(struct nuc900_nand),
248 247 GFP_KERNEL);
249 nuc900_nand = kzalloc(sizeof(struct nuc900_nand), GFP_KERNEL);
250 if (!nuc900_nand) 248 if (!nuc900_nand)
251 return -ENOMEM; 249 return -ENOMEM;
252 chip = &(nuc900_nand->chip); 250 chip = &(nuc900_nand->chip);
@@ -255,11 +253,9 @@ static int nuc900_nand_probe(struct platform_device *pdev)
255 nuc900_nand->mtd.owner = THIS_MODULE; 253 nuc900_nand->mtd.owner = THIS_MODULE;
256 spin_lock_init(&nuc900_nand->lock); 254 spin_lock_init(&nuc900_nand->lock);
257 255
258 nuc900_nand->clk = clk_get(&pdev->dev, NULL); 256 nuc900_nand->clk = devm_clk_get(&pdev->dev, NULL);
259 if (IS_ERR(nuc900_nand->clk)) { 257 if (IS_ERR(nuc900_nand->clk))
260 retval = -ENOENT; 258 return -ENOENT;
261 goto fail1;
262 }
263 clk_enable(nuc900_nand->clk); 259 clk_enable(nuc900_nand->clk);
264 260
265 chip->cmdfunc = nuc900_nand_command_lp; 261 chip->cmdfunc = nuc900_nand_command_lp;
@@ -272,57 +268,32 @@ static int nuc900_nand_probe(struct platform_device *pdev)
272 chip->ecc.mode = NAND_ECC_SOFT; 268 chip->ecc.mode = NAND_ECC_SOFT;
273 269
274 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 270 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
275 if (!res) { 271 if (!res)
276 retval = -ENXIO; 272 return -ENXIO;
277 goto fail1;
278 }
279 273
280 if (!request_mem_region(res->start, resource_size(res), pdev->name)) { 274 nuc900_nand->reg = devm_ioremap_resource(&pdev->dev, res);
281 retval = -EBUSY; 275 if (IS_ERR(nuc900_nand->reg))
282 goto fail1; 276 return PTR_ERR(nuc900_nand->reg);
283 }
284
285 nuc900_nand->reg = ioremap(res->start, resource_size(res));
286 if (!nuc900_nand->reg) {
287 retval = -ENOMEM;
288 goto fail2;
289 }
290 277
291 nuc900_nand_enable(nuc900_nand); 278 nuc900_nand_enable(nuc900_nand);
292 279
293 if (nand_scan(&(nuc900_nand->mtd), 1)) { 280 if (nand_scan(&(nuc900_nand->mtd), 1))
294 retval = -ENXIO; 281 return -ENXIO;
295 goto fail3;
296 }
297 282
298 mtd_device_register(&(nuc900_nand->mtd), partitions, 283 mtd_device_register(&(nuc900_nand->mtd), partitions,
299 ARRAY_SIZE(partitions)); 284 ARRAY_SIZE(partitions));
300 285
301 platform_set_drvdata(pdev, nuc900_nand); 286 platform_set_drvdata(pdev, nuc900_nand);
302 287
303 return retval; 288 return 0;
304
305fail3: iounmap(nuc900_nand->reg);
306fail2: release_mem_region(res->start, resource_size(res));
307fail1: kfree(nuc900_nand);
308 return retval;
309} 289}
310 290
311static int nuc900_nand_remove(struct platform_device *pdev) 291static int nuc900_nand_remove(struct platform_device *pdev)
312{ 292{
313 struct nuc900_nand *nuc900_nand = platform_get_drvdata(pdev); 293 struct nuc900_nand *nuc900_nand = platform_get_drvdata(pdev);
314 struct resource *res;
315 294
316 nand_release(&nuc900_nand->mtd); 295 nand_release(&nuc900_nand->mtd);
317 iounmap(nuc900_nand->reg);
318
319 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
320 release_mem_region(res->start, resource_size(res));
321
322 clk_disable(nuc900_nand->clk); 296 clk_disable(nuc900_nand->clk);
323 clk_put(nuc900_nand->clk);
324
325 kfree(nuc900_nand);
326 297
327 return 0; 298 return 0;
328} 299}