2 * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
3 * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public
7 * License as published by the Free Software Foundation;
8 * either version 2, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
12 * the implied warranty of MERCHANTABILITY or FITNESS FOR
13 * A PARTICULAR PURPOSE.See the GNU General Public License
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
19 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 #include <linux/via-core.h>
25 struct io_reg CN400_ModeXregs
[] = { {VIASR
, SR10
, 0xFF, 0x01},
26 {VIASR
, SR15
, 0x02, 0x02},
27 {VIASR
, SR16
, 0xBF, 0x08},
28 {VIASR
, SR17
, 0xFF, 0x1F},
29 {VIASR
, SR18
, 0xFF, 0x4E},
30 {VIASR
, SR1A
, 0xFB, 0x08},
31 {VIASR
, SR1E
, 0x0F, 0x01},
32 {VIASR
, SR2A
, 0xFF, 0x00},
33 {VIACR
, CR0A
, 0xFF, 0x1E}, /* Cursor Start */
34 {VIACR
, CR0B
, 0xFF, 0x00}, /* Cursor End */
35 {VIACR
, CR0E
, 0xFF, 0x00}, /* Cursor Location High */
36 {VIACR
, CR0F
, 0xFF, 0x00}, /* Cursor Localtion Low */
37 {VIACR
, CR32
, 0xFF, 0x00},
38 {VIACR
, CR33
, 0xFF, 0x00},
39 {VIACR
, CR35
, 0xFF, 0x00},
40 {VIACR
, CR36
, 0x08, 0x00},
41 {VIACR
, CR69
, 0xFF, 0x00},
42 {VIACR
, CR6A
, 0xFF, 0x40},
43 {VIACR
, CR6B
, 0xFF, 0x00},
44 {VIACR
, CR6C
, 0xFF, 0x00},
45 {VIACR
, CR88
, 0xFF, 0x40}, /* LCD Panel Type */
46 {VIACR
, CR89
, 0xFF, 0x00}, /* LCD Timing Control 0 */
47 {VIACR
, CR8A
, 0xFF, 0x88}, /* LCD Timing Control 1 */
48 {VIACR
, CR8B
, 0xFF, 0x69}, /* LCD Power Sequence Control 0 */
49 {VIACR
, CR8C
, 0xFF, 0x57}, /* LCD Power Sequence Control 1 */
50 {VIACR
, CR8D
, 0xFF, 0x00}, /* LCD Power Sequence Control 2 */
51 {VIACR
, CR8E
, 0xFF, 0x7B}, /* LCD Power Sequence Control 3 */
52 {VIACR
, CR8F
, 0xFF, 0x03}, /* LCD Power Sequence Control 4 */
53 {VIACR
, CR90
, 0xFF, 0x30}, /* LCD Power Sequence Control 5 */
54 {VIACR
, CR91
, 0xFF, 0xA0}, /* 24/12 bit LVDS Data off */
55 {VIACR
, CR96
, 0xFF, 0x00},
56 {VIACR
, CR97
, 0xFF, 0x00},
57 {VIACR
, CR99
, 0xFF, 0x00},
58 {VIACR
, CR9B
, 0xFF, 0x00}
61 /* Video Mode Table for VT3314 chipset*/
62 /* Common Setting for Video Mode */
63 struct io_reg CN700_ModeXregs
[] = { {VIASR
, SR10
, 0xFF, 0x01},
64 {VIASR
, SR15
, 0x02, 0x02},
65 {VIASR
, SR16
, 0xBF, 0x08},
66 {VIASR
, SR17
, 0xFF, 0x1F},
67 {VIASR
, SR18
, 0xFF, 0x4E},
68 {VIASR
, SR1A
, 0xFB, 0x82},
69 {VIASR
, SR1B
, 0xFF, 0xF0},
70 {VIASR
, SR1F
, 0xFF, 0x00},
71 {VIASR
, SR1E
, 0xFF, 0x01},
72 {VIASR
, SR22
, 0xFF, 0x1F},
73 {VIASR
, SR2A
, 0x0F, 0x00},
74 {VIASR
, SR2E
, 0xFF, 0xFF},
75 {VIASR
, SR3F
, 0xFF, 0xFF},
76 {VIASR
, SR40
, 0xF7, 0x00},
77 {VIASR
, CR30
, 0xFF, 0x04},
78 {VIACR
, CR32
, 0xFF, 0x00},
79 {VIACR
, CR33
, 0x7F, 0x00},
80 {VIACR
, CR35
, 0xFF, 0x00},
81 {VIACR
, CR36
, 0xFF, 0x31},
82 {VIACR
, CR41
, 0xFF, 0x80},
83 {VIACR
, CR42
, 0xFF, 0x00},
84 {VIACR
, CR55
, 0x80, 0x00},
85 {VIACR
, CR5D
, 0x80, 0x00}, /*Horizontal Retrace Start bit[11] should be 0*/
86 {VIACR
, CR68
, 0xFF, 0x67}, /* Default FIFO For IGA2 */
87 {VIACR
, CR69
, 0xFF, 0x00},
88 {VIACR
, CR6A
, 0xFD, 0x40},
89 {VIACR
, CR6B
, 0xFF, 0x00},
90 {VIACR
, CR6C
, 0xFF, 0x00},
91 {VIACR
, CR77
, 0xFF, 0x00}, /* LCD scaling Factor */
92 {VIACR
, CR78
, 0xFF, 0x00}, /* LCD scaling Factor */
93 {VIACR
, CR79
, 0xFF, 0x00}, /* LCD scaling Factor */
94 {VIACR
, CR9F
, 0x03, 0x00}, /* LCD scaling Factor */
95 {VIACR
, CR88
, 0xFF, 0x40}, /* LCD Panel Type */
96 {VIACR
, CR89
, 0xFF, 0x00}, /* LCD Timing Control 0 */
97 {VIACR
, CR8A
, 0xFF, 0x88}, /* LCD Timing Control 1 */
98 {VIACR
, CR8B
, 0xFF, 0x5D}, /* LCD Power Sequence Control 0 */
99 {VIACR
, CR8C
, 0xFF, 0x2B}, /* LCD Power Sequence Control 1 */
100 {VIACR
, CR8D
, 0xFF, 0x6F}, /* LCD Power Sequence Control 2 */
101 {VIACR
, CR8E
, 0xFF, 0x2B}, /* LCD Power Sequence Control 3 */
102 {VIACR
, CR8F
, 0xFF, 0x01}, /* LCD Power Sequence Control 4 */
103 {VIACR
, CR90
, 0xFF, 0x01}, /* LCD Power Sequence Control 5 */
104 {VIACR
, CR91
, 0xFF, 0xA0}, /* 24/12 bit LVDS Data off */
105 {VIACR
, CR96
, 0xFF, 0x00},
106 {VIACR
, CR97
, 0xFF, 0x00},
107 {VIACR
, CR99
, 0xFF, 0x00},
108 {VIACR
, CR9B
, 0xFF, 0x00},
109 {VIACR
, CR9D
, 0xFF, 0x80},
110 {VIACR
, CR9E
, 0xFF, 0x80}
113 struct io_reg KM400_ModeXregs
[] = {
114 {VIASR
, SR10
, 0xFF, 0x01}, /* Unlock Register */
115 {VIASR
, SR16
, 0xFF, 0x08}, /* Display FIFO threshold Control */
116 {VIASR
, SR17
, 0xFF, 0x1F}, /* Display FIFO Control */
117 {VIASR
, SR18
, 0xFF, 0x4E}, /* GFX PREQ threshold */
118 {VIASR
, SR1A
, 0xFF, 0x0a}, /* GFX PREQ threshold */
119 {VIASR
, SR1F
, 0xFF, 0x00}, /* Memory Control 0 */
120 {VIASR
, SR1B
, 0xFF, 0xF0}, /* Power Management Control 0 */
121 {VIASR
, SR1E
, 0xFF, 0x01}, /* Power Management Control */
122 {VIASR
, SR20
, 0xFF, 0x00}, /* Sequencer Arbiter Control 0 */
123 {VIASR
, SR21
, 0xFF, 0x00}, /* Sequencer Arbiter Control 1 */
124 {VIASR
, SR22
, 0xFF, 0x1F}, /* Display Arbiter Control 1 */
125 {VIASR
, SR2A
, 0xFF, 0x00}, /* Power Management Control 5 */
126 {VIASR
, SR2D
, 0xFF, 0xFF}, /* Power Management Control 1 */
127 {VIASR
, SR2E
, 0xFF, 0xFF}, /* Power Management Control 2 */
128 {VIACR
, CR0A
, 0xFF, 0x1E}, /* Cursor Start */
129 {VIACR
, CR0B
, 0xFF, 0x00}, /* Cursor End */
130 {VIACR
, CR0E
, 0xFF, 0x00}, /* Cursor Location High */
131 {VIACR
, CR0F
, 0xFF, 0x00}, /* Cursor Localtion Low */
132 {VIACR
, CR33
, 0xFF, 0x00},
133 {VIACR
, CR55
, 0x80, 0x00},
134 {VIACR
, CR5D
, 0x80, 0x00},
135 {VIACR
, CR36
, 0xFF, 0x01}, /* Power Mangement 3 */
136 {VIACR
, CR68
, 0xFF, 0x67}, /* Default FIFO For IGA2 */
137 {VIACR
, CR6A
, 0x20, 0x20}, /* Extended FIFO On */
138 {VIACR
, CR88
, 0xFF, 0x40}, /* LCD Panel Type */
139 {VIACR
, CR89
, 0xFF, 0x00}, /* LCD Timing Control 0 */
140 {VIACR
, CR8A
, 0xFF, 0x88}, /* LCD Timing Control 1 */
141 {VIACR
, CR8B
, 0xFF, 0x2D}, /* LCD Power Sequence Control 0 */
142 {VIACR
, CR8C
, 0xFF, 0x2D}, /* LCD Power Sequence Control 1 */
143 {VIACR
, CR8D
, 0xFF, 0xC8}, /* LCD Power Sequence Control 2 */
144 {VIACR
, CR8E
, 0xFF, 0x36}, /* LCD Power Sequence Control 3 */
145 {VIACR
, CR8F
, 0xFF, 0x00}, /* LCD Power Sequence Control 4 */
146 {VIACR
, CR90
, 0xFF, 0x10}, /* LCD Power Sequence Control 5 */
147 {VIACR
, CR91
, 0xFF, 0xA0}, /* 24/12 bit LVDS Data off */
148 {VIACR
, CR96
, 0xFF, 0x03}, /* DVP0 ; DVP0 Clock Skew */
149 {VIACR
, CR97
, 0xFF, 0x03}, /* DFP high ; DFPH Clock Skew */
150 {VIACR
, CR99
, 0xFF, 0x03}, /* DFP low ; DFPL Clock Skew*/
151 {VIACR
, CR9B
, 0xFF, 0x07} /* DVI on DVP1 ; DVP1 Clock Skew*/
154 /* For VT3324: Common Setting for Video Mode */
155 struct io_reg CX700_ModeXregs
[] = { {VIASR
, SR10
, 0xFF, 0x01},
156 {VIASR
, SR15
, 0x02, 0x02},
157 {VIASR
, SR16
, 0xBF, 0x08},
158 {VIASR
, SR17
, 0xFF, 0x1F},
159 {VIASR
, SR18
, 0xFF, 0x4E},
160 {VIASR
, SR1A
, 0xFB, 0x08},
161 {VIASR
, SR1B
, 0xFF, 0xF0},
162 {VIASR
, SR1E
, 0xFF, 0x01},
163 {VIASR
, SR2A
, 0xFF, 0x00},
164 {VIASR
, SR2D
, 0xFF, 0xFF}, /* VCK and LCK PLL power on. */
165 {VIACR
, CR0A
, 0xFF, 0x1E}, /* Cursor Start */
166 {VIACR
, CR0B
, 0xFF, 0x00}, /* Cursor End */
167 {VIACR
, CR0E
, 0xFF, 0x00}, /* Cursor Location High */
168 {VIACR
, CR0F
, 0xFF, 0x00}, /* Cursor Localtion Low */
169 {VIACR
, CR32
, 0xFF, 0x00},
170 {VIACR
, CR33
, 0xFF, 0x00},
171 {VIACR
, CR35
, 0xFF, 0x00},
172 {VIACR
, CR36
, 0x08, 0x00},
173 {VIACR
, CR47
, 0xC8, 0x00}, /* Clear VCK Plus. */
174 {VIACR
, CR69
, 0xFF, 0x00},
175 {VIACR
, CR6A
, 0xFF, 0x40},
176 {VIACR
, CR6B
, 0xFF, 0x00},
177 {VIACR
, CR6C
, 0xFF, 0x00},
178 {VIACR
, CR88
, 0xFF, 0x40}, /* LCD Panel Type */
179 {VIACR
, CR89
, 0xFF, 0x00}, /* LCD Timing Control 0 */
180 {VIACR
, CR8A
, 0xFF, 0x88}, /* LCD Timing Control 1 */
181 {VIACR
, CRD4
, 0xFF, 0x81}, /* Second power sequence control */
182 {VIACR
, CR8B
, 0xFF, 0x5D}, /* LCD Power Sequence Control 0 */
183 {VIACR
, CR8C
, 0xFF, 0x2B}, /* LCD Power Sequence Control 1 */
184 {VIACR
, CR8D
, 0xFF, 0x6F}, /* LCD Power Sequence Control 2 */
185 {VIACR
, CR8E
, 0xFF, 0x2B}, /* LCD Power Sequence Control 3 */
186 {VIACR
, CR8F
, 0xFF, 0x01}, /* LCD Power Sequence Control 4 */
187 {VIACR
, CR90
, 0xFF, 0x01}, /* LCD Power Sequence Control 5 */
188 {VIACR
, CR91
, 0xFF, 0x80}, /* 24/12 bit LVDS Data off */
189 {VIACR
, CR96
, 0xFF, 0x00},
190 {VIACR
, CR97
, 0xFF, 0x00},
191 {VIACR
, CR99
, 0xFF, 0x00},
192 {VIACR
, CR9B
, 0xFF, 0x00}
195 struct io_reg VX855_ModeXregs
[] = {
196 {VIASR
, SR10
, 0xFF, 0x01},
197 {VIASR
, SR15
, 0x02, 0x02},
198 {VIASR
, SR16
, 0xBF, 0x08},
199 {VIASR
, SR17
, 0xFF, 0x1F},
200 {VIASR
, SR18
, 0xFF, 0x4E},
201 {VIASR
, SR1A
, 0xFB, 0x08},
202 {VIASR
, SR1B
, 0xFF, 0xF0},
203 {VIASR
, SR1E
, 0x07, 0x01},
204 {VIASR
, SR2A
, 0xF0, 0x00},
205 {VIASR
, SR58
, 0xFF, 0x00},
206 {VIASR
, SR59
, 0xFF, 0x00},
207 {VIASR
, SR2D
, 0xFF, 0xFF}, /* VCK and LCK PLL power on. */
208 {VIACR
, CR09
, 0xFF, 0x00}, /* Initial CR09=0*/
209 {VIACR
, CR11
, 0x8F, 0x00}, /* IGA1 initial Vertical end */
210 {VIACR
, CR17
, 0x7F, 0x00}, /* IGA1 CRT Mode control init */
211 {VIACR
, CR0A
, 0xFF, 0x1E}, /* Cursor Start */
212 {VIACR
, CR0B
, 0xFF, 0x00}, /* Cursor End */
213 {VIACR
, CR0E
, 0xFF, 0x00}, /* Cursor Location High */
214 {VIACR
, CR0F
, 0xFF, 0x00}, /* Cursor Localtion Low */
215 {VIACR
, CR32
, 0xFF, 0x00},
216 {VIACR
, CR33
, 0x7F, 0x00},
217 {VIACR
, CR35
, 0xFF, 0x00},
218 {VIACR
, CR36
, 0x08, 0x00},
219 {VIACR
, CR69
, 0xFF, 0x00},
220 {VIACR
, CR6A
, 0xFD, 0x60},
221 {VIACR
, CR6B
, 0xFF, 0x00},
222 {VIACR
, CR6C
, 0xFF, 0x00},
223 {VIACR
, CR88
, 0xFF, 0x40}, /* LCD Panel Type */
224 {VIACR
, CR89
, 0xFF, 0x00}, /* LCD Timing Control 0 */
225 {VIACR
, CR8A
, 0xFF, 0x88}, /* LCD Timing Control 1 */
226 {VIACR
, CRD4
, 0xFF, 0x81}, /* Second power sequence control */
227 {VIACR
, CR91
, 0xFF, 0x80}, /* 24/12 bit LVDS Data off */
228 {VIACR
, CR96
, 0xFF, 0x00},
229 {VIACR
, CR97
, 0xFF, 0x00},
230 {VIACR
, CR99
, 0xFF, 0x00},
231 {VIACR
, CR9B
, 0xFF, 0x00},
232 {VIACR
, CRD2
, 0xFF, 0xFF} /* TMDS/LVDS control register. */
235 /* Video Mode Table */
236 /* Common Setting for Video Mode */
237 struct io_reg CLE266_ModeXregs
[] = { {VIASR
, SR1E
, 0xF0, 0x00},
238 {VIASR
, SR2A
, 0x0F, 0x00},
239 {VIASR
, SR15
, 0x02, 0x02},
240 {VIASR
, SR16
, 0xBF, 0x08},
241 {VIASR
, SR17
, 0xFF, 0x1F},
242 {VIASR
, SR18
, 0xFF, 0x4E},
243 {VIASR
, SR1A
, 0xFB, 0x08},
245 {VIACR
, CR32
, 0xFF, 0x00},
246 {VIACR
, CR35
, 0xFF, 0x00},
247 {VIACR
, CR36
, 0x08, 0x00},
248 {VIACR
, CR6A
, 0xFF, 0x80},
249 {VIACR
, CR6A
, 0xFF, 0xC0},
251 {VIACR
, CR55
, 0x80, 0x00},
252 {VIACR
, CR5D
, 0x80, 0x00},
254 {VIAGR
, GR20
, 0xFF, 0x00},
255 {VIAGR
, GR21
, 0xFF, 0x00},
256 {VIAGR
, GR22
, 0xFF, 0x00},
261 struct io_reg PM1024x768
[] = { {VIASR
, 0x16, 0xBF, 0x0C},
262 {VIASR
, 0x18, 0xFF, 0x4C}
265 struct patch_table res_patch_table
[] = {
266 {ARRAY_SIZE(PM1024x768
), PM1024x768
}
269 /* struct VPITTable {
271 unsigned char SR[StdSR];
272 unsigned char CR[StdCR];
273 unsigned char GR[StdGR];
274 unsigned char AR[StdAR];
277 struct VPITTable VPIT
= {
281 {0x01, 0x0F, 0x00, 0x0E},
282 /* Graphic Controller */
283 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF},
284 /* Attribute Controller */
285 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
286 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
287 0x01, 0x00, 0x0F, 0x00}
290 /********************/
292 /********************/
295 static struct crt_mode_table CRTM480x640
[] = {
296 /* r_rate, hsp, vsp */
297 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
298 {REFRESH_60
, M480X640_R60_HSP
, M480X640_R60_VSP
,
299 {624, 480, 480, 144, 504, 48, 663, 640, 640, 23, 641, 3} } /* GTF*/
303 static struct crt_mode_table CRTM640x480
[] = {
305 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
306 {REFRESH_60
, M640X480_R60_HSP
, M640X480_R60_VSP
,
307 {800, 640, 648, 144, 656, 96, 525, 480, 480, 45, 490, 2} },
308 {REFRESH_75
, M640X480_R75_HSP
, M640X480_R75_VSP
,
309 {840, 640, 640, 200, 656, 64, 500, 480, 480, 20, 481, 3} },
310 {REFRESH_85
, M640X480_R85_HSP
, M640X480_R85_VSP
,
311 {832, 640, 640, 192, 696, 56, 509, 480, 480, 29, 481, 3} },
312 {REFRESH_100
, M640X480_R100_HSP
, M640X480_R100_VSP
,
313 {848, 640, 640, 208, 680, 64, 509, 480, 480, 29, 481, 3} }, /*GTF*/
314 {REFRESH_120
, M640X480_R120_HSP
, M640X480_R120_VSP
,
315 {848, 640, 640, 208, 680, 64, 515, 480, 480, 35, 481, 3} } /*GTF*/
319 static struct crt_mode_table CRTM720x480
[] = {
321 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
322 {REFRESH_60
, M720X480_R60_HSP
, M720X480_R60_VSP
,
323 {896, 720, 720, 176, 736, 72, 497, 480, 480, 17, 481, 3} }
328 static struct crt_mode_table CRTM720x576
[] = {
330 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
331 {REFRESH_60
, M720X576_R60_HSP
, M720X576_R60_VSP
,
332 {912, 720, 720, 192, 744, 72, 597, 576, 576, 21, 577, 3} }
336 static struct crt_mode_table CRTM800x480
[] = {
337 /* r_rate, hsp, vsp */
338 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
339 {REFRESH_60
, M800X480_R60_HSP
, M800X480_R60_VSP
,
340 {992, 800, 800, 192, 824, 72, 500, 480, 480, 20, 483, 7} }
344 static struct crt_mode_table CRTM800x600
[] = {
346 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
347 {REFRESH_60
, M800X600_R60_HSP
, M800X600_R60_VSP
,
348 {1056, 800, 800, 256, 840, 128, 628, 600, 600, 28, 601, 4} },
349 {REFRESH_75
, M800X600_R75_HSP
, M800X600_R75_VSP
,
350 {1056, 800, 800, 256, 816, 80, 625, 600, 600, 25, 601, 3} },
351 {REFRESH_85
, M800X600_R85_HSP
, M800X600_R85_VSP
,
352 {1048, 800, 800, 248, 832, 64, 631, 600, 600, 31, 601, 3} },
353 {REFRESH_100
, M800X600_R100_HSP
, M800X600_R100_VSP
,
354 {1072, 800, 800, 272, 848, 88, 636, 600, 600, 36, 601, 3} },
355 {REFRESH_120
, M800X600_R120_HSP
, M800X600_R120_VSP
,
356 {1088, 800, 800, 288, 856, 88, 643, 600, 600, 43, 601, 3} }
360 static struct crt_mode_table CRTM848x480
[] = {
361 /* r_rate, hsp, vsp */
362 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
363 {REFRESH_60
, M848X480_R60_HSP
, M848X480_R60_VSP
,
364 {1056, 848, 848, 208, 872, 80, 500, 480, 480, 20, 483, 5} }
367 /*856x480 (GTF) convert to 852x480*/
368 static struct crt_mode_table CRTM852x480
[] = {
370 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
371 {REFRESH_60
, M852X480_R60_HSP
, M852X480_R60_VSP
,
372 {1064, 856, 856, 208, 872, 88, 497, 480, 480, 17, 481, 3} }
376 static struct crt_mode_table CRTM1024x512
[] = {
378 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
379 {REFRESH_60
, M1024X512_R60_HSP
, M1024X512_R60_VSP
,
380 {1296, 1024, 1024, 272, 1056, 104, 531, 512, 512, 19, 513, 3} }
385 static struct crt_mode_table CRTM1024x600
[] = {
387 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
388 {REFRESH_60
, M1024X600_R60_HSP
, M1024X600_R60_VSP
,
389 {1312, 1024, 1024, 288, 1064, 104, 622, 600, 600, 22, 601, 3} },
393 static struct crt_mode_table CRTM1024x768
[] = {
395 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
396 {REFRESH_60
, M1024X768_R60_HSP
, M1024X768_R60_VSP
,
397 {1344, 1024, 1024, 320, 1048, 136, 806, 768, 768, 38, 771, 6} },
398 {REFRESH_75
, M1024X768_R75_HSP
, M1024X768_R75_VSP
,
399 {1312, 1024, 1024, 288, 1040, 96, 800, 768, 768, 32, 769, 3} },
400 {REFRESH_85
, M1024X768_R85_HSP
, M1024X768_R85_VSP
,
401 {1376, 1024, 1024, 352, 1072, 96, 808, 768, 768, 40, 769, 3} },
402 {REFRESH_100
, M1024X768_R100_HSP
, M1024X768_R100_VSP
,
403 {1392, 1024, 1024, 368, 1096, 112, 814, 768, 768, 46, 769, 3} }
407 static struct crt_mode_table CRTM1152x864
[] = {
409 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
410 {REFRESH_75
, M1152X864_R75_HSP
, M1152X864_R75_VSP
,
411 {1600, 1152, 1152, 448, 1216, 128, 900, 864, 864, 36, 865, 3} }
415 /* 1280x720 (HDMI 720P)*/
416 static struct crt_mode_table CRTM1280x720
[] = {
418 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
419 {REFRESH_60
, M1280X720_R60_HSP
, M1280X720_R60_VSP
,
420 {1648, 1280, 1280, 368, 1392, 40, 750, 720, 720, 30, 725, 5} },
421 {REFRESH_50
, M1280X720_R50_HSP
, M1280X720_R50_VSP
,
422 {1632, 1280, 1280, 352, 1328, 128, 741, 720, 720, 21, 721, 3} }
426 static struct crt_mode_table CRTM1280x768
[] = {
428 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
429 {REFRESH_60
, M1280X768_R60_HSP
, M1280X768_R60_VSP
,
430 {1680, 1280, 1280, 400, 1344, 136, 795, 768, 768, 27, 769, 3} },
431 {REFRESH_50
, M1280X768_R50_HSP
, M1280X768_R50_VSP
,
432 {1648, 1280, 1280, 368, 1336, 128, 791, 768, 768, 23, 769, 3} }
436 static struct crt_mode_table CRTM1280x800
[] = {
437 /* r_rate, hsp, vsp */
438 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
439 {REFRESH_60
, M1280X800_R60_HSP
, M1280X800_R60_VSP
,
440 {1680, 1280, 1280, 400, 1352, 128, 831, 800, 800, 31, 803, 6} }
444 static struct crt_mode_table CRTM1280x960
[] = {
446 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
447 {REFRESH_60
, M1280X960_R60_HSP
, M1280X960_R60_VSP
,
448 {1800, 1280, 1280, 520, 1376, 112, 1000, 960, 960, 40, 961, 3} }
452 static struct crt_mode_table CRTM1280x1024
[] = {
454 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
455 {REFRESH_60
, M1280X1024_R60_HSP
, M1280X1024_R60_VSP
,
456 {1688, 1280, 1280, 408, 1328, 112, 1066, 1024, 1024, 42, 1025,
458 {REFRESH_75
, M1280X1024_R75_HSP
, M1280X1024_R75_VSP
,
459 {1688, 1280, 1280, 408, 1296, 144, 1066, 1024, 1024, 42, 1025,
461 {REFRESH_85
, M1280X1024_R85_HSP
, M1280X1024_R85_VSP
,
462 {1728, 1280, 1280, 448, 1344, 160, 1072, 1024, 1024, 48, 1025, 3} }
466 static struct crt_mode_table CRTM1368x768
[] = {
467 /* r_rate, hsp, vsp */
468 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
469 {REFRESH_60
, M1368X768_R60_HSP
, M1368X768_R60_VSP
,
470 {1800, 1368, 1368, 432, 1440, 144, 795, 768, 768, 27, 769, 3} }
474 static struct crt_mode_table CRTM1440x1050
[] = {
476 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
477 {REFRESH_60
, M1440X1050_R60_HSP
, M1440X1050_R60_VSP
,
478 {1936, 1440, 1440, 496, 1536, 152, 1077, 1040, 1040, 37, 1041, 3} }
482 static struct crt_mode_table CRTM1600x1200
[] = {
484 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
485 {REFRESH_60
, M1600X1200_R60_HSP
, M1600X1200_R60_VSP
,
486 {2160, 1600, 1600, 560, 1664, 192, 1250, 1200, 1200, 50, 1201,
488 {REFRESH_75
, M1600X1200_R75_HSP
, M1600X1200_R75_VSP
,
489 {2160, 1600, 1600, 560, 1664, 192, 1250, 1200, 1200, 50, 1201, 3} }
493 /* 1680x1050 (CVT) */
494 static struct crt_mode_table CRTM1680x1050
[] = {
495 /* r_rate, hsp, vsp */
496 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
497 {REFRESH_60
, M1680x1050_R60_HSP
, M1680x1050_R60_VSP
,
498 {2240, 1680, 1680, 560, 1784, 176, 1089, 1050, 1050, 39, 1053,
500 {REFRESH_75
, M1680x1050_R75_HSP
, M1680x1050_R75_VSP
,
501 {2272, 1680, 1680, 592, 1800, 176, 1099, 1050, 1050, 49, 1053, 6} }
504 /* 1680x1050 (CVT Reduce Blanking) */
505 static struct crt_mode_table CRTM1680x1050_RB
[] = {
506 /* r_rate, hsp, vsp */
507 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
508 {REFRESH_60
, M1680x1050_RB_R60_HSP
, M1680x1050_RB_R60_VSP
,
509 {1840, 1680, 1680, 160, 1728, 32, 1080, 1050, 1050, 30, 1053, 6} }
513 static struct crt_mode_table CRTM1920x1080
[] = {
515 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
516 {REFRESH_60
, M1920X1080_R60_HSP
, M1920X1080_R60_VSP
,
517 {2576, 1920, 1920, 656, 2048, 200, 1120, 1080, 1080, 40, 1083, 5} }
520 /* 1920x1080 (CVT with Reduce Blanking) */
521 static struct crt_mode_table CRTM1920x1080_RB
[] = {
522 /* r_rate, hsp, vsp */
523 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
524 {REFRESH_60
, M1920X1080_RB_R60_HSP
, M1920X1080_RB_R60_VSP
,
525 {2080, 1920, 1920, 160, 1968, 32, 1111, 1080, 1080, 31, 1083, 5} }
529 static struct crt_mode_table CRTM1920x1440
[] = {
531 /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
532 {REFRESH_60
, M1920X1440_R60_HSP
, M1920X1440_R60_VSP
,
533 {2600, 1920, 1920, 680, 2048, 208, 1500, 1440, 1440, 60, 1441,
535 {REFRESH_75
, M1920X1440_R75_HSP
, M1920X1440_R75_VSP
,
536 {2640, 1920, 1920, 720, 2064, 224, 1500, 1440, 1440, 60, 1441, 3} }
539 /* 1400x1050 (CVT) */
540 static struct crt_mode_table CRTM1400x1050
[] = {
541 /* r_rate, hsp, vsp */
542 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
543 {REFRESH_60
, M1400X1050_R60_HSP
, M1400X1050_R60_VSP
,
544 {1864, 1400, 1400, 464, 1488, 144, 1089, 1050, 1050, 39, 1053,
546 {REFRESH_75
, M1400X1050_R75_HSP
, M1400X1050_R75_VSP
,
547 {1896, 1400, 1400, 496, 1504, 144, 1099, 1050, 1050, 49, 1053, 4} }
550 /* 1400x1050 (CVT Reduce Blanking) */
551 static struct crt_mode_table CRTM1400x1050_RB
[] = {
552 /* r_rate, hsp, vsp */
553 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
554 {REFRESH_60
, M1400X1050_RB_R60_HSP
, M1400X1050_RB_R60_VSP
,
555 {1560, 1400, 1400, 160, 1448, 32, 1080, 1050, 1050, 30, 1053, 4} }
559 static struct crt_mode_table CRTM960x600
[] = {
560 /* r_rate, hsp, vsp */
561 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
562 {REFRESH_60
, M960X600_R60_HSP
, M960X600_R60_VSP
,
563 {1216, 960, 960, 256, 992, 96, 624, 600, 600, 24, 603, 6} }
567 static struct crt_mode_table CRTM1000x600
[] = {
568 /* r_rate, hsp, vsp */
569 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
570 {REFRESH_60
, M1000X600_R60_HSP
, M1000X600_R60_VSP
,
571 {1288, 1000, 1000, 288, 1040, 104, 622, 600, 600, 22, 601, 3} }
575 static struct crt_mode_table CRTM1024x576
[] = {
576 /* r_rate, hsp, vsp */
577 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
578 {REFRESH_60
, M1024X576_R60_HSP
, M1024X576_R60_VSP
,
579 {1312, 1024, 1024, 288, 1064, 104, 597, 576, 576, 21, 577, 3} }
583 static struct crt_mode_table CRTM1088x612
[] = {
584 /* r_rate, hsp, vsp */
585 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
586 {REFRESH_60
, M1088X612_R60_HSP
, M1088X612_R60_VSP
,
587 {1392, 1088, 1088, 304, 1136, 104, 636, 612, 612, 24, 615, 5} }
591 static struct crt_mode_table CRTM1152x720
[] = {
592 /* r_rate, hsp, vsp */
593 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
594 {REFRESH_60
, M1152X720_R60_HSP
, M1152X720_R60_VSP
,
595 {1488, 1152, 1152, 336, 1208, 112, 748, 720, 720, 28, 723, 6} }
599 static struct crt_mode_table CRTM1200x720
[] = {
600 /* r_rate, hsp, vsp */
601 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
602 {REFRESH_60
, M1200X720_R60_HSP
, M1200X720_R60_VSP
,
603 {1568, 1200, 1200, 368, 1256, 128, 746, 720, 720, 26, 721, 3} }
606 /* 1200x900 (DCON) */
607 static struct crt_mode_table DCON1200x900
[] = {
608 /* r_rate, hsp, vsp */
609 {REFRESH_60
, M1200X900_R60_HSP
, M1200X900_R60_VSP
,
610 /* The correct htotal is 1240, but this doesn't raster on VX855. */
611 /* Via suggested changing to a multiple of 16, hence 1264. */
612 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
613 {1264, 1200, 1200, 64, 1211, 32, 912, 900, 900, 12, 901, 10} }
617 static struct crt_mode_table CRTM1280x600
[] = {
618 /* r_rate, hsp, vsp */
619 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
620 {REFRESH_60
, M1280x600_R60_HSP
, M1280x600_R60_VSP
,
621 {1648, 1280, 1280, 368, 1336, 128, 622, 600, 600, 22, 601, 3} }
625 static struct crt_mode_table CRTM1360x768
[] = {
626 /* r_rate, hsp, vsp */
627 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
628 {REFRESH_60
, M1360X768_R60_HSP
, M1360X768_R60_VSP
,
629 {1776, 1360, 1360, 416, 1432, 136, 798, 768, 768, 30, 771, 5} }
632 /* 1360x768 (CVT Reduce Blanking) */
633 static struct crt_mode_table CRTM1360x768_RB
[] = {
634 /* r_rate, hsp, vsp */
635 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
636 {REFRESH_60
, M1360X768_RB_R60_HSP
, M1360X768_RB_R60_VSP
,
637 {1520, 1360, 1360, 160, 1408, 32, 790, 768, 768, 22, 771, 5} }
641 static struct crt_mode_table CRTM1366x768
[] = {
642 /* r_rate, hsp, vsp */
643 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
644 {REFRESH_60
, M1368X768_R60_HSP
, M1368X768_R60_VSP
,
645 {1800, 1368, 1368, 432, 1440, 144, 795, 768, 768, 27, 769, 3} },
646 {REFRESH_50
, M1368X768_R50_HSP
, M1368X768_R50_VSP
,
647 {1768, 1368, 1368, 400, 1424, 144, 791, 768, 768, 23, 769, 3} }
651 static struct crt_mode_table CRTM1440x900
[] = {
652 /* r_rate, hsp, vsp */
653 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
654 {REFRESH_60
, M1440X900_R60_HSP
, M1440X900_R60_VSP
,
655 {1904, 1440, 1440, 464, 1520, 152, 934, 900, 900, 34, 903, 6} },
656 {REFRESH_75
, M1440X900_R75_HSP
, M1440X900_R75_VSP
,
657 {1936, 1440, 1440, 496, 1536, 152, 942, 900, 900, 42, 903, 6} }
660 /* 1440x900 (CVT Reduce Blanking) */
661 static struct crt_mode_table CRTM1440x900_RB
[] = {
662 /* r_rate, hsp, vsp */
663 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
664 {REFRESH_60
, M1440X900_RB_R60_HSP
, M1440X900_RB_R60_VSP
,
665 {1600, 1440, 1440, 160, 1488, 32, 926, 900, 900, 26, 903, 6} }
669 static struct crt_mode_table CRTM1600x900
[] = {
670 /* r_rate, hsp, vsp */
671 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
672 {REFRESH_60
, M1600X900_R60_HSP
, M1600X900_R60_VSP
,
673 {2112, 1600, 1600, 512, 1688, 168, 934, 900, 900, 34, 903, 5} }
676 /* 1600x900 (CVT Reduce Blanking) */
677 static struct crt_mode_table CRTM1600x900_RB
[] = {
678 /* r_rate, hsp, vsp */
679 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
680 {REFRESH_60
, M1600X900_RB_R60_HSP
, M1600X900_RB_R60_VSP
,
681 {1760, 1600, 1600, 160, 1648, 32, 926, 900, 900, 26, 903, 5} }
684 /* 1600x1024 (GTF) */
685 static struct crt_mode_table CRTM1600x1024
[] = {
686 /* r_rate, hsp, vsp */
687 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
688 {REFRESH_60
, M1600X1024_R60_HSP
, M1600X1024_R60_VSP
,
689 {2144, 1600, 1600, 544, 1704, 168, 1060, 1024, 1024, 36, 1025, 3} }
692 /* 1792x1344 (DMT) */
693 static struct crt_mode_table CRTM1792x1344
[] = {
694 /* r_rate, hsp, vsp */
695 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
696 {REFRESH_60
, M1792x1344_R60_HSP
, M1792x1344_R60_VSP
,
697 {2448, 1792, 1792, 656, 1920, 200, 1394, 1344, 1344, 50, 1345, 3} }
700 /* 1856x1392 (DMT) */
701 static struct crt_mode_table CRTM1856x1392
[] = {
702 /* r_rate, hsp, vsp */
703 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
704 {REFRESH_60
, M1856x1392_R60_HSP
, M1856x1392_R60_VSP
,
705 {2528, 1856, 1856, 672, 1952, 224, 1439, 1392, 1392, 47, 1393, 3} }
708 /* 1920x1200 (CVT) */
709 static struct crt_mode_table CRTM1920x1200
[] = {
710 /* r_rate, hsp, vsp */
711 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
712 {REFRESH_60
, M1920X1200_R60_HSP
, M1920X1200_R60_VSP
,
713 {2592, 1920, 1920, 672, 2056, 200, 1245, 1200, 1200, 45, 1203, 6} }
716 /* 1920x1200 (CVT with Reduce Blanking) */
717 static struct crt_mode_table CRTM1920x1200_RB
[] = {
718 /* r_rate, hsp, vsp */
719 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
720 {REFRESH_60
, M1920X1200_RB_R60_HSP
, M1920X1200_RB_R60_VSP
,
721 {2080, 1920, 1920, 160, 1968, 32, 1235, 1200, 1200, 35, 1203, 6} }
724 /* 2048x1536 (CVT) */
725 static struct crt_mode_table CRTM2048x1536
[] = {
726 /* r_rate, hsp, vsp */
727 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
728 {REFRESH_60
, M2048x1536_R60_HSP
, M2048x1536_R60_VSP
,
729 {2800, 2048, 2048, 752, 2200, 224, 1592, 1536, 1536, 56, 1539, 4} }
732 static struct VideoModeTable viafb_modes
[] = {
733 /* Display : 480x640 (GTF) */
734 {CRTM480x640
, ARRAY_SIZE(CRTM480x640
)},
736 /* Display : 640x480 */
737 {CRTM640x480
, ARRAY_SIZE(CRTM640x480
)},
739 /* Display : 720x480 (GTF) */
740 {CRTM720x480
, ARRAY_SIZE(CRTM720x480
)},
742 /* Display : 720x576 (GTF) */
743 {CRTM720x576
, ARRAY_SIZE(CRTM720x576
)},
745 /* Display : 800x600 */
746 {CRTM800x600
, ARRAY_SIZE(CRTM800x600
)},
748 /* Display : 800x480 (CVT) */
749 {CRTM800x480
, ARRAY_SIZE(CRTM800x480
)},
751 /* Display : 848x480 (CVT) */
752 {CRTM848x480
, ARRAY_SIZE(CRTM848x480
)},
754 /* Display : 852x480 (GTF) */
755 {CRTM852x480
, ARRAY_SIZE(CRTM852x480
)},
757 /* Display : 1024x512 (GTF) */
758 {CRTM1024x512
, ARRAY_SIZE(CRTM1024x512
)},
760 /* Display : 1024x600 */
761 {CRTM1024x600
, ARRAY_SIZE(CRTM1024x600
)},
763 /* Display : 1024x768 */
764 {CRTM1024x768
, ARRAY_SIZE(CRTM1024x768
)},
766 /* Display : 1152x864 */
767 {CRTM1152x864
, ARRAY_SIZE(CRTM1152x864
)},
769 /* Display : 1280x768 (GTF) */
770 {CRTM1280x768
, ARRAY_SIZE(CRTM1280x768
)},
772 /* Display : 960x600 (CVT) */
773 {CRTM960x600
, ARRAY_SIZE(CRTM960x600
)},
775 /* Display : 1000x600 (GTF) */
776 {CRTM1000x600
, ARRAY_SIZE(CRTM1000x600
)},
778 /* Display : 1024x576 (GTF) */
779 {CRTM1024x576
, ARRAY_SIZE(CRTM1024x576
)},
781 /* Display : 1088x612 (GTF) */
782 {CRTM1088x612
, ARRAY_SIZE(CRTM1088x612
)},
784 /* Display : 1152x720 (CVT) */
785 {CRTM1152x720
, ARRAY_SIZE(CRTM1152x720
)},
787 /* Display : 1200x720 (GTF) */
788 {CRTM1200x720
, ARRAY_SIZE(CRTM1200x720
)},
790 /* Display : 1200x900 (DCON) */
791 {DCON1200x900
, ARRAY_SIZE(DCON1200x900
)},
793 /* Display : 1280x600 (GTF) */
794 {CRTM1280x600
, ARRAY_SIZE(CRTM1280x600
)},
796 /* Display : 1280x800 (CVT) */
797 {CRTM1280x800
, ARRAY_SIZE(CRTM1280x800
)},
799 /* Display : 1280x960 */
800 {CRTM1280x960
, ARRAY_SIZE(CRTM1280x960
)},
802 /* Display : 1280x1024 */
803 {CRTM1280x1024
, ARRAY_SIZE(CRTM1280x1024
)},
805 /* Display : 1360x768 (CVT) */
806 {CRTM1360x768
, ARRAY_SIZE(CRTM1360x768
)},
808 /* Display : 1366x768 */
809 {CRTM1366x768
, ARRAY_SIZE(CRTM1366x768
)},
811 /* Display : 1368x768 (GTF) */
812 {CRTM1368x768
, ARRAY_SIZE(CRTM1368x768
)},
814 /* Display : 1440x900 (CVT) */
815 {CRTM1440x900
, ARRAY_SIZE(CRTM1440x900
)},
817 /* Display : 1440x1050 (GTF) */
818 {CRTM1440x1050
, ARRAY_SIZE(CRTM1440x1050
)},
820 /* Display : 1600x900 (CVT) */
821 {CRTM1600x900
, ARRAY_SIZE(CRTM1600x900
)},
823 /* Display : 1600x1024 (GTF) */
824 {CRTM1600x1024
, ARRAY_SIZE(CRTM1600x1024
)},
826 /* Display : 1600x1200 */
827 {CRTM1600x1200
, ARRAY_SIZE(CRTM1600x1200
)},
829 /* Display : 1680x1050 (CVT) */
830 {CRTM1680x1050
, ARRAY_SIZE(CRTM1680x1050
)},
832 /* Display : 1792x1344 (DMT) */
833 {CRTM1792x1344
, ARRAY_SIZE(CRTM1792x1344
)},
835 /* Display : 1856x1392 (DMT) */
836 {CRTM1856x1392
, ARRAY_SIZE(CRTM1856x1392
)},
838 /* Display : 1920x1440 */
839 {CRTM1920x1440
, ARRAY_SIZE(CRTM1920x1440
)},
841 /* Display : 2048x1536 */
842 {CRTM2048x1536
, ARRAY_SIZE(CRTM2048x1536
)},
844 /* Display : 1280x720 */
845 {CRTM1280x720
, ARRAY_SIZE(CRTM1280x720
)},
847 /* Display : 1920x1080 (CVT) */
848 {CRTM1920x1080
, ARRAY_SIZE(CRTM1920x1080
)},
850 /* Display : 1920x1200 (CVT) */
851 {CRTM1920x1200
, ARRAY_SIZE(CRTM1920x1200
)},
853 /* Display : 1400x1050 (CVT) */
854 {CRTM1400x1050
, ARRAY_SIZE(CRTM1400x1050
)}
857 static struct VideoModeTable viafb_rb_modes
[] = {
858 /* Display : 1360x768 (CVT Reduce Blanking) */
859 {CRTM1360x768_RB
, ARRAY_SIZE(CRTM1360x768_RB
)},
861 /* Display : 1440x900 (CVT Reduce Blanking) */
862 {CRTM1440x900_RB
, ARRAY_SIZE(CRTM1440x900_RB
)},
864 /* Display : 1400x1050 (CVT Reduce Blanking) */
865 {CRTM1400x1050_RB
, ARRAY_SIZE(CRTM1400x1050_RB
)},
867 /* Display : 1600x900 (CVT Reduce Blanking) */
868 {CRTM1600x900_RB
, ARRAY_SIZE(CRTM1600x900_RB
)},
870 /* Display : 1680x1050 (CVT Reduce Blanking) */
871 {CRTM1680x1050_RB
, ARRAY_SIZE(CRTM1680x1050_RB
)},
873 /* Display : 1920x1080 (CVT Reduce Blanking) */
874 {CRTM1920x1080_RB
, ARRAY_SIZE(CRTM1920x1080_RB
)},
876 /* Display : 1920x1200 (CVT Reduce Blanking) */
877 {CRTM1920x1200_RB
, ARRAY_SIZE(CRTM1920x1200_RB
)}
880 struct crt_mode_table CEAM1280x720
[] = {
881 {REFRESH_60
, M1280X720_CEA_R60_HSP
, M1280X720_CEA_R60_VSP
,
882 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
883 {1650, 1280, 1280, 370, 1390, 40, 750, 720, 720, 30, 725, 5} }
885 struct crt_mode_table CEAM1920x1080
[] = {
886 {REFRESH_60
, M1920X1080_CEA_R60_HSP
, M1920X1080_CEA_R60_VSP
,
887 /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
888 {2200, 1920, 1920, 300, 2008, 44, 1125, 1080, 1080, 45, 1084, 5} }
890 struct VideoModeTable CEA_HDMI_Modes
[] = {
891 /* Display : 1280x720 */
892 {CEAM1280x720
, ARRAY_SIZE(CEAM1280x720
)},
893 {CEAM1920x1080
, ARRAY_SIZE(CEAM1920x1080
)}
896 int NUM_TOTAL_CEA_MODES
= ARRAY_SIZE(CEA_HDMI_Modes
);
897 int NUM_TOTAL_CN400_ModeXregs
= ARRAY_SIZE(CN400_ModeXregs
);
898 int NUM_TOTAL_CN700_ModeXregs
= ARRAY_SIZE(CN700_ModeXregs
);
899 int NUM_TOTAL_KM400_ModeXregs
= ARRAY_SIZE(KM400_ModeXregs
);
900 int NUM_TOTAL_CX700_ModeXregs
= ARRAY_SIZE(CX700_ModeXregs
);
901 int NUM_TOTAL_VX855_ModeXregs
= ARRAY_SIZE(VX855_ModeXregs
);
902 int NUM_TOTAL_CLE266_ModeXregs
= ARRAY_SIZE(CLE266_ModeXregs
);
903 int NUM_TOTAL_PATCH_MODE
= ARRAY_SIZE(res_patch_table
);
906 struct VideoModeTable
*viafb_get_mode(int hres
, int vres
)
909 for (i
= 0; i
< ARRAY_SIZE(viafb_modes
); i
++)
910 if (viafb_modes
[i
].mode_array
&&
911 viafb_modes
[i
].crtc
[0].crtc
.hor_addr
== hres
&&
912 viafb_modes
[i
].crtc
[0].crtc
.ver_addr
== vres
)
913 return &viafb_modes
[i
];
918 struct VideoModeTable
*viafb_get_rb_mode(int hres
, int vres
)
921 for (i
= 0; i
< ARRAY_SIZE(viafb_rb_modes
); i
++)
922 if (viafb_rb_modes
[i
].mode_array
&&
923 viafb_rb_modes
[i
].crtc
[0].crtc
.hor_addr
== hres
&&
924 viafb_rb_modes
[i
].crtc
[0].crtc
.ver_addr
== vres
)
925 return &viafb_rb_modes
[i
];