⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c.svn-base

📁 u-boot for S3c2443 processor
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
	 */	lchcr_hpc_tmp =		(panel_info.vl_col *		 (panel_info.vl_tft ? 8 :			(((2 - panel_info.vl_lbw) << /* 4 bit=2, 8-bit = 1 */			 /* use << to mult by: single scan = 1, dual scan = 2 */			  panel_info.vl_splt) *			 (panel_info.vl_bpix | 1)))) >> 3; /* 2/4 BPP = 1, 8/16 BPP = 3 */	lcdp->lcd_lchcr = LCHCR_BO |			  LCDBIT (LCHCR_AT_BIT, 4) |			  LCDBIT (LCHCR_HPC_BIT, lchcr_hpc_tmp) |			  panel_info.vl_wbl;	lcdp->lcd_lcvcr = LCDBIT (LCVCR_VPW_BIT, panel_info.vl_vpw) |			  LCDBIT (LCVCR_LCD_AC_BIT, panel_info.vl_lcdac) |			  LCDBIT (LCVCR_VPC_BIT, panel_info.vl_row) |			  panel_info.vl_wbf;}/*----------------------------------------------------------------------*/#ifdef	NOT_USED_SO_FARstatic voidlcd_getcolreg (ushort regno, ushort *red, ushort *green, ushort *blue){	volatile immap_t *immr = (immap_t *) CFG_IMMR;	volatile cpm8xx_t *cp = &(immr->im_cpm);	unsigned short colreg, *cmap_ptr;	cmap_ptr = (unsigned short *)&cp->lcd_cmap[regno * 2];	colreg = *cmap_ptr;#ifdef	CFG_INVERT_COLORS	colreg ^= 0x0FFF;#endif	*red   = (colreg >> 8) & 0x0F;	*green = (colreg >> 4) & 0x0F;	*blue  =  colreg       & 0x0F;}#endif	/* NOT_USED_SO_FAR *//*----------------------------------------------------------------------*/#if LCD_BPP == LCD_COLOR8static voidlcd_setcolreg (ushort regno, ushort red, ushort green, ushort blue){	volatile immap_t *immr = (immap_t *) CFG_IMMR;	volatile cpm8xx_t *cp = &(immr->im_cpm);	unsigned short colreg, *cmap_ptr;	cmap_ptr = (unsigned short *)&cp->lcd_cmap[regno * 2];	colreg = ((red   & 0x0F) << 8) |		 ((green & 0x0F) << 4) |		  (blue  & 0x0F) ;#ifdef	CFG_INVERT_COLORS	colreg ^= 0x0FFF;#endif	*cmap_ptr = colreg;	debug ("setcolreg: reg %2d @ %p: R=%02X G=%02X B=%02X => %02X%02X\n",		regno, &(cp->lcd_cmap[regno * 2]),		red, green, blue,		cp->lcd_cmap[ regno * 2 ], cp->lcd_cmap[(regno * 2) + 1]);}#endif	/* LCD_COLOR8 *//*----------------------------------------------------------------------*/#if LCD_BPP == LCD_MONOCHROMEstaticvoid lcd_initcolregs (void){	volatile immap_t *immr = (immap_t *) CFG_IMMR;	volatile cpm8xx_t *cp = &(immr->im_cpm);	ushort regno;	for (regno = 0; regno < 16; regno++) {		cp->lcd_cmap[regno * 2] = 0;		cp->lcd_cmap[(regno * 2) + 1] = regno & 0x0f;	}}#endif/*----------------------------------------------------------------------*/static void lcd_setfgcolor (int color){	lcd_color_fg = color & 0x0F;}/*----------------------------------------------------------------------*/static void lcd_setbgcolor (int color){	lcd_color_bg = color & 0x0F;}/*----------------------------------------------------------------------*/#ifdef	NOT_USED_SO_FARstatic int lcd_getfgcolor (void){	return lcd_color_fg;}#endif	/* NOT_USED_SO_FAR *//*----------------------------------------------------------------------*/static int lcd_getbgcolor (void){	return lcd_color_bg;}/*----------------------------------------------------------------------*/static void lcd_enable (void){	volatile immap_t *immr = (immap_t *) CFG_IMMR;	volatile lcd823_t *lcdp = &immr->im_lcd;	/* Enable the LCD panel */#ifndef CONFIG_RBC823	immr->im_siu_conf.sc_sdcr |= (1 << (31 - 25));		/* LAM = 1 */#endif	lcdp->lcd_lccr |= LCCR_PON;#ifdef CONFIG_V37	/* Turn on display backlight */	immr->im_cpm.cp_pbpar |= 0x00008000;	immr->im_cpm.cp_pbdir |= 0x00008000;#elif defined(CONFIG_RBC823)	/* Turn on display backlight */	immr->im_cpm.cp_pbdat |= 0x00004000;#endif#if defined(CONFIG_LWMON)    {	uchar c = pic_read (0x60);#if defined(CONFIG_LCD) && defined(CONFIG_LWMON) && (CONFIG_POST & CFG_POST_SYSMON)	/* Enable LCD later in sysmon test, only if temperature is OK */#else	c |= 0x07;	/* Power on CCFL, Enable CCFL, Chip Enable LCD */#endif	pic_write (0x60, c);    }#endif /* CONFIG_LWMON */#if defined(CONFIG_R360MPI)    {	extern void r360_i2c_lcd_write (uchar data0, uchar data1);	unsigned long bgi, ctr;	char *p;	if ((p = getenv("lcdbgi")) != NULL) {		bgi = simple_strtoul (p, 0, 10) & 0xFFF;	} else {		bgi = 0xFFF;	}	if ((p = getenv("lcdctr")) != NULL) {		ctr = simple_strtoul (p, 0, 10) & 0xFFF;	} else {		ctr=0x7FF;	}	r360_i2c_lcd_write(0x10, 0x01);	r360_i2c_lcd_write(0x20, 0x01);	r360_i2c_lcd_write(0x30 | ((bgi>>8) & 0xF), bgi & 0xFF);	r360_i2c_lcd_write(0x40 | ((ctr>>8) & 0xF), ctr & 0xFF);    }#endif /* CONFIG_R360MPI */#ifdef CONFIG_RBC823	udelay(200000); /* wait 200ms */	/* Turn VEE_ON first */	immr->im_cpm.cp_pbdat |= 0x00000001;	udelay(200000); /* wait 200ms */	/* Now turn on LCD_ON */	immr->im_cpm.cp_pbdat |= 0x00001000;#endif#ifdef CONFIG_RRVISION	debug ("PC4->Output(1): enable LVDS\n");	debug ("PC5->Output(0): disable PAL clock\n");	immr->im_ioport.iop_pddir |=  0x1000;	immr->im_ioport.iop_pcpar &= ~(0x0C00);	immr->im_ioport.iop_pcdir |=   0x0C00 ;	immr->im_ioport.iop_pcdat |=   0x0800 ;	immr->im_ioport.iop_pcdat &= ~(0x0400);	debug ("PDPAR=0x%04X PDDIR=0x%04X PDDAT=0x%04X\n",	       immr->im_ioport.iop_pdpar,	       immr->im_ioport.iop_pddir,	       immr->im_ioport.iop_pddat);	debug ("PCPAR=0x%04X PCDIR=0x%04X PCDAT=0x%04X\n",	       immr->im_ioport.iop_pcpar,	       immr->im_ioport.iop_pcdir,	       immr->im_ioport.iop_pcdat);#endif}/*----------------------------------------------------------------------*/#if defined (CONFIG_RBC823)void lcd_disable (void){	volatile immap_t *immr = (immap_t *) CFG_IMMR;	volatile lcd823_t *lcdp = &immr->im_lcd;#if defined(CONFIG_LWMON)    {	uchar c = pic_read (0x60);	c &= ~0x07;	/* Power off CCFL, Disable CCFL, Chip Disable LCD */	pic_write (0x60, c);    }#elif defined(CONFIG_R360MPI)    {	extern void r360_i2c_lcd_write (uchar data0, uchar data1);	r360_i2c_lcd_write(0x10, 0x00);	r360_i2c_lcd_write(0x20, 0x00);	r360_i2c_lcd_write(0x30, 0x00);	r360_i2c_lcd_write(0x40, 0x00);    }#endif /* CONFIG_LWMON */	/* Disable the LCD panel */	lcdp->lcd_lccr &= ~LCCR_PON;#ifdef CONFIG_RBC823	/* Turn off display backlight, VEE and LCD_ON */	immr->im_cpm.cp_pbdat &= ~0x00005001;#else	immr->im_siu_conf.sc_sdcr &= ~(1 << (31 - 25));	/* LAM = 0 */#endif /* CONFIG_RBC823 */}#endif	/* NOT_USED_SO_FAR || CONFIG_RBC823 *//************************************************************************//* ** Chipset depending Bitmap / Logo stuff...				*//************************************************************************/#ifdef CONFIG_LCD_LOGOstatic void bitmap_plot (int x, int y){	volatile immap_t *immr = (immap_t *) CFG_IMMR;	volatile cpm8xx_t *cp = &(immr->im_cpm);	ushort *cmap;	ushort i;	uchar *bmap;	uchar *fb;	debug ("Logo: width %d  height %d  colors %d  cmap %d\n",		BMP_LOGO_WIDTH, BMP_LOGO_HEIGHT, BMP_LOGO_COLORS,		sizeof(bmp_logo_palette)/(sizeof(ushort))	);	/* Leave room for default color map */	cmap = (ushort *)&(cp->lcd_cmap[BMP_LOGO_OFFSET*sizeof(ushort)]);	WATCHDOG_RESET();	/* Set color map */	for (i=0; i<(sizeof(bmp_logo_palette)/(sizeof(ushort))); ++i) {		ushort colreg = bmp_logo_palette[i];#ifdef	CFG_INVERT_COLORS		colreg ^= 0xFFF;#endif		*cmap++ = colreg;	}	bmap = &bmp_logo_bitmap[0];	fb   = (char *)(lcd_base + y * lcd_line_length + x);	WATCHDOG_RESET();	for (i=0; i<BMP_LOGO_HEIGHT; ++i) {		memcpy (fb, bmap, BMP_LOGO_WIDTH);		bmap += BMP_LOGO_WIDTH;		fb   += panel_info.vl_col;	}	WATCHDOG_RESET();}#endif /* CONFIG_LCD_LOGO */#if (CONFIG_COMMANDS & CFG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)/* * Display the BMP file located at address bmp_image. * Only uncompressed */int lcd_display_bitmap(ulong bmp_image, int x, int y){	volatile immap_t *immr = (immap_t *) CFG_IMMR;	volatile cpm8xx_t *cp = &(immr->im_cpm);	ushort *cmap;	ushort i, j;	uchar *fb;	bmp_image_t *bmp=(bmp_image_t *)bmp_image;	uchar *bmap;	ushort padded_line;	unsigned long width, height;	unsigned colors,bpix;	unsigned long compression;	WATCHDOG_RESET();	if (!((bmp->header.signature[0]=='B') &&	      (bmp->header.signature[1]=='M'))) {		printf ("Error: no valid bmp image at %lx\n", bmp_image);		return 1;	}	width = le32_to_cpu (bmp->header.width);	height = le32_to_cpu (bmp->header.height);	colors = 1<<le16_to_cpu (bmp->header.bit_count);	compression = le32_to_cpu (bmp->header.compression);	bpix = NBITS(panel_info.vl_bpix);	if ((bpix != 1) && (bpix != 8)) {		printf ("Error: %d bit/pixel mode not supported by U-Boot\n",			bpix);		return 1;	}	if (bpix != le16_to_cpu(bmp->header.bit_count)) {		printf ("Error: %d bit/pixel mode, but BMP has %d bit/pixel\n",			bpix,			le16_to_cpu(bmp->header.bit_count));		return 1;	}	if (compression!=BMP_BI_RGB) {		printf ("Error: compression type %ld not supported\n",			compression);		return 1;	}	debug ("Display-bmp: %d x %d  with %d colors\n",	       width, height, colors);	if (bpix==8) {		/* Fill the entire color map */		cmap = (ushort *)&(cp->lcd_cmap[255*sizeof(ushort)]);		/* Set color map */		for (i = 0; i < colors; ++i) {			bmp_color_table_entry_t cte = bmp->color_table[i];			ushort colreg =				((cte.red>>4)   << 8) |				((cte.green>>4) << 4) |				(cte.blue>>4) ;#ifdef	CFG_INVERT_COLORS			colreg ^= 0xFFF;#endif			*cmap-- = colreg;		}		WATCHDOG_RESET();	}	padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);	if ((x + width)>panel_info.vl_col)		width = panel_info.vl_col - x;	if ((y + height)>panel_info.vl_row)		height = panel_info.vl_row - y;	bmap = (uchar *)bmp + le32_to_cpu (bmp->header.data_offset);	fb   = (uchar *) (lcd_base +		 (y + height - 1) * lcd_line_length + x);	for (i = 0; i < height; ++i) {		WATCHDOG_RESET();		for (j = 0; j < width ; j++)			*(fb++)=255-*(bmap++);		bmap += (width - padded_line);		fb   -= (width + lcd_line_length);	}	return (0);}#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN *//*----------------------------------------------------------------------*/static void *lcd_logo (void){#ifdef LCD_INFO	DECLARE_GLOBAL_DATA_PTR;	char info[80];	char temp[32];#endif /* LCD_INFO */#ifdef CONFIG_SPLASH_SCREEN	char *s;	ulong addr;	if ((s = getenv("splashimage")) != NULL) {		addr = simple_strtoul(s, NULL, 16);		if (lcd_display_bitmap (addr, 0, 0) == 0) {			return ((void *)lcd_base);		}	}#endif	/* CONFIG_SPLASH_SCREEN */#ifdef CONFIG_LCD_LOGO	bitmap_plot (0, 0);#endif /* CONFIG_LCD_LOGO */#ifdef LCD_INFO	sprintf (info, "%s (%s - %s) ", U_BOOT_VERSION, __DATE__, __TIME__);	lcd_drawchars (LCD_INFO_X, LCD_INFO_Y, info, strlen(info));	sprintf (info, "(C) 2003 DENX Software Engineering");	lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT,					info, strlen(info));	sprintf (info, "    Wolfgang DENK, wd@denx.de");	lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 2,					info, strlen(info));#ifdef LCD_INFO_BELOW_LOGO	sprintf (info, "MPC823 CPU at %s MHz",		strmhz(temp, gd->cpu_clk));	lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 3,					info, strlen(info));	sprintf (info, "  %ld MB RAM, %ld MB Flash",		gd->ram_size >> 20,		gd->bd->bi_flashsize >> 20 );	lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 4,					info, strlen(info));#else	/* leave one blank line */	sprintf (info, "MPC823 CPU at %s MHz, %ld MB RAM, %ld MB Flash",		strmhz(temp, gd->cpu_clk),		gd->ram_size >> 20,		gd->bd->bi_flashsize >> 20 );	lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 4,					info, strlen(info));#endif /* LCD_INFO_BELOW_LOGO */#endif /* LCD_INFO */#if defined(CONFIG_LCD_LOGO) && !defined(LCD_INFO_BELOW_LOGO)	return ((void *)((ulong)lcd_base + BMP_LOGO_HEIGHT * lcd_line_length));#else	return ((void *)lcd_base);#endif	/* CONFIG_LCD_LOGO */}/************************************************************************//************************************************************************/#endif /* CONFIG_LCD */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -