|
@@ -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;
|
|
|
}
|