From: Prathyush K prathyush.k@samsung.com
If mixer is runtime suspended (by DPMS OFF), mixer_suspend does not call mixer_poweroff and just returns. Similarily the mixer_resume should not resume the mixer if mixer is runtime_suspended. It should be done through DPMS ON.
The existing check is stopping the resume. This issue is fixed by reversing the condiftion. It also holds good for hdmi driver.
v2: updated the error messages.
Signed-off-by: Prathyush K prathyush.k@samsung.com Signed-off-by: Rahul Sharma rahul.sharma@samsung.com --- It is based on exynos-drm-next-todo branch at git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git drivers/gpu/drm/exynos/exynos_hdmi.c | 9 ++++++--- drivers/gpu/drm/exynos/exynos_mixer.c | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 9e3c2ad..67030b1 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -2365,7 +2365,8 @@ static int hdmi_suspend(struct device *dev) drm_helper_hpd_irq_event(ctx->drm_dev);
if (pm_runtime_suspended(dev)) { - DRM_DEBUG_KMS("%s : Already suspended\n", __func__); + DRM_DEBUG_KMS("%s: already runtime-suspended.\n", + __func__); return 0; }
@@ -2386,8 +2387,10 @@ static int hdmi_resume(struct device *dev) enable_irq(hdata->external_irq); enable_irq(hdata->internal_irq);
- if (!pm_runtime_suspended(dev)) { - DRM_DEBUG_KMS("%s : Already resumed\n", __func__); + if (pm_runtime_suspended(dev)) { + /* dpms callback should resume the hdmi. */ + DRM_DEBUG_KMS("%s: already runtime-suspended.\n", + __func__); return 0; }
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index 5139a43..3c12518 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -1249,7 +1249,8 @@ static int mixer_suspend(struct device *dev) DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__);
if (pm_runtime_suspended(dev)) { - DRM_DEBUG_KMS("%s : Already suspended\n", __func__); + DRM_DEBUG_KMS("%s: already runtime-suspended.\n", + __func__); return 0; }
@@ -1265,8 +1266,10 @@ static int mixer_resume(struct device *dev)
DRM_DEBUG_KMS("[%d] %s\n", __LINE__, __func__);
- if (!pm_runtime_suspended(dev)) { - DRM_DEBUG_KMS("%s : Already resumed\n", __func__); + if (pm_runtime_suspended(dev)) { + /* dpms callback should resume the mixer. */ + DRM_DEBUG_KMS("%s: already runtime-suspended.\n", + __func__); return 0; }
dri-devel@lists.freedesktop.org