diff options
Diffstat (limited to 'drivers/base/power/main.c')
| -rw-r--r-- | drivers/base/power/main.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index d477f4dc5e51..941fcb87e52a 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
| @@ -439,8 +439,23 @@ static int device_resume_noirq(struct device *dev, pm_message_t state) | |||
| 439 | if (dev->bus && dev->bus->pm) { | 439 | if (dev->bus && dev->bus->pm) { |
| 440 | pm_dev_dbg(dev, state, "EARLY "); | 440 | pm_dev_dbg(dev, state, "EARLY "); |
| 441 | error = pm_noirq_op(dev, dev->bus->pm, state); | 441 | error = pm_noirq_op(dev, dev->bus->pm, state); |
| 442 | if (error) | ||
| 443 | goto End; | ||
| 442 | } | 444 | } |
| 443 | 445 | ||
| 446 | if (dev->type && dev->type->pm) { | ||
| 447 | pm_dev_dbg(dev, state, "EARLY type "); | ||
| 448 | error = pm_noirq_op(dev, dev->type->pm, state); | ||
| 449 | if (error) | ||
| 450 | goto End; | ||
| 451 | } | ||
| 452 | |||
| 453 | if (dev->class && dev->class->pm) { | ||
| 454 | pm_dev_dbg(dev, state, "EARLY class "); | ||
| 455 | error = pm_noirq_op(dev, dev->class->pm, state); | ||
| 456 | } | ||
| 457 | |||
| 458 | End: | ||
| 444 | TRACE_RESUME(error); | 459 | TRACE_RESUME(error); |
| 445 | return error; | 460 | return error; |
| 446 | } | 461 | } |
| @@ -735,10 +750,26 @@ static int device_suspend_noirq(struct device *dev, pm_message_t state) | |||
| 735 | { | 750 | { |
| 736 | int error = 0; | 751 | int error = 0; |
| 737 | 752 | ||
| 753 | if (dev->class && dev->class->pm) { | ||
| 754 | pm_dev_dbg(dev, state, "LATE class "); | ||
| 755 | error = pm_noirq_op(dev, dev->class->pm, state); | ||
| 756 | if (error) | ||
| 757 | goto End; | ||
| 758 | } | ||
| 759 | |||
| 760 | if (dev->type && dev->type->pm) { | ||
| 761 | pm_dev_dbg(dev, state, "LATE type "); | ||
| 762 | error = pm_noirq_op(dev, dev->type->pm, state); | ||
| 763 | if (error) | ||
| 764 | goto End; | ||
| 765 | } | ||
| 766 | |||
| 738 | if (dev->bus && dev->bus->pm) { | 767 | if (dev->bus && dev->bus->pm) { |
| 739 | pm_dev_dbg(dev, state, "LATE "); | 768 | pm_dev_dbg(dev, state, "LATE "); |
| 740 | error = pm_noirq_op(dev, dev->bus->pm, state); | 769 | error = pm_noirq_op(dev, dev->bus->pm, state); |
| 741 | } | 770 | } |
| 771 | |||
| 772 | End: | ||
| 742 | return error; | 773 | return error; |
| 743 | } | 774 | } |
| 744 | 775 | ||
