aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-sa1100
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2012-01-14 06:50:04 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2012-02-21 06:56:19 -0500
commite1b7a72aeb8292502c97b43eceb01aea47ded40f (patch)
treee3932a7b52a5805cfff785ca9162925e34eb3095 /arch/arm/mach-sa1100
parent9e6720fb0cfd6edda12b408a66f4ac88e8a82e32 (diff)
FB: sa1100: move platform data to platform files
Move platform data out of the sa1100fb driver into the various platform files themselves. Acked-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-sa1100')
-rw-r--r--arch/arm/mach-sa1100/assabet.c40
-rw-r--r--arch/arm/mach-sa1100/collie.c17
-rw-r--r--arch/arm/mach-sa1100/generic.c8
-rw-r--r--arch/arm/mach-sa1100/generic.h3
-rw-r--r--arch/arm/mach-sa1100/h3100.c22
-rw-r--r--arch/arm/mach-sa1100/h3600.c31
-rw-r--r--arch/arm/mach-sa1100/lart.c79
-rw-r--r--arch/arm/mach-sa1100/shannon.c17
8 files changed, 212 insertions, 5 deletions
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c
index 0c4b76ab4d8e..37fb0cd1a296 100644
--- a/arch/arm/mach-sa1100/assabet.c
+++ b/arch/arm/mach-sa1100/assabet.c
@@ -20,6 +20,8 @@
20#include <linux/delay.h> 20#include <linux/delay.h>
21#include <linux/mm.h> 21#include <linux/mm.h>
22 22
23#include <video/sa1100fb.h>
24
23#include <mach/hardware.h> 25#include <mach/hardware.h>
24#include <asm/mach-types.h> 26#include <asm/mach-types.h>
25#include <asm/irq.h> 27#include <asm/irq.h>
@@ -204,6 +206,39 @@ static struct mcp_plat_data assabet_mcp_data = {
204 .sclk_rate = 11981000, 206 .sclk_rate = 11981000,
205}; 207};
206 208
209#ifndef ASSABET_PAL_VIDEO
210/*
211 * The assabet uses a sharp LQ039Q2DS54 LCD module. It is actually
212 * takes an RGB666 signal, but we provide it with an RGB565 signal
213 * instead (def_rgb_16).
214 */
215static struct sa1100fb_mach_info lq039q2ds54_info = {
216 .pixclock = 171521, .bpp = 16,
217 .xres = 320, .yres = 240,
218
219 .hsync_len = 5, .vsync_len = 1,
220 .left_margin = 61, .upper_margin = 3,
221 .right_margin = 9, .lower_margin = 0,
222
223 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
224
225 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
226 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
227};
228#else
229static struct sa1100fb_mach_info pal_info = {
230 .pixclock = 67797, .bpp = 16,
231 .xres = 640, .yres = 512,
232
233 .hsync_len = 64, .vsync_len = 6,
234 .left_margin = 125, .upper_margin = 70,
235 .right_margin = 115, .lower_margin = 36,
236
237 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
238 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512),
239};
240#endif
241
207static void __init assabet_init(void) 242static void __init assabet_init(void)
208{ 243{
209 /* 244 /*
@@ -249,6 +284,11 @@ static void __init assabet_init(void)
249#endif 284#endif
250 } 285 }
251 286
287#ifndef ASSABET_PAL_VIDEO
288 sa11x0_register_lcd(&lq039q2ds54_info);
289#else
290 sa11x0_register_lcd(&pal_video);
291#endif
252 sa11x0_register_mtd(&assabet_flash_data, assabet_flash_resources, 292 sa11x0_register_mtd(&assabet_flash_data, assabet_flash_resources,
253 ARRAY_SIZE(assabet_flash_resources)); 293 ARRAY_SIZE(assabet_flash_resources));
254 sa11x0_register_irda(&assabet_irda_data); 294 sa11x0_register_irda(&assabet_irda_data);
diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c
index fd5652118ed1..70f6cdc9e63d 100644
--- a/arch/arm/mach-sa1100/collie.c
+++ b/arch/arm/mach-sa1100/collie.c
@@ -28,6 +28,8 @@
28#include <linux/gpio.h> 28#include <linux/gpio.h>
29#include <linux/pda_power.h> 29#include <linux/pda_power.h>
30 30
31#include <video/sa1100fb.h>
32
31#include <mach/hardware.h> 33#include <mach/hardware.h>
32#include <asm/mach-types.h> 34#include <asm/mach-types.h>
33#include <asm/irq.h> 35#include <asm/irq.h>
@@ -310,6 +312,20 @@ static struct resource collie_flash_resources[] = {
310 } 312 }
311}; 313};
312 314
315static struct sa1100fb_mach_info collie_lcd_info = {
316 .pixclock = 171521, .bpp = 16,
317 .xres = 320, .yres = 240,
318
319 .hsync_len = 5, .vsync_len = 1,
320 .left_margin = 11, .upper_margin = 2,
321 .right_margin = 30, .lower_margin = 0,
322
323 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
324
325 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
326 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
327};
328
313static void __init collie_init(void) 329static void __init collie_init(void)
314{ 330{
315 int ret = 0; 331 int ret = 0;
@@ -348,6 +364,7 @@ static void __init collie_init(void)
348 printk(KERN_WARNING "collie: Unable to register LoCoMo device\n"); 364 printk(KERN_WARNING "collie: Unable to register LoCoMo device\n");
349 } 365 }
350 366
367 sa11x0_register_lcd(&collie_lcd_info);
351 sa11x0_register_mtd(&collie_flash_data, collie_flash_resources, 368 sa11x0_register_mtd(&collie_flash_data, collie_flash_resources,
352 ARRAY_SIZE(collie_flash_resources)); 369 ARRAY_SIZE(collie_flash_resources));
353 sa11x0_register_mcp(&collie_mcp_data); 370 sa11x0_register_mcp(&collie_mcp_data);
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c
index bb10ee2cb89f..f57808fb1827 100644
--- a/arch/arm/mach-sa1100/generic.c
+++ b/arch/arm/mach-sa1100/generic.c
@@ -19,6 +19,8 @@
19#include <linux/ioport.h> 19#include <linux/ioport.h>
20#include <linux/platform_device.h> 20#include <linux/platform_device.h>
21 21
22#include <video/sa1100fb.h>
23
22#include <asm/div64.h> 24#include <asm/div64.h>
23#include <mach/hardware.h> 25#include <mach/hardware.h>
24#include <asm/system.h> 26#include <asm/system.h>
@@ -294,6 +296,11 @@ static struct platform_device sa11x0fb_device = {
294 .resource = sa11x0fb_resources, 296 .resource = sa11x0fb_resources,
295}; 297};
296 298
299void sa11x0_register_lcd(struct sa1100fb_mach_info *inf)
300{
301 sa11x0_register_device(&sa11x0fb_device, inf);
302}
303
297static struct platform_device sa11x0pcmcia_device = { 304static struct platform_device sa11x0pcmcia_device = {
298 .name = "sa11x0-pcmcia", 305 .name = "sa11x0-pcmcia",
299 .id = -1, 306 .id = -1,
@@ -356,7 +363,6 @@ static struct platform_device *sa11x0_devices[] __initdata = {
356 &sa11x0uart3_device, 363 &sa11x0uart3_device,
357 &sa11x0ssp_device, 364 &sa11x0ssp_device,
358 &sa11x0pcmcia_device, 365 &sa11x0pcmcia_device,
359 &sa11x0fb_device,
360 &sa11x0rtc_device, 366 &sa11x0rtc_device,
361}; 367};
362 368
diff --git a/arch/arm/mach-sa1100/generic.h b/arch/arm/mach-sa1100/generic.h
index 33268cf6be36..3b903f42464d 100644
--- a/arch/arm/mach-sa1100/generic.h
+++ b/arch/arm/mach-sa1100/generic.h
@@ -40,3 +40,6 @@ void sa11x0_register_irda(struct irda_platform_data *irda);
40 40
41struct mcp_plat_data; 41struct mcp_plat_data;
42void sa11x0_register_mcp(struct mcp_plat_data *data); 42void sa11x0_register_mcp(struct mcp_plat_data *data);
43
44struct sa1100fb_mach_info;
45void sa11x0_register_lcd(struct sa1100fb_mach_info *inf);
diff --git a/arch/arm/mach-sa1100/h3100.c b/arch/arm/mach-sa1100/h3100.c
index 1e6b3c105ba6..1f8a271dc668 100644
--- a/arch/arm/mach-sa1100/h3100.c
+++ b/arch/arm/mach-sa1100/h3100.c
@@ -14,6 +14,8 @@
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/gpio.h> 15#include <linux/gpio.h>
16 16
17#include <video/sa1100fb.h>
18
17#include <asm/mach-types.h> 19#include <asm/mach-types.h>
18#include <asm/mach/arch.h> 20#include <asm/mach/arch.h>
19#include <asm/mach/irda.h> 21#include <asm/mach/irda.h>
@@ -36,13 +38,26 @@ static void h3100_lcd_power(int enable)
36 } 38 }
37} 39}
38 40
41static struct sa1100fb_mach_info h3100_lcd_info = {
42 .pixclock = 406977, .bpp = 4,
43 .xres = 320, .yres = 240,
44
45 .hsync_len = 26, .vsync_len = 41,
46 .left_margin = 4, .upper_margin = 0,
47 .right_margin = 4, .lower_margin = 0,
48
49 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
50 .cmap_greyscale = 1,
51 .cmap_inverse = 1,
52
53 .lccr0 = LCCR0_Mono | LCCR0_4PixMono | LCCR0_Sngl | LCCR0_Pas,
54 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
55};
39 56
40static void __init h3100_map_io(void) 57static void __init h3100_map_io(void)
41{ 58{
42 h3xxx_map_io(); 59 h3xxx_map_io();
43 60
44 sa1100fb_lcd_power = h3100_lcd_power;
45
46 /* Older bootldrs put GPIO2-9 in alternate mode on the 61 /* Older bootldrs put GPIO2-9 in alternate mode on the
47 assumption that they are used for video */ 62 assumption that they are used for video */
48 GAFR &= ~0x000001fb; 63 GAFR &= ~0x000001fb;
@@ -80,6 +95,9 @@ static void __init h3100_mach_init(void)
80{ 95{
81 h3xxx_init_gpio(h3100_default_gpio, ARRAY_SIZE(h3100_default_gpio)); 96 h3xxx_init_gpio(h3100_default_gpio, ARRAY_SIZE(h3100_default_gpio));
82 h3xxx_mach_init(); 97 h3xxx_mach_init();
98
99 sa1100fb_lcd_power = h3100_lcd_power;
100 sa11x0_register_lcd(&h3100_lcd_info);
83 sa11x0_register_irda(&h3100_irda_data); 101 sa11x0_register_irda(&h3100_irda_data);
84} 102}
85 103
diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c
index 6b58e7460ecf..3dd39bfe348d 100644
--- a/arch/arm/mach-sa1100/h3600.c
+++ b/arch/arm/mach-sa1100/h3600.c
@@ -14,6 +14,8 @@
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/gpio.h> 15#include <linux/gpio.h>
16 16
17#include <video/sa1100fb.h>
18
17#include <asm/mach-types.h> 19#include <asm/mach-types.h>
18#include <asm/mach/arch.h> 20#include <asm/mach/arch.h>
19#include <asm/mach/irda.h> 21#include <asm/mach/irda.h>
@@ -56,11 +58,33 @@ err2: gpio_free(H3XXX_EGPIO_LCD_ON);
56err1: return; 58err1: return;
57} 59}
58 60
61static const struct sa1100fb_rgb h3600_rgb_16 = {
62 .red = { .offset = 12, .length = 4, },
63 .green = { .offset = 7, .length = 4, },
64 .blue = { .offset = 1, .length = 4, },
65 .transp = { .offset = 0, .length = 0, },
66};
67
68static struct sa1100fb_mach_info h3600_lcd_info = {
69 .pixclock = 174757, .bpp = 16,
70 .xres = 320, .yres = 240,
71
72 .hsync_len = 3, .vsync_len = 3,
73 .left_margin = 12, .upper_margin = 10,
74 .right_margin = 17, .lower_margin = 1,
75
76 .cmap_static = 1,
77
78 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
79 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
80
81 .rgb[RGB_16] = &h3600_rgb_16,
82};
83
84
59static void __init h3600_map_io(void) 85static void __init h3600_map_io(void)
60{ 86{
61 h3xxx_map_io(); 87 h3xxx_map_io();
62
63 sa1100fb_lcd_power = h3600_lcd_power;
64} 88}
65 89
66/* 90/*
@@ -121,6 +145,9 @@ static void __init h3600_mach_init(void)
121{ 145{
122 h3xxx_init_gpio(h3600_default_gpio, ARRAY_SIZE(h3600_default_gpio)); 146 h3xxx_init_gpio(h3600_default_gpio, ARRAY_SIZE(h3600_default_gpio));
123 h3xxx_mach_init(); 147 h3xxx_mach_init();
148
149 sa1100fb_lcd_power = h3600_lcd_power;
150 sa11x0_register_lcd(&h3600_lcd_info);
124 sa11x0_register_irda(&h3600_irda_data); 151 sa11x0_register_irda(&h3600_irda_data);
125} 152}
126 153
diff --git a/arch/arm/mach-sa1100/lart.c b/arch/arm/mach-sa1100/lart.c
index af4e2761f3db..463a322a425b 100644
--- a/arch/arm/mach-sa1100/lart.c
+++ b/arch/arm/mach-sa1100/lart.c
@@ -6,6 +6,8 @@
6#include <linux/kernel.h> 6#include <linux/kernel.h>
7#include <linux/tty.h> 7#include <linux/tty.h>
8 8
9#include <video/sa1100fb.h>
10
9#include <mach/hardware.h> 11#include <mach/hardware.h>
10#include <asm/setup.h> 12#include <asm/setup.h>
11#include <asm/mach-types.h> 13#include <asm/mach-types.h>
@@ -26,8 +28,85 @@ static struct mcp_plat_data lart_mcp_data = {
26 .sclk_rate = 11981000, 28 .sclk_rate = 11981000,
27}; 29};
28 30
31#ifdef LART_GREY_LCD
32static struct sa1100fb_mach_info lart_grey_info = {
33 .pixclock = 150000, .bpp = 4,
34 .xres = 320, .yres = 240,
35
36 .hsync_len = 1, .vsync_len = 1,
37 .left_margin = 4, .upper_margin = 0,
38 .right_margin = 2, .lower_margin = 0,
39
40 .cmap_greyscale = 1,
41 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
42
43 .lccr0 = LCCR0_Mono | LCCR0_Sngl | LCCR0_Pas | LCCR0_4PixMono,
44 .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512),
45};
46#endif
47#ifdef LART_COLOR_LCD
48static struct sa1100fb_mach_info lart_color_info = {
49 .pixclock = 150000, .bpp = 16,
50 .xres = 320, .yres = 240,
51
52 .hsync_len = 2, .vsync_len = 3,
53 .left_margin = 69, .upper_margin = 14,
54 .right_margin = 8, .lower_margin = 4,
55
56 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
57 .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512),
58};
59#endif
60#ifdef LART_VIDEO_OUT
61static struct sa1100fb_mach_info lart_video_info = {
62 .pixclock = 39721, .bpp = 16,
63 .xres = 640, .yres = 480,
64
65 .hsync_len = 95, .vsync_len = 2,
66 .left_margin = 40, .upper_margin = 32,
67 .right_margin = 24, .lower_margin = 11,
68
69 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
70
71 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
72 .lccr3 = LCCR3_OutEnL | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512),
73};
74#endif
75
76#ifdef LART_KIT01_LCD
77static struct sa1100fb_mach_info lart_kit01_info = {
78 .pixclock = 63291, .bpp = 16,
79 .xres = 640, .yres = 480,
80
81 .hsync_len = 64, .vsync_len = 3,
82 .left_margin = 122, .upper_margin = 45,
83 .right_margin = 10, .lower_margin = 10,
84
85 .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
86 .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg
87};
88#endif
89
29static void __init lart_init(void) 90static void __init lart_init(void)
30{ 91{
92 struct sa1100fb_mach_info *inf = NULL;
93
94#ifdef LART_GREY_LCD
95 inf = &lart_grey_info;
96#endif
97#ifdef LART_COLOR_LCD
98 inf = &lart_color_info;
99#endif
100#ifdef LART_VIDEO_OUT
101 inf = &lart_video_info;
102#endif
103#ifdef LART_KIT01_LCD
104 inf = &lart_kit01_info;
105#endif
106
107 if (inf)
108 sa11x0_register_lcd(inf);
109
31 sa11x0_register_mcp(&lart_mcp_data); 110 sa11x0_register_mcp(&lart_mcp_data);
32} 111}
33 112
diff --git a/arch/arm/mach-sa1100/shannon.c b/arch/arm/mach-sa1100/shannon.c
index 318b2b766a0b..c695b730bd69 100644
--- a/arch/arm/mach-sa1100/shannon.c
+++ b/arch/arm/mach-sa1100/shannon.c
@@ -9,6 +9,8 @@
9#include <linux/mtd/mtd.h> 9#include <linux/mtd/mtd.h>
10#include <linux/mtd/partitions.h> 10#include <linux/mtd/partitions.h>
11 11
12#include <video/sa1100fb.h>
13
12#include <mach/hardware.h> 14#include <mach/hardware.h>
13#include <asm/mach-types.h> 15#include <asm/mach-types.h>
14#include <asm/setup.h> 16#include <asm/setup.h>
@@ -57,8 +59,23 @@ static struct mcp_plat_data shannon_mcp_data = {
57 .sclk_rate = 11981000, 59 .sclk_rate = 11981000,
58}; 60};
59 61
62static struct sa1100fb_mach_info shannon_lcd_info = {
63 .pixclock = 152500, .bpp = 8,
64 .xres = 640, .yres = 480,
65
66 .hsync_len = 4, .vsync_len = 3,
67 .left_margin = 2, .upper_margin = 0,
68 .right_margin = 1, .lower_margin = 0,
69
70 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
71
72 .lccr0 = LCCR0_Color | LCCR0_Dual | LCCR0_Pas,
73 .lccr3 = LCCR3_ACBsDiv(512),
74};
75
60static void __init shannon_init(void) 76static void __init shannon_init(void)
61{ 77{
78 sa11x0_register_lcd(&shannon_lcd_info);
62 sa11x0_register_mtd(&shannon_flash_data, &shannon_flash_resource, 1); 79 sa11x0_register_mtd(&shannon_flash_data, &shannon_flash_resource, 1);
63 sa11x0_register_mcp(&shannon_mcp_data); 80 sa11x0_register_mcp(&shannon_mcp_data);
64} 81}