From: "Krzysztof Helt" <krzysztof.h1@wp.pl>
To: linux-fbdev-devel <linux-fbdev-devel@lists.sourceforge.net>
Cc: Ben Dooks <ben-linux@fluff.org>,
"Arnaud Patard (Rtp)" <arnaud.patard@rtp-net.org>
Subject: [PATCH 1/3] s3c2410fb: adds pixclock to s3c2410fb_display
Date: Wed, 15 Aug 2007 10:24:06 +0200 [thread overview]
Message-ID: <46c2b8264ef91@wp.pl> (raw)
[-- Attachment #1: Type: text/plain, Size: 10224 bytes --]
From: Krzysztof Helt <krzysztof.h1@wp.pl>
This patch adds pixelclock field to the s3c2410fb_display
structure and make use of it in the driver.
The Bast machine defined 9 modes but pixclock and margin
values are defined only for the 640x480 modes so I removed
other modes.
This patch also fixes wrong display type constant for the
SMDK2440 board.
Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
---
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-amlm5900.c
linux-2.6.23/arch/arm/mach-s3c2410/mach-amlm5900.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-amlm5900.c
2007-08-14 21:03:15.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-amlm5900.c 2007-08-
14 21:02:22.000000000 +0200
@@ -174,6 +174,7 @@ static struct s3c2410fb_display __initda
.type = S3C2410_LCDCON1_STN4,
+ .pixclock = 680000, /* HCLK = 100MHz */
.xres = 160,
.yres = 160,
.bpp = 4,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-bast.c
linux-2.6.23/arch/arm/mach-s3c2410/mach-bast.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-bast.c 2007-08-
14 21:03:15.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-bast.c 2007-08-
14 21:02:22.000000000 +0200
@@ -473,25 +473,7 @@ static struct s3c2410fb_display __initda
.width = 640,
.height = 480,
- .xres = 320,
- .yres = 240,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .bpp = 4,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
+ .pixclock = 33333,
.xres = 640,
.yres = 480,
.bpp = 4,
@@ -510,42 +492,7 @@ static struct s3c2410fb_display __initda
.width = 640,
.height = 480,
- .xres = 800,
- .yres = 600,
- .bpp = 4,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
- .xres = 320,
- .yres = 240,
- .bpp = 8,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
+ .pixclock = 33333,
.xres = 640,
.yres = 480,
.bpp = 8,
@@ -564,42 +511,7 @@ static struct s3c2410fb_display __initda
.width = 640,
.height = 480,
- .xres = 800,
- .yres = 600,
- .bpp = 8,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
- .xres = 320,
- .yres = 240,
- .bpp = 16,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
+ .pixclock = 33333,
.xres = 640,
.yres = 480,
.bpp = 16,
@@ -613,24 +525,6 @@ static struct s3c2410fb_display __initda
.lcdcon1 = 0x00000176,
.lcdcon5 = 0x00014b02,
},
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
- .xres = 800,
- .yres = 600,
- .bpp = 16,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
};
/* LCD/VGA controller */
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-h1940.c
linux-2.6.23/arch/arm/mach-s3c2410/mach-h1940.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-h1940.c 2007-08-
14 21:03:15.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-h1940.c 2007-08-
14 21:02:22.000000000 +0200
@@ -145,6 +145,7 @@ static struct s3c2410fb_display h1940_lc
.type = S3C2410_LCDCON1_TFT,
.width = 240,
.height = 320,
+ .pixclock = 260000,
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-qt2410.c
linux-2.6.23/arch/arm/mach-s3c2410/mach-qt2410.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-qt2410.c
2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-qt2410.c 2007-08-
14 21:02:22.000000000 +0200
@@ -112,6 +112,7 @@ static struct s3c2410fb_display qt2410_l
.width = 640,
.height = 480,
+ .pixclock = 40000, /* HCLK/4 */
.xres = 640,
.yres = 480,
.bpp = 16,
@@ -137,6 +138,7 @@ static struct s3c2410fb_display qt2410_l
.type = S3C2410_LCDCON1_TFT,
.width = 480,
.height = 640,
+ .pixclock = 40000, /* HCLK/4 */
.xres = 480,
.yres = 640,
.bpp = 16,
@@ -162,6 +164,7 @@ static struct s3c2410fb_display qt2410_l
.type = S3C2410_LCDCON1_TFT,
.width = 240,
.height = 320,
+ .pixclock = 100000, /* HCLK/10 */
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2440/mach-rx3715.c
linux-2.6.23/arch/arm/mach-s3c2440/mach-rx3715.c
--- linux-2.6.23.old/arch/arm/mach-s3c2440/mach-rx3715.c
2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2440/mach-rx3715.c 2007-08-
14 21:02:22.000000000 +0200
@@ -123,6 +123,7 @@ static struct s3c2410fb_display rx3715_l
.width = 240,
.height = 320,
+ .pixclock = 260000,
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2440/mach-smdk2440.c
linux-2.6.23/arch/arm/mach-s3c2440/mach-smdk2440.c
--- linux-2.6.23.old/arch/arm/mach-s3c2440/mach-smdk2440.c
2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2440/mach-smdk2440.c 2007-08-
14 21:02:22.000000000 +0200
@@ -115,11 +115,12 @@ static struct s3c2410fb_display smdk2440
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
- .type = S3C2410_LCDCON1_TFT16BPP,
+ .type = S3C2410_LCDCON1_TFT,
.width = 240,
.height = 320,
+ .pixclock = 166667, /* HCLK 60 MHz, divisor 10 */
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/drivers/video/s3c2410fb.c linux-
2.6.23/drivers/video/s3c2410fb.c
--- linux-2.6.23.old/drivers/video/s3c2410fb.c 2007-08-14
21:03:16.000000000 +0200
+++ linux-2.6.23/drivers/video/s3c2410fb.c 2007-08-14
21:02:59.000000000 +0200
@@ -199,6 +199,7 @@ static int s3c2410fb_check_var(struct fb
var->width = display->width;
/* copy lcd settings */
+ var->pixclock = display->pixclock;
var->left_margin = display->left_margin;
var->right_margin = display->right_margin;
var->upper_margin = display->upper_margin;
@@ -297,10 +298,6 @@ static void s3c2410fb_calculate_stn_lcd_
unsigned wdly = (var->left_margin >> 4) - 1;
unsigned wlh = (var->hsync_len >> 4) - 1;
- dprintk("%s: var->xres = %d\n", __FUNCTION__, var-
>xres);
- dprintk("%s: var->yres = %d\n", __FUNCTION__, var-
>yres);
- dprintk("%s: var->bpp = %d\n", __FUNCTION__, var-
>bits_per_pixel);
-
if (type != S3C2410_LCDCON1_STN4)
hs >>= 1;
@@ -359,10 +356,6 @@ static void s3c2410fb_calculate_tft_lcd_
const struct s3c2410fb_info *fbi = info->par;
const struct fb_var_screeninfo *var = &info->var;
- dprintk("%s: var->xres = %d\n", __FUNCTION__, var-
>xres);
- dprintk("%s: var->yres = %d\n", __FUNCTION__, var-
>yres);
- dprintk("%s: var->bpp = %d\n", __FUNCTION__, var-
>bits_per_pixel);
-
regs->lcdcon1 &= ~S3C2410_LCDCON1_MODEMASK;
switch (var->bits_per_pixel) {
@@ -427,28 +420,25 @@ static void s3c2410fb_activate_var(struc
void __iomem *regs = fbi->io;
int type = fbi->regs.lcdcon1 & S3C2410_LCDCON1_TFT;
struct fb_var_screeninfo *var = &info->var;
+ int clkdiv = s3c2410fb_calc_pixclk(fbi, var->pixclock) /
2;
- if (var->pixclock > 0) {
- int clkdiv = s3c2410fb_calc_pixclk(fbi, var-
>pixclock);
-
- if (type == S3C2410_LCDCON1_TFT) {
- clkdiv = (clkdiv / 2) - 1;
- if (clkdiv < 0)
- clkdiv = 0;
- } else {
- clkdiv = (clkdiv / 2);
- if (clkdiv < 2)
- clkdiv = 2;
- }
-
- fbi->regs.lcdcon1
&= ~S3C2410_LCDCON1_CLKVAL(0x3ff);
- fbi->regs.lcdcon1 |=
S3C2410_LCDCON1_CLKVAL(clkdiv);
- }
+ dprintk("%s: var->xres = %d\n", __FUNCTION__, var-
>xres);
+ dprintk("%s: var->yres = %d\n", __FUNCTION__, var-
>yres);
+ dprintk("%s: var->bpp = %d\n", __FUNCTION__, var-
>bits_per_pixel);
- if (type == S3C2410_LCDCON1_TFT)
+ if (type == S3C2410_LCDCON1_TFT) {
s3c2410fb_calculate_tft_lcd_regs(info, &fbi-
>regs);
- else
+ --clkdiv;
+ if (clkdiv < 0)
+ clkdiv = 0;
+ } else {
s3c2410fb_calculate_stn_lcd_regs(info, &fbi-
>regs);
+ if (clkdiv < 2)
+ clkdiv = 2;
+ }
+
+ fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_CLKVAL(0x3ff);
+ fbi->regs.lcdcon1 |= S3C2410_LCDCON1_CLKVAL(clkdiv);
/* write new registers */
diff -urp linux-2.6.23.old/include/asm-arm/arch-s3c2410/fb.h
linux-2.6.23/include/asm-arm/arch-s3c2410/fb.h
--- linux-2.6.23.old/include/asm-arm/arch-s3c2410/fb.h 2007-08-
14 21:03:16.000000000 +0200
+++ linux-2.6.23/include/asm-arm/arch-s3c2410/fb.h 2007-08-
14 21:02:22.000000000 +0200
@@ -36,6 +36,7 @@ struct s3c2410fb_display {
unsigned short yres;
unsigned short bpp;
+ unsigned pixclock; /* pixclock in
picoseconds */
unsigned short left_margin; /* value in pixels (TFT) or
HCLKs (STN) */
unsigned short right_margin; /* value in pixels (TFT) or
HCLKs (STN) */
unsigned short hsync_len; /* value in pixels (TFT) or
HCLKs (STN) */
----------------------------------------------------
Producenci filmu SEZON NA MISIA przedstawiają
surfujące pingwiny w nowej, animowanej komedii
NA FALI - w kinach od 10 sierpnia!
http://klik.wp.pl/?adr=http%3A%2F%2Fadv.reklama.wp.pl%2Fas%2Fnafali_zwiastun.html&sid=1256
[-- Attachment #2: s3c2410fb-pixclock.diff --]
[-- Type: application/octet-stream, Size: 9531 bytes --]
From: Krzysztof Helt <krzysztof.h1@wp.pl>
This patch adds pixelclock field to the s3c2410fb_display
structure and make use of it in the driver.
The Bast machine defined 9 modes but pixclock and margin
values are defined only for the 640x480 modes so I removed
other modes.
This patch also fixes wrong display type constant for the
SMDK2440 board.
Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
---
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-amlm5900.c linux-2.6.23/arch/arm/mach-s3c2410/mach-amlm5900.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-amlm5900.c 2007-08-14 21:03:15.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-amlm5900.c 2007-08-14 21:02:22.000000000 +0200
@@ -174,6 +174,7 @@ static struct s3c2410fb_display __initda
.type = S3C2410_LCDCON1_STN4,
+ .pixclock = 680000, /* HCLK = 100MHz */
.xres = 160,
.yres = 160,
.bpp = 4,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-bast.c linux-2.6.23/arch/arm/mach-s3c2410/mach-bast.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-bast.c 2007-08-14 21:03:15.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-bast.c 2007-08-14 21:02:22.000000000 +0200
@@ -473,25 +473,7 @@ static struct s3c2410fb_display __initda
.width = 640,
.height = 480,
- .xres = 320,
- .yres = 240,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .bpp = 4,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
+ .pixclock = 33333,
.xres = 640,
.yres = 480,
.bpp = 4,
@@ -510,42 +492,7 @@ static struct s3c2410fb_display __initda
.width = 640,
.height = 480,
- .xres = 800,
- .yres = 600,
- .bpp = 4,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
- .xres = 320,
- .yres = 240,
- .bpp = 8,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
+ .pixclock = 33333,
.xres = 640,
.yres = 480,
.bpp = 8,
@@ -564,42 +511,7 @@ static struct s3c2410fb_display __initda
.width = 640,
.height = 480,
- .xres = 800,
- .yres = 600,
- .bpp = 8,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
- .xres = 320,
- .yres = 240,
- .bpp = 16,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
+ .pixclock = 33333,
.xres = 640,
.yres = 480,
.bpp = 16,
@@ -613,24 +525,6 @@ static struct s3c2410fb_display __initda
.lcdcon1 = 0x00000176,
.lcdcon5 = 0x00014b02,
},
- {
- .type = S3C2410_LCDCON1_TFT,
- .width = 640,
- .height = 480,
-
- .xres = 800,
- .yres = 600,
- .bpp = 16,
- .left_margin = 40,
- .right_margin = 20,
- .hsync_len = 88,
- .upper_margin = 30,
- .lower_margin = 32,
- .vsync_len = 3,
-
- .lcdcon1 = 0x00000176,
- .lcdcon5 = 0x00014b02,
- },
};
/* LCD/VGA controller */
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-h1940.c linux-2.6.23/arch/arm/mach-s3c2410/mach-h1940.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-h1940.c 2007-08-14 21:03:15.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-h1940.c 2007-08-14 21:02:22.000000000 +0200
@@ -145,6 +145,7 @@ static struct s3c2410fb_display h1940_lc
.type = S3C2410_LCDCON1_TFT,
.width = 240,
.height = 320,
+ .pixclock = 260000,
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2410/mach-qt2410.c linux-2.6.23/arch/arm/mach-s3c2410/mach-qt2410.c
--- linux-2.6.23.old/arch/arm/mach-s3c2410/mach-qt2410.c 2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2410/mach-qt2410.c 2007-08-14 21:02:22.000000000 +0200
@@ -112,6 +112,7 @@ static struct s3c2410fb_display qt2410_l
.width = 640,
.height = 480,
+ .pixclock = 40000, /* HCLK/4 */
.xres = 640,
.yres = 480,
.bpp = 16,
@@ -137,6 +138,7 @@ static struct s3c2410fb_display qt2410_l
.type = S3C2410_LCDCON1_TFT,
.width = 480,
.height = 640,
+ .pixclock = 40000, /* HCLK/4 */
.xres = 480,
.yres = 640,
.bpp = 16,
@@ -162,6 +164,7 @@ static struct s3c2410fb_display qt2410_l
.type = S3C2410_LCDCON1_TFT,
.width = 240,
.height = 320,
+ .pixclock = 100000, /* HCLK/10 */
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2440/mach-rx3715.c linux-2.6.23/arch/arm/mach-s3c2440/mach-rx3715.c
--- linux-2.6.23.old/arch/arm/mach-s3c2440/mach-rx3715.c 2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2440/mach-rx3715.c 2007-08-14 21:02:22.000000000 +0200
@@ -123,6 +123,7 @@ static struct s3c2410fb_display rx3715_l
.width = 240,
.height = 320,
+ .pixclock = 260000,
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/arch/arm/mach-s3c2440/mach-smdk2440.c linux-2.6.23/arch/arm/mach-s3c2440/mach-smdk2440.c
--- linux-2.6.23.old/arch/arm/mach-s3c2440/mach-smdk2440.c 2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/arch/arm/mach-s3c2440/mach-smdk2440.c 2007-08-14 21:02:22.000000000 +0200
@@ -115,11 +115,12 @@ static struct s3c2410fb_display smdk2440
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
- .type = S3C2410_LCDCON1_TFT16BPP,
+ .type = S3C2410_LCDCON1_TFT,
.width = 240,
.height = 320,
+ .pixclock = 166667, /* HCLK 60 MHz, divisor 10 */
.xres = 240,
.yres = 320,
.bpp = 16,
diff -urp linux-2.6.23.old/drivers/video/s3c2410fb.c linux-2.6.23/drivers/video/s3c2410fb.c
--- linux-2.6.23.old/drivers/video/s3c2410fb.c 2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/drivers/video/s3c2410fb.c 2007-08-14 21:02:59.000000000 +0200
@@ -199,6 +199,7 @@ static int s3c2410fb_check_var(struct fb
var->width = display->width;
/* copy lcd settings */
+ var->pixclock = display->pixclock;
var->left_margin = display->left_margin;
var->right_margin = display->right_margin;
var->upper_margin = display->upper_margin;
@@ -297,10 +298,6 @@ static void s3c2410fb_calculate_stn_lcd_
unsigned wdly = (var->left_margin >> 4) - 1;
unsigned wlh = (var->hsync_len >> 4) - 1;
- dprintk("%s: var->xres = %d\n", __FUNCTION__, var->xres);
- dprintk("%s: var->yres = %d\n", __FUNCTION__, var->yres);
- dprintk("%s: var->bpp = %d\n", __FUNCTION__, var->bits_per_pixel);
-
if (type != S3C2410_LCDCON1_STN4)
hs >>= 1;
@@ -359,10 +356,6 @@ static void s3c2410fb_calculate_tft_lcd_
const struct s3c2410fb_info *fbi = info->par;
const struct fb_var_screeninfo *var = &info->var;
- dprintk("%s: var->xres = %d\n", __FUNCTION__, var->xres);
- dprintk("%s: var->yres = %d\n", __FUNCTION__, var->yres);
- dprintk("%s: var->bpp = %d\n", __FUNCTION__, var->bits_per_pixel);
-
regs->lcdcon1 &= ~S3C2410_LCDCON1_MODEMASK;
switch (var->bits_per_pixel) {
@@ -427,28 +420,25 @@ static void s3c2410fb_activate_var(struc
void __iomem *regs = fbi->io;
int type = fbi->regs.lcdcon1 & S3C2410_LCDCON1_TFT;
struct fb_var_screeninfo *var = &info->var;
+ int clkdiv = s3c2410fb_calc_pixclk(fbi, var->pixclock) / 2;
- if (var->pixclock > 0) {
- int clkdiv = s3c2410fb_calc_pixclk(fbi, var->pixclock);
-
- if (type == S3C2410_LCDCON1_TFT) {
- clkdiv = (clkdiv / 2) - 1;
- if (clkdiv < 0)
- clkdiv = 0;
- } else {
- clkdiv = (clkdiv / 2);
- if (clkdiv < 2)
- clkdiv = 2;
- }
-
- fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_CLKVAL(0x3ff);
- fbi->regs.lcdcon1 |= S3C2410_LCDCON1_CLKVAL(clkdiv);
- }
+ dprintk("%s: var->xres = %d\n", __FUNCTION__, var->xres);
+ dprintk("%s: var->yres = %d\n", __FUNCTION__, var->yres);
+ dprintk("%s: var->bpp = %d\n", __FUNCTION__, var->bits_per_pixel);
- if (type == S3C2410_LCDCON1_TFT)
+ if (type == S3C2410_LCDCON1_TFT) {
s3c2410fb_calculate_tft_lcd_regs(info, &fbi->regs);
- else
+ --clkdiv;
+ if (clkdiv < 0)
+ clkdiv = 0;
+ } else {
s3c2410fb_calculate_stn_lcd_regs(info, &fbi->regs);
+ if (clkdiv < 2)
+ clkdiv = 2;
+ }
+
+ fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_CLKVAL(0x3ff);
+ fbi->regs.lcdcon1 |= S3C2410_LCDCON1_CLKVAL(clkdiv);
/* write new registers */
diff -urp linux-2.6.23.old/include/asm-arm/arch-s3c2410/fb.h linux-2.6.23/include/asm-arm/arch-s3c2410/fb.h
--- linux-2.6.23.old/include/asm-arm/arch-s3c2410/fb.h 2007-08-14 21:03:16.000000000 +0200
+++ linux-2.6.23/include/asm-arm/arch-s3c2410/fb.h 2007-08-14 21:02:22.000000000 +0200
@@ -36,6 +36,7 @@ struct s3c2410fb_display {
unsigned short yres;
unsigned short bpp;
+ unsigned pixclock; /* pixclock in picoseconds */
unsigned short left_margin; /* value in pixels (TFT) or HCLKs (STN) */
unsigned short right_margin; /* value in pixels (TFT) or HCLKs (STN) */
unsigned short hsync_len; /* value in pixels (TFT) or HCLKs (STN) */
[-- Attachment #3: Type: text/plain, Size: 315 bytes --]
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
[-- Attachment #4: Type: text/plain, Size: 182 bytes --]
_______________________________________________
Linux-fbdev-devel mailing list
Linux-fbdev-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
reply other threads:[~2007-08-15 8:24 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46c2b8264ef91@wp.pl \
--to=krzysztof.h1@wp.pl \
--cc=arnaud.patard@rtp-net.org \
--cc=ben-linux@fluff.org \
--cc=linux-fbdev-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.