Hi Jürgen, On Sat, Oct 16, 2010 at 03:46:52PM +0200, Juergen Beisert wrote: > commit 4ac682bf08b61708bc432c48e58a6d1cf9ea3832 > Author: Juergen Beisert <jbe@xxxxxxxxxxxxxx> > 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@xxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxxxxxx > 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@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox