drm/exynos: Ensure suspended runtime PM state during system suspend
Add calls to pm_runtime_force_{suspend,resume} as SYSTEM_SLEEP_PM_OPS for all drivers for the real Exynos DRM hardware modules. This ensures that the resources will be released for the system PM suspend/resume cycle. Exynos DRM core already takes care of suspending the whole display pipeline before PM callbacks of the real devices are called. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
Родитель
dc684af6fc
Коммит
7e915746de
|
@ -673,6 +673,8 @@ err:
|
|||
static const struct dev_pm_ops exynos5433_decon_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos5433_decon_suspend, exynos5433_decon_resume,
|
||||
NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
static const struct of_device_id exynos5433_decon_driver_dt_match[] = {
|
||||
|
|
|
@ -832,6 +832,8 @@ static int exynos7_decon_resume(struct device *dev)
|
|||
static const struct dev_pm_ops exynos7_decon_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos7_decon_suspend, exynos7_decon_resume,
|
||||
NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
struct platform_driver decon_driver = {
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/clk.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/component.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <video/of_display_timing.h>
|
||||
#include <video/of_videomode.h>
|
||||
#include <video/videomode.h>
|
||||
|
@ -278,6 +279,8 @@ static int exynos_dp_resume(struct device *dev)
|
|||
|
||||
static const struct dev_pm_ops exynos_dp_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos_dp_suspend, exynos_dp_resume, NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
static const struct of_device_id exynos_dp_match[] = {
|
||||
|
|
|
@ -1863,6 +1863,8 @@ err_clk:
|
|||
|
||||
static const struct dev_pm_ops exynos_dsi_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos_dsi_suspend, exynos_dsi_resume, NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
struct platform_driver dsi_driver = {
|
||||
|
|
|
@ -1192,6 +1192,8 @@ static int exynos_fimd_resume(struct device *dev)
|
|||
|
||||
static const struct dev_pm_ops exynos_fimd_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos_fimd_suspend, exynos_fimd_resume, NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
struct platform_driver fimd_driver = {
|
||||
|
|
|
@ -367,6 +367,8 @@ static int exynos_mic_resume(struct device *dev)
|
|||
|
||||
static const struct dev_pm_ops exynos_mic_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos_mic_suspend, exynos_mic_resume, NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
static int exynos_mic_probe(struct platform_device *pdev)
|
||||
|
|
|
@ -2093,6 +2093,8 @@ static int __maybe_unused exynos_hdmi_resume(struct device *dev)
|
|||
|
||||
static const struct dev_pm_ops exynos_hdmi_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos_hdmi_suspend, exynos_hdmi_resume, NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
struct platform_driver hdmi_driver = {
|
||||
|
|
|
@ -1271,6 +1271,8 @@ static int __maybe_unused exynos_mixer_resume(struct device *dev)
|
|||
|
||||
static const struct dev_pm_ops exynos_mixer_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(exynos_mixer_suspend, exynos_mixer_resume, NULL)
|
||||
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
|
||||
pm_runtime_force_resume)
|
||||
};
|
||||
|
||||
struct platform_driver mixer_driver = {
|
||||
|
|
Загрузка…
Ссылка в новой задаче