* [PATCH] imx: Separate framebuffer platformdata and the videomode
@ 2010-10-16 13:46 Juergen Beisert
2010-10-19 6:54 ` Sascha Hauer
0 siblings, 1 reply; 3+ messages in thread
From: Juergen Beisert @ 2010-10-16 13:46 UTC (permalink / raw)
To: barebox
commit 4ac682bf08b61708bc432c48e58a6d1cf9ea3832
Author: Juergen Beisert <jbe@pengutronix.de>
Date: Sat Oct 16 15:32:06 2010 +0200
imx: Separate framebuffer platformdata and the videomode
This patch separates the imx platformdata and its videomode in two structures,
in order to support more than one defined videomode in the boardfile. This
is intended to support runtime videomode selection later on. It also uses
now the same videomode setup style than the imx-fpu based systems (like the
i.MX35).
Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
diff --git a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
index c2eb398..b1b9852 100644
--- a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
+++ b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
@@ -119,20 +119,22 @@ static struct device_d nand_dev = {
.platform_data = &nand_info,
};
+static struct fb_videomode cmo_display = {
+ .name = "CMO-QVGA",
+ .refresh = 60,
+ .xres = 320,
+ .yres = 240,
+ .pixclock = KHZ2PICOS(6500),
+ .hsync_len = 30,
+ .left_margin = 38,
+ .right_margin = 20,
+ .vsync_len = 3,
+ .upper_margin = 15,
+ .lower_margin = 4,
+};
+
static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "CMO-QVGA",
- .refresh = 60,
- .xres = 320,
- .yres = 240,
- .pixclock = KHZ2PICOS(6500),
- .hsync_len = 30,
- .left_margin = 38,
- .right_margin = 20,
- .vsync_len = 3,
- .upper_margin = 15,
- .lower_margin = 4,
- },
+ .mode = &cmo_display,
.pcr = 0xCAD08B80,
.bpp = 16,
};
diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
index 62fc14e..3ea2466 100644
--- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
+++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
@@ -186,20 +186,22 @@ static void eukrea_cpuimx27_mmu_init(void)
#endif
#ifdef CONFIG_DRIVER_VIDEO_IMX
+static struct fb_videomode cmo_display = {
+ .name = "CMO-QVGA",
+ .refresh = 60,
+ .xres = 320,
+ .yres = 240,
+ .pixclock = 156000,
+ .hsync_len = 30,
+ .left_margin = 38,
+ .right_margin = 20,
+ .vsync_len = 3,
+ .upper_margin = 15,
+ .lower_margin = 4,
+};
+
static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "CMO-QVGA",
- .refresh = 60,
- .xres = 320,
- .yres = 240,
- .pixclock = 156000,
- .hsync_len = 30,
- .left_margin = 38,
- .right_margin = 20,
- .vsync_len = 3,
- .upper_margin = 15,
- .lower_margin = 4,
- },
+ .mode = &cmo_display,
.pcr = 0xFAD08B80,
.bpp = 16,};
diff --git a/arch/arm/boards/guf-neso/board.c b/arch/arm/boards/guf-neso/board.c
index 9c85c08..6949675 100644
--- a/arch/arm/boards/guf-neso/board.c
+++ b/arch/arm/boards/guf-neso/board.c
@@ -91,20 +91,22 @@ static struct device_d nand_dev = {
.platform_data = &nand_info,
};
+static struct fb_videomode cpt_display = {
+ .name = "CPT CLAA070LC0JCT",
+ .refresh = 60,
+ .xres = 800,
+ .yres = 480,
+ .pixclock = KHZ2PICOS(27000),
+ .hsync_len = 1, /* DE only sync */
+ .left_margin = 50,
+ .right_margin = 50,
+ .vsync_len = 1, /* DE only sync */
+ .upper_margin = 10,
+ .lower_margin = 10,
+};
+
static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "CPT CLAA070LC0JCT",
- .refresh = 60,
- .xres = 800,
- .yres = 480,
- .pixclock = KHZ2PICOS(27000),
- .hsync_len = 1, /* DE only sync */
- .left_margin = 50,
- .right_margin = 50,
- .vsync_len = 1, /* DE only sync */
- .upper_margin = 10,
- .lower_margin = 10,
- },
+ .mode = &cpt_display,
/*
* - TFT style panel
* - clk enabled while idle
diff --git a/arch/arm/boards/imx21ads/imx21ads.c b/arch/arm/boards/imx21ads/imx21ads.c
index 44d37aa..81006de 100644
--- a/arch/arm/boards/imx21ads/imx21ads.c
+++ b/arch/arm/boards/imx21ads/imx21ads.c
@@ -79,24 +79,26 @@ static struct device_d cs8900_dev = {
// IRQ is connected to UART3_RTS
};
+static struct fb_videomode sharp_display = {
+ .name = "Sharp-LQ035Q7",
+ .refresh = 60,
+ .xres = 240,
+ .yres = 320,
+ .pixclock = 188679,
+ .left_margin = 6,
+ .right_margin = 16,
+ .upper_margin = 8,
+ .lower_margin = 10,
+ .hsync_len = 2,
+ .vsync_len = 1,
+ .sync = 0,
+ .vmode = FB_VMODE_NONINTERLACED,
+ .flag = 0,
+};
+
/* Sharp LQ035Q7DB02 QVGA display */
static struct imx_fb_videomode imx_fb_modedata = {
- .mode = {
- .name = "Sharp-LQ035Q7",
- .refresh = 60,
- .xres = 240,
- .yres = 320,
- .pixclock = 188679,
- .left_margin = 6,
- .right_margin = 16,
- .upper_margin = 8,
- .lower_margin = 10,
- .hsync_len = 2,
- .vsync_len = 1,
- .sync = 0,
- .vmode = FB_VMODE_NONINTERLACED,
- .flag = 0,
- },
+ .mode = &sharp_display,
.pcr = 0xfb108bc7,
.bpp = 16,
};
diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c
index 3a9b413..026e9c0 100644
--- a/arch/arm/boards/pcm038/pcm038.c
+++ b/arch/arm/boards/pcm038/pcm038.c
@@ -127,20 +127,22 @@ static struct device_d nand_dev = {
.platform_data = &nand_info,
};
+static struct fb_videomode sharp_display = {
+ .name = "Sharp-LQ035Q7",
+ .refresh = 60,
+ .xres = 240,
+ .yres = 320,
+ .pixclock = 188679, /* in ps (5.3MHz) */
+ .hsync_len = 7,
+ .left_margin = 5,
+ .right_margin = 16,
+ .vsync_len = 1,
+ .upper_margin = 7,
+ .lower_margin = 9,
+};
+
static struct imx_fb_videomode imxfb_mode = {
- .mode = {
- .name = "Sharp-LQ035Q7",
- .refresh = 60,
- .xres = 240,
- .yres = 320,
- .pixclock = 188679, /* in ps (5.3MHz) */
- .hsync_len = 7,
- .left_margin = 5,
- .right_margin = 16,
- .vsync_len = 1,
- .upper_margin = 7,
- .lower_margin = 9,
- },
+ .mode = &sharp_display,
/*
* - HSYNC active high
* - VSYNC active high
diff --git a/arch/arm/mach-imx/include/mach/imxfb.h b/arch/arm/mach-imx/include/mach/imxfb.h
index 16b43ea..7baa244 100644
--- a/arch/arm/mach-imx/include/mach/imxfb.h
+++ b/arch/arm/mach-imx/include/mach/imxfb.h
@@ -50,7 +50,7 @@
#define DMACR_TM(x) ((x) & 0xf)
struct imx_fb_videomode {
- struct fb_videomode mode;
+ struct fb_videomode *mode;
u32 pcr;
unsigned char bpp;
};
diff --git a/drivers/video/imx.c b/drivers/video/imx.c
index ac51858..6ccd77e 100644
--- a/drivers/video/imx.c
+++ b/drivers/video/imx.c
@@ -555,9 +555,9 @@ static int imxfb_probe(struct device_d *dev)
fbi->enable = pdata->enable;
fbi->dev = dev;
info->priv = fbi;
- info->mode = &pdata->mode->mode;
- info->xres = pdata->mode->mode.xres;
- info->yres = pdata->mode->mode.yres;
+ info->mode = pdata->mode->mode;
+ info->xres = pdata->mode->mode->xres;
+ info->yres = pdata->mode->mode->yres;
info->bits_per_pixel = pdata->mode->bpp;
info->fbops = &imxfb_ops;
--
Pengutronix e.K. | Juergen Beisert |
Linux Solutions for Science and Industry | Phone: +49-8766-939 228 |
Vertretung Sued/Muenchen, Germany | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] imx: Separate framebuffer platformdata and the videomode
2010-10-16 13:46 [PATCH] imx: Separate framebuffer platformdata and the videomode Juergen Beisert
@ 2010-10-19 6:54 ` Sascha Hauer
2010-10-19 7:12 ` Juergen Beisert
0 siblings, 1 reply; 3+ messages in thread
From: Sascha Hauer @ 2010-10-19 6:54 UTC (permalink / raw)
To: Juergen Beisert; +Cc: barebox
Hi Jürgen,
On Sat, Oct 16, 2010 at 03:46:52PM +0200, Juergen Beisert wrote:
> commit 4ac682bf08b61708bc432c48e58a6d1cf9ea3832
> Author: Juergen Beisert <jbe@pengutronix.de>
> Date: Sat Oct 16 15:32:06 2010 +0200
>
> imx: Separate framebuffer platformdata and the videomode
>
> This patch separates the imx platformdata and its videomode in two structures,
> in order to support more than one defined videomode in the boardfile. This
> is intended to support runtime videomode selection later on. It also uses
> now the same videomode setup style than the imx-fpu based systems (like the
> i.MX35).
Multiple displays can have different bpp/pcr values. Shouldn't we build
an array of imx_fb_videomode instead?
Sascha
>
> Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
>
> diff --git a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
> index c2eb398..b1b9852 100644
> --- a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
> +++ b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
> @@ -119,20 +119,22 @@ static struct device_d nand_dev = {
> .platform_data = &nand_info,
> };
>
> +static struct fb_videomode cmo_display = {
> + .name = "CMO-QVGA",
> + .refresh = 60,
> + .xres = 320,
> + .yres = 240,
> + .pixclock = KHZ2PICOS(6500),
> + .hsync_len = 30,
> + .left_margin = 38,
> + .right_margin = 20,
> + .vsync_len = 3,
> + .upper_margin = 15,
> + .lower_margin = 4,
> +};
> +
> static struct imx_fb_videomode imxfb_mode = {
> - .mode = {
> - .name = "CMO-QVGA",
> - .refresh = 60,
> - .xres = 320,
> - .yres = 240,
> - .pixclock = KHZ2PICOS(6500),
> - .hsync_len = 30,
> - .left_margin = 38,
> - .right_margin = 20,
> - .vsync_len = 3,
> - .upper_margin = 15,
> - .lower_margin = 4,
> - },
> + .mode = &cmo_display,
> .pcr = 0xCAD08B80,
> .bpp = 16,
> };
> diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
> index 62fc14e..3ea2466 100644
> --- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
> +++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
> @@ -186,20 +186,22 @@ static void eukrea_cpuimx27_mmu_init(void)
> #endif
>
> #ifdef CONFIG_DRIVER_VIDEO_IMX
> +static struct fb_videomode cmo_display = {
> + .name = "CMO-QVGA",
> + .refresh = 60,
> + .xres = 320,
> + .yres = 240,
> + .pixclock = 156000,
> + .hsync_len = 30,
> + .left_margin = 38,
> + .right_margin = 20,
> + .vsync_len = 3,
> + .upper_margin = 15,
> + .lower_margin = 4,
> +};
> +
> static struct imx_fb_videomode imxfb_mode = {
> - .mode = {
> - .name = "CMO-QVGA",
> - .refresh = 60,
> - .xres = 320,
> - .yres = 240,
> - .pixclock = 156000,
> - .hsync_len = 30,
> - .left_margin = 38,
> - .right_margin = 20,
> - .vsync_len = 3,
> - .upper_margin = 15,
> - .lower_margin = 4,
> - },
> + .mode = &cmo_display,
> .pcr = 0xFAD08B80,
> .bpp = 16,};
>
> diff --git a/arch/arm/boards/guf-neso/board.c b/arch/arm/boards/guf-neso/board.c
> index 9c85c08..6949675 100644
> --- a/arch/arm/boards/guf-neso/board.c
> +++ b/arch/arm/boards/guf-neso/board.c
> @@ -91,20 +91,22 @@ static struct device_d nand_dev = {
> .platform_data = &nand_info,
> };
>
> +static struct fb_videomode cpt_display = {
> + .name = "CPT CLAA070LC0JCT",
> + .refresh = 60,
> + .xres = 800,
> + .yres = 480,
> + .pixclock = KHZ2PICOS(27000),
> + .hsync_len = 1, /* DE only sync */
> + .left_margin = 50,
> + .right_margin = 50,
> + .vsync_len = 1, /* DE only sync */
> + .upper_margin = 10,
> + .lower_margin = 10,
> +};
> +
> static struct imx_fb_videomode imxfb_mode = {
> - .mode = {
> - .name = "CPT CLAA070LC0JCT",
> - .refresh = 60,
> - .xres = 800,
> - .yres = 480,
> - .pixclock = KHZ2PICOS(27000),
> - .hsync_len = 1, /* DE only sync */
> - .left_margin = 50,
> - .right_margin = 50,
> - .vsync_len = 1, /* DE only sync */
> - .upper_margin = 10,
> - .lower_margin = 10,
> - },
> + .mode = &cpt_display,
> /*
> * - TFT style panel
> * - clk enabled while idle
> diff --git a/arch/arm/boards/imx21ads/imx21ads.c b/arch/arm/boards/imx21ads/imx21ads.c
> index 44d37aa..81006de 100644
> --- a/arch/arm/boards/imx21ads/imx21ads.c
> +++ b/arch/arm/boards/imx21ads/imx21ads.c
> @@ -79,24 +79,26 @@ static struct device_d cs8900_dev = {
> // IRQ is connected to UART3_RTS
> };
>
> +static struct fb_videomode sharp_display = {
> + .name = "Sharp-LQ035Q7",
> + .refresh = 60,
> + .xres = 240,
> + .yres = 320,
> + .pixclock = 188679,
> + .left_margin = 6,
> + .right_margin = 16,
> + .upper_margin = 8,
> + .lower_margin = 10,
> + .hsync_len = 2,
> + .vsync_len = 1,
> + .sync = 0,
> + .vmode = FB_VMODE_NONINTERLACED,
> + .flag = 0,
> +};
> +
> /* Sharp LQ035Q7DB02 QVGA display */
> static struct imx_fb_videomode imx_fb_modedata = {
> - .mode = {
> - .name = "Sharp-LQ035Q7",
> - .refresh = 60,
> - .xres = 240,
> - .yres = 320,
> - .pixclock = 188679,
> - .left_margin = 6,
> - .right_margin = 16,
> - .upper_margin = 8,
> - .lower_margin = 10,
> - .hsync_len = 2,
> - .vsync_len = 1,
> - .sync = 0,
> - .vmode = FB_VMODE_NONINTERLACED,
> - .flag = 0,
> - },
> + .mode = &sharp_display,
> .pcr = 0xfb108bc7,
> .bpp = 16,
> };
> diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c
> index 3a9b413..026e9c0 100644
> --- a/arch/arm/boards/pcm038/pcm038.c
> +++ b/arch/arm/boards/pcm038/pcm038.c
> @@ -127,20 +127,22 @@ static struct device_d nand_dev = {
> .platform_data = &nand_info,
> };
>
> +static struct fb_videomode sharp_display = {
> + .name = "Sharp-LQ035Q7",
> + .refresh = 60,
> + .xres = 240,
> + .yres = 320,
> + .pixclock = 188679, /* in ps (5.3MHz) */
> + .hsync_len = 7,
> + .left_margin = 5,
> + .right_margin = 16,
> + .vsync_len = 1,
> + .upper_margin = 7,
> + .lower_margin = 9,
> +};
> +
> static struct imx_fb_videomode imxfb_mode = {
> - .mode = {
> - .name = "Sharp-LQ035Q7",
> - .refresh = 60,
> - .xres = 240,
> - .yres = 320,
> - .pixclock = 188679, /* in ps (5.3MHz) */
> - .hsync_len = 7,
> - .left_margin = 5,
> - .right_margin = 16,
> - .vsync_len = 1,
> - .upper_margin = 7,
> - .lower_margin = 9,
> - },
> + .mode = &sharp_display,
> /*
> * - HSYNC active high
> * - VSYNC active high
> diff --git a/arch/arm/mach-imx/include/mach/imxfb.h b/arch/arm/mach-imx/include/mach/imxfb.h
> index 16b43ea..7baa244 100644
> --- a/arch/arm/mach-imx/include/mach/imxfb.h
> +++ b/arch/arm/mach-imx/include/mach/imxfb.h
> @@ -50,7 +50,7 @@
> #define DMACR_TM(x) ((x) & 0xf)
>
> struct imx_fb_videomode {
> - struct fb_videomode mode;
> + struct fb_videomode *mode;
> u32 pcr;
> unsigned char bpp;
> };
> diff --git a/drivers/video/imx.c b/drivers/video/imx.c
> index ac51858..6ccd77e 100644
> --- a/drivers/video/imx.c
> +++ b/drivers/video/imx.c
> @@ -555,9 +555,9 @@ static int imxfb_probe(struct device_d *dev)
> fbi->enable = pdata->enable;
> fbi->dev = dev;
> info->priv = fbi;
> - info->mode = &pdata->mode->mode;
> - info->xres = pdata->mode->mode.xres;
> - info->yres = pdata->mode->mode.yres;
> + info->mode = pdata->mode->mode;
> + info->xres = pdata->mode->mode->xres;
> + info->yres = pdata->mode->mode->yres;
> info->bits_per_pixel = pdata->mode->bpp;
> info->fbops = &imxfb_ops;
>
> --
> Pengutronix e.K. | Juergen Beisert |
> Linux Solutions for Science and Industry | Phone: +49-8766-939 228 |
> Vertretung Sued/Muenchen, Germany | Fax: +49-5121-206917-5555 |
> Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de/ |
>
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] imx: Separate framebuffer platformdata and the videomode
2010-10-19 6:54 ` Sascha Hauer
@ 2010-10-19 7:12 ` Juergen Beisert
0 siblings, 0 replies; 3+ messages in thread
From: Juergen Beisert @ 2010-10-19 7:12 UTC (permalink / raw)
To: barebox
Hi Sascha,
Sascha Hauer wrote:
> On Sat, Oct 16, 2010 at 03:46:52PM +0200, Juergen Beisert wrote:
> > commit 4ac682bf08b61708bc432c48e58a6d1cf9ea3832
> > Author: Juergen Beisert <jbe@pengutronix.de>
> > Date: Sat Oct 16 15:32:06 2010 +0200
> >
> > imx: Separate framebuffer platformdata and the videomode
> >
> > This patch separates the imx platformdata and its videomode in two
> > structures, in order to support more than one defined videomode in the
> > boardfile. This is intended to support runtime videomode selection later
> > on. It also uses now the same videomode setup style than the imx-fpu
> > based systems (like the i.MX35).
>
> Multiple displays can have different bpp/pcr values. Shouldn't we build
> an array of imx_fb_videomode instead?
At this point of time its not necessary, because still only one display is
supported (BTW: The 'bpp' value seems not display related, it a feature of
the framebuffer only).
But in future we need a solution for videomode and driver specific data. Maybe
we could add a private void pointer into the "struct fb_videomode" for this
purpose?
When I release my "runtime videomode initialization" patch stack, we could
discuss where to store such special information.
jbe
--
Pengutronix e.K. | Juergen Beisert |
Linux Solutions for Science and Industry | Phone: +49-8766-939 228 |
Vertretung Sued/Muenchen, Germany | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-10-19 7:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-16 13:46 [PATCH] imx: Separate framebuffer platformdata and the videomode Juergen Beisert
2010-10-19 6:54 ` Sascha Hauer
2010-10-19 7:12 ` Juergen Beisert
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox