aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-10-15 21:29:55 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-10-24 07:27:45 -0400
commita192aa923b66a435aae56983c4912ee150bc9b32 (patch)
tree3e09eab844a4524ad233470090b8b50bec024f61
parentcbe25ce37d6c2623b5ac09128987e98848a54c6c (diff)
ACPI / LPSS: Consolidate runtime PM and system sleep handling
Move the LPSS-specific code from acpi_lpss_runtime_suspend() and acpi_lpss_runtime_resume() into separate functions, acpi_lpss_suspend() and acpi_lpss_resume(), respectively, and make acpi_lpss_suspend_late() and acpi_lpss_resume_early() use them too in order to unify the runtime PM and system sleep handling in the LPSS driver. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r--drivers/acpi/acpi_lpss.c76
1 files changed, 34 insertions, 42 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 8ec19e7c7b61..04d32bdb5a95 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -716,40 +716,6 @@ static void acpi_lpss_dismiss(struct device *dev)
716 acpi_dev_suspend(dev, false); 716 acpi_dev_suspend(dev, false);
717} 717}
718 718
719#ifdef CONFIG_PM_SLEEP
720static int acpi_lpss_suspend_late(struct device *dev)
721{
722 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
723 int ret;
724
725 ret = pm_generic_suspend_late(dev);
726 if (ret)
727 return ret;
728
729 if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
730 acpi_lpss_save_ctx(dev, pdata);
731
732 return acpi_dev_suspend(dev, device_may_wakeup(dev));
733}
734
735static int acpi_lpss_resume_early(struct device *dev)
736{
737 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
738 int ret;
739
740 ret = acpi_dev_resume(dev);
741 if (ret)
742 return ret;
743
744 acpi_lpss_d3_to_d0_delay(pdata);
745
746 if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
747 acpi_lpss_restore_ctx(dev, pdata);
748
749 return pm_generic_resume_early(dev);
750}
751#endif /* CONFIG_PM_SLEEP */
752
753/* IOSF SB for LPSS island */ 719/* IOSF SB for LPSS island */
754#define LPSS_IOSF_UNIT_LPIOEP 0xA0 720#define LPSS_IOSF_UNIT_LPIOEP 0xA0
755#define LPSS_IOSF_UNIT_LPIO1 0xAB 721#define LPSS_IOSF_UNIT_LPIO1 0xAB
@@ -835,19 +801,15 @@ static void lpss_iosf_exit_d3_state(void)
835 mutex_unlock(&lpss_iosf_mutex); 801 mutex_unlock(&lpss_iosf_mutex);
836} 802}
837 803
838static int acpi_lpss_runtime_suspend(struct device *dev) 804static int acpi_lpss_suspend(struct device *dev, bool wakeup)
839{ 805{
840 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev)); 806 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
841 int ret; 807 int ret;
842 808
843 ret = pm_generic_runtime_suspend(dev);
844 if (ret)
845 return ret;
846
847 if (pdata->dev_desc->flags & LPSS_SAVE_CTX) 809 if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
848 acpi_lpss_save_ctx(dev, pdata); 810 acpi_lpss_save_ctx(dev, pdata);
849 811
850 ret = acpi_dev_suspend(dev, true); 812 ret = acpi_dev_suspend(dev, wakeup);
851 813
852 /* 814 /*
853 * This call must be last in the sequence, otherwise PMC will return 815 * This call must be last in the sequence, otherwise PMC will return
@@ -860,7 +822,7 @@ static int acpi_lpss_runtime_suspend(struct device *dev)
860 return ret; 822 return ret;
861} 823}
862 824
863static int acpi_lpss_runtime_resume(struct device *dev) 825static int acpi_lpss_resume(struct device *dev)
864{ 826{
865 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev)); 827 struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
866 int ret; 828 int ret;
@@ -881,7 +843,37 @@ static int acpi_lpss_runtime_resume(struct device *dev)
881 if (pdata->dev_desc->flags & LPSS_SAVE_CTX) 843 if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
882 acpi_lpss_restore_ctx(dev, pdata); 844 acpi_lpss_restore_ctx(dev, pdata);
883 845
884 return pm_generic_runtime_resume(dev); 846 return 0;
847}
848
849#ifdef CONFIG_PM_SLEEP
850static int acpi_lpss_suspend_late(struct device *dev)
851{
852 int ret = pm_generic_suspend_late(dev);
853
854 return ret ? ret : acpi_lpss_suspend(dev, device_may_wakeup(dev));
855}
856
857static int acpi_lpss_resume_early(struct device *dev)
858{
859 int ret = acpi_lpss_resume(dev);
860
861 return ret ? ret : pm_generic_resume_early(dev);
862}
863#endif /* CONFIG_PM_SLEEP */
864
865static int acpi_lpss_runtime_suspend(struct device *dev)
866{
867 int ret = pm_generic_runtime_suspend(dev);
868
869 return ret ? ret : acpi_lpss_suspend(dev, true);
870}
871
872static int acpi_lpss_runtime_resume(struct device *dev)
873{
874 int ret = acpi_lpss_resume(dev);
875
876 return ret ? ret : pm_generic_runtime_resume(dev);
885} 877}
886#endif /* CONFIG_PM */ 878#endif /* CONFIG_PM */
887 879