summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-sa1100/assabet.c90
-rw-r--r--arch/arm/mach-sa1100/generic.c6
-rw-r--r--arch/arm/mach-sa1100/generic.h3
-rw-r--r--arch/arm/mach-sa1100/h3100.c3
-rw-r--r--arch/arm/mach-sa1100/h3600.c3
-rw-r--r--drivers/video/sa1100fb.c32
-rw-r--r--drivers/video/sa1100fb.h2
-rw-r--r--include/video/sa1100fb.h4
8 files changed, 79 insertions, 64 deletions
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c
index 37fb0cd1a296..65b0a9a3fb9c 100644
--- a/arch/arm/mach-sa1100/assabet.c
+++ b/arch/arm/mach-sa1100/assabet.c
@@ -71,33 +71,6 @@ void ASSABET_BCR_frob(unsigned int mask, unsigned int val)
71 71
72EXPORT_SYMBOL(ASSABET_BCR_frob); 72EXPORT_SYMBOL(ASSABET_BCR_frob);
73 73
74static void assabet_backlight_power(int on)
75{
76#ifndef ASSABET_PAL_VIDEO
77 if (on)
78 ASSABET_BCR_set(ASSABET_BCR_LIGHT_ON);
79 else
80#endif
81 ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
82}
83
84/*
85 * Turn on/off the backlight. When turning the backlight on,
86 * we wait 500us after turning it on so we don't cause the
87 * supplies to droop when we enable the LCD controller (and
88 * cause a hard reset.)
89 */
90static void assabet_lcd_power(int on)
91{
92#ifndef ASSABET_PAL_VIDEO
93 if (on) {
94 ASSABET_BCR_set(ASSABET_BCR_LCD_ON);
95 udelay(500);
96 } else
97#endif
98 ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
99}
100
101 74
102/* 75/*
103 * Assabet flash support code. 76 * Assabet flash support code.
@@ -206,7 +179,49 @@ static struct mcp_plat_data assabet_mcp_data = {
206 .sclk_rate = 11981000, 179 .sclk_rate = 11981000,
207}; 180};
208 181
182static void assabet_lcd_set_visual(u32 visual)
183{
184 u_int is_true_color = visual == FB_VISUAL_TRUECOLOR;
185
186 if (machine_is_assabet()) {
187#if 1 // phase 4 or newer Assabet's
188 if (is_true_color)
189 ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
190 else
191 ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
192#else
193 // older Assabet's
194 if (is_true_color)
195 ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
196 else
197 ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
198#endif
199 }
200}
201
209#ifndef ASSABET_PAL_VIDEO 202#ifndef ASSABET_PAL_VIDEO
203static void assabet_lcd_backlight_power(int on)
204{
205 if (on)
206 ASSABET_BCR_set(ASSABET_BCR_LIGHT_ON);
207 else
208 ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
209}
210
211/*
212 * Turn on/off the backlight. When turning the backlight on, we wait
213 * 500us after turning it on so we don't cause the supplies to droop
214 * when we enable the LCD controller (and cause a hard reset.)
215 */
216static void assabet_lcd_power(int on)
217{
218 if (on) {
219 ASSABET_BCR_set(ASSABET_BCR_LCD_ON);
220 udelay(500);
221 } else
222 ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
223}
224
210/* 225/*
211 * The assabet uses a sharp LQ039Q2DS54 LCD module. It is actually 226 * The assabet uses a sharp LQ039Q2DS54 LCD module. It is actually
212 * takes an RGB666 signal, but we provide it with an RGB565 signal 227 * takes an RGB666 signal, but we provide it with an RGB565 signal
@@ -224,8 +239,22 @@ static struct sa1100fb_mach_info lq039q2ds54_info = {
224 239
225 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, 240 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
226 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), 241 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
242
243 .backlight_power = assabet_lcd_backlight_power,
244 .lcd_power = assabet_lcd_power,
245 .set_visual = assabet_lcd_set_visual,
227}; 246};
228#else 247#else
248static void assabet_pal_backlight_power(int on)
249{
250 ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
251}
252
253static void assabet_pal_power(int on)
254{
255 ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
256}
257
229static struct sa1100fb_mach_info pal_info = { 258static struct sa1100fb_mach_info pal_info = {
230 .pixclock = 67797, .bpp = 16, 259 .pixclock = 67797, .bpp = 16,
231 .xres = 640, .yres = 512, 260 .xres = 640, .yres = 512,
@@ -236,6 +265,10 @@ static struct sa1100fb_mach_info pal_info = {
236 265
237 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, 266 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
238 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512), 267 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512),
268
269 .backlight_power = assabet_pal_backlight_power,
270 .lcd_power = assabet_pal_power,
271 .set_visual = assabet_lcd_set_visual,
239}; 272};
240#endif 273#endif
241 274
@@ -266,9 +299,6 @@ static void __init assabet_init(void)
266 PPDR |= PPC_TXD3 | PPC_TXD1; 299 PPDR |= PPC_TXD3 | PPC_TXD1;
267 PPSR |= PPC_TXD3 | PPC_TXD1; 300 PPSR |= PPC_TXD3 | PPC_TXD1;
268 301
269 sa1100fb_lcd_power = assabet_lcd_power;
270 sa1100fb_backlight_power = assabet_backlight_power;
271
272 if (machine_has_neponset()) { 302 if (machine_has_neponset()) {
273 /* 303 /*
274 * Angel sets this, but other bootloaders may not. 304 * Angel sets this, but other bootloaders may not.
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c
index f57808fb1827..9cb4062b1e9b 100644
--- a/arch/arm/mach-sa1100/generic.c
+++ b/arch/arm/mach-sa1100/generic.c
@@ -374,12 +374,6 @@ static int __init sa1100_init(void)
374 374
375arch_initcall(sa1100_init); 375arch_initcall(sa1100_init);
376 376
377void (*sa1100fb_backlight_power)(int on);
378void (*sa1100fb_lcd_power)(int on);
379
380EXPORT_SYMBOL(sa1100fb_backlight_power);
381EXPORT_SYMBOL(sa1100fb_lcd_power);
382
383 377
384/* 378/*
385 * Common I/O mapping: 379 * Common I/O mapping:
diff --git a/arch/arm/mach-sa1100/generic.h b/arch/arm/mach-sa1100/generic.h
index 3b903f42464d..5c68be858e0c 100644
--- a/arch/arm/mach-sa1100/generic.h
+++ b/arch/arm/mach-sa1100/generic.h
@@ -16,9 +16,6 @@ extern void sa11x0_restart(char, const char *);
16 mi->bank[__nr].start = (__start), \ 16 mi->bank[__nr].start = (__start), \
17 mi->bank[__nr].size = (__size) 17 mi->bank[__nr].size = (__size)
18 18
19extern void (*sa1100fb_backlight_power)(int on);
20extern void (*sa1100fb_lcd_power)(int on);
21
22extern void sa1110_mb_enable(void); 19extern void sa1110_mb_enable(void);
23extern void sa1110_mb_disable(void); 20extern void sa1110_mb_disable(void);
24 21
diff --git a/arch/arm/mach-sa1100/h3100.c b/arch/arm/mach-sa1100/h3100.c
index 1f8a271dc668..f23e7d0b2fba 100644
--- a/arch/arm/mach-sa1100/h3100.c
+++ b/arch/arm/mach-sa1100/h3100.c
@@ -52,6 +52,8 @@ static struct sa1100fb_mach_info h3100_lcd_info = {
52 52
53 .lccr0 = LCCR0_Mono | LCCR0_4PixMono | LCCR0_Sngl | LCCR0_Pas, 53 .lccr0 = LCCR0_Mono | LCCR0_4PixMono | LCCR0_Sngl | LCCR0_Pas,
54 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), 54 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
55
56 .lcd_power = h3100_lcd_power,
55}; 57};
56 58
57static void __init h3100_map_io(void) 59static void __init h3100_map_io(void)
@@ -96,7 +98,6 @@ static void __init h3100_mach_init(void)
96 h3xxx_init_gpio(h3100_default_gpio, ARRAY_SIZE(h3100_default_gpio)); 98 h3xxx_init_gpio(h3100_default_gpio, ARRAY_SIZE(h3100_default_gpio));
97 h3xxx_mach_init(); 99 h3xxx_mach_init();
98 100
99 sa1100fb_lcd_power = h3100_lcd_power;
100 sa11x0_register_lcd(&h3100_lcd_info); 101 sa11x0_register_lcd(&h3100_lcd_info);
101 sa11x0_register_irda(&h3100_irda_data); 102 sa11x0_register_irda(&h3100_irda_data);
102} 103}
diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c
index 3dd39bfe348d..2feac56ec90d 100644
--- a/arch/arm/mach-sa1100/h3600.c
+++ b/arch/arm/mach-sa1100/h3600.c
@@ -79,6 +79,8 @@ static struct sa1100fb_mach_info h3600_lcd_info = {
79 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), 79 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
80 80
81 .rgb[RGB_16] = &h3600_rgb_16, 81 .rgb[RGB_16] = &h3600_rgb_16,
82
83 .lcd_power = h3600_lcd_power,
82}; 84};
83 85
84 86
@@ -146,7 +148,6 @@ static void __init h3600_mach_init(void)
146 h3xxx_init_gpio(h3600_default_gpio, ARRAY_SIZE(h3600_default_gpio)); 148 h3xxx_init_gpio(h3600_default_gpio, ARRAY_SIZE(h3600_default_gpio));
147 h3xxx_mach_init(); 149 h3xxx_mach_init();
148 150
149 sa1100fb_lcd_power = h3600_lcd_power;
150 sa11x0_register_lcd(&h3600_lcd_info); 151 sa11x0_register_lcd(&h3600_lcd_info);
151 sa11x0_register_irda(&h3600_irda_data); 152 sa11x0_register_irda(&h3600_irda_data);
152} 153}
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c
index d645c6d5fd9f..c9f1e7cd95f8 100644
--- a/drivers/video/sa1100fb.c
+++ b/drivers/video/sa1100fb.c
@@ -194,9 +194,6 @@
194 194
195#include "sa1100fb.h" 195#include "sa1100fb.h"
196 196
197extern void (*sa1100fb_backlight_power)(int on);
198extern void (*sa1100fb_lcd_power)(int on);
199
200static const struct sa1100fb_rgb rgb_4 = { 197static const struct sa1100fb_rgb rgb_4 = {
201 .red = { .offset = 0, .length = 4, }, 198 .red = { .offset = 0, .length = 4, },
202 .green = { .offset = 0, .length = 4, }, 199 .green = { .offset = 0, .length = 4, },
@@ -426,22 +423,10 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
426 return 0; 423 return 0;
427} 424}
428 425
429static inline void sa1100fb_set_truecolor(u_int is_true_color) 426static void sa1100fb_set_visual(struct sa1100fb_info *fbi, u32 visual)
430{ 427{
431 if (machine_is_assabet()) { 428 if (fbi->inf->set_visual)
432#if 1 // phase 4 or newer Assabet's 429 fbi->inf->set_visual(visual);
433 if (is_true_color)
434 ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
435 else
436 ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
437#else
438 // older Assabet's
439 if (is_true_color)
440 ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
441 else
442 ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
443#endif
444 }
445} 430}
446 431
447/* 432/*
@@ -483,7 +468,7 @@ static int sa1100fb_set_par(struct fb_info *info)
483 /* 468 /*
484 * Set (any) board control register to handle new color depth 469 * Set (any) board control register to handle new color depth
485 */ 470 */
486 sa1100fb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR); 471 sa1100fb_set_visual(fbi, fbi->fb.fix.visual);
487 sa1100fb_activate_var(var, fbi); 472 sa1100fb_activate_var(var, fbi);
488 473
489 return 0; 474 return 0;
@@ -740,16 +725,16 @@ static inline void __sa1100fb_backlight_power(struct sa1100fb_info *fbi, int on)
740{ 725{
741 dev_dbg(fbi->dev, "backlight o%s\n", on ? "n" : "ff"); 726 dev_dbg(fbi->dev, "backlight o%s\n", on ? "n" : "ff");
742 727
743 if (sa1100fb_backlight_power) 728 if (fbi->inf->backlight_power)
744 sa1100fb_backlight_power(on); 729 fbi->inf->backlight_power(on);
745} 730}
746 731
747static inline void __sa1100fb_lcd_power(struct sa1100fb_info *fbi, int on) 732static inline void __sa1100fb_lcd_power(struct sa1100fb_info *fbi, int on)
748{ 733{
749 dev_dbg(fbi->dev, "LCD power o%s\n", on ? "n" : "ff"); 734 dev_dbg(fbi->dev, "LCD power o%s\n", on ? "n" : "ff");
750 735
751 if (sa1100fb_lcd_power) 736 if (fbi->inf->lcd_power)
752 sa1100fb_lcd_power(on); 737 fbi->inf->lcd_power(on);
753} 738}
754 739
755static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi) 740static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi)
@@ -1197,6 +1182,7 @@ static struct sa1100fb_info * __devinit sa1100fb_init_fbinfo(struct device *dev)
1197 fbi->task_state = (u_char)-1; 1182 fbi->task_state = (u_char)-1;
1198 fbi->fb.fix.smem_len = fbi->max_xres * fbi->max_yres * 1183 fbi->fb.fix.smem_len = fbi->max_xres * fbi->max_yres *
1199 fbi->max_bpp / 8; 1184 fbi->max_bpp / 8;
1185 fbi->inf = inf;
1200 1186
1201 /* Copy the RGB bitfield overrides */ 1187 /* Copy the RGB bitfield overrides */
1202 for (i = 0; i < NR_RGB; i++) 1188 for (i = 0; i < NR_RGB; i++)
diff --git a/drivers/video/sa1100fb.h b/drivers/video/sa1100fb.h
index 9ff9ba9a281a..3a634abbec14 100644
--- a/drivers/video/sa1100fb.h
+++ b/drivers/video/sa1100fb.h
@@ -65,6 +65,8 @@ struct sa1100fb_info {
65 struct notifier_block freq_transition; 65 struct notifier_block freq_transition;
66 struct notifier_block freq_policy; 66 struct notifier_block freq_policy;
67#endif 67#endif
68
69 const struct sa1100fb_mach_info *inf;
68}; 70};
69 71
70#define TO_INF(ptr,member) container_of(ptr,struct sa1100fb_info,member) 72#define TO_INF(ptr,member) container_of(ptr,struct sa1100fb_info,member)
diff --git a/include/video/sa1100fb.h b/include/video/sa1100fb.h
index e73c813c87f0..4ab409653785 100644
--- a/include/video/sa1100fb.h
+++ b/include/video/sa1100fb.h
@@ -54,6 +54,10 @@ struct sa1100fb_mach_info {
54 54
55 /* Overrides for the default RGB maps */ 55 /* Overrides for the default RGB maps */
56 const struct sa1100fb_rgb *rgb[NR_RGB]; 56 const struct sa1100fb_rgb *rgb[NR_RGB];
57
58 void (*backlight_power)(int);
59 void (*lcd_power)(int);
60 void (*set_visual)(u32);
57}; 61};
58 62
59#endif 63#endif