mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-27 15:12:21 +00:00
604c7d4a5a
Sometimes, for example if the display is mounted in portrait mode or even if it is mounted landscape but rotated by 180 degrees, we need to rotate our content of the display respectively the framebuffer, so that user can read the messages which are printed out. For this we introduce the feature called "CONFIG_LCD_ROTATION", this may be defined in the board-configuration if needed. After this the lcd_console will be initialized with a given rotation from "vl_rot" out of "vidinfo_t" which is provided by the board specific code. If CONFIG_LCD_ROTATION is not defined, the console will be initialized with 0 degrees rotation. Signed-off-by: Hannes Petermaier <hannes.petermaier@br-automation.com> Signed-off-by: Hannes Petermaier <oe5hpm@oevsv.at> Acked-by: Nikita Kiryanov <nikita@compulab.co.il> [agust: fixed 'struct vidinfo' has no member named 'vl_rot' errors] Signed-off-by: Anatolij Gustschin <agust@denx.de>
212 lines
5.2 KiB
C
212 lines
5.2 KiB
C
/*
|
|
* MPC823 and PXA LCD Controller
|
|
*
|
|
* Modeled after video interface by Paolo Scaffardi
|
|
*
|
|
*
|
|
* (C) Copyright 2001
|
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#ifndef _LCD_H_
|
|
#define _LCD_H_
|
|
#include <lcd_console.h>
|
|
#if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
|
|
#include <bmp_layout.h>
|
|
#include <asm/byteorder.h>
|
|
#endif
|
|
|
|
extern char lcd_is_enabled;
|
|
extern int lcd_line_length;
|
|
extern struct vidinfo panel_info;
|
|
|
|
void lcd_ctrl_init(void *lcdbase);
|
|
void lcd_enable(void);
|
|
void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue);
|
|
|
|
struct bmp_image *gunzip_bmp(unsigned long addr, unsigned long *lenp,
|
|
void **alloc_addr);
|
|
int bmp_display(ulong addr, int x, int y);
|
|
|
|
/**
|
|
* Set whether we need to flush the dcache when changing the LCD image. This
|
|
* defaults to off.
|
|
*
|
|
* @param flush non-zero to flush cache after update, 0 to skip
|
|
*/
|
|
void lcd_set_flush_dcache(int flush);
|
|
|
|
#if defined CONFIG_MPC823
|
|
#include <mpc823_lcd.h>
|
|
#elif defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
|
|
defined CONFIG_CPU_MONAHANS
|
|
#include <pxa_lcd.h>
|
|
#elif defined(CONFIG_ATMEL_LCD) || defined(CONFIG_ATMEL_HLCD)
|
|
#include <atmel_lcd.h>
|
|
#elif defined(CONFIG_EXYNOS_FB)
|
|
#include <exynos_lcd.h>
|
|
#else
|
|
typedef struct vidinfo {
|
|
ushort vl_col; /* Number of columns (i.e. 160) */
|
|
ushort vl_row; /* Number of rows (i.e. 100) */
|
|
ushort vl_rot; /* Rotation of Display (0, 1, 2, 3) */
|
|
u_char vl_bpix; /* Bits per pixel, 0 = 1 */
|
|
ushort *cmap; /* Pointer to the colormap */
|
|
void *priv; /* Pointer to driver-specific data */
|
|
} vidinfo_t;
|
|
|
|
static __maybe_unused ushort *configuration_get_cmap(void)
|
|
{
|
|
return panel_info.cmap;
|
|
}
|
|
#endif
|
|
|
|
ushort *configuration_get_cmap(void);
|
|
|
|
extern vidinfo_t panel_info;
|
|
|
|
void lcd_putc(const char c);
|
|
void lcd_puts(const char *s);
|
|
void lcd_printf(const char *fmt, ...);
|
|
void lcd_clear(void);
|
|
int lcd_display_bitmap(ulong bmp_image, int x, int y);
|
|
|
|
/**
|
|
* Get the width of the LCD in pixels
|
|
*
|
|
* @return width of LCD in pixels
|
|
*/
|
|
int lcd_get_pixel_width(void);
|
|
|
|
/**
|
|
* Get the height of the LCD in pixels
|
|
*
|
|
* @return height of LCD in pixels
|
|
*/
|
|
int lcd_get_pixel_height(void);
|
|
|
|
/**
|
|
* Get the number of text lines/rows on the LCD
|
|
*
|
|
* @return number of rows
|
|
*/
|
|
int lcd_get_screen_rows(void);
|
|
|
|
/**
|
|
* Get the number of text columns on the LCD
|
|
*
|
|
* @return number of columns
|
|
*/
|
|
int lcd_get_screen_columns(void);
|
|
|
|
/**
|
|
* Get the background color of the LCD
|
|
*
|
|
* @return background color value
|
|
*/
|
|
int lcd_getbgcolor(void);
|
|
|
|
/**
|
|
* Get the foreground color of the LCD
|
|
*
|
|
* @return foreground color value
|
|
*/
|
|
int lcd_getfgcolor(void);
|
|
|
|
/**
|
|
* Set the position of the text cursor
|
|
*
|
|
* @param col Column to place cursor (0 = left side)
|
|
* @param row Row to place cursor (0 = top line)
|
|
*/
|
|
void lcd_position_cursor(unsigned col, unsigned row);
|
|
|
|
/* Allow boards to customize the information displayed */
|
|
void lcd_show_board_info(void);
|
|
|
|
/* Return the size of the LCD frame buffer, and the line length */
|
|
int lcd_get_size(int *line_length);
|
|
|
|
/* Update the LCD / flush the cache */
|
|
void lcd_sync(void);
|
|
|
|
/*
|
|
* Information about displays we are using. This is for configuring
|
|
* the LCD controller and memory allocation. Someone has to know what
|
|
* is connected, as we can't autodetect anything.
|
|
*/
|
|
#define CONFIG_SYS_HIGH 0 /* Pins are active high */
|
|
#define CONFIG_SYS_LOW 1 /* Pins are active low */
|
|
|
|
#define LCD_MONOCHROME 0
|
|
#define LCD_COLOR2 1
|
|
#define LCD_COLOR4 2
|
|
#define LCD_COLOR8 3
|
|
#define LCD_COLOR16 4
|
|
#define LCD_COLOR32 5
|
|
|
|
#if defined(CONFIG_LCD_INFO_BELOW_LOGO)
|
|
#define LCD_INFO_X 0
|
|
#define LCD_INFO_Y (BMP_LOGO_HEIGHT + VIDEO_FONT_HEIGHT)
|
|
#elif defined(CONFIG_LCD_LOGO)
|
|
#define LCD_INFO_X (BMP_LOGO_WIDTH + 4 * VIDEO_FONT_WIDTH)
|
|
#define LCD_INFO_Y VIDEO_FONT_HEIGHT
|
|
#else
|
|
#define LCD_INFO_X VIDEO_FONT_WIDTH
|
|
#define LCD_INFO_Y VIDEO_FONT_HEIGHT
|
|
#endif
|
|
|
|
/* Default to 8bpp if bit depth not specified */
|
|
#ifndef LCD_BPP
|
|
#define LCD_BPP LCD_COLOR8
|
|
#endif
|
|
|
|
#ifndef LCD_DF
|
|
#define LCD_DF 1
|
|
#endif
|
|
|
|
/* Calculate nr. of bits per pixel and nr. of colors */
|
|
#define NBITS(bit_code) (1 << (bit_code))
|
|
#define NCOLORS(bit_code) (1 << NBITS(bit_code))
|
|
|
|
#if LCD_BPP == LCD_COLOR8
|
|
# define CONSOLE_COLOR_BLACK 0
|
|
# define CONSOLE_COLOR_RED 1
|
|
# define CONSOLE_COLOR_GREEN 2
|
|
# define CONSOLE_COLOR_YELLOW 3
|
|
# define CONSOLE_COLOR_BLUE 4
|
|
# define CONSOLE_COLOR_MAGENTA 5
|
|
# define CONSOLE_COLOR_CYAN 6
|
|
# define CONSOLE_COLOR_GREY 14
|
|
# define CONSOLE_COLOR_WHITE 15 /* Must remain last / highest */
|
|
#elif LCD_BPP == LCD_COLOR32
|
|
#define CONSOLE_COLOR_RED 0x00ff0000
|
|
#define CONSOLE_COLOR_GREEN 0x0000ff00
|
|
#define CONSOLE_COLOR_YELLOW 0x00ffff00
|
|
#define CONSOLE_COLOR_BLUE 0x000000ff
|
|
#define CONSOLE_COLOR_MAGENTA 0x00ff00ff
|
|
#define CONSOLE_COLOR_CYAN 0x0000ffff
|
|
#define CONSOLE_COLOR_GREY 0x00aaaaaa
|
|
#define CONSOLE_COLOR_BLACK 0x00000000
|
|
#define CONSOLE_COLOR_WHITE 0x00ffffff /* Must remain last / highest */
|
|
#define NBYTES(bit_code) (NBITS(bit_code) >> 3)
|
|
#else /* 16bpp color definitions */
|
|
#define CONSOLE_COLOR_BLACK 0x0000
|
|
#define CONSOLE_COLOR_WHITE 0xffff /* Must remain last / highest */
|
|
#endif /* color definitions */
|
|
|
|
#if LCD_BPP == LCD_COLOR16
|
|
#define fbptr_t ushort
|
|
#elif LCD_BPP == LCD_COLOR32
|
|
#define fbptr_t u32
|
|
#else
|
|
#define fbptr_t uchar
|
|
#endif
|
|
|
|
#ifndef PAGE_SIZE
|
|
#define PAGE_SIZE 4096
|
|
#endif
|
|
|
|
#endif /* _LCD_H_ */
|