diff options
Diffstat (limited to 'recipes/linux/linux-openmoko-2.6.32/0016-Enable-display-before-trying-to-set-mode-or-base.patch')
-rw-r--r-- | recipes/linux/linux-openmoko-2.6.32/0016-Enable-display-before-trying-to-set-mode-or-base.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/recipes/linux/linux-openmoko-2.6.32/0016-Enable-display-before-trying-to-set-mode-or-base.patch b/recipes/linux/linux-openmoko-2.6.32/0016-Enable-display-before-trying-to-set-mode-or-base.patch new file mode 100644 index 0000000000..4e7a8abe10 --- /dev/null +++ b/recipes/linux/linux-openmoko-2.6.32/0016-Enable-display-before-trying-to-set-mode-or-base.patch @@ -0,0 +1,103 @@ +From 986df52e3e02a1cdbf43eafccd483f0f86c696bd Mon Sep 17 00:00:00 2001 +From: Thomas White <taw@bitwiz.org.uk> +Date: Sun, 21 Mar 2010 20:55:18 +0100 +Subject: [PATCH 16/16] Enable display before trying to set mode or base + +This makes it possible to change mode when the screen is switched off. + +Signed-off-by: Thomas White <taw@bitwiz.org.uk> +--- + drivers/mfd/glamo/glamo-display.c | 56 ++++++++++++++++++------------------ + 1 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/drivers/mfd/glamo/glamo-display.c b/drivers/mfd/glamo/glamo-display.c +index e56cdb4..24a1a31 100644 +--- a/drivers/mfd/glamo/glamo-display.c ++++ b/drivers/mfd/glamo/glamo-display.c +@@ -267,9 +267,9 @@ static int glamo_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, + gdrm = gcrtc->gdrm; /* Here it is! */ + + if ( !gcrtc->pixel_clock_on ) { +- printk(KERN_WARNING "[glamo-drm] Refusing to set base while " +- "pixel clock is off.\n"); +- return -EBUSY; ++ printk(KERN_WARNING "[glamo-drm] Display is off - " ++ "enabling it before setting base.\n"); ++ glamo_lcd_power(gdrm, 1); + } + + gfb = to_glamo_framebuffer(crtc->fb); +@@ -304,9 +304,9 @@ static int glamo_crtc_mode_set(struct drm_crtc *crtc, + gdrm = gcrtc->gdrm; /* Here it is! */ + + if ( !gcrtc->pixel_clock_on ) { +- printk(KERN_WARNING "[glamo-drm] Refusing to set mode while " +- "pixel clock is off.\n"); +- return -EBUSY; ++ printk(KERN_WARNING "[glamo-drm] Display is off - " ++ "enabling it before setting mode.\n"); ++ glamo_lcd_power(gdrm, 1); + } + + glamo_lcd_cmd_mode(gdrm, 1); +@@ -380,28 +380,6 @@ static void glamo_crtc_dpms(struct drm_crtc *crtc, int mode) + } + + +-void glamo_lcd_power(struct glamodrm_handle *gdrm, int mode) +-{ +- struct drm_crtc *crtc = gdrm->crtc; +- struct glamo_crtc *gcrtc = to_glamo_crtc(crtc); +- +- if ( mode ) { +- glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD); +- gcrtc->pixel_clock_on = 1; +- jbt6k74_setpower(JBT_POWER_MODE_NORMAL); +- if ( gcrtc->current_mode_set ) { +- glamo_crtc_mode_set(crtc, &gcrtc->current_mode, +- &gcrtc->current_mode, 0, 0, +- gcrtc->current_fb); +- } +- } else { +- jbt6k74_setpower(JBT_POWER_MODE_OFF); +- glamo_engine_suspend(gdrm->glamo_core, GLAMO_ENGINE_LCD); +- gcrtc->pixel_clock_on = 0; +- } +-} +- +- + static void glamo_crtc_prepare(struct drm_crtc *crtc) + { + } +@@ -862,6 +840,28 @@ int glamo_display_init(struct drm_device *dev) + } + + ++void glamo_lcd_power(struct glamodrm_handle *gdrm, int mode) ++{ ++ struct drm_crtc *crtc = gdrm->crtc; ++ struct glamo_crtc *gcrtc = to_glamo_crtc(crtc); ++ ++ if ( mode ) { ++ glamo_engine_enable(gdrm->glamo_core, GLAMO_ENGINE_LCD); ++ gcrtc->pixel_clock_on = 1; ++ jbt6k74_setpower(JBT_POWER_MODE_NORMAL); ++ if ( gcrtc->current_mode_set ) { ++ glamo_crtc_mode_set(crtc, &gcrtc->current_mode, ++ &gcrtc->current_mode, 0, 0, ++ gcrtc->current_fb); ++ } ++ } else { ++ jbt6k74_setpower(JBT_POWER_MODE_OFF); ++ glamo_engine_suspend(gdrm->glamo_core, GLAMO_ENGINE_LCD); ++ gcrtc->pixel_clock_on = 0; ++ } ++} ++ ++ + void glamo_display_suspend(struct glamodrm_handle *gdrm) + { + /* do nothing */ +-- +1.7.0.2 + |