diff options
Diffstat (limited to 'drivers/video/mxc_ipuv3_fb.c')
| -rw-r--r-- | drivers/video/mxc_ipuv3_fb.c | 110 | 
1 files changed, 36 insertions, 74 deletions
| diff --git a/drivers/video/mxc_ipuv3_fb.c b/drivers/video/mxc_ipuv3_fb.c index a66981c27..eafacef53 100644 --- a/drivers/video/mxc_ipuv3_fb.c +++ b/drivers/video/mxc_ipuv3_fb.c @@ -27,7 +27,6 @@   * MA 02111-1307 USA   */ -/* #define DEBUG */  #include <common.h>  #include <asm/errno.h>  #include <linux/string.h> @@ -35,43 +34,17 @@  #include <linux/fb.h>  #include <asm/io.h>  #include <malloc.h> -#include <lcd.h> +#include <video_fb.h>  #include "videomodes.h"  #include "ipu.h"  #include "mxcfb.h" -DECLARE_GLOBAL_DATA_PTR; - -void *lcd_base;			/* Start of framebuffer memory	*/ -void *lcd_console_address;	/* Start of console buffer	*/ - -int lcd_line_length; -int lcd_color_fg; -int lcd_color_bg; - -short console_col; -short console_row; - -vidinfo_t panel_info; -  static int mxcfb_map_video_memory(struct fb_info *fbi);  static int mxcfb_unmap_video_memory(struct fb_info *fbi); -void lcd_initcolregs(void) -{ -} - -void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue) -{ -} - -void lcd_disable(void) -{ -} - -void lcd_panel_disable(void) -{ -} +/* graphics setup */ +static GraphicDevice panel; +struct fb_videomode *gmode;  void fb_videomode_to_var(struct fb_var_screeninfo *var,  			 const struct fb_videomode *mode) @@ -440,8 +413,8 @@ static int mxcfb_map_video_memory(struct fb_info *fbi)  				    fbi->fix.line_length;  	} -	fbi->screen_base = (char *)lcd_base; -	fbi->fix.smem_start = (unsigned long)lcd_base; +	fbi->screen_base = (char *)malloc(fbi->fix.smem_len); +	fbi->fix.smem_start = (unsigned long)fbi->screen_base;  	if (fbi->screen_base == 0) {  		puts("Unable to allocate framebuffer memory\n");  		fbi->fix.smem_len = 0; @@ -561,12 +534,12 @@ static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode)  	mxcfb_info[mxcfbi->ipu_di] = fbi;  	/* Need dummy values until real panel is configured */ -	fbi->var.xres = 640; -	fbi->var.yres = 480; -	fbi->var.bits_per_pixel = 16;  	mxcfbi->ipu_di_pix_fmt = interface_pix_fmt;  	fb_videomode_to_var(&fbi->var, mode); +	fbi->var.bits_per_pixel = 16; +	fbi->fix.line_length = fbi->var.xres * (fbi->var.bits_per_pixel / 8); +	fbi->fix.smem_len = fbi->var.yres_virtual * fbi->fix.line_length;  	mxcfb_check_var(&fbi->var, fbi); @@ -581,19 +554,16 @@ static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode)  	mxcfb_set_par(fbi); -	/* Setting panel_info for lcd */ -	panel_info.cmap = NULL; -	panel_info.vl_col = fbi->var.xres; -	panel_info.vl_row = fbi->var.yres; -	panel_info.vl_bpix = LCD_BPP; +	panel.winSizeX = mode->xres; +	panel.winSizeY = mode->yres; +	panel.plnSizeX = mode->xres; +	panel.plnSizeY = mode->yres; -	lcd_line_length = (panel_info.vl_col * NBITS(panel_info.vl_bpix)) / 8; +	panel.frameAdrs = (u32)fbi->screen_base; +	panel.memSize = fbi->screen_size; -	debug("MXC IPUV3 configured\n" -		"XRES = %d YRES = %d BitsXpixel = %d\n", -		panel_info.vl_col, -		panel_info.vl_row, -		panel_info.vl_bpix); +	panel.gdfBytesPP = 2; +	panel.gdfIndex = GDF_16BIT_565RGB;  	ipu_dump_registers(); @@ -603,29 +573,7 @@ err0:  	return ret;  } -int overwrite_console(void) -{ -	/* Keep stdout / stderr on serial, our LCD is for splashscreen only */ -	return 1; -} - -void lcd_ctrl_init(void *lcdbase) -{ -	u32 mem_len = panel_info.vl_col * -		panel_info.vl_row * -		NBITS(panel_info.vl_bpix) / 8; - -	/* -	 * We rely on lcdbase being a physical address, i.e., either MMU off, -	 * or 1-to-1 mapping. Might want to add some virt2phys here. -	 */ -	if (!lcdbase) -		return; - -	memset(lcdbase, 0, mem_len); -} - -int mx51_fb_init(struct fb_videomode *mode) +void *video_hw_init(void)  {  	int ret; @@ -633,10 +581,24 @@ int mx51_fb_init(struct fb_videomode *mode)  	if (ret)  		puts("Error initializing IPU\n"); -	lcd_base += 56; +	ret = mxcfb_probe(IPU_PIX_FMT_RGB666, gmode); +	debug("Framebuffer at 0x%x\n", (unsigned int)panel.frameAdrs); -	debug("Framebuffer at 0x%x\n", (unsigned int)lcd_base); -	ret = mxcfb_probe(IPU_PIX_FMT_RGB666, mode); +	return (void *)&panel; +} -	return ret; +void video_set_lut(unsigned int index, /* color number */ +			unsigned char r,    /* red */ +			unsigned char g,    /* green */ +			unsigned char b     /* blue */ +			) +{ +	return; +} + +int mx51_fb_init(struct fb_videomode *mode) +{ +	gmode = mode; + +	return 0;  } |