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 a66981c27c9..eafacef5306 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; } |