diff mbox

[U-Boot,v2,1/3] Add flexibility to mx51 video support

Message ID 1288752995-31121-1-git-send-email-renato.frias@gmail.com
State Changes Requested
Delegated to: Stefano Babic
Headers show

Commit Message

Renato Frias Nov. 3, 2010, 2:56 a.m. UTC
From: Renato Frias <renato.frias@freescale.com>

This patch adds flexibility to mxc_ipuv3_fb.c by allowing the display
interface and pixel format to be passed to mx51_fb_init.

Signed-off-by: Renato Frias <renato.frias@freescale.com>
---
Changes for v2:
	- Removed fix.id string
	- Removed NBITS calculation from debug message

 drivers/video/mxc_ipuv3_fb.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

Comments

Stefano Babic Nov. 3, 2010, 11:30 a.m. UTC | #1
On 11/03/2010 03:56 AM, Renato Frias wrote:
> From: Renato Frias <renato.frias@freescale.com>
> 
> -int mx51_fb_init(struct fb_videomode *mode)
> +int mx51_fb_init(struct fb_videomode *mode, u32 ipu_di, u32 bppix)
>  {
>  	int ret;
> +	uint32_t pixfmt = 0;
>  
>  	ret = ipu_probe();
>  	if (ret)
> @@ -635,8 +635,23 @@ int mx51_fb_init(struct fb_videomode *mode)
>  
>  	lcd_base += 56;
>  
> +	switch (bppix) {
> +	case 32:
> +		pixfmt = IPU_PIX_FMT_BGR32;
> +		break;
> +	case 24:
> +		pixfmt = IPU_PIX_FMT_BGR24;
> +		break;
> +	case 18:
> +		pixfmt = IPU_PIX_FMT_RGB666;
> +		break;
> +	case 16:
> +		pixfmt = IPU_PIX_FMT_RGB565;
> +		break;
> +	}
> +

This is a code duplication of bpp_to_pixfmt() in the same file, adding
only an additional case. If you prefer to have a function passing an
integer as a fb_info structure, rearrange both functions to factorize
code and avoid duplications.

Best regards,
Stefano Babic
diff mbox

Patch

diff --git a/drivers/video/mxc_ipuv3_fb.c b/drivers/video/mxc_ipuv3_fb.c
index a66981c..b660d22 100644
--- a/drivers/video/mxc_ipuv3_fb.c
+++ b/drivers/video/mxc_ipuv3_fb.c
@@ -526,7 +526,7 @@  static struct fb_info *mxcfb_init_fbinfo(void)
  *
  * @return      Appropriate error code to the kernel common code
  */
-static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode)
+static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode, u32 ipu_di)
 {
 	struct fb_info *fbi;
 	struct mxcfb_info *mxcfbi;
@@ -550,11 +550,10 @@  static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode)
 		mxcfbi->blank = FB_BLANK_POWERDOWN;
 	}
 
-	mxcfbi->ipu_di = 0;
+	mxcfbi->ipu_di = ipu_di;
 
 	ipu_disp_set_global_alpha(mxcfbi->ipu_ch, 1, 0x80);
 	ipu_disp_set_color_key(mxcfbi->ipu_ch, 0, 0);
-	strcpy(fbi->fix.id, "DISP3 BG");
 
 	g_dp_in_use = 1;
 
@@ -625,9 +624,10 @@  void lcd_ctrl_init(void *lcdbase)
 	memset(lcdbase, 0, mem_len);
 }
 
-int mx51_fb_init(struct fb_videomode *mode)
+int mx51_fb_init(struct fb_videomode *mode, u32 ipu_di, u32 bppix)
 {
 	int ret;
+	uint32_t pixfmt = 0;
 
 	ret = ipu_probe();
 	if (ret)
@@ -635,8 +635,23 @@  int mx51_fb_init(struct fb_videomode *mode)
 
 	lcd_base += 56;
 
+	switch (bppix) {
+	case 32:
+		pixfmt = IPU_PIX_FMT_BGR32;
+		break;
+	case 24:
+		pixfmt = IPU_PIX_FMT_BGR24;
+		break;
+	case 18:
+		pixfmt = IPU_PIX_FMT_RGB666;
+		break;
+	case 16:
+		pixfmt = IPU_PIX_FMT_RGB565;
+		break;
+	}
+
 	debug("Framebuffer at 0x%x\n", (unsigned int)lcd_base);
-	ret = mxcfb_probe(IPU_PIX_FMT_RGB666, mode);
+	ret = mxcfb_probe(pixfmt, mode, ipu_di);
 
 	return ret;
 }