aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-nuc900.c
diff options
context:
space:
mode:
authorJingoo Han <jg1.han@samsung.com>2013-12-09 05:18:18 -0500
committerMark Brown <broonie@linaro.org>2013-12-17 17:43:30 -0500
commit7519459da294680bbab1bd20a4e378d83a1c6d45 (patch)
tree00674c513348a3b5396639436b93dd691d071e72 /drivers/spi/spi-nuc900.c
parent6ce4eac1f600b34f2f7f58f9cd8f0503d79e42ae (diff)
spi: nuc900: Use devm_*() functions
Use devm_*() functions to make cleanup paths simpler. Signed-off-by: Jingoo Han <jg1.han@samsung.com> Acked-by: Wan ZongShun <mcuos.com@gmail.com> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'drivers/spi/spi-nuc900.c')
-rw-r--r--drivers/spi/spi-nuc900.c50
1 files changed, 10 insertions, 40 deletions
diff --git a/drivers/spi/spi-nuc900.c b/drivers/spi/spi-nuc900.c
index e0c32bc69ee2..43d340ca0730 100644
--- a/drivers/spi/spi-nuc900.c
+++ b/drivers/spi/spi-nuc900.c
@@ -57,7 +57,6 @@ struct nuc900_spi {
57 const unsigned char *tx; 57 const unsigned char *tx;
58 unsigned char *rx; 58 unsigned char *rx;
59 struct clk *clk; 59 struct clk *clk;
60 struct resource *ioarea;
61 struct spi_master *master; 60 struct spi_master *master;
62 struct spi_device *curdev; 61 struct spi_device *curdev;
63 struct device *dev; 62 struct device *dev;
@@ -344,8 +343,7 @@ static int nuc900_spi_probe(struct platform_device *pdev)
344 master = spi_alloc_master(&pdev->dev, sizeof(struct nuc900_spi)); 343 master = spi_alloc_master(&pdev->dev, sizeof(struct nuc900_spi));
345 if (master == NULL) { 344 if (master == NULL) {
346 dev_err(&pdev->dev, "No memory for spi_master\n"); 345 dev_err(&pdev->dev, "No memory for spi_master\n");
347 err = -ENOMEM; 346 return -ENOMEM;
348 goto err_nomem;
349 } 347 }
350 348
351 hw = spi_master_get_devdata(master); 349 hw = spi_master_get_devdata(master);
@@ -376,40 +374,31 @@ static int nuc900_spi_probe(struct platform_device *pdev)
376 goto err_pdata; 374 goto err_pdata;
377 } 375 }
378 376
379 hw->ioarea = request_mem_region(hw->res->start, 377 hw->regs = devm_ioremap_resource(&pdev->dev, hw->res);
380 resource_size(hw->res), pdev->name); 378 if (IS_ERR(hw->regs)) {
381 379 err = PTR_ERR(hw->regs);
382 if (hw->ioarea == NULL) {
383 dev_err(&pdev->dev, "Cannot reserve region\n");
384 err = -ENXIO;
385 goto err_pdata; 380 goto err_pdata;
386 } 381 }
387 382
388 hw->regs = ioremap(hw->res->start, resource_size(hw->res));
389 if (hw->regs == NULL) {
390 dev_err(&pdev->dev, "Cannot map IO\n");
391 err = -ENXIO;
392 goto err_iomap;
393 }
394
395 hw->irq = platform_get_irq(pdev, 0); 383 hw->irq = platform_get_irq(pdev, 0);
396 if (hw->irq < 0) { 384 if (hw->irq < 0) {
397 dev_err(&pdev->dev, "No IRQ specified\n"); 385 dev_err(&pdev->dev, "No IRQ specified\n");
398 err = -ENOENT; 386 err = -ENOENT;
399 goto err_irq; 387 goto err_pdata;
400 } 388 }
401 389
402 err = request_irq(hw->irq, nuc900_spi_irq, 0, pdev->name, hw); 390 err = devm_request_irq(&pdev->dev, hw->irq, nuc900_spi_irq, 0,
391 pdev->name, hw);
403 if (err) { 392 if (err) {
404 dev_err(&pdev->dev, "Cannot claim IRQ\n"); 393 dev_err(&pdev->dev, "Cannot claim IRQ\n");
405 goto err_irq; 394 goto err_pdata;
406 } 395 }
407 396
408 hw->clk = clk_get(&pdev->dev, "spi"); 397 hw->clk = devm_clk_get(&pdev->dev, "spi");
409 if (IS_ERR(hw->clk)) { 398 if (IS_ERR(hw->clk)) {
410 dev_err(&pdev->dev, "No clock for device\n"); 399 dev_err(&pdev->dev, "No clock for device\n");
411 err = PTR_ERR(hw->clk); 400 err = PTR_ERR(hw->clk);
412 goto err_clk; 401 goto err_pdata;
413 } 402 }
414 403
415 mfp_set_groupg(&pdev->dev, NULL); 404 mfp_set_groupg(&pdev->dev, NULL);
@@ -425,17 +414,8 @@ static int nuc900_spi_probe(struct platform_device *pdev)
425 414
426err_register: 415err_register:
427 clk_disable(hw->clk); 416 clk_disable(hw->clk);
428 clk_put(hw->clk);
429err_clk:
430 free_irq(hw->irq, hw);
431err_irq:
432 iounmap(hw->regs);
433err_iomap:
434 release_mem_region(hw->res->start, resource_size(hw->res));
435 kfree(hw->ioarea);
436err_pdata: 417err_pdata:
437 spi_master_put(hw->master); 418 spi_master_put(hw->master);
438err_nomem:
439 return err; 419 return err;
440} 420}
441 421
@@ -443,18 +423,8 @@ static int nuc900_spi_remove(struct platform_device *dev)
443{ 423{
444 struct nuc900_spi *hw = platform_get_drvdata(dev); 424 struct nuc900_spi *hw = platform_get_drvdata(dev);
445 425
446 free_irq(hw->irq, hw);
447
448 spi_bitbang_stop(&hw->bitbang); 426 spi_bitbang_stop(&hw->bitbang);
449
450 clk_disable(hw->clk); 427 clk_disable(hw->clk);
451 clk_put(hw->clk);
452
453 iounmap(hw->regs);
454
455 release_mem_region(hw->res->start, resource_size(hw->res));
456 kfree(hw->ioarea);
457
458 spi_master_put(hw->master); 428 spi_master_put(hw->master);
459 return 0; 429 return 0;
460} 430}