[PATCH] imx: Separate framebuffer platformdata and the videomode

Sascha Hauer s.hauer at pengutronix.de
Tue Oct 19 02:54:58 EDT 2010


Hi Jürgen,

On Sat, Oct 16, 2010 at 03:46:52PM +0200, Juergen Beisert wrote:
> commit 4ac682bf08b61708bc432c48e58a6d1cf9ea3832
> Author: Juergen Beisert <jbe at 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 at 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 at 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 |



More information about the barebox mailing list