aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2013-03-28 10:53:42 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-09-27 02:26:19 -0400
commit8af2c2869fd129bce0d0dfd86c6364c1096f9eff (patch)
treedd04bfc8f8be291b947fb37e8c19dc3e30bf72a5
parent090fd59308c9d50b8eabf71cd28b5513250a7b79 (diff)
video: atmel_lcdfb: fix platform data struct
Today we mix pdata and drivers data in the struct atmel_lcdfb_info Fix it and introduce a new struct atmel_lcdfb_pdata for platform data only Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
-rw-r--r--arch/arm/mach-at91/at91sam9261_devices.c6
-rw-r--r--arch/arm/mach-at91/at91sam9263_devices.c6
-rw-r--r--arch/arm/mach-at91/at91sam9g45_devices.c6
-rw-r--r--arch/arm/mach-at91/at91sam9rl_devices.c6
-rw-r--r--arch/arm/mach-at91/board-sam9261ek.c6
-rw-r--r--arch/arm/mach-at91/board-sam9263ek.c4
-rw-r--r--arch/arm/mach-at91/board-sam9m10g45ek.c4
-rw-r--r--arch/arm/mach-at91/board-sam9rlek.c4
-rw-r--r--arch/arm/mach-at91/board.h4
-rw-r--r--arch/avr32/boards/atngw100/evklcd10x.c6
-rw-r--r--arch/avr32/boards/atngw100/mrmt.c4
-rw-r--r--arch/avr32/boards/atstk1000/atstk1000.h2
-rw-r--r--arch/avr32/boards/atstk1000/setup.c2
-rw-r--r--arch/avr32/boards/favr-32/setup.c2
-rw-r--r--arch/avr32/boards/hammerhead/setup.c2
-rw-r--r--arch/avr32/boards/merisc/display.c2
-rw-r--r--arch/avr32/boards/mimc200/setup.c4
-rw-r--r--arch/avr32/mach-at32ap/at32ap700x.c8
-rw-r--r--arch/avr32/mach-at32ap/include/mach/board.h4
-rw-r--r--drivers/video/atmel_lcdfb.c105
-rw-r--r--include/video/atmel_lcdc.h23
21 files changed, 109 insertions, 101 deletions
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
index 629ea5fc95cf..b2a34740146a 100644
--- a/arch/arm/mach-at91/at91sam9261_devices.c
+++ b/arch/arm/mach-at91/at91sam9261_devices.c
@@ -465,7 +465,7 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
465 465
466#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE) 466#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
467static u64 lcdc_dmamask = DMA_BIT_MASK(32); 467static u64 lcdc_dmamask = DMA_BIT_MASK(32);
468static struct atmel_lcdfb_info lcdc_data; 468static struct atmel_lcdfb_pdata lcdc_data;
469 469
470static struct resource lcdc_resources[] = { 470static struct resource lcdc_resources[] = {
471 [0] = { 471 [0] = {
@@ -498,7 +498,7 @@ static struct platform_device at91_lcdc_device = {
498 .num_resources = ARRAY_SIZE(lcdc_resources), 498 .num_resources = ARRAY_SIZE(lcdc_resources),
499}; 499};
500 500
501void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) 501void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data)
502{ 502{
503 if (!data) { 503 if (!data) {
504 return; 504 return;
@@ -559,7 +559,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
559 platform_device_register(&at91_lcdc_device); 559 platform_device_register(&at91_lcdc_device);
560} 560}
561#else 561#else
562void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {} 562void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data) {}
563#endif 563#endif
564 564
565 565
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
index 858c8aac2daf..4aeadddbc181 100644
--- a/arch/arm/mach-at91/at91sam9263_devices.c
+++ b/arch/arm/mach-at91/at91sam9263_devices.c
@@ -832,7 +832,7 @@ void __init at91_add_device_can(struct at91_can_data *data) {}
832 832
833#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE) 833#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
834static u64 lcdc_dmamask = DMA_BIT_MASK(32); 834static u64 lcdc_dmamask = DMA_BIT_MASK(32);
835static struct atmel_lcdfb_info lcdc_data; 835static struct atmel_lcdfb_pdata lcdc_data;
836 836
837static struct resource lcdc_resources[] = { 837static struct resource lcdc_resources[] = {
838 [0] = { 838 [0] = {
@@ -859,7 +859,7 @@ static struct platform_device at91_lcdc_device = {
859 .num_resources = ARRAY_SIZE(lcdc_resources), 859 .num_resources = ARRAY_SIZE(lcdc_resources),
860}; 860};
861 861
862void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) 862void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data)
863{ 863{
864 if (!data) 864 if (!data)
865 return; 865 return;
@@ -891,7 +891,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
891 platform_device_register(&at91_lcdc_device); 891 platform_device_register(&at91_lcdc_device);
892} 892}
893#else 893#else
894void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {} 894void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data) {}
895#endif 895#endif
896 896
897 897
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index acb703e13331..cb36fa872d30 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -965,7 +965,7 @@ void __init at91_add_device_isi(struct isi_platform_data *data,
965 965
966#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE) 966#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
967static u64 lcdc_dmamask = DMA_BIT_MASK(32); 967static u64 lcdc_dmamask = DMA_BIT_MASK(32);
968static struct atmel_lcdfb_info lcdc_data; 968static struct atmel_lcdfb_pdata lcdc_data;
969 969
970static struct resource lcdc_resources[] = { 970static struct resource lcdc_resources[] = {
971 [0] = { 971 [0] = {
@@ -991,7 +991,7 @@ static struct platform_device at91_lcdc_device = {
991 .num_resources = ARRAY_SIZE(lcdc_resources), 991 .num_resources = ARRAY_SIZE(lcdc_resources),
992}; 992};
993 993
994void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) 994void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data)
995{ 995{
996 if (!data) 996 if (!data)
997 return; 997 return;
@@ -1037,7 +1037,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
1037 platform_device_register(&at91_lcdc_device); 1037 platform_device_register(&at91_lcdc_device);
1038} 1038}
1039#else 1039#else
1040void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {} 1040void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data) {}
1041#endif 1041#endif
1042 1042
1043 1043
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
index 352468f265a9..a698bdab2cce 100644
--- a/arch/arm/mach-at91/at91sam9rl_devices.c
+++ b/arch/arm/mach-at91/at91sam9rl_devices.c
@@ -498,7 +498,7 @@ void __init at91_add_device_ac97(struct ac97c_platform_data *data) {}
498 498
499#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE) 499#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
500static u64 lcdc_dmamask = DMA_BIT_MASK(32); 500static u64 lcdc_dmamask = DMA_BIT_MASK(32);
501static struct atmel_lcdfb_info lcdc_data; 501static struct atmel_lcdfb_pdata lcdc_data;
502 502
503static struct resource lcdc_resources[] = { 503static struct resource lcdc_resources[] = {
504 [0] = { 504 [0] = {
@@ -525,7 +525,7 @@ static struct platform_device at91_lcdc_device = {
525 .num_resources = ARRAY_SIZE(lcdc_resources), 525 .num_resources = ARRAY_SIZE(lcdc_resources),
526}; 526};
527 527
528void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) 528void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data)
529{ 529{
530 if (!data) { 530 if (!data) {
531 return; 531 return;
@@ -557,7 +557,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
557 platform_device_register(&at91_lcdc_device); 557 platform_device_register(&at91_lcdc_device);
558} 558}
559#else 559#else
560void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {} 560void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data) {}
561#endif 561#endif
562 562
563 563
diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c
index d3437624ca4e..4ab1ba7557e4 100644
--- a/arch/arm/mach-at91/board-sam9261ek.c
+++ b/arch/arm/mach-at91/board-sam9261ek.c
@@ -401,7 +401,7 @@ static void at91_lcdc_stn_power_control(int on)
401 } 401 }
402} 402}
403 403
404static struct atmel_lcdfb_info __initdata ek_lcdc_data = { 404static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
405 .default_bpp = 1, 405 .default_bpp = 1,
406 .default_dmacon = ATMEL_LCDC_DMAEN, 406 .default_dmacon = ATMEL_LCDC_DMAEN,
407 .default_lcdcon2 = AT91SAM9261_DEFAULT_STN_LCDCON2, 407 .default_lcdcon2 = AT91SAM9261_DEFAULT_STN_LCDCON2,
@@ -453,7 +453,7 @@ static void at91_lcdc_tft_power_control(int on)
453 at91_set_gpio_value(AT91_PIN_PA12, 1); /* power down */ 453 at91_set_gpio_value(AT91_PIN_PA12, 1); /* power down */
454} 454}
455 455
456static struct atmel_lcdfb_info __initdata ek_lcdc_data = { 456static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
457 .lcdcon_is_backlight = true, 457 .lcdcon_is_backlight = true,
458 .default_bpp = 16, 458 .default_bpp = 16,
459 .default_dmacon = ATMEL_LCDC_DMAEN, 459 .default_dmacon = ATMEL_LCDC_DMAEN,
@@ -465,7 +465,7 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
465#endif 465#endif
466 466
467#else 467#else
468static struct atmel_lcdfb_info __initdata ek_lcdc_data; 468static struct atmel_lcdfb_pdata __initdata ek_lcdc_data;
469#endif 469#endif
470 470
471 471
diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c
index 3284df05df14..0fdae3f1541d 100644
--- a/arch/arm/mach-at91/board-sam9263ek.c
+++ b/arch/arm/mach-at91/board-sam9263ek.c
@@ -281,7 +281,7 @@ static void at91_lcdc_power_control(int on)
281} 281}
282 282
283/* Driver datas */ 283/* Driver datas */
284static struct atmel_lcdfb_info __initdata ek_lcdc_data = { 284static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
285 .lcdcon_is_backlight = true, 285 .lcdcon_is_backlight = true,
286 .default_bpp = 16, 286 .default_bpp = 16,
287 .default_dmacon = ATMEL_LCDC_DMAEN, 287 .default_dmacon = ATMEL_LCDC_DMAEN,
@@ -292,7 +292,7 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
292}; 292};
293 293
294#else 294#else
295static struct atmel_lcdfb_info __initdata ek_lcdc_data; 295static struct atmel_lcdfb_pdata __initdata ek_lcdc_data;
296#endif 296#endif
297 297
298 298
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c
index 2a94896a1375..ef39078c8ce2 100644
--- a/arch/arm/mach-at91/board-sam9m10g45ek.c
+++ b/arch/arm/mach-at91/board-sam9m10g45ek.c
@@ -284,7 +284,7 @@ static struct fb_monspecs at91fb_default_monspecs = {
284 | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE) 284 | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
285 285
286/* Driver datas */ 286/* Driver datas */
287static struct atmel_lcdfb_info __initdata ek_lcdc_data = { 287static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
288 .lcdcon_is_backlight = true, 288 .lcdcon_is_backlight = true,
289 .default_bpp = 32, 289 .default_bpp = 32,
290 .default_dmacon = ATMEL_LCDC_DMAEN, 290 .default_dmacon = ATMEL_LCDC_DMAEN,
@@ -295,7 +295,7 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
295}; 295};
296 296
297#else 297#else
298static struct atmel_lcdfb_info __initdata ek_lcdc_data; 298static struct atmel_lcdfb_pdata __initdata ek_lcdc_data;
299#endif 299#endif
300 300
301 301
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c
index aa265dcf2128..b77d7a9febd8 100644
--- a/arch/arm/mach-at91/board-sam9rlek.c
+++ b/arch/arm/mach-at91/board-sam9rlek.c
@@ -179,7 +179,7 @@ static void at91_lcdc_power_control(int on)
179} 179}
180 180
181/* Driver datas */ 181/* Driver datas */
182static struct atmel_lcdfb_info __initdata ek_lcdc_data = { 182static struct atmel_lcdfb_pdata __initdata ek_lcdc_data = {
183 .lcdcon_is_backlight = true, 183 .lcdcon_is_backlight = true,
184 .default_bpp = 16, 184 .default_bpp = 16,
185 .default_dmacon = ATMEL_LCDC_DMAEN, 185 .default_dmacon = ATMEL_LCDC_DMAEN,
@@ -191,7 +191,7 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
191}; 191};
192 192
193#else 193#else
194static struct atmel_lcdfb_info __initdata ek_lcdc_data; 194static struct atmel_lcdfb_pdata __initdata ek_lcdc_data;
195#endif 195#endif
196 196
197 197
diff --git a/arch/arm/mach-at91/board.h b/arch/arm/mach-at91/board.h
index 4a234fb2ab3b..6c08b341167d 100644
--- a/arch/arm/mach-at91/board.h
+++ b/arch/arm/mach-at91/board.h
@@ -107,8 +107,8 @@ extern void __init at91_add_device_pwm(u32 mask);
107extern void __init at91_add_device_ssc(unsigned id, unsigned pins); 107extern void __init at91_add_device_ssc(unsigned id, unsigned pins);
108 108
109 /* LCD Controller */ 109 /* LCD Controller */
110struct atmel_lcdfb_info; 110struct atmel_lcdfb_pdata;
111extern void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data); 111extern void __init at91_add_device_lcdc(struct atmel_lcdfb_pdata *data);
112 112
113 /* AC97 */ 113 /* AC97 */
114extern void __init at91_add_device_ac97(struct ac97c_platform_data *data); 114extern void __init at91_add_device_ac97(struct ac97c_platform_data *data);
diff --git a/arch/avr32/boards/atngw100/evklcd10x.c b/arch/avr32/boards/atngw100/evklcd10x.c
index 20388750d564..dc4280413e9d 100644
--- a/arch/avr32/boards/atngw100/evklcd10x.c
+++ b/arch/avr32/boards/atngw100/evklcd10x.c
@@ -58,7 +58,7 @@ static struct fb_monspecs __initdata atevklcd10x_default_monspecs = {
58 .dclkmax = 28330000, 58 .dclkmax = 28330000,
59}; 59};
60 60
61static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = { 61static struct atmel_lcdfb_pdata __initdata atevklcd10x_lcdc_data = {
62 .default_bpp = 16, 62 .default_bpp = 16,
63 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 63 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
64 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 64 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
@@ -96,7 +96,7 @@ static struct fb_monspecs __initdata atevklcd10x_default_monspecs = {
96 .dclkmax = 7000000, 96 .dclkmax = 7000000,
97}; 97};
98 98
99static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = { 99static struct atmel_lcdfb_pdata __initdata atevklcd10x_lcdc_data = {
100 .default_bpp = 16, 100 .default_bpp = 16,
101 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 101 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
102 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 102 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
@@ -134,7 +134,7 @@ static struct fb_monspecs __initdata atevklcd10x_default_monspecs = {
134 .dclkmax = 6400000, 134 .dclkmax = 6400000,
135}; 135};
136 136
137static struct atmel_lcdfb_info __initdata atevklcd10x_lcdc_data = { 137static struct atmel_lcdfb_pdata __initdata atevklcd10x_lcdc_data = {
138 .default_bpp = 16, 138 .default_bpp = 16,
139 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 139 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
140 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 140 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
diff --git a/arch/avr32/boards/atngw100/mrmt.c b/arch/avr32/boards/atngw100/mrmt.c
index 7de083d19b7e..1ba09e4c02b1 100644
--- a/arch/avr32/boards/atngw100/mrmt.c
+++ b/arch/avr32/boards/atngw100/mrmt.c
@@ -83,7 +83,7 @@ static struct fb_monspecs __initdata lcd_fb_default_monspecs = {
83 .dclkmax = 9260000, 83 .dclkmax = 9260000,
84}; 84};
85 85
86static struct atmel_lcdfb_info __initdata rmt_lcdc_data = { 86static struct atmel_lcdfb_pdata __initdata rmt_lcdc_data = {
87 .default_bpp = 24, 87 .default_bpp = 24,
88 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 88 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
89 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 89 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
@@ -126,7 +126,7 @@ static struct fb_monspecs __initdata lcd_fb_default_monspecs = {
126 .dclkmax = 9260000, 126 .dclkmax = 9260000,
127}; 127};
128 128
129static struct atmel_lcdfb_info __initdata rmt_lcdc_data = { 129static struct atmel_lcdfb_pdata __initdata rmt_lcdc_data = {
130 .default_bpp = 24, 130 .default_bpp = 24,
131 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 131 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
132 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 132 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
diff --git a/arch/avr32/boards/atstk1000/atstk1000.h b/arch/avr32/boards/atstk1000/atstk1000.h
index 9392d3252865..653cc09e536c 100644
--- a/arch/avr32/boards/atstk1000/atstk1000.h
+++ b/arch/avr32/boards/atstk1000/atstk1000.h
@@ -10,7 +10,7 @@
10#ifndef __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H 10#ifndef __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H
11#define __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H 11#define __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H
12 12
13extern struct atmel_lcdfb_info atstk1000_lcdc_data; 13extern struct atmel_lcdfb_pdata atstk1000_lcdc_data;
14 14
15void atstk1000_setup_j2_leds(void); 15void atstk1000_setup_j2_leds(void);
16 16
diff --git a/arch/avr32/boards/atstk1000/setup.c b/arch/avr32/boards/atstk1000/setup.c
index 2d6b560115d9..b6b88f5e0b43 100644
--- a/arch/avr32/boards/atstk1000/setup.c
+++ b/arch/avr32/boards/atstk1000/setup.c
@@ -55,7 +55,7 @@ static struct fb_monspecs __initdata atstk1000_default_monspecs = {
55 .dclkmax = 30000000, 55 .dclkmax = 30000000,
56}; 56};
57 57
58struct atmel_lcdfb_info __initdata atstk1000_lcdc_data = { 58struct atmel_lcdfb_pdata __initdata atstk1000_lcdc_data = {
59 .default_bpp = 24, 59 .default_bpp = 24,
60 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 60 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
61 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 61 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
diff --git a/arch/avr32/boards/favr-32/setup.c b/arch/avr32/boards/favr-32/setup.c
index 27bd6fbe21cb..7b1f2cd85400 100644
--- a/arch/avr32/boards/favr-32/setup.c
+++ b/arch/avr32/boards/favr-32/setup.c
@@ -125,7 +125,7 @@ static struct fb_monspecs __initdata favr32_default_monspecs = {
125 .dclkmax = 28000000, 125 .dclkmax = 28000000,
126}; 126};
127 127
128struct atmel_lcdfb_info __initdata favr32_lcdc_data = { 128struct atmel_lcdfb_pdata __initdata favr32_lcdc_data = {
129 .default_bpp = 16, 129 .default_bpp = 16,
130 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 130 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
131 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 131 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
diff --git a/arch/avr32/boards/hammerhead/setup.c b/arch/avr32/boards/hammerhead/setup.c
index 9d1efd1cd425..dc0e317f2ecd 100644
--- a/arch/avr32/boards/hammerhead/setup.c
+++ b/arch/avr32/boards/hammerhead/setup.c
@@ -77,7 +77,7 @@ static struct fb_monspecs __initdata hammerhead_hda350t_monspecs = {
77 .dclkmax = 10000000, 77 .dclkmax = 10000000,
78}; 78};
79 79
80struct atmel_lcdfb_info __initdata hammerhead_lcdc_data = { 80struct atmel_lcdfb_pdata __initdata hammerhead_lcdc_data = {
81 .default_bpp = 24, 81 .default_bpp = 24,
82 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 82 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
83 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 83 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
diff --git a/arch/avr32/boards/merisc/display.c b/arch/avr32/boards/merisc/display.c
index 85a543cd4abc..e7683ee7ed40 100644
--- a/arch/avr32/boards/merisc/display.c
+++ b/arch/avr32/boards/merisc/display.c
@@ -45,7 +45,7 @@ static struct fb_monspecs merisc_fb_monspecs = {
45 .dclkmax = 30000000, 45 .dclkmax = 30000000,
46}; 46};
47 47
48struct atmel_lcdfb_info merisc_lcdc_data = { 48struct atmel_lcdfb_pdata merisc_lcdc_data = {
49 .default_bpp = 24, 49 .default_bpp = 24,
50 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 50 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
51 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 51 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
diff --git a/arch/avr32/boards/mimc200/setup.c b/arch/avr32/boards/mimc200/setup.c
index 05358aa5ef7d..1cb8e9cc5cfa 100644
--- a/arch/avr32/boards/mimc200/setup.c
+++ b/arch/avr32/boards/mimc200/setup.c
@@ -8,7 +8,7 @@
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10 10
11extern struct atmel_lcdfb_info mimc200_lcdc_data; 11extern struct atmel_lcdfb_pdata mimc200_lcdc_data;
12 12
13#include <linux/clk.h> 13#include <linux/clk.h>
14#include <linux/etherdevice.h> 14#include <linux/etherdevice.h>
@@ -71,7 +71,7 @@ static struct fb_monspecs __initdata mimc200_default_monspecs = {
71 .dclkmax = 25200000, 71 .dclkmax = 25200000,
72}; 72};
73 73
74struct atmel_lcdfb_info __initdata mimc200_lcdc_data = { 74struct atmel_lcdfb_pdata __initdata mimc200_lcdc_data = {
75 .default_bpp = 16, 75 .default_bpp = 16,
76 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN, 76 .default_dmacon = ATMEL_LCDC_DMAEN | ATMEL_LCDC_DMA2DEN,
77 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT 77 .default_lcdcon2 = (ATMEL_LCDC_DISTYPE_TFT
diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c
index a68f3cf7c3c1..a1f4d1e91b52 100644
--- a/arch/avr32/mach-at32ap/at32ap700x.c
+++ b/arch/avr32/mach-at32ap/at32ap700x.c
@@ -1439,7 +1439,7 @@ fail:
1439 * LCDC 1439 * LCDC
1440 * -------------------------------------------------------------------- */ 1440 * -------------------------------------------------------------------- */
1441#if defined(CONFIG_CPU_AT32AP7000) || defined(CONFIG_CPU_AT32AP7002) 1441#if defined(CONFIG_CPU_AT32AP7000) || defined(CONFIG_CPU_AT32AP7002)
1442static struct atmel_lcdfb_info atmel_lcdfb0_data; 1442static struct atmel_lcdfb_pdata atmel_lcdfb0_data;
1443static struct resource atmel_lcdfb0_resource[] = { 1443static struct resource atmel_lcdfb0_resource[] = {
1444 { 1444 {
1445 .start = 0xff000000, 1445 .start = 0xff000000,
@@ -1467,12 +1467,12 @@ static struct clk atmel_lcdfb0_pixclk = {
1467}; 1467};
1468 1468
1469struct platform_device *__init 1469struct platform_device *__init
1470at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data, 1470at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_pdata *data,
1471 unsigned long fbmem_start, unsigned long fbmem_len, 1471 unsigned long fbmem_start, unsigned long fbmem_len,
1472 u64 pin_mask) 1472 u64 pin_mask)
1473{ 1473{
1474 struct platform_device *pdev; 1474 struct platform_device *pdev;
1475 struct atmel_lcdfb_info *info; 1475 struct atmel_lcdfb_pdata *info;
1476 struct fb_monspecs *monspecs; 1476 struct fb_monspecs *monspecs;
1477 struct fb_videomode *modedb; 1477 struct fb_videomode *modedb;
1478 unsigned int modedb_size; 1478 unsigned int modedb_size;
@@ -1529,7 +1529,7 @@ at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data,
1529 } 1529 }
1530 1530
1531 info = pdev->dev.platform_data; 1531 info = pdev->dev.platform_data;
1532 memcpy(info, data, sizeof(struct atmel_lcdfb_info)); 1532 memcpy(info, data, sizeof(struct atmel_lcdfb_pdata));
1533 info->default_monspecs = monspecs; 1533 info->default_monspecs = monspecs;
1534 1534
1535 pdev->name = "at32ap-lcdfb"; 1535 pdev->name = "at32ap-lcdfb";
diff --git a/arch/avr32/mach-at32ap/include/mach/board.h b/arch/avr32/mach-at32ap/include/mach/board.h
index d485b0391357..f1a316d52c73 100644
--- a/arch/avr32/mach-at32ap/include/mach/board.h
+++ b/arch/avr32/mach-at32ap/include/mach/board.h
@@ -44,9 +44,9 @@ struct platform_device *
44at32_add_device_spi(unsigned int id, struct spi_board_info *b, unsigned int n); 44at32_add_device_spi(unsigned int id, struct spi_board_info *b, unsigned int n);
45void at32_spi_setup_slaves(unsigned int bus_num, struct spi_board_info *b, unsigned int n); 45void at32_spi_setup_slaves(unsigned int bus_num, struct spi_board_info *b, unsigned int n);
46 46
47struct atmel_lcdfb_info; 47struct atmel_lcdfb_pdata;
48struct platform_device * 48struct platform_device *
49at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_info *data, 49at32_add_device_lcdc(unsigned int id, struct atmel_lcdfb_pdata *data,
50 unsigned long fbmem_start, unsigned long fbmem_len, 50 unsigned long fbmem_start, unsigned long fbmem_len,
51 u64 pin_mask); 51 u64 pin_mask);
52 52
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index 3f7d6dc3408d..0d7214df1237 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -20,12 +20,44 @@
20#include <linux/gfp.h> 20#include <linux/gfp.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/platform_data/atmel.h> 22#include <linux/platform_data/atmel.h>
23#include <video/of_display_timing.h>
23 24
24#include <mach/cpu.h> 25#include <mach/cpu.h>
25#include <asm/gpio.h> 26#include <asm/gpio.h>
26 27
27#include <video/atmel_lcdc.h> 28#include <video/atmel_lcdc.h>
28 29
30struct atmel_lcdfb_config {
31 bool have_alt_pixclock;
32 bool have_hozval;
33 bool have_intensity_bit;
34};
35
36 /* LCD Controller info data structure, stored in device platform_data */
37struct atmel_lcdfb_info {
38 spinlock_t lock;
39 struct fb_info *info;
40 void __iomem *mmio;
41 int irq_base;
42 struct work_struct task;
43
44 unsigned int smem_len;
45 struct platform_device *pdev;
46 struct clk *bus_clk;
47 struct clk *lcdc_clk;
48
49 struct backlight_device *backlight;
50 u8 bl_power;
51 u8 saved_lcdcon;
52
53 u32 pseudo_palette[16];
54 bool have_intensity_bit;
55
56 struct atmel_lcdfb_pdata pdata;
57
58 struct atmel_lcdfb_config *config;
59};
60
29#define lcdc_readl(sinfo, reg) __raw_readl((sinfo)->mmio+(reg)) 61#define lcdc_readl(sinfo, reg) __raw_readl((sinfo)->mmio+(reg))
30#define lcdc_writel(sinfo, reg, val) __raw_writel((val), (sinfo)->mmio+(reg)) 62#define lcdc_writel(sinfo, reg, val) __raw_writel((val), (sinfo)->mmio+(reg))
31 63
@@ -34,12 +66,6 @@
34#define ATMEL_LCDC_DMA_BURST_LEN 8 /* words */ 66#define ATMEL_LCDC_DMA_BURST_LEN 8 /* words */
35#define ATMEL_LCDC_FIFO_SIZE 512 /* words */ 67#define ATMEL_LCDC_FIFO_SIZE 512 /* words */
36 68
37struct atmel_lcdfb_config {
38 bool have_alt_pixclock;
39 bool have_hozval;
40 bool have_intensity_bit;
41};
42
43static struct atmel_lcdfb_config at91sam9261_config = { 69static struct atmel_lcdfb_config at91sam9261_config = {
44 .have_hozval = true, 70 .have_hozval = true,
45 .have_intensity_bit = true, 71 .have_intensity_bit = true,
@@ -248,15 +274,17 @@ static void exit_backlight(struct atmel_lcdfb_info *sinfo)
248 274
249static void init_contrast(struct atmel_lcdfb_info *sinfo) 275static void init_contrast(struct atmel_lcdfb_info *sinfo)
250{ 276{
277 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
278
251 /* contrast pwm can be 'inverted' */ 279 /* contrast pwm can be 'inverted' */
252 if (sinfo->lcdcon_pol_negative) 280 if (pdata->lcdcon_pol_negative)
253 contrast_ctr &= ~(ATMEL_LCDC_POL_POSITIVE); 281 contrast_ctr &= ~(ATMEL_LCDC_POL_POSITIVE);
254 282
255 /* have some default contrast/backlight settings */ 283 /* have some default contrast/backlight settings */
256 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); 284 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr);
257 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT); 285 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, ATMEL_LCDC_CVAL_DEFAULT);
258 286
259 if (sinfo->lcdcon_is_backlight) 287 if (pdata->lcdcon_is_backlight)
260 init_backlight(sinfo); 288 init_backlight(sinfo);
261} 289}
262 290
@@ -299,9 +327,11 @@ static unsigned long compute_hozval(struct atmel_lcdfb_info *sinfo,
299 327
300static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo) 328static void atmel_lcdfb_stop_nowait(struct atmel_lcdfb_info *sinfo)
301{ 329{
330 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
331
302 /* Turn off the LCD controller and the DMA controller */ 332 /* Turn off the LCD controller and the DMA controller */
303 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, 333 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON,
304 sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET); 334 pdata->guard_time << ATMEL_LCDC_GUARDT_OFFSET);
305 335
306 /* Wait for the LCDC core to become idle */ 336 /* Wait for the LCDC core to become idle */
307 while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY) 337 while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY)
@@ -321,9 +351,11 @@ static void atmel_lcdfb_stop(struct atmel_lcdfb_info *sinfo)
321 351
322static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo) 352static void atmel_lcdfb_start(struct atmel_lcdfb_info *sinfo)
323{ 353{
324 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, sinfo->default_dmacon); 354 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
355
356 lcdc_writel(sinfo, ATMEL_LCDC_DMACON, pdata->default_dmacon);
325 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, 357 lcdc_writel(sinfo, ATMEL_LCDC_PWRCON,
326 (sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET) 358 (pdata->guard_time << ATMEL_LCDC_GUARDT_OFFSET)
327 | ATMEL_LCDC_PWR); 359 | ATMEL_LCDC_PWR);
328} 360}
329 361
@@ -424,6 +456,7 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,
424{ 456{
425 struct device *dev = info->device; 457 struct device *dev = info->device;
426 struct atmel_lcdfb_info *sinfo = info->par; 458 struct atmel_lcdfb_info *sinfo = info->par;
459 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
427 unsigned long clk_value_khz; 460 unsigned long clk_value_khz;
428 461
429 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; 462 clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000;
@@ -510,7 +543,7 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,
510 else 543 else
511 var->green.length = 6; 544 var->green.length = 6;
512 545
513 if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) { 546 if (pdata->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) {
514 /* RGB:5X5 mode */ 547 /* RGB:5X5 mode */
515 var->red.offset = var->green.length + 5; 548 var->red.offset = var->green.length + 5;
516 var->blue.offset = 0; 549 var->blue.offset = 0;
@@ -527,7 +560,7 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,
527 var->transp.length = 8; 560 var->transp.length = 8;
528 /* fall through */ 561 /* fall through */
529 case 24: 562 case 24:
530 if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) { 563 if (pdata->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) {
531 /* RGB:888 mode */ 564 /* RGB:888 mode */
532 var->red.offset = 16; 565 var->red.offset = 16;
533 var->blue.offset = 0; 566 var->blue.offset = 0;
@@ -576,6 +609,7 @@ static void atmel_lcdfb_reset(struct atmel_lcdfb_info *sinfo)
576static int atmel_lcdfb_set_par(struct fb_info *info) 609static int atmel_lcdfb_set_par(struct fb_info *info)
577{ 610{
578 struct atmel_lcdfb_info *sinfo = info->par; 611 struct atmel_lcdfb_info *sinfo = info->par;
612 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
579 unsigned long hozval_linesz; 613 unsigned long hozval_linesz;
580 unsigned long value; 614 unsigned long value;
581 unsigned long clk_value_khz; 615 unsigned long clk_value_khz;
@@ -637,7 +671,7 @@ static int atmel_lcdfb_set_par(struct fb_info *info)
637 671
638 672
639 /* Initialize control register 2 */ 673 /* Initialize control register 2 */
640 value = sinfo->default_lcdcon2; 674 value = pdata->default_lcdcon2;
641 675
642 if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT)) 676 if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
643 value |= ATMEL_LCDC_INVLINE_INVERTED; 677 value |= ATMEL_LCDC_INVLINE_INVERTED;
@@ -741,6 +775,7 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,
741 unsigned int transp, struct fb_info *info) 775 unsigned int transp, struct fb_info *info)
742{ 776{
743 struct atmel_lcdfb_info *sinfo = info->par; 777 struct atmel_lcdfb_info *sinfo = info->par;
778 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
744 unsigned int val; 779 unsigned int val;
745 u32 *pal; 780 u32 *pal;
746 int ret = 1; 781 int ret = 1;
@@ -777,8 +812,7 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,
777 */ 812 */
778 } else { 813 } else {
779 /* new style BGR:565 / RGB:565 */ 814 /* new style BGR:565 / RGB:565 */
780 if (sinfo->lcd_wiring_mode == 815 if (pdata->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) {
781 ATMEL_LCDC_WIRING_RGB) {
782 val = ((blue >> 11) & 0x001f); 816 val = ((blue >> 11) & 0x001f);
783 val |= ((red >> 0) & 0xf800); 817 val |= ((red >> 0) & 0xf800);
784 } else { 818 } else {
@@ -918,7 +952,7 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
918 struct device *dev = &pdev->dev; 952 struct device *dev = &pdev->dev;
919 struct fb_info *info; 953 struct fb_info *info;
920 struct atmel_lcdfb_info *sinfo; 954 struct atmel_lcdfb_info *sinfo;
921 struct atmel_lcdfb_info *pdata_sinfo; 955 struct atmel_lcdfb_pdata *pdata;
922 struct fb_videomode fbmode; 956 struct fb_videomode fbmode;
923 struct resource *regs = NULL; 957 struct resource *regs = NULL;
924 struct resource *map = NULL; 958 struct resource *map = NULL;
@@ -936,17 +970,8 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
936 sinfo = info->par; 970 sinfo = info->par;
937 971
938 if (dev_get_platdata(dev)) { 972 if (dev_get_platdata(dev)) {
939 pdata_sinfo = dev_get_platdata(dev); 973 pdata = dev_get_platdata(dev);
940 sinfo->default_bpp = pdata_sinfo->default_bpp; 974 sinfo->pdata = *pdata;
941 sinfo->default_dmacon = pdata_sinfo->default_dmacon;
942 sinfo->default_lcdcon2 = pdata_sinfo->default_lcdcon2;
943 sinfo->default_monspecs = pdata_sinfo->default_monspecs;
944 sinfo->atmel_lcdfb_power_control = pdata_sinfo->atmel_lcdfb_power_control;
945 sinfo->guard_time = pdata_sinfo->guard_time;
946 sinfo->smem_len = pdata_sinfo->smem_len;
947 sinfo->lcdcon_is_backlight = pdata_sinfo->lcdcon_is_backlight;
948 sinfo->lcdcon_pol_negative = pdata_sinfo->lcdcon_pol_negative;
949 sinfo->lcd_wiring_mode = pdata_sinfo->lcd_wiring_mode;
950 } else { 975 } else {
951 dev_err(dev, "cannot get default configuration\n"); 976 dev_err(dev, "cannot get default configuration\n");
952 goto free_info; 977 goto free_info;
@@ -962,7 +987,7 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
962 info->pseudo_palette = sinfo->pseudo_palette; 987 info->pseudo_palette = sinfo->pseudo_palette;
963 info->fbops = &atmel_lcdfb_ops; 988 info->fbops = &atmel_lcdfb_ops;
964 989
965 memcpy(&info->monspecs, sinfo->default_monspecs, sizeof(info->monspecs)); 990 memcpy(&info->monspecs, pdata->default_monspecs, sizeof(info->monspecs));
966 info->fix = atmel_lcdfb_fix; 991 info->fix = atmel_lcdfb_fix;
967 992
968 /* Enable LCDC Clocks */ 993 /* Enable LCDC Clocks */
@@ -980,7 +1005,7 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
980 1005
981 ret = fb_find_mode(&info->var, info, NULL, info->monspecs.modedb, 1006 ret = fb_find_mode(&info->var, info, NULL, info->monspecs.modedb,
982 info->monspecs.modedb_len, info->monspecs.modedb, 1007 info->monspecs.modedb_len, info->monspecs.modedb,
983 sinfo->default_bpp); 1008 pdata->default_bpp);
984 if (!ret) { 1009 if (!ret) {
985 dev_err(dev, "no suitable video mode found\n"); 1010 dev_err(dev, "no suitable video mode found\n");
986 goto stop_clk; 1011 goto stop_clk;
@@ -1097,8 +1122,8 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
1097 fb_add_videomode(&fbmode, &info->modelist); 1122 fb_add_videomode(&fbmode, &info->modelist);
1098 1123
1099 /* Power up the LCDC screen */ 1124 /* Power up the LCDC screen */
1100 if (sinfo->atmel_lcdfb_power_control) 1125 if (pdata->atmel_lcdfb_power_control)
1101 sinfo->atmel_lcdfb_power_control(1); 1126 pdata->atmel_lcdfb_power_control(1);
1102 1127
1103 dev_info(dev, "fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %d\n", 1128 dev_info(dev, "fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %d\n",
1104 info->node, info->fix.mmio_start, sinfo->mmio, sinfo->irq_base); 1129 info->node, info->fix.mmio_start, sinfo->mmio, sinfo->irq_base);
@@ -1141,15 +1166,17 @@ static int __exit atmel_lcdfb_remove(struct platform_device *pdev)
1141 struct device *dev = &pdev->dev; 1166 struct device *dev = &pdev->dev;
1142 struct fb_info *info = dev_get_drvdata(dev); 1167 struct fb_info *info = dev_get_drvdata(dev);
1143 struct atmel_lcdfb_info *sinfo; 1168 struct atmel_lcdfb_info *sinfo;
1169 struct atmel_lcdfb_pdata *pdata;
1144 1170
1145 if (!info || !info->par) 1171 if (!info || !info->par)
1146 return 0; 1172 return 0;
1147 sinfo = info->par; 1173 sinfo = info->par;
1174 pdata = &sinfo->pdata;
1148 1175
1149 cancel_work_sync(&sinfo->task); 1176 cancel_work_sync(&sinfo->task);
1150 exit_backlight(sinfo); 1177 exit_backlight(sinfo);
1151 if (sinfo->atmel_lcdfb_power_control) 1178 if (pdata->atmel_lcdfb_power_control)
1152 sinfo->atmel_lcdfb_power_control(0); 1179 pdata->atmel_lcdfb_power_control(0);
1153 unregister_framebuffer(info); 1180 unregister_framebuffer(info);
1154 atmel_lcdfb_stop_clock(sinfo); 1181 atmel_lcdfb_stop_clock(sinfo);
1155 clk_put(sinfo->lcdc_clk); 1182 clk_put(sinfo->lcdc_clk);
@@ -1176,6 +1203,7 @@ static int atmel_lcdfb_suspend(struct platform_device *pdev, pm_message_t mesg)
1176{ 1203{
1177 struct fb_info *info = platform_get_drvdata(pdev); 1204 struct fb_info *info = platform_get_drvdata(pdev);
1178 struct atmel_lcdfb_info *sinfo = info->par; 1205 struct atmel_lcdfb_info *sinfo = info->par;
1206 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
1179 1207
1180 /* 1208 /*
1181 * We don't want to handle interrupts while the clock is 1209 * We don't want to handle interrupts while the clock is
@@ -1185,8 +1213,8 @@ static int atmel_lcdfb_suspend(struct platform_device *pdev, pm_message_t mesg)
1185 1213
1186 sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_CTR); 1214 sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_CTR);
1187 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); 1215 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0);
1188 if (sinfo->atmel_lcdfb_power_control) 1216 if (pdata->atmel_lcdfb_power_control)
1189 sinfo->atmel_lcdfb_power_control(0); 1217 pdata->atmel_lcdfb_power_control(0);
1190 1218
1191 atmel_lcdfb_stop(sinfo); 1219 atmel_lcdfb_stop(sinfo);
1192 atmel_lcdfb_stop_clock(sinfo); 1220 atmel_lcdfb_stop_clock(sinfo);
@@ -1198,11 +1226,12 @@ static int atmel_lcdfb_resume(struct platform_device *pdev)
1198{ 1226{
1199 struct fb_info *info = platform_get_drvdata(pdev); 1227 struct fb_info *info = platform_get_drvdata(pdev);
1200 struct atmel_lcdfb_info *sinfo = info->par; 1228 struct atmel_lcdfb_info *sinfo = info->par;
1229 struct atmel_lcdfb_pdata *pdata = &sinfo->pdata;
1201 1230
1202 atmel_lcdfb_start_clock(sinfo); 1231 atmel_lcdfb_start_clock(sinfo);
1203 atmel_lcdfb_start(sinfo); 1232 atmel_lcdfb_start(sinfo);
1204 if (sinfo->atmel_lcdfb_power_control) 1233 if (pdata->atmel_lcdfb_power_control)
1205 sinfo->atmel_lcdfb_power_control(1); 1234 pdata->atmel_lcdfb_power_control(1);
1206 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon); 1235 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, sinfo->saved_lcdcon);
1207 1236
1208 /* Enable FIFO & DMA errors */ 1237 /* Enable FIFO & DMA errors */
diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h
index 0f5a2fc69af9..f197c54712b0 100644
--- a/include/video/atmel_lcdc.h
+++ b/include/video/atmel_lcdc.h
@@ -31,39 +31,18 @@
31#define ATMEL_LCDC_WIRING_BGR 0 31#define ATMEL_LCDC_WIRING_BGR 0
32#define ATMEL_LCDC_WIRING_RGB 1 32#define ATMEL_LCDC_WIRING_RGB 1
33 33
34struct atmel_lcdfb_config;
35 34
36 /* LCD Controller info data structure, stored in device platform_data */ 35 /* LCD Controller info data structure, stored in device platform_data */
37struct atmel_lcdfb_info { 36struct atmel_lcdfb_pdata {
38 spinlock_t lock;
39 struct fb_info *info;
40 void __iomem *mmio;
41 int irq_base;
42 struct work_struct task;
43
44 unsigned int guard_time; 37 unsigned int guard_time;
45 unsigned int smem_len;
46 struct platform_device *pdev;
47 struct clk *bus_clk;
48 struct clk *lcdc_clk;
49
50#ifdef CONFIG_BACKLIGHT_ATMEL_LCDC
51 struct backlight_device *backlight;
52 u8 bl_power;
53#endif
54 bool lcdcon_is_backlight; 38 bool lcdcon_is_backlight;
55 bool lcdcon_pol_negative; 39 bool lcdcon_pol_negative;
56 u8 saved_lcdcon;
57
58 u8 default_bpp; 40 u8 default_bpp;
59 u8 lcd_wiring_mode; 41 u8 lcd_wiring_mode;
60 unsigned int default_lcdcon2; 42 unsigned int default_lcdcon2;
61 unsigned int default_dmacon; 43 unsigned int default_dmacon;
62 void (*atmel_lcdfb_power_control)(int on); 44 void (*atmel_lcdfb_power_control)(int on);
63 struct fb_monspecs *default_monspecs; 45 struct fb_monspecs *default_monspecs;
64 u32 pseudo_palette[16];
65
66 struct atmel_lcdfb_config *config;
67}; 46};
68 47
69#define ATMEL_LCDC_DMABADDR1 0x00 48#define ATMEL_LCDC_DMABADDR1 0x00