1 #ifndef _XGIFB_MAIN
2 #define _XGIFB_MAIN
3 
4 
5 /* ------------------- Constant Definitions ------------------------- */
6 
7 
8 #include "XGIfb.h"
9 #include "vb_struct.h"
10 #include "vb_def.h"
11 
12 #define XGIFAIL(x) do { printk(x "\n"); return -EINVAL; } while (0)
13 
14 #ifndef PCI_VENDOR_ID_XG
15 #define PCI_VENDOR_ID_XG          0x18CA
16 #endif
17 
18 #ifndef PCI_DEVICE_ID_XG_40
19 #define PCI_DEVICE_ID_XG_40      0x040
20 #endif
21 #ifndef PCI_DEVICE_ID_XG_41
22 #define PCI_DEVICE_ID_XG_41      0x041
23 #endif
24 #ifndef PCI_DEVICE_ID_XG_42
25 #define PCI_DEVICE_ID_XG_42      0x042
26 #endif
27 #ifndef PCI_DEVICE_ID_XG_20
28 #define PCI_DEVICE_ID_XG_20      0x020
29 #endif
30 #ifndef PCI_DEVICE_ID_XG_27
31 #define PCI_DEVICE_ID_XG_27      0x027
32 #endif
33 
34 static DEFINE_PCI_DEVICE_TABLE(xgifb_pci_table) = {
35 	{PCI_DEVICE(PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_20)},
36 	{PCI_DEVICE(PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_27)},
37 	{PCI_DEVICE(PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_40)},
38 	{PCI_DEVICE(PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_42)},
39 	{0}
40 };
41 
42 MODULE_DEVICE_TABLE(pci, xgifb_pci_table);
43 
44 /* To be included in fb.h */
45 #ifndef FB_ACCEL_XGI_XABRE
46 #define FB_ACCEL_XGI_XABRE      41	/* XGI 330 ("Xabre")		*/
47 #endif
48 
49 #define SEQ_DATA                  0x15
50 
51 #define XGISR			  (xgifb_info->dev_info.P3c4)
52 #define XGICR			  (xgifb_info->dev_info.P3d4)
53 #define XGIDACA			  (xgifb_info->dev_info.P3c8)
54 #define XGIDACD			  (xgifb_info->dev_info.P3c9)
55 #define XGIPART1		  (xgifb_info->dev_info.Part1Port)
56 #define XGIPART2		  (xgifb_info->dev_info.Part2Port)
57 #define XGIPART3		  (xgifb_info->dev_info.Part3Port)
58 #define XGIPART4		  (xgifb_info->dev_info.Part4Port)
59 #define XGIPART5		  (xgifb_info->dev_info.Part5Port)
60 #define XGIDAC2A                  XGIPART5
61 #define XGIDAC2D                  (XGIPART5 + 1)
62 
63 #define IND_XGI_PASSWORD          0x05  /* SRs */
64 #define IND_XGI_RAMDAC_CONTROL    0x07
65 #define IND_XGI_DRAM_SIZE         0x14
66 #define IND_XGI_MODULE_ENABLE     0x1E
67 #define IND_XGI_PCI_ADDRESS_SET   0x20
68 
69 #define IND_XGI_SCRATCH_REG_CR30  0x30  /* CRs */
70 #define IND_XGI_SCRATCH_REG_CR31  0x31
71 #define IND_XGI_SCRATCH_REG_CR32  0x32
72 #define IND_XGI_SCRATCH_REG_CR33  0x33
73 #define IND_XGI_LCD_PANEL         0x36
74 #define IND_XGI_SCRATCH_REG_CR37  0x37
75 
76 #define IND_XGI_CRT2_WRITE_ENABLE_315 0x2F
77 
78 #define XGI_PASSWORD              0x86  /* SR05 */
79 
80 #define XGI_DRAM_SIZE_MASK     0xF0  /*SR14 */
81 #define XGI_DRAM_SIZE_1MB      0x00
82 #define XGI_DRAM_SIZE_2MB      0x01
83 #define XGI_DRAM_SIZE_4MB      0x02
84 #define XGI_DRAM_SIZE_8MB      0x03
85 #define XGI_DRAM_SIZE_16MB     0x04
86 #define XGI_DRAM_SIZE_32MB     0x05
87 #define XGI_DRAM_SIZE_64MB     0x06
88 #define XGI_DRAM_SIZE_128MB    0x07
89 #define XGI_DRAM_SIZE_256MB    0x08
90 
91 #define XGI_ENABLE_2D             0x40  /* SR1E */
92 
93 #define XGI_MEM_MAP_IO_ENABLE     0x01  /* SR20 */
94 #define XGI_PCI_ADDR_ENABLE       0x80
95 
96 #define XGI_SIMULTANEOUS_VIEW_ENABLE  0x01  /* CR30 */
97 #define XGI_VB_OUTPUT_COMPOSITE   0x04
98 #define XGI_VB_OUTPUT_SVIDEO      0x08
99 #define XGI_VB_OUTPUT_SCART       0x10
100 #define XGI_VB_OUTPUT_LCD         0x20
101 #define XGI_VB_OUTPUT_CRT2        0x40
102 #define XGI_VB_OUTPUT_HIVISION    0x80
103 
104 #define XGI_VB_OUTPUT_DISABLE     0x20  /* CR31 */
105 #define XGI_DRIVER_MODE           0x40
106 
107 #define XGI_VB_COMPOSITE          0x01  /* CR32 */
108 #define XGI_VB_SVIDEO             0x02
109 #define XGI_VB_SCART              0x04
110 #define XGI_VB_LCD                0x08
111 #define XGI_VB_CRT2               0x10
112 #define XGI_CRT1                  0x20
113 #define XGI_VB_HIVISION           0x40
114 #define XGI_VB_YPBPR              0x80
115 #define XGI_VB_TV		  (XGI_VB_COMPOSITE | XGI_VB_SVIDEO | \
116 				   XGI_VB_SCART | XGI_VB_HIVISION|XGI_VB_YPBPR)
117 
118 #define XGI_EXTERNAL_CHIP_MASK		   0x0E  /* CR37 */
119 #define XGI310_EXTERNAL_CHIP_LVDS          0x02  /* in CR37 << 1 ! */
120 #define XGI310_EXTERNAL_CHIP_LVDS_CHRONTEL 0x03  /* in CR37 << 1 ! */
121 
122 /* ------------------- Global Variables ----------------------------- */
123 
124 /* display status */
125 static int XGIfb_crt1off;
126 static int XGIfb_forcecrt1 = -1;
127 
128 /* global flags */
129 static int XGIfb_tvmode;
130 static int enable_dstn;
131 static int XGIfb_ypan = -1;
132 
133 /* TW: CRT2 type (for overriding autodetection) */
134 static int XGIfb_crt2type = -1;
135 /* PR: Tv plug type (for overriding autodetection) */
136 static int XGIfb_tvplug = -1;
137 
138 /* TW: For ioctl XGIFB_GET_INFO */
139 /* XGIfb_info XGIfbinfo; */
140 
141 #define MD_XGI300 1
142 #define MD_XGI315 2
143 
144 /* mode table */
145 static const struct _XGIbios_mode {
146 	char name[15];
147 	u8 mode_no;
148 	u16 vesa_mode_no_1;  /* "XGI defined" VESA mode number */
149 	u16 vesa_mode_no_2;  /* Real VESA mode numbers */
150 	u16 xres;
151 	u16 yres;
152 	u16 bpp;
153 	u16 rate_idx;
154 	u16 cols;
155 	u16 rows;
156 	u8  chipset;
157 } XGIbios_mode[] = {
158 	{"320x240x16",   0x56, 0x0000, 0x0000,  320,  240, 16, 1,  40, 15,
159 	 MD_XGI315},
160 	{"320x480x8",    0x5A, 0x0000, 0x0000,  320,  480,  8, 1,  40, 30,
161 	 MD_XGI315},  /* TW: FSTN */
162 	{"320x480x16",   0x5B, 0x0000, 0x0000,  320,  480, 16, 1,  40, 30,
163 	 MD_XGI315},  /* TW: FSTN */
164 	{"640x480x8",    0x2E, 0x0101, 0x0101,  640,  480,  8, 1,  80, 30,
165 	 MD_XGI300|MD_XGI315},
166 	{"640x480x16",   0x44, 0x0111, 0x0111,  640,  480, 16, 1,  80, 30,
167 	 MD_XGI300|MD_XGI315},
168 	{"640x480x24",   0x62, 0x013a, 0x0112,  640,  480, 32, 1,  80, 30,
169 	 MD_XGI300|MD_XGI315},  /* TW: That's for people who mix up color-
170 					and fb depth */
171 	{"640x480x32",   0x62, 0x013a, 0x0112,  640,  480, 32, 1,  80, 30,
172 	 MD_XGI300|MD_XGI315},
173 	{"720x480x8",    0x31, 0x0000, 0x0000,  720,  480,  8, 1,  90, 30,
174 	 MD_XGI300|MD_XGI315},
175 	{"720x480x16",   0x33, 0x0000, 0x0000,  720,  480, 16, 1,  90, 30,
176 	 MD_XGI300|MD_XGI315},
177 	{"720x480x24",   0x35, 0x0000, 0x0000,  720,  480, 32, 1,  90, 30,
178 	 MD_XGI300|MD_XGI315},
179 	{"720x480x32",   0x35, 0x0000, 0x0000,  720,  480, 32, 1,  90, 30,
180 	 MD_XGI300|MD_XGI315},
181 	{"720x576x8",    0x32, 0x0000, 0x0000,  720,  576,  8, 1,  90, 36,
182 	 MD_XGI300|MD_XGI315},
183 	{"720x576x16",   0x34, 0x0000, 0x0000,  720,  576, 16, 1,  90, 36,
184 	 MD_XGI300|MD_XGI315},
185 	{"720x576x24",   0x36, 0x0000, 0x0000,  720,  576, 32, 1,  90, 36,
186 	 MD_XGI300|MD_XGI315},
187 	{"720x576x32",   0x36, 0x0000, 0x0000,  720,  576, 32, 1,  90, 36,
188 	 MD_XGI300|MD_XGI315},
189 	{"800x480x8",    0x70, 0x0000, 0x0000,  800,  480,  8, 1, 100, 30,
190 	 MD_XGI300|MD_XGI315},
191 	{"800x480x16",   0x7a, 0x0000, 0x0000,  800,  480, 16, 1, 100, 30,
192 	 MD_XGI300|MD_XGI315},
193 	{"800x480x24",   0x76, 0x0000, 0x0000,  800,  480, 32, 1, 100, 30,
194 	 MD_XGI300|MD_XGI315},
195 	{"800x480x32",   0x76, 0x0000, 0x0000,  800,  480, 32, 1, 100, 30,
196 	 MD_XGI300|MD_XGI315},
197 	{"800x600x8",    0x30, 0x0103, 0x0103,  800,  600,  8, 1, 100, 37,
198 	 MD_XGI300|MD_XGI315},
199 #define DEFAULT_MODE              20 /* index for 800x600x16 */
200 	{"800x600x16",   0x47, 0x0114, 0x0114,  800,  600, 16, 1, 100, 37,
201 	 MD_XGI300|MD_XGI315},
202 	{"800x600x24",   0x63, 0x013b, 0x0115,  800,  600, 32, 1, 100, 37,
203 	 MD_XGI300|MD_XGI315},
204 	{"800x600x32",   0x63, 0x013b, 0x0115,  800,  600, 32, 1, 100, 37,
205 	 MD_XGI300|MD_XGI315},
206 	{"1024x576x8",   0x71, 0x0000, 0x0000, 1024,  576,  8, 1, 128, 36,
207 	 MD_XGI300|MD_XGI315},
208 	{"1024x576x16",  0x74, 0x0000, 0x0000, 1024,  576, 16, 1, 128, 36,
209 	 MD_XGI300|MD_XGI315},
210 	{"1024x576x24",  0x77, 0x0000, 0x0000, 1024,  576, 32, 1, 128, 36,
211 	 MD_XGI300|MD_XGI315},
212 	{"1024x576x32",  0x77, 0x0000, 0x0000, 1024,  576, 32, 1, 128, 36,
213 	 MD_XGI300|MD_XGI315},
214 	{"1024x600x8",   0x20, 0x0000, 0x0000, 1024,  600,  8, 1, 128, 37,
215 	 MD_XGI300          },  /* TW: 300 series only */
216 	{"1024x600x16",  0x21, 0x0000, 0x0000, 1024,  600, 16, 1, 128, 37,
217 	 MD_XGI300          },
218 	{"1024x600x24",  0x22, 0x0000, 0x0000, 1024,  600, 32, 1, 128, 37,
219 	 MD_XGI300          },
220 	{"1024x600x32",  0x22, 0x0000, 0x0000, 1024,  600, 32, 1, 128, 37,
221 	 MD_XGI300          },
222 	{"1024x768x8",   0x38, 0x0105, 0x0105, 1024,  768,  8, 1, 128, 48,
223 	 MD_XGI300|MD_XGI315},
224 	{"1024x768x16",  0x4A, 0x0117, 0x0117, 1024,  768, 16, 1, 128, 48,
225 	 MD_XGI300|MD_XGI315},
226 	{"1024x768x24",  0x64, 0x013c, 0x0118, 1024,  768, 32, 1, 128, 48,
227 	 MD_XGI300|MD_XGI315},
228 	{"1024x768x32",  0x64, 0x013c, 0x0118, 1024,  768, 32, 1, 128, 48,
229 	 MD_XGI300|MD_XGI315},
230 	{"1152x768x8",   0x23, 0x0000, 0x0000, 1152,  768,  8, 1, 144, 48,
231 	 MD_XGI300          },  /* TW: 300 series only */
232 	{"1152x768x16",  0x24, 0x0000, 0x0000, 1152,  768, 16, 1, 144, 48,
233 	 MD_XGI300          },
234 	{"1152x768x24",  0x25, 0x0000, 0x0000, 1152,  768, 32, 1, 144, 48,
235 	 MD_XGI300          },
236 	{"1152x768x32",  0x25, 0x0000, 0x0000, 1152,  768, 32, 1, 144, 48,
237 	 MD_XGI300          },
238 	{"1280x720x8",   0x79, 0x0000, 0x0000, 1280,  720,  8, 1, 160, 45,
239 	 MD_XGI300|MD_XGI315},
240 	{"1280x720x16",  0x75, 0x0000, 0x0000, 1280,  720, 16, 1, 160, 45,
241 	 MD_XGI300|MD_XGI315},
242 	{"1280x720x24",  0x78, 0x0000, 0x0000, 1280,  720, 32, 1, 160, 45,
243 	 MD_XGI300|MD_XGI315},
244 	{"1280x720x32",  0x78, 0x0000, 0x0000, 1280,  720, 32, 1, 160, 45,
245 	 MD_XGI300|MD_XGI315},
246 	{"1280x768x8",   0x23, 0x0000, 0x0000, 1280,  768,  8, 1, 160, 48,
247 	 MD_XGI315},  /* TW: 310/325 series only */
248 	{"1280x768x16",  0x24, 0x0000, 0x0000, 1280,  768, 16, 1, 160, 48,
249 	 MD_XGI315},
250 	{"1280x768x24",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48,
251 	 MD_XGI315},
252 	{"1280x768x32",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48,
253 	 MD_XGI315},
254 	{"1280x960x8",   0x7C, 0x0000, 0x0000, 1280,  960,  8, 1, 160, 60,
255 	 MD_XGI300|MD_XGI315},
256 	{"1280x960x16",  0x7D, 0x0000, 0x0000, 1280,  960, 16, 1, 160, 60,
257 	 MD_XGI300|MD_XGI315},
258 	{"1280x960x24",  0x7E, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60,
259 	 MD_XGI300|MD_XGI315},
260 	{"1280x960x32",  0x7E, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60,
261 	 MD_XGI300|MD_XGI315},
262 	{"1280x1024x8",  0x3A, 0x0107, 0x0107, 1280, 1024,  8, 1, 160, 64,
263 	 MD_XGI300|MD_XGI315},
264 	{"1280x1024x16", 0x4D, 0x011a, 0x011a, 1280, 1024, 16, 1, 160, 64,
265 	 MD_XGI300|MD_XGI315},
266 	{"1280x1024x24", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 1, 160, 64,
267 	 MD_XGI300|MD_XGI315},
268 	{"1280x1024x32", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 1, 160, 64,
269 	 MD_XGI300|MD_XGI315},
270 	{"1400x1050x8",  0x26, 0x0000, 0x0000, 1400, 1050,  8, 1, 175, 65,
271 	 MD_XGI315},  /* TW: 310/325 series only */
272 	{"1400x1050x16", 0x27, 0x0000, 0x0000, 1400, 1050, 16, 1, 175, 65,
273 	 MD_XGI315},
274 	{"1400x1050x24", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65,
275 	 MD_XGI315},
276 	{"1400x1050x32", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65,
277 	 MD_XGI315},
278 	{"1600x1200x8",  0x3C, 0x0130, 0x011c, 1600, 1200,  8, 1, 200, 75,
279 	 MD_XGI300|MD_XGI315},
280 	{"1600x1200x16", 0x3D, 0x0131, 0x011e, 1600, 1200, 16, 1, 200, 75,
281 	 MD_XGI300|MD_XGI315},
282 	{"1600x1200x24", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75,
283 	 MD_XGI300|MD_XGI315},
284 	{"1600x1200x32", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75,
285 	 MD_XGI300|MD_XGI315},
286 	{"1920x1440x8",  0x68, 0x013f, 0x0000, 1920, 1440,  8, 1, 240, 75,
287 	 MD_XGI300|MD_XGI315},
288 	{"1920x1440x16", 0x69, 0x0140, 0x0000, 1920, 1440, 16, 1, 240, 75,
289 	 MD_XGI300|MD_XGI315},
290 	{"1920x1440x24", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75,
291 	 MD_XGI300|MD_XGI315},
292 	{"1920x1440x32", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75,
293 	 MD_XGI300|MD_XGI315},
294 	{"2048x1536x8",  0x6c, 0x0000, 0x0000, 2048, 1536,  8, 1, 256, 96,
295 	 MD_XGI315},  /* TW: 310/325 series only */
296 	{"2048x1536x16", 0x6d, 0x0000, 0x0000, 2048, 1536, 16, 1, 256, 96,
297 	 MD_XGI315},
298 	{"2048x1536x24", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96,
299 	 MD_XGI315},
300 	{"2048x1536x32", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96,
301 	 MD_XGI315},
302 	{"\0", 0x00, 0, 0, 0, 0, 0, 0, 0}
303 };
304 
305 /* TW: CR36 evaluation */
306 static const unsigned short XGI300paneltype[] = {
307 	 LCD_UNKNOWN,  LCD_800x600, LCD_1024x768, LCD_1280x1024,
308 	LCD_1280x960,  LCD_640x480, LCD_1024x600, LCD_1152x768,
309 	LCD_1024x768, LCD_1024x768, LCD_1024x768,
310 	LCD_1024x768, LCD_1024x768, LCD_1024x768, LCD_1024x768};
311 
312 static const unsigned short XGI310paneltype[] = {
313 	 LCD_UNKNOWN,   LCD_800x600, LCD_1024x768, LCD_1280x1024,
314 	 LCD_640x480,  LCD_1024x600, LCD_1152x864, LCD_1280x960,
315 	LCD_1152x768, LCD_1400x1050, LCD_1280x768, LCD_1600x1200,
316 	LCD_1024x768,  LCD_1024x768, LCD_1024x768};
317 
318 static const struct _XGI_crt2type {
319 	char name[10];
320 	int type_no;
321 	int tvplug_no;
322 } XGI_crt2type[] = {
323 	{"NONE",	0,		-1},
324 	{"LCD",		XGIFB_DISP_LCD,	-1},
325 	{"TV",		XGIFB_DISP_TV,	-1},
326 	{"VGA",		XGIFB_DISP_CRT,	-1},
327 	{"SVIDEO",	XGIFB_DISP_TV,	TVPLUG_SVIDEO},
328 	{"COMPOSITE",	XGIFB_DISP_TV,	TVPLUG_COMPOSITE},
329 	{"SCART",	XGIFB_DISP_TV,	TVPLUG_SCART},
330 	{"none",	0,		-1},
331 	{"lcd",		XGIFB_DISP_LCD,	-1},
332 	{"tv",		XGIFB_DISP_TV,	-1},
333 	{"vga",		XGIFB_DISP_CRT,	-1},
334 	{"svideo",	XGIFB_DISP_TV,	TVPLUG_SVIDEO},
335 	{"composite",	XGIFB_DISP_TV,	TVPLUG_COMPOSITE},
336 	{"scart",	XGIFB_DISP_TV,	TVPLUG_SCART},
337 	{"\0",		-1,		-1}
338 };
339 
340 /* TV standard */
341 static const struct _XGI_tvtype {
342 	char name[6];
343 	int type_no;
344 } XGI_tvtype[] = {
345 	{"PAL",		1},
346 	{"NTSC",	2},
347 	{"pal",		1},
348 	{"ntsc",	2},
349 	{"\0",		-1}
350 };
351 
352 static const struct _XGI_vrate {
353 	u16 idx;
354 	u16 xres;
355 	u16 yres;
356 	u16 refresh;
357 } XGIfb_vrate[] = {
358 	{1,  640,  480, 60}, {2,  640,  480,  72},
359 	{3, 640,   480,  75}, {4,  640, 480,  85},
360 
361 	{5,  640,  480, 100}, {6,  640,  480, 120},
362 	{7, 640,   480, 160}, {8,  640, 480, 200},
363 
364 	{1,  720,  480, 60},
365 	{1,  720,  576, 58},
366 	{1,  800,  480, 60}, {2,  800,  480,  75}, {3, 800,   480,  85},
367 	{1,  800,  600,  60}, {2, 800,   600,  72}, {3,  800, 600,  75},
368 	{4,  800,  600, 85}, {5,  800,  600, 100},
369 	{6, 800,   600, 120}, {7,  800, 600, 160},
370 
371 	{1, 1024,  768,  60}, {2, 1024,  768,  70}, {3, 1024, 768,  75},
372 	{4, 1024,  768, 85}, {5, 1024,  768, 100}, {6, 1024,  768, 120},
373 	{1, 1024,  576, 60}, {2, 1024,  576,  75}, {3, 1024,  576,  85},
374 	{1, 1024,  600, 60},
375 	{1, 1152,  768, 60},
376 	{1, 1280,  720, 60}, {2, 1280,  720,  75}, {3, 1280,  720,  85},
377 	{1, 1280,  768, 60},
378 	{1, 1280, 1024,  60}, {2, 1280, 1024,  75}, {3, 1280, 1024,  85},
379 	{1, 1280,  960, 70},
380 	{1, 1400, 1050, 60},
381 	{1, 1600, 1200, 60}, {2, 1600, 1200,  65},
382 	{3, 1600, 1200,  70}, {4, 1600, 1200,  75},
383 
384 	{5, 1600, 1200, 85}, {6, 1600, 1200, 100},
385 	{7, 1600, 1200, 120},
386 
387 	{1, 1920, 1440, 60}, {2, 1920, 1440,  65},
388 	{3, 1920, 1440,  70}, {4, 1920, 1440,  75},
389 
390 	{5, 1920, 1440, 85}, {6, 1920, 1440, 100},
391 	{1, 2048, 1536, 60}, {2, 2048, 1536,  65},
392 	{3, 2048, 1536,  70}, {4, 2048, 1536,  75},
393 
394 	{5, 2048, 1536, 85},
395 	{0, 0, 0, 0}
396 };
397 
398 static const struct _chswtable {
399 	int subsysVendor;
400 	int subsysCard;
401 	char *vendorName;
402 	char *cardName;
403 } mychswtable[] = {
404 	{ 0x1631, 0x1002, "Mitachi", "0x1002" },
405 	{ 0,      0,      ""       , ""       }
406 };
407 
408 /* Eden Chen */
409 static const struct _XGI_TV_filter {
410 	u8 filter[9][4];
411 } XGI_TV_filter[] = {
412 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_0 */
413 	    {0x00, 0xE0, 0x10, 0x60},
414 	    {0x00, 0xEE, 0x10, 0x44},
415 	    {0x00, 0xF4, 0x10, 0x38},
416 	    {0xF8, 0xF4, 0x18, 0x38},
417 	    {0xFC, 0xFB, 0x14, 0x2A},
418 	    {0x00, 0x00, 0x10, 0x20},
419 	    {0x00, 0x04, 0x10, 0x18},
420 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
421 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_1 */
422 	    {0x00, 0xE0, 0x10, 0x60},
423 	    {0x00, 0xEE, 0x10, 0x44},
424 	    {0x00, 0xF4, 0x10, 0x38},
425 	    {0xF8, 0xF4, 0x18, 0x38},
426 	    {0xFC, 0xFB, 0x14, 0x2A},
427 	    {0x00, 0x00, 0x10, 0x20},
428 	    {0x00, 0x04, 0x10, 0x18},
429 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
430 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_2 */
431 	    {0xF5, 0xEE, 0x1B, 0x44},
432 	    {0xF8, 0xF4, 0x18, 0x38},
433 	    {0xEB, 0x04, 0x25, 0x18},
434 	    {0xF1, 0x05, 0x1F, 0x16},
435 	    {0xF6, 0x06, 0x1A, 0x14},
436 	    {0xFA, 0x06, 0x16, 0x14},
437 	    {0x00, 0x04, 0x10, 0x18},
438 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
439 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_3 */
440 	    {0xF1, 0x04, 0x1F, 0x18},
441 	    {0xEE, 0x0D, 0x22, 0x06},
442 	    {0xF7, 0x06, 0x19, 0x14},
443 	    {0xF4, 0x0B, 0x1C, 0x0A},
444 	    {0xFA, 0x07, 0x16, 0x12},
445 	    {0xF9, 0x0A, 0x17, 0x0C},
446 	    {0x00, 0x07, 0x10, 0x12},
447 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
448 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_4 */
449 	    {0x00, 0xE0, 0x10, 0x60},
450 	    {0x00, 0xEE, 0x10, 0x44},
451 	    {0x00, 0xF4, 0x10, 0x38},
452 	    {0xF8, 0xF4, 0x18, 0x38},
453 	    {0xFC, 0xFB, 0x14, 0x2A},
454 	    {0x00, 0x00, 0x10, 0x20},
455 	    {0x00, 0x04, 0x10, 0x18},
456 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
457 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_5 */
458 	    {0xF5, 0xEE, 0x1B, 0x44},
459 	    {0xF8, 0xF4, 0x18, 0x38},
460 	    {0xEB, 0x04, 0x25, 0x18},
461 	    {0xF1, 0x05, 0x1F, 0x16},
462 	    {0xF6, 0x06, 0x1A, 0x14},
463 	    {0xFA, 0x06, 0x16, 0x14},
464 	    {0x00, 0x04, 0x10, 0x18},
465 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
466 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_6 */
467 	    {0xEB, 0x04, 0x25, 0x18},
468 	    {0xE7, 0x0E, 0x29, 0x04},
469 	    {0xEE, 0x0C, 0x22, 0x08},
470 	    {0xF6, 0x0B, 0x1A, 0x0A},
471 	    {0xF9, 0x0A, 0x17, 0x0C},
472 	    {0xFC, 0x0A, 0x14, 0x0C},
473 	    {0x00, 0x08, 0x10, 0x10},
474 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
475 	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_7 */
476 	    {0xEC, 0x02, 0x24, 0x1C},
477 	    {0xF2, 0x04, 0x1E, 0x18},
478 	    {0xEB, 0x15, 0x25, 0xF6},
479 	    {0xF4, 0x10, 0x1C, 0x00},
480 	    {0xF8, 0x0F, 0x18, 0x02},
481 	    {0x00, 0x04, 0x10, 0x18},
482 	    {0x01, 0x06, 0x0F, 0x14},
483 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
484 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_0 */
485 	    {0x00, 0xE0, 0x10, 0x60},
486 	    {0x00, 0xEE, 0x10, 0x44},
487 	    {0x00, 0xF4, 0x10, 0x38},
488 	    {0xF8, 0xF4, 0x18, 0x38},
489 	    {0xFC, 0xFB, 0x14, 0x2A},
490 	    {0x00, 0x00, 0x10, 0x20},
491 	    {0x00, 0x04, 0x10, 0x18},
492 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
493 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_1 */
494 	    {0x00, 0xE0, 0x10, 0x60},
495 	    {0x00, 0xEE, 0x10, 0x44},
496 	    {0x00, 0xF4, 0x10, 0x38},
497 	    {0xF8, 0xF4, 0x18, 0x38},
498 	    {0xFC, 0xFB, 0x14, 0x2A},
499 	    {0x00, 0x00, 0x10, 0x20},
500 	    {0x00, 0x04, 0x10, 0x18},
501 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
502 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_2 */
503 	    {0xF5, 0xEE, 0x1B, 0x44},
504 	    {0xF8, 0xF4, 0x18, 0x38},
505 	    {0xF1, 0xF7, 0x01, 0x32},
506 	    {0xF5, 0xFB, 0x1B, 0x2A},
507 	    {0xF9, 0xFF, 0x17, 0x22},
508 	    {0xFB, 0x01, 0x15, 0x1E},
509 	    {0x00, 0x04, 0x10, 0x18},
510 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
511 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_3 */
512 	    {0xF5, 0xFB, 0x1B, 0x2A},
513 	    {0xEE, 0xFE, 0x22, 0x24},
514 	    {0xF3, 0x00, 0x1D, 0x20},
515 	    {0xF9, 0x03, 0x17, 0x1A},
516 	    {0xFB, 0x02, 0x14, 0x1E},
517 	    {0xFB, 0x04, 0x15, 0x18},
518 	    {0x00, 0x06, 0x10, 0x14},
519 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
520 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_4 */
521 	    {0x00, 0xE0, 0x10, 0x60},
522 	    {0x00, 0xEE, 0x10, 0x44},
523 	    {0x00, 0xF4, 0x10, 0x38},
524 	    {0xF8, 0xF4, 0x18, 0x38},
525 	    {0xFC, 0xFB, 0x14, 0x2A},
526 	    {0x00, 0x00, 0x10, 0x20},
527 	    {0x00, 0x04, 0x10, 0x18},
528 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
529 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_5 */
530 	    {0xF5, 0xEE, 0x1B, 0x44},
531 	    {0xF8, 0xF4, 0x18, 0x38},
532 	    {0xF1, 0xF7, 0x1F, 0x32},
533 	    {0xF5, 0xFB, 0x1B, 0x2A},
534 	    {0xF9, 0xFF, 0x17, 0x22},
535 	    {0xFB, 0x01, 0x15, 0x1E},
536 	    {0x00, 0x04, 0x10, 0x18},
537 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
538 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_6 */
539 	    {0xF5, 0xEE, 0x1B, 0x2A},
540 	    {0xEE, 0xFE, 0x22, 0x24},
541 	    {0xF3, 0x00, 0x1D, 0x20},
542 	    {0xF9, 0x03, 0x17, 0x1A},
543 	    {0xFB, 0x02, 0x14, 0x1E},
544 	    {0xFB, 0x04, 0x15, 0x18},
545 	    {0x00, 0x06, 0x10, 0x14},
546 	    {0xFF, 0xFF, 0xFF, 0xFF} } },
547 	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_7 */
548 	    {0xF5, 0xEE, 0x1B, 0x44},
549 	    {0xF8, 0xF4, 0x18, 0x38},
550 	    {0xFC, 0xFB, 0x14, 0x2A},
551 	    {0xEB, 0x05, 0x25, 0x16},
552 	    {0xF1, 0x05, 0x1F, 0x16},
553 	    {0xFA, 0x07, 0x16, 0x12},
554 	    {0x00, 0x07, 0x10, 0x12},
555 	    {0xFF, 0xFF, 0xFF, 0xFF} } }
556 };
557 
558 static int           filter = -1;
559 
560 #endif
561