drm/mxsfb: Add pm_runtime calls to pipe_enable/disable
authorLeonard Crestez <leonard.crestez@nxp.com>
Mon, 17 Sep 2018 13:42:13 +0000 (16:42 +0300)
committerStefan Agner <stefan@agner.ch>
Wed, 26 Sep 2018 20:07:40 +0000 (22:07 +0200)
Adding lcdif nodes to a power domain currently results in
black/corrupted screens or hangs because power is not correctly enabled
when required.

Ensure power is on when display is active by adding
pm_runtime_get/put_sync to mxsfb_pipe_enable/disable.

Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
Reviewed-by: Stefan Agner <stefan@agner.ch>
Reviewed-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Stefan Agner <stefan@agner.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/ee88148399c63494cda4129b05444b0ac331b7a7.1537191359.git.leonard.crestez@nxp.com
drivers/gpu/drm/mxsfb/mxsfb_drv.c

index ffe5137ccaf8806b7a6342a7c3280f9dc399bfd6..68d79f5dc0d32dece22736745817c3ffae06bc62 100644 (file)
@@ -103,7 +103,9 @@ static void mxsfb_pipe_enable(struct drm_simple_display_pipe *pipe,
                              struct drm_plane_state *plane_state)
 {
        struct mxsfb_drm_private *mxsfb = drm_pipe_to_mxsfb_drm_private(pipe);
+       struct drm_device *drm = pipe->plane.dev;
 
+       pm_runtime_get_sync(drm->dev);
        drm_panel_prepare(mxsfb->panel);
        mxsfb_crtc_enable(mxsfb);
        drm_panel_enable(mxsfb->panel);
@@ -112,10 +114,12 @@ static void mxsfb_pipe_enable(struct drm_simple_display_pipe *pipe,
 static void mxsfb_pipe_disable(struct drm_simple_display_pipe *pipe)
 {
        struct mxsfb_drm_private *mxsfb = drm_pipe_to_mxsfb_drm_private(pipe);
+       struct drm_device *drm = pipe->plane.dev;
 
        drm_panel_disable(mxsfb->panel);
        mxsfb_crtc_disable(mxsfb);
        drm_panel_unprepare(mxsfb->panel);
+       pm_runtime_put_sync(drm->dev);
 }
 
 static void mxsfb_pipe_update(struct drm_simple_display_pipe *pipe,