lcd.h 5.53 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0+ */
wdenk's avatar
wdenk committed
2
/*
3
 * MPC823 and PXA LCD Controller
wdenk's avatar
wdenk committed
4
5
6
7
8
9
10
11
12
13
 *
 * Modeled after video interface by Paolo Scaffardi
 *
 *
 * (C) Copyright 2001
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 */

#ifndef _LCD_H_
#define _LCD_H_
14
#include <lcd_console.h>
Nikita Kiryanov's avatar
Nikita Kiryanov committed
15
16
17
18
#if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
#include <bmp_layout.h>
#include <asm/byteorder.h>
#endif
wdenk's avatar
wdenk committed
19

20
21
22
23
24
25
int bmp_display(ulong addr, int x, int y);
struct bmp_image *gunzip_bmp(unsigned long addr, unsigned long *lenp,
			     void **alloc_addr);

#ifndef CONFIG_DM_VIDEO

26
extern char lcd_is_enabled;
27
extern int lcd_line_length;
28
29
extern struct vidinfo panel_info;

30
31
32
void lcd_ctrl_init(void *lcdbase);
void lcd_enable(void);
void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue);
33
ulong lcd_setmem(ulong addr);
34

35
36
37
38
39
40
41
42
/**
 * 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);

43
#if defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
44
	defined CONFIG_CPU_MONAHANS
45
#include <pxa_lcd.h>
46
#elif defined(CONFIG_ATMEL_LCD) || defined(CONFIG_ATMEL_HLCD)
47
#include <atmel_lcd.h>
48
#elif defined(CONFIG_EXYNOS_FB)
49
#include <exynos_lcd.h>
50
51
52
53
#else
typedef struct vidinfo {
	ushort	vl_col;		/* Number of columns (i.e. 160) */
	ushort	vl_row;		/* Number of rows (i.e. 100) */
54
	ushort	vl_rot;		/* Rotation of Display (0, 1, 2, 3) */
55
56
57
58
	u_char	vl_bpix;	/* Bits per pixel, 0 = 1 */
	ushort	*cmap;		/* Pointer to the colormap */
	void	*priv;		/* Pointer to driver-specific data */
} vidinfo_t;
59
60
61
62
63

static __maybe_unused ushort *configuration_get_cmap(void)
{
	return panel_info.cmap;
}
64
#endif
65

66
67
ushort *configuration_get_cmap(void);

68
69
extern vidinfo_t panel_info;

Nikita Kiryanov's avatar
Nikita Kiryanov committed
70
71
72
73
74
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);
wdenk's avatar
wdenk committed
75

76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
 * 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);

104
105
106
107
108
109
110
111
112
113
114
115
116
117
/**
 * 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);

118
119
120
121
122
123
124
125
/**
 * 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);

126
127
/* Allow boards to customize the information displayed */
void lcd_show_board_info(void);
128

129
130
131
/* Return the size of the LCD frame buffer, and the line length */
int lcd_get_size(int *line_length);

Simon Glass's avatar
Simon Glass committed
132
133
134
/* Update the LCD / flush the cache */
void lcd_sync(void);

135
136
137
138
139
/*
 *  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.
 */
140
#define CONFIG_SYS_HIGH	0	/* Pins are active high			*/
141
#define CONFIG_SYS_LOW	1	/* Pins are active low			*/
142
143
144
145
146
147

#define LCD_MONOCHROME	0
#define LCD_COLOR2	1
#define LCD_COLOR4	2
#define LCD_COLOR8	3
#define LCD_COLOR16	4
148
#define LCD_COLOR32	5
Nikita Kiryanov's avatar
Nikita Kiryanov committed
149

wdenk's avatar
wdenk committed
150
#if defined(CONFIG_LCD_INFO_BELOW_LOGO)
Nikita Kiryanov's avatar
Nikita Kiryanov committed
151
152
#define LCD_INFO_X		0
#define LCD_INFO_Y		(BMP_LOGO_HEIGHT + VIDEO_FONT_HEIGHT)
153
#elif defined(CONFIG_LCD_LOGO)
Nikita Kiryanov's avatar
Nikita Kiryanov committed
154
155
#define LCD_INFO_X		(BMP_LOGO_WIDTH + 4 * VIDEO_FONT_WIDTH)
#define LCD_INFO_Y		VIDEO_FONT_HEIGHT
156
#else
Nikita Kiryanov's avatar
Nikita Kiryanov committed
157
158
#define LCD_INFO_X		VIDEO_FONT_WIDTH
#define LCD_INFO_Y		VIDEO_FONT_HEIGHT
159
160
161
162
#endif

/* Default to 8bpp if bit depth not specified */
#ifndef LCD_BPP
Nikita Kiryanov's avatar
Nikita Kiryanov committed
163
#define LCD_BPP			LCD_COLOR8
164
#endif
Nikita Kiryanov's avatar
Nikita Kiryanov committed
165

166
#ifndef LCD_DF
Nikita Kiryanov's avatar
Nikita Kiryanov committed
167
#define LCD_DF			1
168
169
170
171
172
173
#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))

Nikita Kiryanov's avatar
Nikita Kiryanov committed
174
#if LCD_BPP == LCD_COLOR8
175
176
177
178
179
180
181
182
# 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
Nikita Kiryanov's avatar
Nikita Kiryanov committed
183
# define CONSOLE_COLOR_WHITE	15		/* Must remain last / highest */
184
#elif LCD_BPP == LCD_COLOR32
Nikita Kiryanov's avatar
Nikita Kiryanov committed
185
186
187
188
189
190
191
192
193
194
195
#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 */
196
197
198
199
200
201
202
203
204
# define CONSOLE_COLOR_BLACK	0x0000
# define CONSOLE_COLOR_RED	0xF800
# define CONSOLE_COLOR_GREEN	0x07E0
# define CONSOLE_COLOR_YELLOW	0xFFE0
# define CONSOLE_COLOR_BLUE	0x001F
# define CONSOLE_COLOR_MAGENTA	0xF81F
# define CONSOLE_COLOR_CYAN	0x07FF
# define CONSOLE_COLOR_GREY	0xC618
# define CONSOLE_COLOR_WHITE	0xffff		/* Must remain last / highest */
205
206
#endif /* color definitions */

207
208
209
210
211
212
213
214
#if LCD_BPP == LCD_COLOR16
#define fbptr_t ushort
#elif LCD_BPP == LCD_COLOR32
#define fbptr_t u32
#else
#define fbptr_t uchar
#endif

215
#ifndef PAGE_SIZE
Nikita Kiryanov's avatar
Nikita Kiryanov committed
216
#define PAGE_SIZE	4096
217
218
#endif

219
220
#endif /* !CONFIG_DM_VIDEO */

221
#endif	/* _LCD_H_ */