diff options
Diffstat (limited to 'drivers/spi/spi-coldfire-qspi.c')
-rw-r--r-- | drivers/spi/spi-coldfire-qspi.c | 59 |
1 files changed, 18 insertions, 41 deletions
diff --git a/drivers/spi/spi-coldfire-qspi.c b/drivers/spi/spi-coldfire-qspi.c index cc5b75d10c38..28ae470397a9 100644 --- a/drivers/spi/spi-coldfire-qspi.c +++ b/drivers/spi/spi-coldfire-qspi.c | |||
@@ -397,44 +397,31 @@ static int mcfqspi_probe(struct platform_device *pdev) | |||
397 | mcfqspi = spi_master_get_devdata(master); | 397 | mcfqspi = spi_master_get_devdata(master); |
398 | 398 | ||
399 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 399 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
400 | if (!res) { | 400 | mcfqspi->iobase = devm_ioremap_resource(&pdev->dev, res); |
401 | dev_dbg(&pdev->dev, "platform_get_resource failed\n"); | 401 | if (IS_ERR(mcfqspi->iobase)) { |
402 | status = -ENXIO; | 402 | status = PTR_ERR(mcfqspi->iobase); |
403 | goto fail0; | ||
404 | } | ||
405 | |||
406 | if (!request_mem_region(res->start, resource_size(res), pdev->name)) { | ||
407 | dev_dbg(&pdev->dev, "request_mem_region failed\n"); | ||
408 | status = -EBUSY; | ||
409 | goto fail0; | 403 | goto fail0; |
410 | } | 404 | } |
411 | 405 | ||
412 | mcfqspi->iobase = ioremap(res->start, resource_size(res)); | ||
413 | if (!mcfqspi->iobase) { | ||
414 | dev_dbg(&pdev->dev, "ioremap failed\n"); | ||
415 | status = -ENOMEM; | ||
416 | goto fail1; | ||
417 | } | ||
418 | |||
419 | mcfqspi->irq = platform_get_irq(pdev, 0); | 406 | mcfqspi->irq = platform_get_irq(pdev, 0); |
420 | if (mcfqspi->irq < 0) { | 407 | if (mcfqspi->irq < 0) { |
421 | dev_dbg(&pdev->dev, "platform_get_irq failed\n"); | 408 | dev_dbg(&pdev->dev, "platform_get_irq failed\n"); |
422 | status = -ENXIO; | 409 | status = -ENXIO; |
423 | goto fail2; | 410 | goto fail0; |
424 | } | 411 | } |
425 | 412 | ||
426 | status = request_irq(mcfqspi->irq, mcfqspi_irq_handler, 0, | 413 | status = devm_request_irq(&pdev->dev, mcfqspi->irq, mcfqspi_irq_handler, |
427 | pdev->name, mcfqspi); | 414 | 0, pdev->name, mcfqspi); |
428 | if (status) { | 415 | if (status) { |
429 | dev_dbg(&pdev->dev, "request_irq failed\n"); | 416 | dev_dbg(&pdev->dev, "request_irq failed\n"); |
430 | goto fail2; | 417 | goto fail0; |
431 | } | 418 | } |
432 | 419 | ||
433 | mcfqspi->clk = clk_get(&pdev->dev, "qspi_clk"); | 420 | mcfqspi->clk = devm_clk_get(&pdev->dev, "qspi_clk"); |
434 | if (IS_ERR(mcfqspi->clk)) { | 421 | if (IS_ERR(mcfqspi->clk)) { |
435 | dev_dbg(&pdev->dev, "clk_get failed\n"); | 422 | dev_dbg(&pdev->dev, "clk_get failed\n"); |
436 | status = PTR_ERR(mcfqspi->clk); | 423 | status = PTR_ERR(mcfqspi->clk); |
437 | goto fail3; | 424 | goto fail0; |
438 | } | 425 | } |
439 | clk_enable(mcfqspi->clk); | 426 | clk_enable(mcfqspi->clk); |
440 | 427 | ||
@@ -445,7 +432,7 @@ static int mcfqspi_probe(struct platform_device *pdev) | |||
445 | status = mcfqspi_cs_setup(mcfqspi); | 432 | status = mcfqspi_cs_setup(mcfqspi); |
446 | if (status) { | 433 | if (status) { |
447 | dev_dbg(&pdev->dev, "error initializing cs_control\n"); | 434 | dev_dbg(&pdev->dev, "error initializing cs_control\n"); |
448 | goto fail4; | 435 | goto fail1; |
449 | } | 436 | } |
450 | 437 | ||
451 | init_waitqueue_head(&mcfqspi->waitq); | 438 | init_waitqueue_head(&mcfqspi->waitq); |
@@ -459,10 +446,10 @@ static int mcfqspi_probe(struct platform_device *pdev) | |||
459 | 446 | ||
460 | platform_set_drvdata(pdev, master); | 447 | platform_set_drvdata(pdev, master); |
461 | 448 | ||
462 | status = spi_register_master(master); | 449 | status = devm_spi_register_master(&pdev->dev, master); |
463 | if (status) { | 450 | if (status) { |
464 | dev_dbg(&pdev->dev, "spi_register_master failed\n"); | 451 | dev_dbg(&pdev->dev, "spi_register_master failed\n"); |
465 | goto fail5; | 452 | goto fail2; |
466 | } | 453 | } |
467 | pm_runtime_enable(mcfqspi->dev); | 454 | pm_runtime_enable(mcfqspi->dev); |
468 | 455 | ||
@@ -470,17 +457,10 @@ static int mcfqspi_probe(struct platform_device *pdev) | |||
470 | 457 | ||
471 | return 0; | 458 | return 0; |
472 | 459 | ||
473 | fail5: | ||
474 | mcfqspi_cs_teardown(mcfqspi); | ||
475 | fail4: | ||
476 | clk_disable(mcfqspi->clk); | ||
477 | clk_put(mcfqspi->clk); | ||
478 | fail3: | ||
479 | free_irq(mcfqspi->irq, mcfqspi); | ||
480 | fail2: | 460 | fail2: |
481 | iounmap(mcfqspi->iobase); | 461 | mcfqspi_cs_teardown(mcfqspi); |
482 | fail1: | 462 | fail1: |
483 | release_mem_region(res->start, resource_size(res)); | 463 | clk_disable(mcfqspi->clk); |
484 | fail0: | 464 | fail0: |
485 | spi_master_put(master); | 465 | spi_master_put(master); |
486 | 466 | ||
@@ -501,11 +481,6 @@ static int mcfqspi_remove(struct platform_device *pdev) | |||
501 | 481 | ||
502 | mcfqspi_cs_teardown(mcfqspi); | 482 | mcfqspi_cs_teardown(mcfqspi); |
503 | clk_disable(mcfqspi->clk); | 483 | clk_disable(mcfqspi->clk); |
504 | clk_put(mcfqspi->clk); | ||
505 | free_irq(mcfqspi->irq, mcfqspi); | ||
506 | iounmap(mcfqspi->iobase); | ||
507 | release_mem_region(res->start, resource_size(res)); | ||
508 | spi_unregister_master(master); | ||
509 | 484 | ||
510 | return 0; | 485 | return 0; |
511 | } | 486 | } |
@@ -539,7 +514,8 @@ static int mcfqspi_resume(struct device *dev) | |||
539 | #ifdef CONFIG_PM_RUNTIME | 514 | #ifdef CONFIG_PM_RUNTIME |
540 | static int mcfqspi_runtime_suspend(struct device *dev) | 515 | static int mcfqspi_runtime_suspend(struct device *dev) |
541 | { | 516 | { |
542 | struct mcfqspi *mcfqspi = dev_get_drvdata(dev); | 517 | struct spi_master *master = dev_get_drvdata(dev); |
518 | struct mcfqspi *mcfqspi = spi_master_get_devdata(master); | ||
543 | 519 | ||
544 | clk_disable(mcfqspi->clk); | 520 | clk_disable(mcfqspi->clk); |
545 | 521 | ||
@@ -548,7 +524,8 @@ static int mcfqspi_runtime_suspend(struct device *dev) | |||
548 | 524 | ||
549 | static int mcfqspi_runtime_resume(struct device *dev) | 525 | static int mcfqspi_runtime_resume(struct device *dev) |
550 | { | 526 | { |
551 | struct mcfqspi *mcfqspi = dev_get_drvdata(dev); | 527 | struct spi_master *master = dev_get_drvdata(dev); |
528 | struct mcfqspi *mcfqspi = spi_master_get_devdata(master); | ||
552 | 529 | ||
553 | clk_enable(mcfqspi->clk); | 530 | clk_enable(mcfqspi->clk); |
554 | 531 | ||