summaryrefslogtreecommitdiff
path: root/recipes/linux/linux-openmoko-2.6.32/0016-Enable-display-before-trying-to-set-mode-or-base.patch
diff options
context:
space:
mode:
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.patch103
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
+