[Armadeus-commitlog] SF.net SVN: armadeus:[1296] trunk/buildroot/target/device/armadeus/linux/ kern
Brought to you by:
sszy
|
From: <ar...@us...> - 2009-05-22 14:07:45
|
Revision: 1296
http://armadeus.svn.sourceforge.net/armadeus/?rev=1296&view=rev
Author: artemys
Date: 2009-05-22 14:07:43 +0000 (Fri, 22 May 2009)
Log Message:
-----------
[LINUX] Finaly makes framebuffer work again like expected on APF9328 with 2.6.29 + begin work for 2.6.30
Modified Paths:
--------------
trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/013-armadeus-imxfb-improvements.patch
trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/021-armadeus-apf9328.patch
Added Paths:
-----------
trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/325-pengu-imxfb-fix_tft_mode_init.patch
trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/326-armadeus-imxfb-power_on_backlight_after_lcd_logic.patch
trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/327-armadeus-imxfb-supports_8bpp_in_tft_mode.patch
trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/328-pengu-imxfb-fix_margin_settings.patch
Modified: trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/013-armadeus-imxfb-improvements.patch
===================================================================
--- trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/013-armadeus-imxfb-improvements.patch 2009-05-22 10:37:45 UTC (rev 1295)
+++ trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/013-armadeus-imxfb-improvements.patch 2009-05-22 14:07:43 UTC (rev 1296)
@@ -1,33 +1,17 @@
-PATCH AUTOMATICALLY GENERATED
-DON'T EDIT IT OR YOUR MODIFICATIONS WILL BE LOST
-(Take a look at armadeus/target/linux/ directory to know how to generate it)
+PWMR, LSCR1 and DMACR registers only need to be initialized once at startup,
+not every time imxfb_set_par()/imxfb_activate_var() are called (for example
+when using SDL).
+Setting these registers in imxfb_set_par()/imxfb_activate_var() has the side
+effect (for example) of shutting down the backlight when opening an 8bits
+SDL screen.
+
+Signed-off-by: Julien Boibessot <jul...@ar...>
+
Index: linux-2.6.29/drivers/video/imxfb.c
===================================================================
--- linux-2.6.29.orig/drivers/video/imxfb.c 2009-03-24 00:12:14.000000000 +0100
-+++ linux-2.6.29/drivers/video/imxfb.c 2009-04-29 15:15:10.000000000 +0200
-@@ -288,7 +288,7 @@ static int imxfb_check_var(struct fb_var
- switch (var->bits_per_pixel) {
- case 16:
- default:
-- if (readl(fbi->regs + LCDC_PCR) & PCR_TFT)
-+ if ( fbi->pcr & PCR_TFT)
- rgb = &def_rgb_16_tft;
- else
- rgb = &def_rgb_16_stn;
-@@ -373,10 +373,10 @@ static void imxfb_enable_controller(stru
-
- writel(RMCR_LCDC_EN, fbi->regs + LCDC_RMCR);
-
-- if (fbi->backlight_power)
-- fbi->backlight_power(1);
- if (fbi->lcd_power)
- fbi->lcd_power(1);
-+ if (fbi->backlight_power)
-+ fbi->backlight_power(1);
- }
-
- static void imxfb_disable_controller(struct imxfb_info *fbi)
-@@ -437,6 +437,7 @@ static int imxfb_activate_var(struct fb_
++++ linux-2.6.29/drivers/video/imxfb.c 2009-05-20 14:58:44.000000000 +0200
+@@ -437,6 +437,7 @@
pr_debug("var: yres=%d vslen=%d um=%d bm=%d\n",
var->yres, var->vsync_len,
var->upper_margin, var->lower_margin);
@@ -35,7 +19,17 @@
#if DEBUG_VAR
if (var->xres < 16 || var->xres > 1024)
-@@ -667,6 +668,12 @@ static int __init imxfb_probe(struct pla
+@@ -478,9 +479,6 @@
+ writel(SIZE_XMAX(var->xres) | SIZE_YMAX(var->yres),
+ fbi->regs + LCDC_SIZE);
+ writel(fbi->pcr, fbi->regs + LCDC_PCR);
+- writel(fbi->pwmr, fbi->regs + LCDC_PWMR);
+- writel(fbi->lscr1, fbi->regs + LCDC_LSCR1);
+- writel(fbi->dmacr, fbi->regs + LCDC_DMACR);
+
+ return 0;
+ }
+@@ -661,6 +659,12 @@
goto failed_cmap;
imxfb_set_par(info);
Modified: trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/021-armadeus-apf9328.patch
===================================================================
--- trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/021-armadeus-apf9328.patch 2009-05-22 10:37:45 UTC (rev 1295)
+++ trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/021-armadeus-apf9328.patch 2009-05-22 14:07:43 UTC (rev 1296)
@@ -4,7 +4,7 @@
Index: linux-2.6.29/arch/arm/mach-imx/apf9328.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.29/arch/arm/mach-imx/apf9328.c 2009-05-18 16:38:57.000000000 +0200
++++ linux-2.6.29/arch/arm/mach-imx/apf9328.c 2009-05-21 21:20:41.000000000 +0200
@@ -0,0 +1,816 @@
+/*
+ * linux/arch/arm/mach-imx/apf9328.c
@@ -825,7 +825,7 @@
Index: linux-2.6.29/arch/arm/mach-imx/apf9328_lcd_config.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.29/arch/arm/mach-imx/apf9328_lcd_config.h 2009-05-18 16:34:27.000000000 +0200
++++ linux-2.6.29/arch/arm/mach-imx/apf9328_lcd_config.h 2009-05-22 15:35:56.000000000 +0200
@@ -0,0 +1,277 @@
+/*
+ *
@@ -932,12 +932,12 @@
+ .xres = 480,
+ .yres = 272,
+
-+ .hsync_len = 10,
-+ .vsync_len = 3,
-+ .left_margin = 2,
-+ .upper_margin = 2,
-+ .right_margin = 0,
-+ .lower_margin = 3,
++ .hsync_len = 41,
++ .vsync_len = 10,
++ .left_margin = 3, /* should be 2 but i.MX doesn't support it */
++ .upper_margin = 3,
++ .right_margin = 2,
++ .lower_margin = 2,
+
+ .pcr = PCR_TFT | PCR_COLOR | PCR_PBSIZ_8 | PCR_BPIX_16 | PCR_FLMPOL | PCR_LPPOL |
+ PCR_CLKPOL | PCR_SCLKIDLE | PCR_SCLK_SEL | PCR_PCD(5),
@@ -951,11 +951,11 @@
+ .xres = 320,
+ .yres = 240,
+
-+ .hsync_len = 30,
++ .hsync_len = 31,
+ .vsync_len = 3,
-+ .left_margin = 1,
++ .left_margin = 4,
+ .upper_margin = 20,
-+ .right_margin = 68,
++ .right_margin = 69,
+ .lower_margin = 20,
+
+ .pcr = PCR_TFT | PCR_COLOR | PCR_PBSIZ_8 | PCR_BPIX_16 | PCR_FLMPOL | PCR_LPPOL |
@@ -1107,7 +1107,7 @@
Index: linux-2.6.29/arch/arm/mach-imx/include/mach/apf9328.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.29/arch/arm/mach-imx/include/mach/apf9328.h 2009-05-18 16:34:27.000000000 +0200
++++ linux-2.6.29/arch/arm/mach-imx/include/mach/apf9328.h 2009-05-21 21:20:41.000000000 +0200
@@ -0,0 +1,63 @@
+/*
+ * linux/include/asm-arm/arch-imx/apf9328.h
Added: trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/325-pengu-imxfb-fix_tft_mode_init.patch
===================================================================
--- trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/325-pengu-imxfb-fix_tft_mode_init.patch (rev 0)
+++ trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/325-pengu-imxfb-fix_tft_mode_init.patch 2009-05-22 14:07:43 UTC (rev 1296)
@@ -0,0 +1,28 @@
+From: Sascha Hauer <s....@pe...>
+Date: Thu, 26 Mar 2009 11:38:26 +0000 (+0100)
+Subject: imxfb: Fix TFT mode
+X-Git-Tag: v2.6.30-rc1~636^2~3^2
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=4d1e4e5a6387aad97590e2da9c6db1350f22f63a
+
+imxfb: Fix TFT mode
+
+We read from the PCR reg to determine whether to use TFT mode or not.
+This is not possible because it may not have been initialized with
+the correct value yet. Select it using fbi->pcr instead.
+
+Signed-off-by: Sascha Hauer <s....@pe...>
+---
+
+diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c
+index 8f7a2b2..15a0ee6 100644
+--- a/drivers/video/imxfb.c
++++ b/drivers/video/imxfb.c
+@@ -327,7 +327,7 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
+ break;
+ case 16:
+ default:
+- if (readl(fbi->regs + LCDC_PCR) & PCR_TFT)
++ if (fbi->pcr & PCR_TFT)
+ rgb = &def_rgb_16_tft;
+ else
+ rgb = &def_rgb_16_stn;
Added: trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/326-armadeus-imxfb-power_on_backlight_after_lcd_logic.patch
===================================================================
--- trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/326-armadeus-imxfb-power_on_backlight_after_lcd_logic.patch (rev 0)
+++ trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/326-armadeus-imxfb-power_on_backlight_after_lcd_logic.patch 2009-05-22 14:07:43 UTC (rev 1296)
@@ -0,0 +1,24 @@
+On most LCDs (at least Sharp's one) LCD logic needs to be activated before
+powering on the backlight, otherwise some display's startup artefacts
+will be seen.
+
+Signed-off-by: Nicolas Colombain <nic...@ar...>
+Signed-off-by: Julien Boibessot <jul...@ar...>
+
+Index: linux-2.6.29/drivers/video/imxfb.c
+===================================================================
+--- linux-2.6.29.orig/drivers/video/imxfb.c 2009-05-20 14:40:14.000000000 +0200
++++ linux-2.6.29/drivers/video/imxfb.c 2009-05-20 14:40:14.000000000 +0200
+@@ -373,10 +373,10 @@
+
+ writel(RMCR_LCDC_EN, fbi->regs + LCDC_RMCR);
+
+- if (fbi->backlight_power)
+- fbi->backlight_power(1);
+ if (fbi->lcd_power)
+ fbi->lcd_power(1);
++ if (fbi->backlight_power)
++ fbi->backlight_power(1);
+ }
+
+ static void imxfb_disable_controller(struct imxfb_info *fbi)
Added: trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/327-armadeus-imxfb-supports_8bpp_in_tft_mode.patch
===================================================================
--- trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/327-armadeus-imxfb-supports_8bpp_in_tft_mode.patch (rev 0)
+++ trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/327-armadeus-imxfb-supports_8bpp_in_tft_mode.patch 2009-05-22 14:07:43 UTC (rev 1296)
@@ -0,0 +1,31 @@
+When configured with a TFT LCD interface i.MX(1/2) LCD controller can support
+16, 12, 8 & 4bpp framebuffers with the same hardware interface (12 to 16 bits).
+So if userspace app wants a 8bpp screen, we switch to 8bpp. This can save
+ressources (mem + proc), when using SDL for example.
+
+Signed-off-by: Julien Boibessot <jul...@ar...>
+
+Index: linux-2.6.29/drivers/video/imxfb.c
+===================================================================
+--- linux-2.6.29.orig/drivers/video/imxfb.c 2009-05-21 11:50:42.000000000 +0200
++++ linux-2.6.29/drivers/video/imxfb.c 2009-05-21 12:21:25.000000000 +0200
+@@ -478,7 +478,18 @@
+
+ writel(SIZE_XMAX(var->xres) | SIZE_YMAX(var->yres),
+ fbi->regs + LCDC_SIZE);
+- writel(fbi->pcr, fbi->regs + LCDC_PCR);
++
++ /* i.MX LCD controller can support 8bpp even if configured to output 16 bits (TFT) */
++ if ((var->bits_per_pixel == 8) && (fbi->pcr & PCR_TFT)) {
++ pr_debug("Switching imxfb to 8bpp\n");
++ writel((fbi->pcr & (~PCR_BPIX_MASK)) |
++ PCR_BPIX_8 |
++ PCR_END_BYTE_SWAP,
++ fbi->regs + LCDC_PCR);
++ } else {
++ writel(fbi->pcr, fbi->regs + LCDC_PCR);
++ }
++ writel(VPW_VPW(var->xres * var->bits_per_pixel / 8 / 4), fbi->regs + LCDC_VPW);
+
+ return 0;
+ }
Added: trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/328-pengu-imxfb-fix_margin_settings.patch
===================================================================
--- trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/328-pengu-imxfb-fix_margin_settings.patch (rev 0)
+++ trunk/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29/328-pengu-imxfb-fix_margin_settings.patch 2009-05-22 14:07:43 UTC (rev 1296)
@@ -0,0 +1,31 @@
+From: Sascha Hauer <s....@pe...>
+Date: Sat, 14 Feb 2009 15:29:38 +0000 (+0100)
+Subject: imxfb: Fix margin settings
+X-Git-Tag: v2.6.30-rc1~636^2~29^2~17
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=7e8549bcee00d92040904361cb1840c7a5eda615
+
+imxfb: Fix margin settings
+
+The var->hsync_len, var->right_margin and var->left_margin fields
+should contain the real values, not the hardware dependent values.
+
+Signed-off-by: Sascha Hauer <s....@pe...>
+---
+
+diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c
+index 9dd2757..bd1cb75 100644
+--- a/drivers/video/imxfb.c
++++ b/drivers/video/imxfb.c
+@@ -495,9 +495,9 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf
+ info->fix.id, var->lower_margin);
+ #endif
+
+- writel(HCR_H_WIDTH(var->hsync_len) |
+- HCR_H_WAIT_1(var->right_margin) |
+- HCR_H_WAIT_2(var->left_margin),
++ writel(HCR_H_WIDTH(var->hsync_len - 1) |
++ HCR_H_WAIT_1(var->right_margin - 1) |
++ HCR_H_WAIT_2(var->left_margin - 3),
+ fbi->regs + LCDC_HCR);
+
+ writel(VCR_V_WIDTH(var->vsync_len) |
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|