diff options
Diffstat (limited to 'recipes/kexecboot/linux-kexecboot-2.6.29/dss2/0017-DSS2-Disable-video-planes-on-sync-lost-error.patch')
-rw-r--r-- | recipes/kexecboot/linux-kexecboot-2.6.29/dss2/0017-DSS2-Disable-video-planes-on-sync-lost-error.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.29/dss2/0017-DSS2-Disable-video-planes-on-sync-lost-error.patch b/recipes/kexecboot/linux-kexecboot-2.6.29/dss2/0017-DSS2-Disable-video-planes-on-sync-lost-error.patch new file mode 100644 index 0000000000..e9a5dcc67a --- /dev/null +++ b/recipes/kexecboot/linux-kexecboot-2.6.29/dss2/0017-DSS2-Disable-video-planes-on-sync-lost-error.patch @@ -0,0 +1,103 @@ +From 85848d329ca3a2d6ee6841cdc11cc5951d187931 Mon Sep 17 00:00:00 2001 +From: =?utf-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@nokia.com> +Date: Fri, 3 Apr 2009 19:09:20 +0200 +Subject: [PATCH 17/69] DSS2: Disable video planes on sync lost error +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +When encountering the sync lost error disable the display and all video +planes on the affected manager. Afterwards re-enable the display. + +Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com> +--- + drivers/video/omap2/dss/dispc.c | 50 +++++++++++++++++++++++++++++++++++++++ + 1 files changed, 50 insertions(+), 0 deletions(-) + +diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c +index 1bc23f7..41734f3 100644 +--- a/drivers/video/omap2/dss/dispc.c ++++ b/drivers/video/omap2/dss/dispc.c +@@ -2518,29 +2518,79 @@ static void dispc_error_worker(struct work_struct *work) + } + + if (errors & DISPC_IRQ_SYNC_LOST) { ++ struct omap_overlay_manager *manager = NULL; ++ bool enable = false; ++ + DSSERR("SYNC_LOST, disabling LCD\n"); ++ + for (i = 0; i < omap_dss_get_num_overlay_managers(); ++i) { + struct omap_overlay_manager *mgr; + mgr = omap_dss_get_overlay_manager(i); + + if (mgr->id == OMAP_DSS_CHANNEL_LCD) { ++ manager = mgr; ++ enable = mgr->display->state == ++ OMAP_DSS_DISPLAY_ACTIVE; + mgr->display->disable(mgr->display); + break; + } + } ++ ++ if (manager) { ++ for (i = 0; i < omap_dss_get_num_overlays(); ++i) { ++ struct omap_overlay *ovl; ++ ovl = omap_dss_get_overlay(i); ++ ++ if (!(ovl->caps & OMAP_DSS_OVL_CAP_DISPC)) ++ continue; ++ ++ if (ovl->id != 0 && ovl->manager == manager) ++ dispc_enable_plane(ovl->id, 0); ++ } ++ ++ dispc_go(manager->id); ++ mdelay(50); ++ if (enable) ++ manager->display->enable(manager->display); ++ } + } + + if (errors & DISPC_IRQ_SYNC_LOST_DIGIT) { ++ struct omap_overlay_manager *manager = NULL; ++ bool enable = false; ++ + DSSERR("SYNC_LOST_DIGIT, disabling TV\n"); ++ + for (i = 0; i < omap_dss_get_num_overlay_managers(); ++i) { + struct omap_overlay_manager *mgr; + mgr = omap_dss_get_overlay_manager(i); + + if (mgr->id == OMAP_DSS_CHANNEL_DIGIT) { ++ manager = mgr; ++ enable = mgr->display->state == ++ OMAP_DSS_DISPLAY_ACTIVE; + mgr->display->disable(mgr->display); + break; + } + } ++ ++ if (manager) { ++ for (i = 0; i < omap_dss_get_num_overlays(); ++i) { ++ struct omap_overlay *ovl; ++ ovl = omap_dss_get_overlay(i); ++ ++ if (!(ovl->caps & OMAP_DSS_OVL_CAP_DISPC)) ++ continue; ++ ++ if (ovl->id != 0 && ovl->manager == manager) ++ dispc_enable_plane(ovl->id, 0); ++ } ++ ++ dispc_go(manager->id); ++ mdelay(50); ++ if (enable) ++ manager->display->enable(manager->display); ++ } + } + + if (errors & DISPC_IRQ_OCP_ERR) { +-- +1.6.2.4 + |