diff options
Diffstat (limited to 'drivers/spi')
| -rw-r--r-- | drivers/spi/spi.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 978dda2c5239..361cced68069 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
| @@ -553,6 +553,10 @@ static void spi_pump_messages(struct kthread_work *work) | |||
| 553 | master->unprepare_transfer_hardware(master)) | 553 | master->unprepare_transfer_hardware(master)) |
| 554 | dev_err(&master->dev, | 554 | dev_err(&master->dev, |
| 555 | "failed to unprepare transfer hardware\n"); | 555 | "failed to unprepare transfer hardware\n"); |
| 556 | if (master->auto_runtime_pm) { | ||
| 557 | pm_runtime_mark_last_busy(master->dev.parent); | ||
| 558 | pm_runtime_put_autosuspend(master->dev.parent); | ||
| 559 | } | ||
| 556 | return; | 560 | return; |
| 557 | } | 561 | } |
| 558 | 562 | ||
| @@ -572,11 +576,23 @@ static void spi_pump_messages(struct kthread_work *work) | |||
| 572 | master->busy = true; | 576 | master->busy = true; |
| 573 | spin_unlock_irqrestore(&master->queue_lock, flags); | 577 | spin_unlock_irqrestore(&master->queue_lock, flags); |
| 574 | 578 | ||
| 579 | if (!was_busy && master->auto_runtime_pm) { | ||
| 580 | ret = pm_runtime_get_sync(master->dev.parent); | ||
| 581 | if (ret < 0) { | ||
| 582 | dev_err(&master->dev, "Failed to power device: %d\n", | ||
| 583 | ret); | ||
| 584 | return; | ||
| 585 | } | ||
| 586 | } | ||
| 587 | |||
| 575 | if (!was_busy && master->prepare_transfer_hardware) { | 588 | if (!was_busy && master->prepare_transfer_hardware) { |
| 576 | ret = master->prepare_transfer_hardware(master); | 589 | ret = master->prepare_transfer_hardware(master); |
| 577 | if (ret) { | 590 | if (ret) { |
| 578 | dev_err(&master->dev, | 591 | dev_err(&master->dev, |
| 579 | "failed to prepare transfer hardware\n"); | 592 | "failed to prepare transfer hardware\n"); |
| 593 | |||
| 594 | if (master->auto_runtime_pm) | ||
| 595 | pm_runtime_put(master->dev.parent); | ||
| 580 | return; | 596 | return; |
| 581 | } | 597 | } |
| 582 | } | 598 | } |
