@ -27,7 +27,6 @@
* MA 02111 - 1307 USA
* MA 02111 - 1307 USA
*/
*/
/* #define DEBUG */
# include <common.h>
# include <common.h>
# include <asm/errno.h>
# include <asm/errno.h>
# include <linux/string.h>
# include <linux/string.h>
@ -35,43 +34,17 @@
# include <linux/fb.h>
# include <linux/fb.h>
# include <asm/io.h>
# include <asm/io.h>
# include <malloc.h>
# include <malloc.h>
# include <lcd .h>
# include <video_fb .h>
# include "videomodes.h"
# include "videomodes.h"
# include "ipu.h"
# include "ipu.h"
# include "mxcfb.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_map_video_memory ( struct fb_info * fbi ) ;
static int mxcfb_unmap_video_memory ( struct fb_info * fbi ) ;
static int mxcfb_unmap_video_memory ( struct fb_info * fbi ) ;
void lcd_initcolregs ( void )
/* graphics setup */
{
static GraphicDevice panel ;
}
struct fb_videomode * gmode ;
void lcd_setcolreg ( ushort regno , ushort red , ushort green , ushort blue )
{
}
void lcd_disable ( void )
{
}
void lcd_panel_disable ( void )
{
}
void fb_videomode_to_var ( struct fb_var_screeninfo * var ,
void fb_videomode_to_var ( struct fb_var_screeninfo * var ,
const struct fb_videomode * mode )
const struct fb_videomode * mode )
@ -440,8 +413,8 @@ static int mxcfb_map_video_memory(struct fb_info *fbi)
fbi - > fix . line_length ;
fbi - > fix . line_length ;
}
}
fbi - > screen_base = ( char * ) lcd_base ;
fbi - > screen_base = ( char * ) malloc ( fbi - > fix . smem_len ) ;
fbi - > fix . smem_start = ( unsigned long ) lcd _base;
fbi - > fix . smem_start = ( unsigned long ) fbi - > screen _base;
if ( fbi - > screen_base = = 0 ) {
if ( fbi - > screen_base = = 0 ) {
puts ( " Unable to allocate framebuffer memory \n " ) ;
puts ( " Unable to allocate framebuffer memory \n " ) ;
fbi - > fix . smem_len = 0 ;
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 ;
mxcfb_info [ mxcfbi - > ipu_di ] = fbi ;
/* Need dummy values until real panel is configured */
/* 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 ;
mxcfbi - > ipu_di_pix_fmt = interface_pix_fmt ;
fb_videomode_to_var ( & fbi - > var , mode ) ;
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 ) ;
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 ) ;
mxcfb_set_par ( fbi ) ;
/* Setting panel_info for lcd */
panel . winSizeX = mode - > xres ;
panel_info . cmap = NULL ;
panel . winSizeY = mode - > yres ;
panel_info . vl_col = fbi - > var . xres ;
panel . plnSizeX = mode - > xres ;
panel_info . vl_row = fbi - > var . yres ;
panel . plnSizeY = mode - > yres ;
panel_info . vl_bpix = LCD_BPP ;
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 "
panel . gdfBytesPP = 2 ;
" XRES = %d YRES = %d BitsXpixel = %d \n " ,
panel . gdfIndex = GDF_16BIT_565RGB ;
panel_info . vl_col ,
panel_info . vl_row ,
panel_info . vl_bpix ) ;
ipu_dump_registers ( ) ;
ipu_dump_registers ( ) ;
@ -603,29 +573,7 @@ err0:
return ret ;
return ret ;
}
}
int overwrite_console ( void )
void * video_hw_init ( 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 )
{
{
int ret ;
int ret ;
@ -633,10 +581,24 @@ int mx51_fb_init(struct fb_videomode *mode)
if ( ret )
if ( ret )
puts ( " Error initializing IPU \n " ) ;
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 ) ;
return ( void * ) & panel ;
ret = mxcfb_probe ( IPU_PIX_FMT_RGB666 , mode ) ;
}
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 ;
}
}