diff options
author | Jingoo Han <jg1.han@samsung.com> | 2013-12-25 20:44:59 -0500 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2014-01-03 14:22:28 -0500 |
commit | e8009ca0360954f5bd3db5b2128a11ce0e994ab9 (patch) | |
tree | 5526dd4c1c3d5caa046011b98705e52724b333b5 /drivers/mtd/nand/nuc900_nand.c | |
parent | 133432a7e2b848ada53910df16c420d297e5c65a (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.c | 55 |
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 | |||
305 | fail3: iounmap(nuc900_nand->reg); | ||
306 | fail2: release_mem_region(res->start, resource_size(res)); | ||
307 | fail1: kfree(nuc900_nand); | ||
308 | return retval; | ||
309 | } | 289 | } |
310 | 290 | ||
311 | static int nuc900_nand_remove(struct platform_device *pdev) | 291 | static 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 | } |