1/* $NetBSD$ */
2
3/*
4 * Copyright 1998-2006 VIA Technologies, Inc. All Rights Reserved.
5 * Copyright 2001-2006 S3 Graphics, Inc. All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sub license,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
22 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 */
26
27#ifndef _DEV_PCI_UNICHROMEMODE_H
28#define _DEV_PCI_UNICHROMEMODE_H
29
30#define	ARRAY_SIZE(x)	(sizeof((x)) / sizeof((x)[0]))
31
32struct VPITTable {
33  unsigned char  Misc;
34  unsigned char  SR[StdSR];
35  unsigned char  GR[StdGR];
36  unsigned char  AR[StdAR];
37};
38
39struct VideoModeTable {
40  int                               ModeIndex;
41  struct crt_mode_table             *crtc;
42  int                               mode_array;
43};
44
45struct patch_table {
46  int           mode_index;
47  int           table_length;
48  struct io_reg *io_reg_table;
49};
50
51struct res_map_refresh {
52  int       hres;
53  int       vres;
54  int       pixclock;
55  int       vmode_refresh;
56};
57
58struct res_map_refresh res_map_refresh_tbl[] = {
59//hres, vres, vclock, vmode_refresh
60  {640, 480, RES_640X480_60HZ_PIXCLOCK,   60},
61  {640, 480, RES_640X480_75HZ_PIXCLOCK,   75},
62  {640, 480, RES_640X480_85HZ_PIXCLOCK,   85},
63  {640, 480, RES_640X480_100HZ_PIXCLOCK,  100},
64  {640, 480, RES_640X480_120HZ_PIXCLOCK,  120},
65  {720, 480, RES_720X480_60HZ_PIXCLOCK,   60},
66  {720, 576, RES_720X576_60HZ_PIXCLOCK,   60},
67  {800, 480, RES_800X480_60HZ_PIXCLOCK,   60},
68  {800, 600, RES_800X600_60HZ_PIXCLOCK,   60},
69  {800, 600, RES_800X600_75HZ_PIXCLOCK,   75},
70  {800, 600, RES_800X600_85HZ_PIXCLOCK,   85},
71  {800, 600, RES_800X600_100HZ_PIXCLOCK,  100},
72  {800, 600, RES_800X600_120HZ_PIXCLOCK,  120},
73  {848, 480, RES_848X480_60HZ_PIXCLOCK,   60},
74  {856, 480, RES_856X480_60HZ_PIXCLOCK,   60},
75  {1024,512, RES_1024X512_60HZ_PIXCLOCK,  60},
76  {1024,768, RES_1024X768_60HZ_PIXCLOCK,  60},
77  {1024,768, RES_1024X768_75HZ_PIXCLOCK,  75},
78  {1024,768, RES_1024X768_85HZ_PIXCLOCK,  85},
79  {1024,768, RES_1024X768_100HZ_PIXCLOCK, 100},
80  {1152,864, RES_1152X864_70HZ_PIXCLOCK,  70},
81  {1152,864, RES_1152X864_75HZ_PIXCLOCK,  75},
82  {1280,768, RES_1280X768_60HZ_PIXCLOCK,  60},
83  {1280,960, RES_1280X960_60HZ_PIXCLOCK,  60},
84  {1280,1024,RES_1280X1024_60HZ_PIXCLOCK, 60},
85  {1280,1024,RES_1280X1024_75HZ_PIXCLOCK, 75},
86  {1280,1024,RES_1280X768_85HZ_PIXCLOCK,  85},
87  {1440,1050,RES_1440X1050_60HZ_PIXCLOCK, 60},
88  {1600,1200,RES_1600X1200_60HZ_PIXCLOCK, 60},
89  {1600,1200,RES_1600X1200_75HZ_PIXCLOCK, 75},
90  {1280,720, RES_1280X720_60HZ_PIXCLOCK,  60},
91  {1920,1080,RES_1920X1080_60HZ_PIXCLOCK, 60},
92  {1400,1050,RES_1400X1050_60HZ_PIXCLOCK, 60},
93  {1366,768, RES_1366X768_60HZ_PIXCLOCK,60}
94};
95#define NUM_TOTAL_RES_MAP_REFRESH ARRAY_SIZE(res_map_refresh_tbl)
96
97struct io_reg CN400_ModeXregs[] = {
98    {VIASR, SR10, 0xFF, 0x01},
99    {VIASR, SR15, 0x02, 0x02},
100    {VIASR, SR16, 0xBF, 0x08},
101    {VIASR, SR17, 0xFF, 0x1F},
102    {VIASR, SR18, 0xFF, 0x4E},
103    {VIASR, SR1A, 0xFB, 0x08},
104    {VIASR, SR1E, 0x0F, 0x01},
105    {VIASR, SR2A, 0xF0, 0x00},
106    {VIACR, CR0A, 0xFF, 0x1E},          /* Cursor Start                        */
107    {VIACR, CR0B, 0xFF, 0x00},          /* Cursor End                          */
108    {VIACR, CR0E, 0xFF, 0x00},          /* Cursor Location High                */
109    {VIACR, CR0F, 0xFF, 0x00},          /* Cursor Localtion Low                */
110    {VIACR, CR32, 0xFF, 0x00},
111    {VIACR, CR33, 0xFF, 0x00},
112    {VIACR, CR34, 0xFF, 0x00},
113    {VIACR, CR35, 0xFF, 0x00},
114    {VIACR, CR36, 0x08, 0x00},
115    {VIACR, CR62, 0xFF, 0x00},          /* Secondary Display Starting Address  */
116    {VIACR, CR63, 0xFF, 0x00},          /* Secondary Display Starting Address  */
117    {VIACR, CR64, 0xFF, 0x00},          /* Secondary Display Starting Address  */
118    {VIACR, CR69, 0xFF, 0x00},
119    {VIACR, CR6A, 0xFF, 0x40},
120    {VIACR, CR6B, 0xFF, 0x00},
121    {VIACR, CR6C, 0xFF, 0x00},
122    {VIACR, CR7A, 0xFF, 0x01},          /* LCD Scaling Parameter 1             */
123    {VIACR, CR7B, 0xFF, 0x02},          /* LCD Scaling Parameter 2             */
124    {VIACR, CR7C, 0xFF, 0x03},          /* LCD Scaling Parameter 3             */
125    {VIACR, CR7D, 0xFF, 0x04},          /* LCD Scaling Parameter 4             */
126    {VIACR, CR7E, 0xFF, 0x07},          /* LCD Scaling Parameter 5             */
127    {VIACR, CR7F, 0xFF, 0x0A},          /* LCD Scaling Parameter 6             */
128    {VIACR, CR80, 0xFF, 0x0D},          /* LCD Scaling Parameter 7             */
129    {VIACR, CR81, 0xFF, 0x13},          /* LCD Scaling Parameter 8             */
130    {VIACR, CR82, 0xFF, 0x16},          /* LCD Scaling Parameter 9             */
131    {VIACR, CR83, 0xFF, 0x19},          /* LCD Scaling Parameter 10            */
132    {VIACR, CR84, 0xFF, 0x1C},          /* LCD Scaling Parameter 11            */
133    {VIACR, CR85, 0xFF, 0x1D},          /* LCD Scaling Parameter 12            */
134    {VIACR, CR86, 0xFF, 0x1E},          /* LCD Scaling Parameter 13            */
135    {VIACR, CR87, 0xFF, 0x1F},          /* LCD Scaling Parameter 14            */
136    {VIACR, CR88, 0xFF, 0x40},          /* LCD Panel Type                      */
137    {VIACR, CR89, 0xFF, 0x00},          /* LCD Timing Control 0                */
138    {VIACR, CR8A, 0xFF, 0x88},          /* LCD Timing Control 1                */
139    {VIACR, CR8B, 0xFF, 0x69},          /* LCD Power Sequence Control 0        */
140    {VIACR, CR8C, 0xFF, 0x57},          /* LCD Power Sequence Control 1        */
141    {VIACR, CR8D, 0xFF, 0x00},          /* LCD Power Sequence Control 2        */
142    {VIACR, CR8E, 0xFF, 0x7B},          /* LCD Power Sequence Control 3        */
143    {VIACR, CR8F, 0xFF, 0x03},          /* LCD Power Sequence Control 4        */
144    {VIACR, CR90, 0xFF, 0x30},          /* LCD Power Sequence Control 5        */
145    {VIACR, CR91, 0xFF, 0xA0},          /* 24/12 bit LVDS Data off             */
146    {VIACR, CR96, 0xFF, 0x00},
147    {VIACR, CR97, 0xFF, 0x00},
148    {VIACR, CR99, 0xFF, 0x00},
149    {VIACR, CR9B, 0xFF, 0x00}
150};
151#define NUM_TOTAL_CN400_ModeXregs ARRAY_SIZE(CN400_ModeXregs)
152
153/* Video Mode Table for VT3314 chipset*/
154/* Common Setting for Video Mode */
155struct io_reg CN900_ModeXregs[] = {
156  {VIASR,SR10,0xFF,0x01},
157  {VIASR,SR15,0x02,0x02},
158  {VIASR,SR16,0xBF,0x08},
159  {VIASR,SR17,0xFF,0x1F},
160  {VIASR,SR18,0xFF,0x4E},
161  {VIASR,SR1A,0xFB,0x82},
162  {VIASR,SR1B,0xFF,0xF0},
163  {VIASR,SR1F,0xFF,0x00},
164  {VIASR,SR1E,0xFF,0xF1},
165  {VIASR,SR22,0xFF,0x1F},
166  {VIASR,SR2A,0x0F,0x0F},
167  {VIASR,SR2E,0xFF,0xFF},
168  {VIASR,SR3F,0xFF,0xFF},
169  {VIASR,SR40,0xFF,0x00},
170  {VIASR,CR30,0xFF,0x04},
171  {VIACR,CR32,0xFF,0x00},
172  {VIACR,CR33,0xFF,0x00},
173  {VIACR,CR34,0xFF,0x00},
174  {VIACR,CR35,0xFF,0x00},
175  {VIACR,CR36,0xFF,0x31},
176  {VIACR,CR41,0xFF,0x80},
177  {VIACR,CR42,0xFF,0x00},
178  {VIACR,CR5D,0x80,0x00},                                      /* Horizontal Retrace Start bit [11] should be 0*/
179  {VIACR,CR62,0xFF,0x00},                                      /* Secondary Display Starting Address*/
180  {VIACR,CR63,0xFF,0x00},                                      /* Secondary Display Starting Address*/
181  {VIACR,CR64,0xFF,0x00},                                      /* Secondary Display Starting Address*/
182  {VIACR,CR68,0xFF,0x67},                                      /* Default FIFO For IGA2 */
183  {VIACR,CR69,0xFF,0x00},
184  {VIACR,CR6A,0xFF,0x40},
185  {VIACR,CR6B,0xFF,0x00},
186  {VIACR,CR6C,0xFF,0x00},
187  {VIACR,CR77,0xFF,0x00},                                      /* LCD scaling Factor*/
188  {VIACR,CR78,0xFF,0x00},                                      /* LCD scaling Factor */
189  {VIACR,CR79,0xFF,0x00},                                      /* LCD scaling Factor*/
190  {VIACR,CR9F,0x03,0x00},                                      /* LCD scaling Factor */
191  {VIACR,CR7A,0xFF,0x01},                                      /* LCD Scaling Parameter 1*/
192  {VIACR,CR7B,0xFF,0x02},                                      /* LCD Scaling Parameter 2*/
193  {VIACR,CR7C,0xFF,0x03},                                      /* LCD Scaling Parameter 3 */
194  {VIACR,CR7D,0xFF,0x04},                                      /* LCD Scaling Parameter 4*/
195  {VIACR,CR7E,0xFF,0x07},                                      /* LCD Scaling Parameter 5*/
196  {VIACR,CR7F,0xFF,0x0A},                                      /* LCD Scaling Parameter 6*/
197  {VIACR,CR80,0xFF,0x0D},                                      /* LCD Scaling Parameter 7*/
198  {VIACR,CR81,0xFF,0x13},                                      /* LCD Scaling Parameter 8*/
199  {VIACR,CR82,0xFF,0x16},                                      /* LCD Scaling Parameter 9*/
200  {VIACR,CR83,0xFF,0x19},                                      /* LCD Scaling Parameter 10*/
201  {VIACR,CR84,0xFF,0x1C},                                      /* LCD Scaling Parameter 11*/
202  {VIACR,CR85,0xFF,0x1D},                                      /* LCD Scaling Parameter 12*/
203  {VIACR,CR86,0xFF,0x1E},                                      /* LCD Scaling Parameter 13*/
204  {VIACR,CR87,0xFF,0x1F},                                      /* LCD Scaling Parameter 14*/
205  {VIACR,CR88,0xFF,0x40},                                      /* LCD Panel Type */
206  {VIACR,CR89,0xFF,0x00},                                      /* LCD Timing Control 0 */
207  {VIACR,CR8A,0xFF,0x88},                                      /* LCD Timing Control 1*/
208  {VIACR,CR8B,0xFF,0x69},                                      /* LCD Power Sequence Control 0*/
209  {VIACR,CR8C,0xFF,0x57},                                      /* LCD Power Sequence Control 1*/
210  {VIACR,CR8D,0xFF,0x00},                                      /* LCD Power Sequence Control 2*/
211  {VIACR,CR8E,0xFF,0x7B},                                      /* LCD Power Sequence Control 3*/
212  {VIACR,CR8F,0xFF,0x03},                                      /* LCD Power Sequence Control 4*/
213  {VIACR,CR90,0xFF,0x30},                                      /* LCD Power Sequence Control 5*/
214  {VIACR,CR91,0xFF,0xA0},                                      /* 24/12 bit LVDS Data off*/
215  {VIACR,CR96,0xFF,0x00},
216  {VIACR,CR97,0xFF,0x00},
217  {VIACR,CR99,0xFF,0x00},
218  {VIACR,CR9B,0xFF,0x00},
219  {VIACR,CR9D,0xFF,0x80},
220  {VIACR,CR9E,0xFF,0x80}
221};
222#define NUM_TOTAL_CN900_ModeXregs ARRAY_SIZE(CN900_ModeXregs)
223
224struct io_reg KM400_ModeXregs[] = {
225    {VIASR, SR10, 0xFF, 0x01},          /* Unlock Register                     */
226    {VIASR, SR16, 0xFF, 0x08},          /* Display FIFO threshold Control      */
227    {VIASR, SR17, 0xFF, 0x1F},          /* Display FIFO Control                */
228    {VIASR, SR18, 0xFF, 0x4E},          /* GFX PREQ threshold                  */
229    {VIASR, SR1A, 0xFF, 0x0a},          /* GFX PREQ threshold                  */
230    {VIASR, SR1F, 0xFF, 0x00},          /* Memory Control 0                    */
231    {VIASR, SR1B, 0xFF, 0xF0},          /* Power Management Control 0          */
232    {VIASR, SR1E, 0x0F, 0x01},          /* Power Management Control            */
233    {VIASR, SR20, 0xFF, 0x00},          /* Sequencer Arbiter Control 0         */
234    {VIASR, SR21, 0xFF, 0x00},          /* Sequencer Arbiter Control 1         */
235    {VIASR, SR22, 0xFF, 0x1F},          /* Display Arbiter Control 1           */
236    {VIASR, SR2A, 0xF0, 0x00},          /* Power Management Control 5          */
237    {VIASR, SR2D, 0xFF, 0xFF},          /* Power Management Control 1          */
238    {VIASR, SR2E, 0xFF, 0xFF},          /* Power Management Control 2          */
239    {VIACR, CR0A, 0xFF, 0x1E},          /* Cursor Start                        */
240    {VIACR, CR0B, 0xFF, 0x00},          /* Cursor End                          */
241    {VIACR, CR0E, 0xFF, 0x00},          /* Cursor Location High                */
242    {VIACR, CR0F, 0xFF, 0x00},          /* Cursor Localtion Low                */
243    {VIACR, CR33, 0xFF, 0x00},
244    {VIACR, CR55, 0x80, 0x00},
245    {VIACR, CR5D, 0x80, 0x00},
246    {VIACR, CR36, 0xFF, 0x01},          /* Power Mangement 3                   */
247    {VIACR, CR62, 0xFF, 0x00},          /* Secondary Display Starting Address  */
248    {VIACR, CR63, 0xFF, 0x00},          /* Secondary Display Starting Address  */
249    {VIACR, CR64, 0xFF, 0x00},          /* Secondary Display Starting Address  */
250    {VIACR, CR68, 0xFF, 0x67},          /* Default FIFO For IGA2               */
251    {VIACR, CR6A, 0x20, 0x20},          /* Extended FIFO On                    */
252    {VIACR, CR7A, 0xFF, 0x01},          /* LCD Scaling Parameter 1             */
253    {VIACR, CR7B, 0xFF, 0x02},          /* LCD Scaling Parameter 2             */
254    {VIACR, CR7C, 0xFF, 0x03},          /* LCD Scaling Parameter 3             */
255    {VIACR, CR7D, 0xFF, 0x04},          /* LCD Scaling Parameter 4             */
256    {VIACR, CR7E, 0xFF, 0x07},          /* LCD Scaling Parameter 5             */
257    {VIACR, CR7F, 0xFF, 0x0A},          /* LCD Scaling Parameter 6             */
258    {VIACR, CR80, 0xFF, 0x0D},          /* LCD Scaling Parameter 7             */
259    {VIACR, CR81, 0xFF, 0x13},          /* LCD Scaling Parameter 8             */
260    {VIACR, CR82, 0xFF, 0x16},          /* LCD Scaling Parameter 9             */
261    {VIACR, CR83, 0xFF, 0x19},          /* LCD Scaling Parameter 10            */
262    {VIACR, CR84, 0xFF, 0x1C},          /* LCD Scaling Parameter 11            */
263    {VIACR, CR85, 0xFF, 0x1D},          /* LCD Scaling Parameter 12            */
264    {VIACR, CR86, 0xFF, 0x1E},          /* LCD Scaling Parameter 13            */
265    {VIACR, CR87, 0xFF, 0x1F},          /* LCD Scaling Parameter 14            */
266    {VIACR, CR88, 0xFF, 0x40},          /* LCD Panel Type                      */
267    {VIACR, CR89, 0xFF, 0x00},          /* LCD Timing Control 0                */
268    {VIACR, CR8A, 0xFF, 0x88},          /* LCD Timing Control 1                */
269    {VIACR, CR8B, 0xFF, 0x2D},          /* LCD Power Sequence Control 0        */
270    {VIACR, CR8C, 0xFF, 0x2D},          /* LCD Power Sequence Control 1        */
271    {VIACR, CR8D, 0xFF, 0xC8},          /* LCD Power Sequence Control 2        */
272    {VIACR, CR8E, 0xFF, 0x36},          /* LCD Power Sequence Control 3        */
273    {VIACR, CR8F, 0xFF, 0x00},          /* LCD Power Sequence Control 4        */
274    {VIACR, CR90, 0xFF, 0x10},          /* LCD Power Sequence Control 5        */
275    {VIACR, CR91, 0xFF, 0xA0},          /* 24/12 bit LVDS Data off             */
276    {VIACR, CR96, 0xFF, 0x03},          /* TV on DVP0        ; DVP0 Clock Skew */
277    {VIACR, CR97, 0xFF, 0x03},          /* TV on DFP high    ; DFPH Clock Skew */
278    {VIACR, CR99, 0xFF, 0x03},          /* DFP low           ; DFPL Clock Skew */
279    {VIACR, CR9B, 0xFF, 0x07}           /* DVI on DVP1       ; DVP1 Clock Skew */
280};
281#define NUM_TOTAL_KM400_ModeXregs ARRAY_SIZE(KM400_ModeXregs)
282
283/* For VT3324: Common Setting for Video Mode */
284struct io_reg CX700_ModeXregs[] = {
285    {VIASR, SR10, 0xFF, 0x01},
286    {VIASR, SR15, 0x02, 0x02},
287    {VIASR, SR16, 0xBF, 0x08},
288    {VIASR, SR17, 0xFF, 0x1F},
289    {VIASR, SR18, 0xFF, 0x4E},
290    {VIASR, SR1A, 0xFB, 0x08},
291    {VIASR, SR1B, 0xFF, 0xF0},
292    {VIASR, SR1E, 0x0F, 0x01},
293    {VIASR, SR2A, 0xF0, 0x00},
294    {VIACR, CR0A, 0xFF, 0x1E},          /* Cursor Start                        */
295    {VIACR, CR0B, 0xFF, 0x00},          /* Cursor End                          */
296    {VIACR, CR0E, 0xFF, 0x00},          /* Cursor Location High                */
297    {VIACR, CR0F, 0xFF, 0x00},          /* Cursor Localtion Low                */
298    {VIACR, CR32, 0xFF, 0x00},
299    {VIACR, CR33, 0xFF, 0x00},
300    {VIACR, CR34, 0xFF, 0x00},
301    {VIACR, CR35, 0xFF, 0x00},
302    {VIACR, CR36, 0x08, 0x00},
303    {VIACR, CR47, 0xC8, 0x00},          /* Clear VCK Plus. */
304    {VIACR, CR62, 0xFF, 0x00},          /* Secondary Display Starting Address  */
305    {VIACR, CR63, 0xFF, 0x00},          /* Secondary Display Starting Address  */
306    {VIACR, CR64, 0xFF, 0x00},          /* Secondary Display Starting Address  */
307    {VIACR, CRA3, 0xFF, 0x00},          /* Secondary Display Starting Address  */
308    {VIACR, CR69, 0xFF, 0x00},
309    {VIACR, CR6A, 0xFF, 0x40},
310    {VIACR, CR6B, 0xFF, 0x00},
311    {VIACR, CR6C, 0xFF, 0x00},
312    {VIACR, CR7A, 0xFF, 0x01},          /* LCD Scaling Parameter 1             */
313    {VIACR, CR7B, 0xFF, 0x02},          /* LCD Scaling Parameter 2             */
314    {VIACR, CR7C, 0xFF, 0x03},          /* LCD Scaling Parameter 3             */
315    {VIACR, CR7D, 0xFF, 0x04},          /* LCD Scaling Parameter 4             */
316    {VIACR, CR7E, 0xFF, 0x07},          /* LCD Scaling Parameter 5             */
317    {VIACR, CR7F, 0xFF, 0x0A},          /* LCD Scaling Parameter 6             */
318    {VIACR, CR80, 0xFF, 0x0D},          /* LCD Scaling Parameter 7             */
319    {VIACR, CR81, 0xFF, 0x13},          /* LCD Scaling Parameter 8             */
320    {VIACR, CR82, 0xFF, 0x16},          /* LCD Scaling Parameter 9             */
321    {VIACR, CR83, 0xFF, 0x19},          /* LCD Scaling Parameter 10            */
322    {VIACR, CR84, 0xFF, 0x1C},          /* LCD Scaling Parameter 11            */
323    {VIACR, CR85, 0xFF, 0x1D},          /* LCD Scaling Parameter 12            */
324    {VIACR, CR86, 0xFF, 0x1E},          /* LCD Scaling Parameter 13            */
325    {VIACR, CR87, 0xFF, 0x1F},          /* LCD Scaling Parameter 14            */
326    {VIACR, CR88, 0xFF, 0x40},          /* LCD Panel Type                      */
327    {VIACR, CR89, 0xFF, 0x00},          /* LCD Timing Control 0                */
328    {VIACR, CR8A, 0xFF, 0x88},          /* LCD Timing Control 1                */
329    {VIACR, CRD4, 0xFF, 0x81},          /* Second power sequence control       */
330    {VIACR, CR8B, 0xFF, 0x5D},          /* LCD Power Sequence Control 0        */
331    {VIACR, CR8C, 0xFF, 0x2B},          /* LCD Power Sequence Control 1        */
332    {VIACR, CR8D, 0xFF, 0x6F},          /* LCD Power Sequence Control 2        */
333    {VIACR, CR8E, 0xFF, 0x2B},          /* LCD Power Sequence Control 3        */
334    {VIACR, CR8F, 0xFF, 0x01},          /* LCD Power Sequence Control 4        */
335    {VIACR, CR90, 0xFF, 0x01},          /* LCD Power Sequence Control 5        */
336    {VIACR, CR91, 0xFF, 0x80},          /* 24/12 bit LVDS Data off             */
337    {VIACR, CR96, 0xFF, 0x00},
338    {VIACR, CR97, 0xFF, 0x00},
339    {VIACR, CR99, 0xFF, 0x00},
340    {VIACR, CR9B, 0xFF, 0x00},
341    {VIACR, CRD2, 0xFF, 0x03}           /* LVDS0/LVDS1 Channel format.         */
342};
343
344#define NUM_TOTAL_CX700_ModeXregs ARRAY_SIZE(CX700_ModeXregs)
345
346/* Video Mode Table */
347/* Common Setting for Video Mode */
348struct io_reg CLE266_ModeXregs[] = {
349  {VIASR,SR1E,0xF0,0xF0},
350  {VIASR,SR2A,0x0F,0x0F},
351  {VIASR,SR15,0x02,0x02},
352  {VIASR,SR16,0xBF,0x08},
353  {VIASR,SR17,0xFF,0x1F},
354  {VIASR,SR18,0xFF,0x4E},
355  {VIASR,SR1A,0xFB,0x08},
356
357  {VIACR,CR32,0xFF,0x00},
358//  {VIACR,CR33,0xFF,0x08}, // for K800 prefetch mode
359  {VIACR,CR34,0xFF,0x00},
360  {VIACR,CR35,0xFF,0x00},
361  {VIACR,CR36,0x08,0x00},
362  {VIACR,CR6A,0xFF,0x80},
363  {VIACR,CR6A,0xFF,0xC0},
364
365  {VIACR,CR55,0x80,0x00},
366  {VIACR,CR5D,0x80,0x00},
367
368  {VIAGR,GR20,0xFF,0x00},
369  {VIAGR,GR21,0xFF,0x00},
370  {VIAGR,GR22,0xFF,0x00},
371                            // LCD Parameters
372  {VIACR,CR7A,0xFF,0x01},   // LCD Parameter 1
373  {VIACR,CR7B,0xFF,0x02},   // LCD Parameter 2
374  {VIACR,CR7C,0xFF,0x03},   // LCD Parameter 3
375  {VIACR,CR7D,0xFF,0x04},   // LCD Parameter 4
376  {VIACR,CR7E,0xFF,0x07},   // LCD Parameter 5
377  {VIACR,CR7F,0xFF,0x0A},   // LCD Parameter 6
378  {VIACR,CR80,0xFF,0x0D},   // LCD Parameter 7
379  {VIACR,CR81,0xFF,0x13},   // LCD Parameter 8
380  {VIACR,CR82,0xFF,0x16},   // LCD Parameter 9
381  {VIACR,CR83,0xFF,0x19},   // LCD Parameter 10
382  {VIACR,CR84,0xFF,0x1C},   // LCD Parameter 11
383  {VIACR,CR85,0xFF,0x1D},   // LCD Parameter 12
384  {VIACR,CR86,0xFF,0x1E},   // LCD Parameter 13
385  {VIACR,CR87,0xFF,0x1F},   // LCD Parameter 14
386
387};
388
389#define NUM_TOTAL_CLE266_ModeXregs ARRAY_SIZE(CLE266_ModeXregs)
390
391/* Mode:1024X768 */
392struct io_reg PM1024x768[] = {
393  {VIASR,0x16,0xBF,0x0C},
394  {VIASR,0x18,0xFF,0x4C}
395};
396
397struct patch_table res_patch_table[]= {
398  {VIA_RES_1024X768, ARRAY_SIZE(PM1024x768), PM1024x768}
399};
400#define NUM_TOTAL_PATCH_MODE ARRAY_SIZE(res_patch_table)
401
402// struct VPITTable {
403//  unsigned char  Misc;
404//  unsigned char  SR[StdSR];
405//  unsigned char  CR[StdCR];
406//  unsigned char  GR[StdGR];
407//  unsigned char  AR[StdAR];
408// };
409
410struct VPITTable VPIT = {
411    // Msic
412    0xC7,
413    // Sequencer
414    {0x01,0x0F,0x00,0x0E },
415    // Graphic Controller
416    {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0F,0xFF},
417    // Attribute Controller
418    {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
419     0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
420     0x01,0x00,0x0F,0x00}
421};
422
423/********************/
424/* Mode Table       */
425/********************/
426
427// 640x480
428struct crt_mode_table CRTM640x480[] = {
429  //r_rate,vclk,hsp,vsp
430  //HT,  HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
431  {REFRESH_60, CLK_25_175M ,M640X480_R60_HSP, M640X480_R60_VSP,\
432  {800, 640, 648, 144, 656, 96,  525, 480, 480, 45,  490, 2}},
433  {REFRESH_75, CLK_31_500M ,M640X480_R75_HSP, M640X480_R75_VSP,\
434  {840, 640, 640, 200, 656, 64,  500, 480, 480, 20,  481, 3}},
435  {REFRESH_85, CLK_36_000M ,M640X480_R85_HSP, M640X480_R85_VSP,\
436  {832, 640, 640, 192, 696, 56,  509, 480, 480, 29,  481, 3}},
437  {REFRESH_100,CLK_43_163M ,M640X480_R100_HSP, M640X480_R100_VSP,\
438  {848, 640, 640, 208, 680, 64,  509, 480, 480, 29,  481, 3}}, //GTF
439  {REFRESH_120,CLK_52_406M ,M640X480_R120_HSP, M640X480_R120_VSP,\
440  {848, 640, 640, 208, 680, 64,  515, 480, 480, 35,  481, 3}}  //GTF
441};
442
443//720x480 (GTF)
444struct crt_mode_table CRTM720x480[] = {
445  //r_rate,vclk,hsp,vsp
446  //HT, HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
447  {REFRESH_60,CLK_26_880M ,M720X480_R60_HSP, M720X480_R60_VSP,\
448  {896, 720, 720, 176, 736, 72,  497, 480, 480, 17,  481, 3}}
449
450};
451
452//720x576 (GTF)
453struct crt_mode_table CRTM720x576[] = {
454  //r_rate,vclk,hsp,vsp
455  //HT,  HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
456  {REFRESH_60,CLK_32_668M ,M720X576_R60_HSP, M720X576_R60_VSP,\
457  {912, 720, 720, 192, 744, 72,  597, 576, 576, 21,  577, 3}}
458};
459
460//800x480 (GTF)
461struct crt_mode_table CRTM800x480[] = {
462  //r_rate,vclk,hsp,vsp
463  //HT,  HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
464  {REFRESH_60,CLK_29_581M ,M800X480_R60_HSP,M800X480_R60_VSP,\
465  {992, 800, 800, 192, 816, 80,  497, 480, 480, 17,  481, 3}}
466};
467// 800x600
468struct crt_mode_table CRTM800x600[] = {
469  //r_rate,vclk,hsp,vsp
470  //HT,   HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
471  {REFRESH_60, CLK_40_000M ,M800X600_R60_HSP, M800X600_R60_VSP,\
472  {1056, 800, 800, 256, 840, 128, 628, 600, 600, 28,  601, 4}},
473  {REFRESH_75, CLK_49_500M ,M800X600_R75_HSP, M800X600_R75_VSP,\
474  {1056, 800, 800, 256, 816, 80,  625, 600, 600, 25,  601, 3}},
475  {REFRESH_85, CLK_56_250M ,M800X600_R85_HSP, M800X600_R85_VSP,\
476  {1048, 800, 800, 248, 832, 64,  631, 600, 600, 31,  601, 3}},
477  {REFRESH_100,CLK_68_179M ,M800X600_R100_HSP, M800X600_R100_VSP,\
478  {1072, 800, 800, 272, 848, 88,  636, 600, 600, 36,  601, 3}}, //GTF
479  {REFRESH_120,CLK_83_950M ,M800X600_R120_HSP, M800X600_R120_VSP,\
480  {1088, 800, 800, 288, 856, 88,  643, 600, 600, 43,  601, 3}}  //GTF
481};
482//848x480 (GTF)
483struct crt_mode_table CRTM848x480[] = {
484  //r_rate,vclk,hsp,vsp
485  //HT,   HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
486  {REFRESH_60,CLK_31_490M ,M848X480_R60_HSP, M848X480_R60_VSP,\
487  {1056, 848, 848, 208, 864, 88,  497, 480, 480, 17,  481, 3}}
488};
489
490//856x480 (GTF) convert to 852x480
491struct crt_mode_table CRTM852x480[] = {
492  //r_rate,vclk,hsp,vsp
493  //HT,   HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
494  {REFRESH_60,CLK_31_728M ,M852X480_R60_HSP, M852X480_R60_VSP,\
495  {1064, 856, 856, 208, 872, 88,  497, 480, 480, 17,  481, 3}}
496
497};
498
499//1024x512 (GTF)
500struct crt_mode_table CRTM1024x512[] = {
501  //r_rate,vclk,hsp,vsp
502  //HT,   HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
503  {REFRESH_60,CLK_41_291M ,M1024X512_R60_HSP, M1024X512_R60_VSP,\
504  {1296, 1024,1024,272, 1056,104, 531, 512, 512, 19,  513, 3}}
505
506};
507
508//1024x576 (GTF)
509/*static struct crt_mode_table CRTM1024x576[] = {
510  //r_rate,vclk,     HT,   HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
511  { 60,CLK_46_996M ,{1312, 1024,1024,288, 1064,104, 597, 576, 576, 21,  577, 3}}
512
513};*/
514
515// 1024x768
516struct crt_mode_table CRTM1024x768[] = {
517  //r_rate,vclk,hsp,vsp
518  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
519  {REFRESH_60,CLK_65_000M ,M1024X768_R60_HSP, M1024X768_R60_VSP,\
520  {1344, 1024, 1024, 320, 1048, 136, 806, 768, 768, 38,  771, 6}},
521  {REFRESH_75,CLK_78_750M ,M1024X768_R75_HSP, M1024X768_R75_VSP,\
522  {1312, 1024, 1024, 288, 1040, 96,  800, 768, 768, 32,  769, 3}},
523  {REFRESH_85,CLK_94_500M ,M1024X768_R85_HSP, M1024X768_R85_VSP,\
524  {1376, 1024, 1024, 352, 1072, 96,  808, 768, 768, 40,  769, 3}},
525  {REFRESH_100,CLK_133_308M,M1024X768_R100_HSP, M1024X768_R100_VSP,\
526  {1392, 1024, 1024, 368, 1096, 112, 814, 768, 768, 46,  769, 3}} //GTF
527};
528
529// 1152x864
530struct crt_mode_table CRTM1152x864[] = {
531  //r_rate,vclk,hsp,vsp
532  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
533  {REFRESH_75,CLK_108_000M ,M1152X864_R75_HSP, M1152X864_R75_VSP,\
534  {1600, 1152,1152, 448, 1216, 128, 900, 864, 864, 36,  865, 3}}
535
536};
537
538// 1280x720 (GTF)
539struct crt_mode_table CRTM1280x720[] = {
540  //r_rate,vclk,hsp,vsp
541  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
542  {REFRESH_60,CLK_74_481M ,M1280X720_R60_HSP, M1280X720_R60_VSP,\
543  {1664,1280, 1280, 384, 1336, 136, 746, 720, 720, 26,  721, 3}}
544};
545
546//1280x768 (GTF)
547struct crt_mode_table CRTM1280x768[] = {
548  //r_rate,vclk,hsp,vsp
549  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
550  {REFRESH_60,CLK_80_136M ,M1280X768_R60_HSP, M1280X768_R60_VSP,\
551  {1680,1280, 1280, 400, 1344, 136, 795, 768, 768, 27,  769, 3}}
552};
553
554//1280x960
555struct crt_mode_table CRTM1280x960[] = {
556  //r_rate,vclk,hsp,vsp
557  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
558  {REFRESH_60,CLK_108_000M ,M1280X960_R60_HSP, M1280X960_R60_VSP,\
559  {1800,1280, 1280, 520, 1376, 112, 1000,960, 960, 40,  961, 3}}
560};
561
562// 1280x1024
563struct crt_mode_table CRTM1280x1024[] = {
564  //r_rate,vclk,,hsp,vsp
565  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
566  {REFRESH_60,CLK_108_000M ,M1280X1024_R60_HSP, M1280X1024_R60_VSP,\
567  {1688,1280, 1280, 408, 1328, 112, 1066,1024,1024,42,  1025,3}},
568  {REFRESH_75,CLK_135_000M ,M1280X1024_R75_HSP, M1280X1024_R75_VSP,\
569  {1688,1280, 1280, 408, 1296, 144, 1066,1024,1024,42,  1025,3}},
570  {REFRESH_85,CLK_157_500M ,M1280X1024_R85_HSP, M1280X1024_R85_VSP,\
571  {1728,1280, 1280, 448, 1344, 160, 1072,1024,1024,48,  1025,3}}
572};
573
574/* 1366x768 (GTF) */
575struct crt_mode_table CRTM1366x768[] = {
576  // r_rate,  vclk, hsp, vsp
577  // HT,  HA,  HBS, HBE, HSS, HSE, VT,  VA,  VBS, VBE, VSS, VSE
578  {REFRESH_60, CLK_85_860M, M1368X768_R60_HSP, M1368X768_R60_VSP,\
579  {1800,1366, 1366, 432, 1440, 144, 795, 768, 768, 27,  769, 3}}
580};
581
582//1368x768 (GTF)
583/*static struct crt_mode_table CRTM1368x768[] = {
584  //r_rate,vclk,     HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
585  { 60,CLK_85_860M ,{1800,1368, 1368, 432, 1440, 144, 795, 768, 768, 27,  769, 3}}
586};*/
587
588//1440x1050 (GTF)
589struct crt_mode_table CRTM1440x1050[] = {
590  //r_rate,vclk,hsp,vsp
591  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
592  {REFRESH_60 ,CLK_125_104M ,M1440X1050_R60_HSP, M1440X1050_R60_VSP,\
593  {1936,1440, 1440, 496, 1536, 152, 1077,1040,1040,37,  1041,3}}
594};
595
596// 1600x1200
597struct crt_mode_table CRTM1600x1200[] = {
598  //r_rate,vclk,hsp,vsp
599  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
600  {REFRESH_60 ,CLK_162_000M ,M1600X1200_R60_HSP, M1600X1200_R60_VSP,\
601  {2160,1600, 1600, 560, 1664, 192, 1250,1200,1200,50,  1201,3}},
602  {REFRESH_75 ,CLK_202_500M ,M1600X1200_R75_HSP, M1600X1200_R75_VSP,\
603  {2160,1600, 1600, 560, 1664, 192, 1250,1200,1200,50,  1201,3}}
604
605};
606
607// 1920x1080 (GTF)
608struct crt_mode_table CRTM1920x1080[] = {
609  //r_rate,vclk,hsp,vsp
610  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
611  {REFRESH_60,CLK_172_798M ,M1920X1080_R60_HSP, M1920X1080_R60_VSP,\
612  {2576,1920, 1920, 656, 2040, 208, 1118,1080,1080,38, 1081, 3}}
613};
614
615// 1920x1440
616struct crt_mode_table CRTM1920x1440[] = {
617  //r_rate,vclk,hsp,vsp
618  //HT,  HA,   HBS,  HBE, HSS,  HSE, VT,  VA,  VBS, VBE, VSS, VSE
619  {REFRESH_60,CLK_234_000M ,M1920X1440_R60_HSP, M1920X1440_R60_VSP,\
620  {2600,1920, 1920, 680, 2048, 208, 1500,1440,1440,60,  1441,3}},
621  {REFRESH_75,CLK_297_500M ,M1920X1440_R75_HSP, M1920X1440_R75_VSP,\
622  {2640,1920, 1920, 720, 2064, 224, 1500,1440,1440,60,  1441,3}}
623};
624
625/* 1400x1050 (VESA) */
626struct crt_mode_table CRTM1400x1050[] = {
627  /* r_rate,          vclk,              hsp,             vsp   */
628  /* HT,  HA,  HBS, HBE, HSS, HSE,    VT,  VA,  VBS, VBE,  VSS, VSE */
629  {REFRESH_60,CLK_108_000M, M1400X1050_R60_HSP, M1400X1050_R60_VSP,
630  {1688,1400, 1400, 288, 1448, 112, 1066,1050, 1050,  16, 1051, 3}}
631};
632
633/* Video Mode Table */
634// struct VideoModeTable {
635//  int                               ModeIndex;
636//  struct crt_mode_table             *crtc;
637//  int                               mode_array;
638// };
639struct VideoModeTable CLE266Modes[] = {
640   /* Display : 640x480 */
641   { VIA_RES_640X480,  CRTM640x480, ARRAY_SIZE(CRTM640x480)},
642
643   /* Display : 720x480 (GTF)*/
644   { VIA_RES_720X480,  CRTM720x480, ARRAY_SIZE(CRTM720x480)},
645
646   /* Display : 720x576 (GTF)*/
647   { VIA_RES_720X576,  CRTM720x576, ARRAY_SIZE(CRTM720x576)},
648
649   /* Display : 800x600 */
650   { VIA_RES_800X600,  CRTM800x600, ARRAY_SIZE(CRTM800x600)},
651
652   /* Display : 800x480 (GTF)*/
653   { VIA_RES_800X480,  CRTM800x480, ARRAY_SIZE(CRTM800x480)},
654
655   /* Display : 848x480 (GTF)*/
656   { VIA_RES_848X480,  CRTM848x480, ARRAY_SIZE(CRTM848x480)},
657
658   /* Display : 852x480 (GTF)*/
659   { VIA_RES_856X480,  CRTM852x480, ARRAY_SIZE(CRTM852x480)},
660
661   /* Display : 1024x512 (GTF)*/
662   { VIA_RES_1024X512, CRTM1024x512, ARRAY_SIZE(CRTM1024x512)},
663
664    /* Display : 1024x576 (GTF)*/
665   //{ VIA_RES_1024X576, CRTM1024x576, ARRAY_SIZE(CRTM1024x576)},
666
667   /* Display : 1024x768 */
668   { VIA_RES_1024X768, CRTM1024x768, ARRAY_SIZE(CRTM1024x768)},
669
670   /* Display : 1152x864 */
671   { VIA_RES_1152X864, CRTM1152x864, ARRAY_SIZE(CRTM1152x864)},
672
673   /* Display : 1280x768 (GTF)*/
674   { VIA_RES_1280X768, CRTM1280x768, ARRAY_SIZE(CRTM1280x768)},
675
676   /* Display : 1280x800 (GTF)*/
677   //{ M1280x800, CRTM1280x800, ARRAY_SIZE(CRTM1280x800)},
678
679   /* Display : 1280x960 */
680   { VIA_RES_1280X960, CRTM1280x960, ARRAY_SIZE(CRTM1280x960)},
681
682   /* Display : 1280x1024 */
683   { VIA_RES_1280X1024, CRTM1280x1024,ARRAY_SIZE(CRTM1280x1024)},
684
685   /* Display : 1368x768 (GTF)*/
686   //{ M1368x768,CRTM1368x768,ARRAY_SIZE(CRTM1368x768)},
687/* Display : 1366x768 (GTF)*/
688   { VIA_RES_1366X768,CRTM1366x768,ARRAY_SIZE(CRTM1366x768)},
689
690   /* Display : 1440x1050 (GTF)*/
691   { VIA_RES_1440X1050, CRTM1440x1050, ARRAY_SIZE(CRTM1440x1050)},
692
693   /* Display : 1600x1200 */
694   { VIA_RES_1600X1200, CRTM1600x1200, ARRAY_SIZE(CRTM1600x1200)},
695
696   /* Display : 1920x1440 */
697   { VIA_RES_1920X1440, CRTM1920x1440, ARRAY_SIZE(CRTM1920x1440)},
698
699   /* Display : 1280x720 */
700   { VIA_RES_1280X720, CRTM1280x720, ARRAY_SIZE(CRTM1280x720)},
701
702   /* Display : 1920x1080 */
703   { VIA_RES_1920X1080, CRTM1920x1080, ARRAY_SIZE(CRTM1920x1080)},
704
705   /* Display : 1400x1050 */
706   { VIA_RES_1400X1050, CRTM1400x1050, ARRAY_SIZE(CRTM1400x1050)}
707};
708
709#define NUM_TOTAL_MODETABLE ARRAY_SIZE(CLE266Modes)
710
711
712#endif /* _DEV_PCI_UNICHROMEMODE_H */
713