1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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
|