Skip to content
Snippets Groups Projects
lcd.c 27 KiB
Newer Older
  • Learn to ignore specific revisions
  • 					FB_PUT_BYTE(fb, bmap);
    
    				} else {
    					*(uint16_t *)fb = cmap_base[*(bmap++)];
    					fb += sizeof(uint16_t) / sizeof(*fb);
    				}
    			}
    
    			bmap += (padded_width - width);
    
    			fb   -= (byte_width + lcd_line_length);
    
    Mark Jackson's avatar
    Mark Jackson committed
    		}
    		break;
    
    #if defined(CONFIG_BMP_16BPP)
    	case 16:
    		for (i = 0; i < height; ++i) {
    			WATCHDOG_RESET();
    
    			for (j = 0; j < width; j++)
    				fb_put_word(&fb, &bmap);
    
    
    			bmap += (padded_width - width) * 2;
    
    Mark Jackson's avatar
    Mark Jackson committed
    			fb   -= (width * 2 + lcd_line_length);
    		}
    		break;
    #endif /* CONFIG_BMP_16BPP */
    
    
    #if defined(CONFIG_BMP_32BPP)
    	case 32:
    		for (i = 0; i < height; ++i) {
    			for (j = 0; j < width; j++) {
    				*(fb++) = *(bmap++);
    				*(fb++) = *(bmap++);
    				*(fb++) = *(bmap++);
    				*(fb++) = *(bmap++);
    			}
    			fb  -= (lcd_line_length + width * (bpix / 8));
    		}
    		break;
    #endif /* CONFIG_BMP_32BPP */
    
    Mark Jackson's avatar
    Mark Jackson committed
    	default:
    		break;
    	};
    
    #ifdef CONFIG_SPLASH_SCREEN_PREPARE
    static inline int splash_screen_prepare(void)
    {
    	return board_splash_screen_prepare();
    }
    #else
    static inline int splash_screen_prepare(void)
    {
    	return 0;
    }
    #endif
    
    
    static void *lcd_logo(void)
    
    {
    #ifdef CONFIG_SPLASH_SCREEN
    	char *s;
    	ulong addr;
    	static int do_splash = 1;
    
    	if (do_splash && (s = getenv("splashimage")) != NULL) {
    
    		if (splash_screen_prepare())
    			return (void *)gd->fb_base;
    
    
    		addr = simple_strtoul (s, NULL, 16);
    #ifdef CONFIG_SPLASH_SCREEN_ALIGN
    
    		s = getenv("splashpos");
    		if (s != NULL) {
    
    			if (s[0] == 'm')
    				x = BMP_ALIGN_CENTER;
    			else
    
    				x = simple_strtol(s, NULL, 0);
    
    			s = strchr(s + 1, ',');
    			if (s != NULL) {
    
    				if (s[1] == 'm')
    					y = BMP_ALIGN_CENTER;
    				else
    					y = simple_strtol (s + 1, NULL, 0);
    			}
    		}
    #endif /* CONFIG_SPLASH_SCREEN_ALIGN */
    
    
    		if (bmp_display(addr, x, y) == 0)
    
    			return (void *)lcd_base;
    
    #ifdef CONFIG_LCD_INFO
    	console_col = LCD_INFO_X / VIDEO_FONT_WIDTH;
    	console_row = LCD_INFO_Y / VIDEO_FONT_HEIGHT;
    	lcd_show_board_info();
    #endif /* CONFIG_LCD_INFO */
    
    Stelian Pop's avatar
    Stelian Pop committed
    
    
    #if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO)
    
    	return (void *)((ulong)lcd_base + BMP_LOGO_HEIGHT * lcd_line_length);
    
    	return (void *)lcd_base;
    
    #endif /* CONFIG_LCD_LOGO && !CONFIG_LCD_INFO_BELOW_LOGO */
    
    #ifdef CONFIG_SPLASHIMAGE_GUARD
    static int on_splashimage(const char *name, const char *value, enum env_op op,
    	int flags)
    {
    	ulong addr;
    	int aligned;
    
    	if (op == env_op_delete)
    		return 0;
    
    	addr = simple_strtoul(value, NULL, 16);
    	/* See README.displaying-bmps */
    	aligned = (addr % 4 == 2);
    	if (!aligned) {
    		printf("Invalid splashimage value. Value must be 16 bit aligned, but not 32 bit aligned\n");
    		return -1;
    	}
    
    	return 0;
    }
    
    U_BOOT_ENV_CALLBACK(splashimage, on_splashimage);
    #endif
    
    
    void lcd_position_cursor(unsigned col, unsigned row)
    {
    	console_col = min(col, CONSOLE_COLS - 1);
    	console_row = min(row, CONSOLE_ROWS - 1);
    }
    
    int lcd_get_pixel_width(void)
    {
    	return panel_info.vl_col;
    }
    
    int lcd_get_pixel_height(void)
    {
    	return panel_info.vl_row;
    }
    
    int lcd_get_screen_rows(void)
    {
    	return CONSOLE_ROWS;
    }
    
    int lcd_get_screen_columns(void)
    {
    	return CONSOLE_COLS;
    }
    
    
    /************************************************************************/
    /************************************************************************/