]>
Commit | Line | Data |
---|---|---|
fe8c2806 | 1 | /* |
8655b6f8 | 2 | * MPC823 and PXA LCD Controller |
fe8c2806 WD |
3 | * |
4 | * Modeled after video interface by Paolo Scaffardi | |
5 | * | |
6 | * | |
7 | * (C) Copyright 2001 | |
8 | * Wolfgang Denk, DENX Software Engineering, [email protected]. | |
9 | * | |
10 | * See file CREDITS for list of people who contributed to this | |
11 | * project. | |
12 | * | |
13 | * This program is free software; you can redistribute it and/or | |
14 | * modify it under the terms of the GNU General Public License as | |
15 | * published by the Free Software Foundation; either version 2 of | |
16 | * the License, or (at your option) any later version. | |
17 | * | |
18 | * This program is distributed in the hope that it will be useful, | |
19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
8655b6f8 | 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
fe8c2806 WD |
21 | * GNU General Public License for more details. |
22 | * | |
23 | * You should have received a copy of the GNU General Public License | |
24 | * along with this program; if not, write to the Free Software | |
25 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
26 | * MA 02111-1307 USA | |
27 | */ | |
28 | ||
29 | #ifndef _LCD_H_ | |
30 | #define _LCD_H_ | |
31 | ||
682011ff WD |
32 | extern char lcd_is_enabled; |
33 | ||
8655b6f8 WD |
34 | extern int lcd_line_length; |
35 | extern int lcd_color_fg; | |
36 | extern int lcd_color_bg; | |
37 | ||
38 | /* | |
39 | * Frame buffer memory information | |
40 | */ | |
41 | extern void *lcd_base; /* Start of framebuffer memory */ | |
42 | extern void *lcd_console_address; /* Start of console buffer */ | |
43 | ||
44 | extern short console_col; | |
45 | extern short console_row; | |
46 | ||
47 | #if defined CONFIG_MPC823 | |
48 | /* | |
49 | * LCD controller stucture for MPC823 CPU | |
50 | */ | |
51 | typedef struct vidinfo { | |
52 | ushort vl_col; /* Number of columns (i.e. 640) */ | |
53 | ushort vl_row; /* Number of rows (i.e. 480) */ | |
54 | ushort vl_width; /* Width of display area in millimeters */ | |
55 | ushort vl_height; /* Height of display area in millimeters */ | |
56 | ||
57 | /* LCD configuration register */ | |
58 | u_char vl_clkp; /* Clock polarity */ | |
59 | u_char vl_oep; /* Output Enable polarity */ | |
60 | u_char vl_hsp; /* Horizontal Sync polarity */ | |
61 | u_char vl_vsp; /* Vertical Sync polarity */ | |
62 | u_char vl_dp; /* Data polarity */ | |
63 | u_char vl_bpix; /* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8 */ | |
64 | u_char vl_lbw; /* LCD Bus width, 0 = 4, 1 = 8 */ | |
65 | u_char vl_splt; /* Split display, 0 = single-scan, 1 = dual-scan */ | |
66 | u_char vl_clor; /* Color, 0 = mono, 1 = color */ | |
67 | u_char vl_tft; /* 0 = passive, 1 = TFT */ | |
68 | ||
69 | /* Horizontal control register. Timing from data sheet */ | |
70 | ushort vl_wbl; /* Wait between lines */ | |
71 | ||
72 | /* Vertical control register */ | |
73 | u_char vl_vpw; /* Vertical sync pulse width */ | |
74 | u_char vl_lcdac; /* LCD AC timing */ | |
75 | u_char vl_wbf; /* Wait between frames */ | |
76 | } vidinfo_t; | |
77 | ||
78 | extern vidinfo_t panel_info; | |
79 | ||
80 | #elif defined CONFIG_PXA250 | |
81 | /* | |
82 | * PXA LCD DMA descriptor | |
83 | */ | |
84 | struct pxafb_dma_descriptor { | |
85 | u_long fdadr; /* Frame descriptor address register */ | |
86 | u_long fsadr; /* Frame source address register */ | |
87 | u_long fidr; /* Frame ID register */ | |
88 | u_long ldcmd; /* Command register */ | |
89 | }; | |
90 | ||
91 | /* | |
92 | * PXA LCD info | |
93 | */ | |
94 | struct pxafb_info { | |
95 | ||
96 | /* Misc registers */ | |
97 | u_long reg_lccr3; | |
98 | u_long reg_lccr2; | |
99 | u_long reg_lccr1; | |
100 | u_long reg_lccr0; | |
101 | u_long fdadr0; | |
102 | u_long fdadr1; | |
103 | ||
104 | /* DMA descriptors */ | |
105 | struct pxafb_dma_descriptor * dmadesc_fblow; | |
106 | struct pxafb_dma_descriptor * dmadesc_fbhigh; | |
107 | struct pxafb_dma_descriptor * dmadesc_palette; | |
108 | ||
109 | u_long screen; /* physical address of frame buffer */ | |
110 | u_long palette; /* physical address of palette memory */ | |
111 | u_int palette_size; | |
112 | }; | |
113 | ||
114 | /* | |
115 | * LCD controller stucture for PXA CPU | |
116 | */ | |
117 | typedef struct vidinfo { | |
118 | ushort vl_col; /* Number of columns (i.e. 640) */ | |
119 | ushort vl_row; /* Number of rows (i.e. 480) */ | |
120 | ushort vl_width; /* Width of display area in millimeters */ | |
121 | ushort vl_height; /* Height of display area in millimeters */ | |
122 | ||
123 | /* LCD configuration register */ | |
124 | u_char vl_clkp; /* Clock polarity */ | |
125 | u_char vl_oep; /* Output Enable polarity */ | |
126 | u_char vl_hsp; /* Horizontal Sync polarity */ | |
127 | u_char vl_vsp; /* Vertical Sync polarity */ | |
128 | u_char vl_dp; /* Data polarity */ | |
129 | u_char vl_bpix; /* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16 */ | |
130 | u_char vl_lbw; /* LCD Bus width, 0 = 4, 1 = 8 */ | |
131 | u_char vl_splt; /* Split display, 0 = single-scan, 1 = dual-scan */ | |
132 | u_char vl_clor; /* Color, 0 = mono, 1 = color */ | |
133 | u_char vl_tft; /* 0 = passive, 1 = TFT */ | |
134 | ||
135 | /* Horizontal control register. Timing from data sheet */ | |
136 | ushort vl_hpw; /* Horz sync pulse width */ | |
137 | u_char vl_blw; /* Wait before of line */ | |
138 | u_char vl_elw; /* Wait end of line */ | |
139 | ||
140 | /* Vertical control register. */ | |
141 | u_char vl_vpw; /* Vertical sync pulse width */ | |
142 | u_char vl_bfw; /* Wait before of frame */ | |
143 | u_char vl_efw; /* Wait end of frame */ | |
144 | ||
145 | /* PXA LCD controller params */ | |
146 | struct pxafb_info pxa; | |
147 | } vidinfo_t; | |
148 | ||
149 | extern vidinfo_t panel_info; | |
150 | ||
e8143e72 WD |
151 | #elif defined(CONFIG_MCC200) |
152 | typedef struct vidinfo { | |
153 | ushort vl_col; /* Number of columns (i.e. 160) */ | |
154 | ushort vl_row; /* Number of rows (i.e. 100) */ | |
155 | ||
156 | u_char vl_bpix; /* Bits per pixel, 0 = 1 */ | |
157 | } vidinfo_t; | |
39cf4804 SP |
158 | |
159 | #elif defined(CONFIG_ATMEL_LCD) | |
160 | ||
161 | typedef struct vidinfo { | |
162 | u_long vl_col; /* Number of columns (i.e. 640) */ | |
163 | u_long vl_row; /* Number of rows (i.e. 480) */ | |
164 | u_long vl_clk; /* pixel clock in ps */ | |
165 | ||
166 | /* LCD configuration register */ | |
167 | u_long vl_sync; /* Horizontal / vertical sync */ | |
168 | u_long vl_bpix; /* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16 */ | |
169 | u_long vl_tft; /* 0 = passive, 1 = TFT */ | |
170 | ||
171 | /* Horizontal control register. */ | |
172 | u_long vl_hsync_len; /* Length of horizontal sync */ | |
173 | u_long vl_left_margin; /* Time from sync to picture */ | |
174 | u_long vl_right_margin; /* Time from picture to sync */ | |
175 | ||
176 | /* Vertical control register. */ | |
177 | u_long vl_vsync_len; /* Length of vertical sync */ | |
178 | u_long vl_upper_margin; /* Time from sync to picture */ | |
179 | u_long vl_lower_margin; /* Time from picture to sync */ | |
180 | ||
181 | u_long mmio; /* Memory mapped registers */ | |
182 | } vidinfo_t; | |
183 | ||
184 | extern vidinfo_t panel_info; | |
185 | ||
186 | #endif /* CONFIG_MPC823, CONFIG_PXA250 or CONFIG_MCC200 or CONFIG_ATMEL_LCD */ | |
8655b6f8 | 187 | |
fe8c2806 WD |
188 | /* Video functions */ |
189 | ||
8655b6f8 WD |
190 | #if defined(CONFIG_RBC823) |
191 | void lcd_disable (void); | |
192 | #endif | |
193 | ||
194 | ||
c3f4d17e | 195 | /* int lcd_init (void *lcdbase); */ |
fe8c2806 WD |
196 | void lcd_putc (const char c); |
197 | void lcd_puts (const char *s); | |
198 | void lcd_printf (const char *fmt, ...); | |
199 | ||
8655b6f8 WD |
200 | |
201 | /************************************************************************/ | |
202 | /* ** BITMAP DISPLAY SUPPORT */ | |
203 | /************************************************************************/ | |
639221c7 | 204 | #if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN) |
8655b6f8 WD |
205 | # include <bmp_layout.h> |
206 | # include <asm/byteorder.h> | |
639221c7 | 207 | #endif |
8655b6f8 | 208 | |
8655b6f8 WD |
209 | /* |
210 | * Information about displays we are using. This is for configuring | |
211 | * the LCD controller and memory allocation. Someone has to know what | |
212 | * is connected, as we can't autodetect anything. | |
213 | */ | |
214 | #define CFG_HIGH 0 /* Pins are active high */ | |
215 | #define CFG_LOW 1 /* Pins are active low */ | |
216 | ||
217 | #define LCD_MONOCHROME 0 | |
218 | #define LCD_COLOR2 1 | |
219 | #define LCD_COLOR4 2 | |
220 | #define LCD_COLOR8 3 | |
221 | #define LCD_COLOR16 4 | |
222 | ||
223 | /*----------------------------------------------------------------------*/ | |
88804d19 | 224 | #if defined(CONFIG_LCD_INFO_BELOW_LOGO) |
8655b6f8 WD |
225 | # define LCD_INFO_X 0 |
226 | # define LCD_INFO_Y (BMP_LOGO_HEIGHT + VIDEO_FONT_HEIGHT) | |
227 | #elif defined(CONFIG_LCD_LOGO) | |
228 | # define LCD_INFO_X (BMP_LOGO_WIDTH + 4 * VIDEO_FONT_WIDTH) | |
229 | # define LCD_INFO_Y (VIDEO_FONT_HEIGHT) | |
230 | #else | |
231 | # define LCD_INFO_X (VIDEO_FONT_WIDTH) | |
232 | # define LCD_INFO_Y (VIDEO_FONT_HEIGHT) | |
233 | #endif | |
234 | ||
235 | /* Default to 8bpp if bit depth not specified */ | |
236 | #ifndef LCD_BPP | |
237 | # define LCD_BPP LCD_COLOR8 | |
238 | #endif | |
239 | #ifndef LCD_DF | |
240 | # define LCD_DF 1 | |
241 | #endif | |
242 | ||
243 | /* Calculate nr. of bits per pixel and nr. of colors */ | |
244 | #define NBITS(bit_code) (1 << (bit_code)) | |
245 | #define NCOLORS(bit_code) (1 << NBITS(bit_code)) | |
246 | ||
247 | /************************************************************************/ | |
248 | /* ** CONSOLE CONSTANTS */ | |
249 | /************************************************************************/ | |
250 | #if LCD_BPP == LCD_MONOCHROME | |
251 | ||
252 | /* | |
253 | * Simple black/white definitions | |
254 | */ | |
255 | # define CONSOLE_COLOR_BLACK 0 | |
256 | # define CONSOLE_COLOR_WHITE 1 /* Must remain last / highest */ | |
257 | ||
258 | #elif LCD_BPP == LCD_COLOR8 | |
259 | ||
260 | /* | |
261 | * 8bpp color definitions | |
262 | */ | |
263 | # define CONSOLE_COLOR_BLACK 0 | |
264 | # define CONSOLE_COLOR_RED 1 | |
265 | # define CONSOLE_COLOR_GREEN 2 | |
266 | # define CONSOLE_COLOR_YELLOW 3 | |
267 | # define CONSOLE_COLOR_BLUE 4 | |
268 | # define CONSOLE_COLOR_MAGENTA 5 | |
269 | # define CONSOLE_COLOR_CYAN 6 | |
270 | # define CONSOLE_COLOR_GREY 14 | |
271 | # define CONSOLE_COLOR_WHITE 15 /* Must remain last / highest */ | |
272 | ||
273 | #else | |
274 | ||
275 | /* | |
276 | * 16bpp color definitions | |
277 | */ | |
278 | # define CONSOLE_COLOR_BLACK 0x0000 | |
279 | # define CONSOLE_COLOR_WHITE 0xffff /* Must remain last / highest */ | |
280 | ||
281 | #endif /* color definitions */ | |
282 | ||
8655b6f8 WD |
283 | /************************************************************************/ |
284 | #ifndef PAGE_SIZE | |
285 | # define PAGE_SIZE 4096 | |
286 | #endif | |
287 | ||
288 | /************************************************************************/ | |
289 | /* ** CONSOLE DEFINITIONS & FUNCTIONS */ | |
290 | /************************************************************************/ | |
88804d19 | 291 | #if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO) |
8655b6f8 WD |
292 | # define CONSOLE_ROWS ((panel_info.vl_row-BMP_LOGO_HEIGHT) \ |
293 | / VIDEO_FONT_HEIGHT) | |
294 | #else | |
295 | # define CONSOLE_ROWS (panel_info.vl_row / VIDEO_FONT_HEIGHT) | |
296 | #endif | |
297 | ||
298 | #define CONSOLE_COLS (panel_info.vl_col / VIDEO_FONT_WIDTH) | |
299 | #define CONSOLE_ROW_SIZE (VIDEO_FONT_HEIGHT * lcd_line_length) | |
300 | #define CONSOLE_ROW_FIRST (lcd_console_address) | |
301 | #define CONSOLE_ROW_SECOND (lcd_console_address + CONSOLE_ROW_SIZE) | |
302 | #define CONSOLE_ROW_LAST (lcd_console_address + CONSOLE_SIZE \ | |
303 | - CONSOLE_ROW_SIZE) | |
304 | #define CONSOLE_SIZE (CONSOLE_ROW_SIZE * CONSOLE_ROWS) | |
305 | #define CONSOLE_SCROLL_SIZE (CONSOLE_SIZE - CONSOLE_ROW_SIZE) | |
306 | ||
307 | #if LCD_BPP == LCD_MONOCHROME | |
308 | # define COLOR_MASK(c) ((c) | (c) << 1 | (c) << 2 | (c) << 3 | \ | |
309 | (c) << 4 | (c) << 5 | (c) << 6 | (c) << 7) | |
310 | #elif LCD_BPP == LCD_COLOR8 | |
311 | # define COLOR_MASK(c) (c) | |
312 | #else | |
313 | # error Unsupported LCD BPP. | |
314 | #endif | |
315 | ||
316 | /************************************************************************/ | |
317 | ||
318 | #endif /* _LCD_H_ */ |