xref: /openbmc/linux/drivers/video/fbdev/via/hw.h (revision 58e16d792a6a8c6b750f637a4649967fcac853dc)
1*64b70da0SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2f7018c21STomi Valkeinen /*
3f7018c21STomi Valkeinen  * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
4f7018c21STomi Valkeinen  * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
5f7018c21STomi Valkeinen 
6f7018c21STomi Valkeinen  */
7f7018c21STomi Valkeinen 
8f7018c21STomi Valkeinen #ifndef __HW_H__
9f7018c21STomi Valkeinen #define __HW_H__
10f7018c21STomi Valkeinen 
11f7018c21STomi Valkeinen #include <linux/seq_file.h>
12f7018c21STomi Valkeinen 
13f7018c21STomi Valkeinen #include "viamode.h"
14f7018c21STomi Valkeinen #include "global.h"
15f7018c21STomi Valkeinen #include "via_modesetting.h"
16f7018c21STomi Valkeinen 
17f7018c21STomi Valkeinen #define viafb_read_reg(p, i)			via_read_reg(p, i)
18f7018c21STomi Valkeinen #define viafb_write_reg(i, p, d)		via_write_reg(p, i, d)
19f7018c21STomi Valkeinen #define viafb_write_reg_mask(i, p, d, m)	via_write_reg_mask(p, i, d, m)
20f7018c21STomi Valkeinen 
21f7018c21STomi Valkeinen /* VIA output devices */
22f7018c21STomi Valkeinen #define VIA_LDVP0	0x00000001
23f7018c21STomi Valkeinen #define VIA_LDVP1	0x00000002
24f7018c21STomi Valkeinen #define VIA_DVP0	0x00000004
25f7018c21STomi Valkeinen #define VIA_CRT		0x00000010
26f7018c21STomi Valkeinen #define VIA_DVP1	0x00000020
27f7018c21STomi Valkeinen #define VIA_LVDS1	0x00000040
28f7018c21STomi Valkeinen #define VIA_LVDS2	0x00000080
29f7018c21STomi Valkeinen 
30f7018c21STomi Valkeinen /* VIA output device power states */
31f7018c21STomi Valkeinen #define VIA_STATE_ON		0
32f7018c21STomi Valkeinen #define VIA_STATE_STANDBY	1
33f7018c21STomi Valkeinen #define VIA_STATE_SUSPEND	2
34f7018c21STomi Valkeinen #define VIA_STATE_OFF		3
35f7018c21STomi Valkeinen 
36f7018c21STomi Valkeinen /* VIA output device sync polarity */
37f7018c21STomi Valkeinen #define VIA_HSYNC_NEGATIVE	0x01
38f7018c21STomi Valkeinen #define VIA_VSYNC_NEGATIVE	0x02
39f7018c21STomi Valkeinen 
40f7018c21STomi Valkeinen /**********************************************************/
41f7018c21STomi Valkeinen /* Definition IGA2 Design Method of CRTC Shadow Registers */
42f7018c21STomi Valkeinen /**********************************************************/
43f7018c21STomi Valkeinen #define IGA2_HOR_TOTAL_SHADOW_FORMULA(x)           ((x/8)-5)
44f7018c21STomi Valkeinen #define IGA2_HOR_BLANK_END_SHADOW_FORMULA(x, y)     (((x+y)/8)-1)
45f7018c21STomi Valkeinen #define IGA2_VER_TOTAL_SHADOW_FORMULA(x)           ((x)-2)
46f7018c21STomi Valkeinen #define IGA2_VER_ADDR_SHADOW_FORMULA(x)            ((x)-1)
47f7018c21STomi Valkeinen #define IGA2_VER_BLANK_START_SHADOW_FORMULA(x)     ((x)-1)
48f7018c21STomi Valkeinen #define IGA2_VER_BLANK_END_SHADOW_FORMULA(x, y)     ((x+y)-1)
49f7018c21STomi Valkeinen #define IGA2_VER_SYNC_START_SHADOW_FORMULA(x)      (x)
50f7018c21STomi Valkeinen #define IGA2_VER_SYNC_END_SHADOW_FORMULA(x, y)      (x+y)
51f7018c21STomi Valkeinen 
52f7018c21STomi Valkeinen /* Define Register Number for IGA2 Shadow CRTC Timing */
53f7018c21STomi Valkeinen 
54f7018c21STomi Valkeinen /* location: {CR6D,0,7},{CR71,3,3} */
55f7018c21STomi Valkeinen #define IGA2_SHADOW_HOR_TOTAL_REG_NUM       2
56f7018c21STomi Valkeinen /* location: {CR6E,0,7} */
57f7018c21STomi Valkeinen #define IGA2_SHADOW_HOR_BLANK_END_REG_NUM   1
58f7018c21STomi Valkeinen /* location: {CR6F,0,7},{CR71,0,2} */
59f7018c21STomi Valkeinen #define IGA2_SHADOW_VER_TOTAL_REG_NUM       2
60f7018c21STomi Valkeinen /* location: {CR70,0,7},{CR71,4,6} */
61f7018c21STomi Valkeinen #define IGA2_SHADOW_VER_ADDR_REG_NUM        2
62f7018c21STomi Valkeinen /* location: {CR72,0,7},{CR74,4,6} */
63f7018c21STomi Valkeinen #define IGA2_SHADOW_VER_BLANK_START_REG_NUM 2
64f7018c21STomi Valkeinen /* location: {CR73,0,7},{CR74,0,2} */
65f7018c21STomi Valkeinen #define IGA2_SHADOW_VER_BLANK_END_REG_NUM   2
66f7018c21STomi Valkeinen /* location: {CR75,0,7},{CR76,4,6} */
67f7018c21STomi Valkeinen #define IGA2_SHADOW_VER_SYNC_START_REG_NUM  2
68f7018c21STomi Valkeinen /* location: {CR76,0,3} */
69f7018c21STomi Valkeinen #define IGA2_SHADOW_VER_SYNC_END_REG_NUM    1
70f7018c21STomi Valkeinen 
71f7018c21STomi Valkeinen /* Define Fetch Count Register*/
72f7018c21STomi Valkeinen 
73f7018c21STomi Valkeinen /* location: {SR1C,0,7},{SR1D,0,1} */
74f7018c21STomi Valkeinen #define IGA1_FETCH_COUNT_REG_NUM        2
75f7018c21STomi Valkeinen /* 16 bytes alignment. */
76f7018c21STomi Valkeinen #define IGA1_FETCH_COUNT_ALIGN_BYTE     16
77f7018c21STomi Valkeinen /* x: H resolution, y: color depth */
78f7018c21STomi Valkeinen #define IGA1_FETCH_COUNT_PATCH_VALUE    4
79f7018c21STomi Valkeinen #define IGA1_FETCH_COUNT_FORMULA(x, y)   \
80f7018c21STomi Valkeinen 	(((x*y)/IGA1_FETCH_COUNT_ALIGN_BYTE) + IGA1_FETCH_COUNT_PATCH_VALUE)
81f7018c21STomi Valkeinen 
82f7018c21STomi Valkeinen /* location: {CR65,0,7},{CR67,2,3} */
83f7018c21STomi Valkeinen #define IGA2_FETCH_COUNT_REG_NUM        2
84f7018c21STomi Valkeinen #define IGA2_FETCH_COUNT_ALIGN_BYTE     16
85f7018c21STomi Valkeinen #define IGA2_FETCH_COUNT_PATCH_VALUE    0
86f7018c21STomi Valkeinen #define IGA2_FETCH_COUNT_FORMULA(x, y)   \
87f7018c21STomi Valkeinen 	(((x*y)/IGA2_FETCH_COUNT_ALIGN_BYTE) + IGA2_FETCH_COUNT_PATCH_VALUE)
88f7018c21STomi Valkeinen 
89f7018c21STomi Valkeinen /* Staring Address*/
90f7018c21STomi Valkeinen 
91f7018c21STomi Valkeinen /* location: {CR0C,0,7},{CR0D,0,7},{CR34,0,7},{CR48,0,1} */
92f7018c21STomi Valkeinen #define IGA1_STARTING_ADDR_REG_NUM      4
93f7018c21STomi Valkeinen /* location: {CR62,1,7},{CR63,0,7},{CR64,0,7} */
94f7018c21STomi Valkeinen #define IGA2_STARTING_ADDR_REG_NUM      3
95f7018c21STomi Valkeinen 
96f7018c21STomi Valkeinen /* Define Display OFFSET*/
97f7018c21STomi Valkeinen /* These value are by HW suggested value*/
98f7018c21STomi Valkeinen /* location: {SR17,0,7} */
99f7018c21STomi Valkeinen #define K800_IGA1_FIFO_MAX_DEPTH                384
100f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
101f7018c21STomi Valkeinen #define K800_IGA1_FIFO_THRESHOLD                328
102f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
103f7018c21STomi Valkeinen #define K800_IGA1_FIFO_HIGH_THRESHOLD           296
104f7018c21STomi Valkeinen /* location: {SR22,0,4}. (128/4) =64, K800 must be set zero, */
105f7018c21STomi Valkeinen 				/* because HW only 5 bits */
106f7018c21STomi Valkeinen #define K800_IGA1_DISPLAY_QUEUE_EXPIRE_NUM      0
107f7018c21STomi Valkeinen 
108f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
109f7018c21STomi Valkeinen #define K800_IGA2_FIFO_MAX_DEPTH                384
110f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
111f7018c21STomi Valkeinen #define K800_IGA2_FIFO_THRESHOLD                328
112f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
113f7018c21STomi Valkeinen #define K800_IGA2_FIFO_HIGH_THRESHOLD           296
114f7018c21STomi Valkeinen /* location: {CR94,0,6} */
115f7018c21STomi Valkeinen #define K800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM      128
116f7018c21STomi Valkeinen 
117f7018c21STomi Valkeinen /* location: {SR17,0,7} */
118f7018c21STomi Valkeinen #define P880_IGA1_FIFO_MAX_DEPTH                192
119f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
120f7018c21STomi Valkeinen #define P880_IGA1_FIFO_THRESHOLD                128
121f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
122f7018c21STomi Valkeinen #define P880_IGA1_FIFO_HIGH_THRESHOLD           64
123f7018c21STomi Valkeinen /* location: {SR22,0,4}. (128/4) =64, K800 must be set zero, */
124f7018c21STomi Valkeinen 				/* because HW only 5 bits */
125f7018c21STomi Valkeinen #define P880_IGA1_DISPLAY_QUEUE_EXPIRE_NUM      0
126f7018c21STomi Valkeinen 
127f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
128f7018c21STomi Valkeinen #define P880_IGA2_FIFO_MAX_DEPTH                96
129f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
130f7018c21STomi Valkeinen #define P880_IGA2_FIFO_THRESHOLD                64
131f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
132f7018c21STomi Valkeinen #define P880_IGA2_FIFO_HIGH_THRESHOLD           32
133f7018c21STomi Valkeinen /* location: {CR94,0,6} */
134f7018c21STomi Valkeinen #define P880_IGA2_DISPLAY_QUEUE_EXPIRE_NUM      128
135f7018c21STomi Valkeinen 
136f7018c21STomi Valkeinen /* VT3314 chipset*/
137f7018c21STomi Valkeinen 
138f7018c21STomi Valkeinen /* location: {SR17,0,7} */
139f7018c21STomi Valkeinen #define CN700_IGA1_FIFO_MAX_DEPTH               96
140f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
141f7018c21STomi Valkeinen #define CN700_IGA1_FIFO_THRESHOLD               80
142f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
143f7018c21STomi Valkeinen #define CN700_IGA1_FIFO_HIGH_THRESHOLD          64
144f7018c21STomi Valkeinen /* location: {SR22,0,4}. (128/4) =64, P800 must be set zero,
145f7018c21STomi Valkeinen 				because HW only 5 bits */
146f7018c21STomi Valkeinen #define CN700_IGA1_DISPLAY_QUEUE_EXPIRE_NUM     0
147f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
148f7018c21STomi Valkeinen #define CN700_IGA2_FIFO_MAX_DEPTH               96
149f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
150f7018c21STomi Valkeinen #define CN700_IGA2_FIFO_THRESHOLD               80
151f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
152f7018c21STomi Valkeinen #define CN700_IGA2_FIFO_HIGH_THRESHOLD          32
153f7018c21STomi Valkeinen /* location: {CR94,0,6} */
154f7018c21STomi Valkeinen #define CN700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     128
155f7018c21STomi Valkeinen 
156f7018c21STomi Valkeinen /* For VT3324, these values are suggested by HW */
157f7018c21STomi Valkeinen /* location: {SR17,0,7} */
158f7018c21STomi Valkeinen #define CX700_IGA1_FIFO_MAX_DEPTH               192
159f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
160f7018c21STomi Valkeinen #define CX700_IGA1_FIFO_THRESHOLD               128
161f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
162f7018c21STomi Valkeinen #define CX700_IGA1_FIFO_HIGH_THRESHOLD          128
163f7018c21STomi Valkeinen /* location: {SR22,0,4} */
164f7018c21STomi Valkeinen #define CX700_IGA1_DISPLAY_QUEUE_EXPIRE_NUM     124
165f7018c21STomi Valkeinen 
166f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
167f7018c21STomi Valkeinen #define CX700_IGA2_FIFO_MAX_DEPTH               96
168f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
169f7018c21STomi Valkeinen #define CX700_IGA2_FIFO_THRESHOLD               64
170f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
171f7018c21STomi Valkeinen #define CX700_IGA2_FIFO_HIGH_THRESHOLD          32
172f7018c21STomi Valkeinen /* location: {CR94,0,6} */
173f7018c21STomi Valkeinen #define CX700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     128
174f7018c21STomi Valkeinen 
175f7018c21STomi Valkeinen /* VT3336 chipset*/
176f7018c21STomi Valkeinen /* location: {SR17,0,7} */
177f7018c21STomi Valkeinen #define K8M890_IGA1_FIFO_MAX_DEPTH               360
178f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
179f7018c21STomi Valkeinen #define K8M890_IGA1_FIFO_THRESHOLD               328
180f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
181f7018c21STomi Valkeinen #define K8M890_IGA1_FIFO_HIGH_THRESHOLD          296
182f7018c21STomi Valkeinen /* location: {SR22,0,4}. */
183f7018c21STomi Valkeinen #define K8M890_IGA1_DISPLAY_QUEUE_EXPIRE_NUM     124
184f7018c21STomi Valkeinen 
185f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
186f7018c21STomi Valkeinen #define K8M890_IGA2_FIFO_MAX_DEPTH               360
187f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
188f7018c21STomi Valkeinen #define K8M890_IGA2_FIFO_THRESHOLD               328
189f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
190f7018c21STomi Valkeinen #define K8M890_IGA2_FIFO_HIGH_THRESHOLD          296
191f7018c21STomi Valkeinen /* location: {CR94,0,6} */
192f7018c21STomi Valkeinen #define K8M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     124
193f7018c21STomi Valkeinen 
194f7018c21STomi Valkeinen /* VT3327 chipset*/
195f7018c21STomi Valkeinen /* location: {SR17,0,7} */
196f7018c21STomi Valkeinen #define P4M890_IGA1_FIFO_MAX_DEPTH               96
197f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
198f7018c21STomi Valkeinen #define P4M890_IGA1_FIFO_THRESHOLD               76
199f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
200f7018c21STomi Valkeinen #define P4M890_IGA1_FIFO_HIGH_THRESHOLD          64
201f7018c21STomi Valkeinen /* location: {SR22,0,4}. (32/4) =8 */
202f7018c21STomi Valkeinen #define P4M890_IGA1_DISPLAY_QUEUE_EXPIRE_NUM     32
203f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
204f7018c21STomi Valkeinen #define P4M890_IGA2_FIFO_MAX_DEPTH               96
205f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
206f7018c21STomi Valkeinen #define P4M890_IGA2_FIFO_THRESHOLD               76
207f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
208f7018c21STomi Valkeinen #define P4M890_IGA2_FIFO_HIGH_THRESHOLD          64
209f7018c21STomi Valkeinen /* location: {CR94,0,6} */
210f7018c21STomi Valkeinen #define P4M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     32
211f7018c21STomi Valkeinen 
212f7018c21STomi Valkeinen /* VT3364 chipset*/
213f7018c21STomi Valkeinen /* location: {SR17,0,7} */
214f7018c21STomi Valkeinen #define P4M900_IGA1_FIFO_MAX_DEPTH               96
215f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
216f7018c21STomi Valkeinen #define P4M900_IGA1_FIFO_THRESHOLD               76
217f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
218f7018c21STomi Valkeinen #define P4M900_IGA1_FIFO_HIGH_THRESHOLD          76
219f7018c21STomi Valkeinen /* location: {SR22,0,4}. */
220f7018c21STomi Valkeinen #define P4M900_IGA1_DISPLAY_QUEUE_EXPIRE_NUM     32
221f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
222f7018c21STomi Valkeinen #define P4M900_IGA2_FIFO_MAX_DEPTH               96
223f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
224f7018c21STomi Valkeinen #define P4M900_IGA2_FIFO_THRESHOLD               76
225f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
226f7018c21STomi Valkeinen #define P4M900_IGA2_FIFO_HIGH_THRESHOLD          76
227f7018c21STomi Valkeinen /* location: {CR94,0,6} */
228f7018c21STomi Valkeinen #define P4M900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     32
229f7018c21STomi Valkeinen 
230f7018c21STomi Valkeinen /* For VT3353, these values are suggested by HW */
231f7018c21STomi Valkeinen /* location: {SR17,0,7} */
232f7018c21STomi Valkeinen #define VX800_IGA1_FIFO_MAX_DEPTH               192
233f7018c21STomi Valkeinen /* location: {SR16,0,5},{SR16,7,7} */
234f7018c21STomi Valkeinen #define VX800_IGA1_FIFO_THRESHOLD               152
235f7018c21STomi Valkeinen /* location: {SR18,0,5},{SR18,7,7} */
236f7018c21STomi Valkeinen #define VX800_IGA1_FIFO_HIGH_THRESHOLD          152
237f7018c21STomi Valkeinen /* location: {SR22,0,4} */
238f7018c21STomi Valkeinen #define VX800_IGA1_DISPLAY_QUEUE_EXPIRE_NUM      64
239f7018c21STomi Valkeinen /* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
240f7018c21STomi Valkeinen #define VX800_IGA2_FIFO_MAX_DEPTH               96
241f7018c21STomi Valkeinen /* location: {CR68,0,3},{CR95,4,6} */
242f7018c21STomi Valkeinen #define VX800_IGA2_FIFO_THRESHOLD               64
243f7018c21STomi Valkeinen /* location: {CR92,0,3},{CR95,0,2} */
244f7018c21STomi Valkeinen #define VX800_IGA2_FIFO_HIGH_THRESHOLD          32
245f7018c21STomi Valkeinen /* location: {CR94,0,6} */
246f7018c21STomi Valkeinen #define VX800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     128
247f7018c21STomi Valkeinen 
248f7018c21STomi Valkeinen /* For VT3409 */
249f7018c21STomi Valkeinen #define VX855_IGA1_FIFO_MAX_DEPTH               400
250f7018c21STomi Valkeinen #define VX855_IGA1_FIFO_THRESHOLD               320
251f7018c21STomi Valkeinen #define VX855_IGA1_FIFO_HIGH_THRESHOLD          320
252f7018c21STomi Valkeinen #define VX855_IGA1_DISPLAY_QUEUE_EXPIRE_NUM     160
253f7018c21STomi Valkeinen 
254f7018c21STomi Valkeinen #define VX855_IGA2_FIFO_MAX_DEPTH               200
255f7018c21STomi Valkeinen #define VX855_IGA2_FIFO_THRESHOLD               160
256f7018c21STomi Valkeinen #define VX855_IGA2_FIFO_HIGH_THRESHOLD          160
257f7018c21STomi Valkeinen #define VX855_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     320
258f7018c21STomi Valkeinen 
259f7018c21STomi Valkeinen /* For VT3410 */
260f7018c21STomi Valkeinen #define VX900_IGA1_FIFO_MAX_DEPTH               400
261f7018c21STomi Valkeinen #define VX900_IGA1_FIFO_THRESHOLD               320
262f7018c21STomi Valkeinen #define VX900_IGA1_FIFO_HIGH_THRESHOLD          320
263f7018c21STomi Valkeinen #define VX900_IGA1_DISPLAY_QUEUE_EXPIRE_NUM     160
264f7018c21STomi Valkeinen 
265f7018c21STomi Valkeinen #define VX900_IGA2_FIFO_MAX_DEPTH               192
266f7018c21STomi Valkeinen #define VX900_IGA2_FIFO_THRESHOLD               160
267f7018c21STomi Valkeinen #define VX900_IGA2_FIFO_HIGH_THRESHOLD          160
268f7018c21STomi Valkeinen #define VX900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM     320
269f7018c21STomi Valkeinen 
270f7018c21STomi Valkeinen #define IGA1_FIFO_DEPTH_SELECT_REG_NUM          1
271f7018c21STomi Valkeinen #define IGA1_FIFO_THRESHOLD_REG_NUM             2
272f7018c21STomi Valkeinen #define IGA1_FIFO_HIGH_THRESHOLD_REG_NUM        2
273f7018c21STomi Valkeinen #define IGA1_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM   1
274f7018c21STomi Valkeinen 
275f7018c21STomi Valkeinen #define IGA2_FIFO_DEPTH_SELECT_REG_NUM          3
276f7018c21STomi Valkeinen #define IGA2_FIFO_THRESHOLD_REG_NUM             2
277f7018c21STomi Valkeinen #define IGA2_FIFO_HIGH_THRESHOLD_REG_NUM        2
278f7018c21STomi Valkeinen #define IGA2_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM   1
279f7018c21STomi Valkeinen 
280f7018c21STomi Valkeinen #define IGA1_FIFO_DEPTH_SELECT_FORMULA(x)                   ((x/2)-1)
281f7018c21STomi Valkeinen #define IGA1_FIFO_THRESHOLD_FORMULA(x)                      (x/4)
282f7018c21STomi Valkeinen #define IGA1_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA(x)            (x/4)
283f7018c21STomi Valkeinen #define IGA1_FIFO_HIGH_THRESHOLD_FORMULA(x)                 (x/4)
284f7018c21STomi Valkeinen #define IGA2_FIFO_DEPTH_SELECT_FORMULA(x)                   (((x/2)/4)-1)
285f7018c21STomi Valkeinen #define IGA2_FIFO_THRESHOLD_FORMULA(x)                      (x/4)
286f7018c21STomi Valkeinen #define IGA2_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA(x)            (x/4)
287f7018c21STomi Valkeinen #define IGA2_FIFO_HIGH_THRESHOLD_FORMULA(x)                 (x/4)
288f7018c21STomi Valkeinen 
289f7018c21STomi Valkeinen /************************************************************************/
290f7018c21STomi Valkeinen /*  LCD Timing                                                          */
291f7018c21STomi Valkeinen /************************************************************************/
292f7018c21STomi Valkeinen 
293f7018c21STomi Valkeinen /* 500 ms = 500000 us */
294f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD0               500000
295f7018c21STomi Valkeinen /* 50 ms = 50000 us */
296f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD1               50000
297f7018c21STomi Valkeinen /* 0 us */
298f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD2               0
299f7018c21STomi Valkeinen /* 210 ms = 210000 us */
300f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD3               210000
301f7018c21STomi Valkeinen /* 2^10 * (1/14.31818M) = 71.475 us (K400.revA) */
302f7018c21STomi Valkeinen #define CLE266_POWER_SEQ_UNIT           71
303f7018c21STomi Valkeinen /* 2^11 * (1/14.31818M) = 142.95 us (K400.revB) */
304f7018c21STomi Valkeinen #define K800_POWER_SEQ_UNIT             142
305f7018c21STomi Valkeinen /* 2^13 * (1/14.31818M) = 572.1 us */
306f7018c21STomi Valkeinen #define P880_POWER_SEQ_UNIT             572
307f7018c21STomi Valkeinen 
308f7018c21STomi Valkeinen #define CLE266_POWER_SEQ_FORMULA(x)     ((x)/CLE266_POWER_SEQ_UNIT)
309f7018c21STomi Valkeinen #define K800_POWER_SEQ_FORMULA(x)       ((x)/K800_POWER_SEQ_UNIT)
310f7018c21STomi Valkeinen #define P880_POWER_SEQ_FORMULA(x)       ((x)/P880_POWER_SEQ_UNIT)
311f7018c21STomi Valkeinen 
312f7018c21STomi Valkeinen /* location: {CR8B,0,7},{CR8F,0,3} */
313f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD0_REG_NUM       2
314f7018c21STomi Valkeinen /* location: {CR8C,0,7},{CR8F,4,7} */
315f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD1_REG_NUM       2
316f7018c21STomi Valkeinen /* location: {CR8D,0,7},{CR90,0,3} */
317f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD2_REG_NUM       2
318f7018c21STomi Valkeinen /* location: {CR8E,0,7},{CR90,4,7} */
319f7018c21STomi Valkeinen #define LCD_POWER_SEQ_TD3_REG_NUM       2
320f7018c21STomi Valkeinen 
321f7018c21STomi Valkeinen /* LCD Scaling factor*/
322f7018c21STomi Valkeinen /* x: indicate setting horizontal size*/
323f7018c21STomi Valkeinen /* y: indicate panel horizontal size*/
324f7018c21STomi Valkeinen 
325f7018c21STomi Valkeinen /* Horizontal scaling factor 10 bits (2^10) */
326f7018c21STomi Valkeinen #define CLE266_LCD_HOR_SCF_FORMULA(x, y)   (((x-1)*1024)/(y-1))
327f7018c21STomi Valkeinen /* Vertical scaling factor 10 bits (2^10) */
328f7018c21STomi Valkeinen #define CLE266_LCD_VER_SCF_FORMULA(x, y)   (((x-1)*1024)/(y-1))
329f7018c21STomi Valkeinen /* Horizontal scaling factor 10 bits (2^12) */
330f7018c21STomi Valkeinen #define K800_LCD_HOR_SCF_FORMULA(x, y)     (((x-1)*4096)/(y-1))
331f7018c21STomi Valkeinen /* Vertical scaling factor 10 bits (2^11) */
332f7018c21STomi Valkeinen #define K800_LCD_VER_SCF_FORMULA(x, y)     (((x-1)*2048)/(y-1))
333f7018c21STomi Valkeinen 
334f7018c21STomi Valkeinen /* location: {CR9F,0,1},{CR77,0,7},{CR79,4,5} */
335f7018c21STomi Valkeinen #define LCD_HOR_SCALING_FACTOR_REG_NUM  3
336f7018c21STomi Valkeinen /* location: {CR79,3,3},{CR78,0,7},{CR79,6,7} */
337f7018c21STomi Valkeinen #define LCD_VER_SCALING_FACTOR_REG_NUM  3
338f7018c21STomi Valkeinen /* location: {CR77,0,7},{CR79,4,5} */
339f7018c21STomi Valkeinen #define LCD_HOR_SCALING_FACTOR_REG_NUM_CLE  2
340f7018c21STomi Valkeinen /* location: {CR78,0,7},{CR79,6,7} */
341f7018c21STomi Valkeinen #define LCD_VER_SCALING_FACTOR_REG_NUM_CLE  2
342f7018c21STomi Valkeinen 
343f7018c21STomi Valkeinen struct io_register {
344f7018c21STomi Valkeinen 	u8 io_addr;
345f7018c21STomi Valkeinen 	u8 start_bit;
346f7018c21STomi Valkeinen 	u8 end_bit;
347f7018c21STomi Valkeinen };
348f7018c21STomi Valkeinen 
349f7018c21STomi Valkeinen /*****************************************************
350f7018c21STomi Valkeinen **      Define IGA2 Shadow Display Timing         ****
351f7018c21STomi Valkeinen *****************************************************/
352f7018c21STomi Valkeinen 
353f7018c21STomi Valkeinen /* IGA2 Shadow Horizontal Total */
354f7018c21STomi Valkeinen struct iga2_shadow_hor_total {
355f7018c21STomi Valkeinen 	int reg_num;
356f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_HOR_TOTAL_REG_NUM];
357f7018c21STomi Valkeinen };
358f7018c21STomi Valkeinen 
359f7018c21STomi Valkeinen /* IGA2 Shadow Horizontal Blank End */
360f7018c21STomi Valkeinen struct iga2_shadow_hor_blank_end {
361f7018c21STomi Valkeinen 	int reg_num;
362f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_HOR_BLANK_END_REG_NUM];
363f7018c21STomi Valkeinen };
364f7018c21STomi Valkeinen 
365f7018c21STomi Valkeinen /* IGA2 Shadow Vertical Total */
366f7018c21STomi Valkeinen struct iga2_shadow_ver_total {
367f7018c21STomi Valkeinen 	int reg_num;
368f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_VER_TOTAL_REG_NUM];
369f7018c21STomi Valkeinen };
370f7018c21STomi Valkeinen 
371f7018c21STomi Valkeinen /* IGA2 Shadow Vertical Addressable Video */
372f7018c21STomi Valkeinen struct iga2_shadow_ver_addr {
373f7018c21STomi Valkeinen 	int reg_num;
374f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_VER_ADDR_REG_NUM];
375f7018c21STomi Valkeinen };
376f7018c21STomi Valkeinen 
377f7018c21STomi Valkeinen /* IGA2 Shadow Vertical Blank Start */
378f7018c21STomi Valkeinen struct iga2_shadow_ver_blank_start {
379f7018c21STomi Valkeinen 	int reg_num;
380f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_VER_BLANK_START_REG_NUM];
381f7018c21STomi Valkeinen };
382f7018c21STomi Valkeinen 
383f7018c21STomi Valkeinen /* IGA2 Shadow Vertical Blank End */
384f7018c21STomi Valkeinen struct iga2_shadow_ver_blank_end {
385f7018c21STomi Valkeinen 	int reg_num;
386f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_VER_BLANK_END_REG_NUM];
387f7018c21STomi Valkeinen };
388f7018c21STomi Valkeinen 
389f7018c21STomi Valkeinen /* IGA2 Shadow Vertical Sync Start */
390f7018c21STomi Valkeinen struct iga2_shadow_ver_sync_start {
391f7018c21STomi Valkeinen 	int reg_num;
392f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_VER_SYNC_START_REG_NUM];
393f7018c21STomi Valkeinen };
394f7018c21STomi Valkeinen 
395f7018c21STomi Valkeinen /* IGA2 Shadow Vertical Sync End */
396f7018c21STomi Valkeinen struct iga2_shadow_ver_sync_end {
397f7018c21STomi Valkeinen 	int reg_num;
398f7018c21STomi Valkeinen 	struct io_register reg[IGA2_SHADOW_VER_SYNC_END_REG_NUM];
399f7018c21STomi Valkeinen };
400f7018c21STomi Valkeinen 
401f7018c21STomi Valkeinen /* IGA1 Fetch Count Register */
402f7018c21STomi Valkeinen struct iga1_fetch_count {
403f7018c21STomi Valkeinen 	int reg_num;
404f7018c21STomi Valkeinen 	struct io_register reg[IGA1_FETCH_COUNT_REG_NUM];
405f7018c21STomi Valkeinen };
406f7018c21STomi Valkeinen 
407f7018c21STomi Valkeinen /* IGA2 Fetch Count Register */
408f7018c21STomi Valkeinen struct iga2_fetch_count {
409f7018c21STomi Valkeinen 	int reg_num;
410f7018c21STomi Valkeinen 	struct io_register reg[IGA2_FETCH_COUNT_REG_NUM];
411f7018c21STomi Valkeinen };
412f7018c21STomi Valkeinen 
413f7018c21STomi Valkeinen struct fetch_count {
414f7018c21STomi Valkeinen 	struct iga1_fetch_count iga1_fetch_count_reg;
415f7018c21STomi Valkeinen 	struct iga2_fetch_count iga2_fetch_count_reg;
416f7018c21STomi Valkeinen };
417f7018c21STomi Valkeinen 
418f7018c21STomi Valkeinen /* Starting Address Register */
419f7018c21STomi Valkeinen struct iga1_starting_addr {
420f7018c21STomi Valkeinen 	int reg_num;
421f7018c21STomi Valkeinen 	struct io_register reg[IGA1_STARTING_ADDR_REG_NUM];
422f7018c21STomi Valkeinen };
423f7018c21STomi Valkeinen 
424f7018c21STomi Valkeinen struct iga2_starting_addr {
425f7018c21STomi Valkeinen 	int reg_num;
426f7018c21STomi Valkeinen 	struct io_register reg[IGA2_STARTING_ADDR_REG_NUM];
427f7018c21STomi Valkeinen };
428f7018c21STomi Valkeinen 
429f7018c21STomi Valkeinen struct starting_addr {
430f7018c21STomi Valkeinen 	struct iga1_starting_addr iga1_starting_addr_reg;
431f7018c21STomi Valkeinen 	struct iga2_starting_addr iga2_starting_addr_reg;
432f7018c21STomi Valkeinen };
433f7018c21STomi Valkeinen 
434f7018c21STomi Valkeinen /* LCD Power Sequence Timer */
435f7018c21STomi Valkeinen struct lcd_pwd_seq_td0 {
436f7018c21STomi Valkeinen 	int reg_num;
437f7018c21STomi Valkeinen 	struct io_register reg[LCD_POWER_SEQ_TD0_REG_NUM];
438f7018c21STomi Valkeinen };
439f7018c21STomi Valkeinen 
440f7018c21STomi Valkeinen struct lcd_pwd_seq_td1 {
441f7018c21STomi Valkeinen 	int reg_num;
442f7018c21STomi Valkeinen 	struct io_register reg[LCD_POWER_SEQ_TD1_REG_NUM];
443f7018c21STomi Valkeinen };
444f7018c21STomi Valkeinen 
445f7018c21STomi Valkeinen struct lcd_pwd_seq_td2 {
446f7018c21STomi Valkeinen 	int reg_num;
447f7018c21STomi Valkeinen 	struct io_register reg[LCD_POWER_SEQ_TD2_REG_NUM];
448f7018c21STomi Valkeinen };
449f7018c21STomi Valkeinen 
450f7018c21STomi Valkeinen struct lcd_pwd_seq_td3 {
451f7018c21STomi Valkeinen 	int reg_num;
452f7018c21STomi Valkeinen 	struct io_register reg[LCD_POWER_SEQ_TD3_REG_NUM];
453f7018c21STomi Valkeinen };
454f7018c21STomi Valkeinen 
455f7018c21STomi Valkeinen struct _lcd_pwd_seq_timer {
456f7018c21STomi Valkeinen 	struct lcd_pwd_seq_td0 td0;
457f7018c21STomi Valkeinen 	struct lcd_pwd_seq_td1 td1;
458f7018c21STomi Valkeinen 	struct lcd_pwd_seq_td2 td2;
459f7018c21STomi Valkeinen 	struct lcd_pwd_seq_td3 td3;
460f7018c21STomi Valkeinen };
461f7018c21STomi Valkeinen 
462f7018c21STomi Valkeinen /* LCD Scaling Factor */
463f7018c21STomi Valkeinen struct _lcd_hor_scaling_factor {
464f7018c21STomi Valkeinen 	int reg_num;
465f7018c21STomi Valkeinen 	struct io_register reg[LCD_HOR_SCALING_FACTOR_REG_NUM];
466f7018c21STomi Valkeinen };
467f7018c21STomi Valkeinen 
468f7018c21STomi Valkeinen struct _lcd_ver_scaling_factor {
469f7018c21STomi Valkeinen 	int reg_num;
470f7018c21STomi Valkeinen 	struct io_register reg[LCD_VER_SCALING_FACTOR_REG_NUM];
471f7018c21STomi Valkeinen };
472f7018c21STomi Valkeinen 
473f7018c21STomi Valkeinen struct _lcd_scaling_factor {
474f7018c21STomi Valkeinen 	struct _lcd_hor_scaling_factor lcd_hor_scaling_factor;
475f7018c21STomi Valkeinen 	struct _lcd_ver_scaling_factor lcd_ver_scaling_factor;
476f7018c21STomi Valkeinen };
477f7018c21STomi Valkeinen 
478f7018c21STomi Valkeinen struct pll_limit {
479f7018c21STomi Valkeinen 	u16 multiplier_min;
480f7018c21STomi Valkeinen 	u16 multiplier_max;
481f7018c21STomi Valkeinen 	u8 divisor;
482f7018c21STomi Valkeinen 	u8 rshift;
483f7018c21STomi Valkeinen };
484f7018c21STomi Valkeinen 
485f7018c21STomi Valkeinen struct rgbLUT {
486f7018c21STomi Valkeinen 	u8 red;
487f7018c21STomi Valkeinen 	u8 green;
488f7018c21STomi Valkeinen 	u8 blue;
489f7018c21STomi Valkeinen };
490f7018c21STomi Valkeinen 
491f7018c21STomi Valkeinen struct lcd_pwd_seq_timer {
492f7018c21STomi Valkeinen 	u16 td0;
493f7018c21STomi Valkeinen 	u16 td1;
494f7018c21STomi Valkeinen 	u16 td2;
495f7018c21STomi Valkeinen 	u16 td3;
496f7018c21STomi Valkeinen };
497f7018c21STomi Valkeinen 
498f7018c21STomi Valkeinen /* Display FIFO Relation Registers*/
499f7018c21STomi Valkeinen struct iga1_fifo_depth_select {
500f7018c21STomi Valkeinen 	int reg_num;
501f7018c21STomi Valkeinen 	struct io_register reg[IGA1_FIFO_DEPTH_SELECT_REG_NUM];
502f7018c21STomi Valkeinen };
503f7018c21STomi Valkeinen 
504f7018c21STomi Valkeinen struct iga1_fifo_threshold_select {
505f7018c21STomi Valkeinen 	int reg_num;
506f7018c21STomi Valkeinen 	struct io_register reg[IGA1_FIFO_THRESHOLD_REG_NUM];
507f7018c21STomi Valkeinen };
508f7018c21STomi Valkeinen 
509f7018c21STomi Valkeinen struct iga1_fifo_high_threshold_select {
510f7018c21STomi Valkeinen 	int reg_num;
511f7018c21STomi Valkeinen 	struct io_register reg[IGA1_FIFO_HIGH_THRESHOLD_REG_NUM];
512f7018c21STomi Valkeinen };
513f7018c21STomi Valkeinen 
514f7018c21STomi Valkeinen struct iga1_display_queue_expire_num {
515f7018c21STomi Valkeinen 	int reg_num;
516f7018c21STomi Valkeinen 	struct io_register reg[IGA1_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM];
517f7018c21STomi Valkeinen };
518f7018c21STomi Valkeinen 
519f7018c21STomi Valkeinen struct iga2_fifo_depth_select {
520f7018c21STomi Valkeinen 	int reg_num;
521f7018c21STomi Valkeinen 	struct io_register reg[IGA2_FIFO_DEPTH_SELECT_REG_NUM];
522f7018c21STomi Valkeinen };
523f7018c21STomi Valkeinen 
524f7018c21STomi Valkeinen struct iga2_fifo_threshold_select {
525f7018c21STomi Valkeinen 	int reg_num;
526f7018c21STomi Valkeinen 	struct io_register reg[IGA2_FIFO_THRESHOLD_REG_NUM];
527f7018c21STomi Valkeinen };
528f7018c21STomi Valkeinen 
529f7018c21STomi Valkeinen struct iga2_fifo_high_threshold_select {
530f7018c21STomi Valkeinen 	int reg_num;
531f7018c21STomi Valkeinen 	struct io_register reg[IGA2_FIFO_HIGH_THRESHOLD_REG_NUM];
532f7018c21STomi Valkeinen };
533f7018c21STomi Valkeinen 
534f7018c21STomi Valkeinen struct iga2_display_queue_expire_num {
535f7018c21STomi Valkeinen 	int reg_num;
536f7018c21STomi Valkeinen 	struct io_register reg[IGA2_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM];
537f7018c21STomi Valkeinen };
538f7018c21STomi Valkeinen 
539f7018c21STomi Valkeinen struct fifo_depth_select {
540f7018c21STomi Valkeinen 	struct iga1_fifo_depth_select iga1_fifo_depth_select_reg;
541f7018c21STomi Valkeinen 	struct iga2_fifo_depth_select iga2_fifo_depth_select_reg;
542f7018c21STomi Valkeinen };
543f7018c21STomi Valkeinen 
544f7018c21STomi Valkeinen struct fifo_threshold_select {
545f7018c21STomi Valkeinen 	struct iga1_fifo_threshold_select iga1_fifo_threshold_select_reg;
546f7018c21STomi Valkeinen 	struct iga2_fifo_threshold_select iga2_fifo_threshold_select_reg;
547f7018c21STomi Valkeinen };
548f7018c21STomi Valkeinen 
549f7018c21STomi Valkeinen struct fifo_high_threshold_select {
550f7018c21STomi Valkeinen 	struct iga1_fifo_high_threshold_select
551f7018c21STomi Valkeinen 	 iga1_fifo_high_threshold_select_reg;
552f7018c21STomi Valkeinen 	struct iga2_fifo_high_threshold_select
553f7018c21STomi Valkeinen 	 iga2_fifo_high_threshold_select_reg;
554f7018c21STomi Valkeinen };
555f7018c21STomi Valkeinen 
556f7018c21STomi Valkeinen struct display_queue_expire_num {
557f7018c21STomi Valkeinen 	struct iga1_display_queue_expire_num
558f7018c21STomi Valkeinen 	 iga1_display_queue_expire_num_reg;
559f7018c21STomi Valkeinen 	struct iga2_display_queue_expire_num
560f7018c21STomi Valkeinen 	 iga2_display_queue_expire_num_reg;
561f7018c21STomi Valkeinen };
562f7018c21STomi Valkeinen 
563f7018c21STomi Valkeinen struct iga2_shadow_crtc_timing {
564f7018c21STomi Valkeinen 	struct iga2_shadow_hor_total hor_total_shadow;
565f7018c21STomi Valkeinen 	struct iga2_shadow_hor_blank_end hor_blank_end_shadow;
566f7018c21STomi Valkeinen 	struct iga2_shadow_ver_total ver_total_shadow;
567f7018c21STomi Valkeinen 	struct iga2_shadow_ver_addr ver_addr_shadow;
568f7018c21STomi Valkeinen 	struct iga2_shadow_ver_blank_start ver_blank_start_shadow;
569f7018c21STomi Valkeinen 	struct iga2_shadow_ver_blank_end ver_blank_end_shadow;
570f7018c21STomi Valkeinen 	struct iga2_shadow_ver_sync_start ver_sync_start_shadow;
571f7018c21STomi Valkeinen 	struct iga2_shadow_ver_sync_end ver_sync_end_shadow;
572f7018c21STomi Valkeinen };
573f7018c21STomi Valkeinen 
574f7018c21STomi Valkeinen /* device ID */
575f7018c21STomi Valkeinen #define CLE266_FUNCTION3    0x3123
576f7018c21STomi Valkeinen #define KM400_FUNCTION3     0x3205
577f7018c21STomi Valkeinen #define CN400_FUNCTION2     0x2259
578f7018c21STomi Valkeinen #define CN400_FUNCTION3     0x3259
579f7018c21STomi Valkeinen /* support VT3314 chipset */
580f7018c21STomi Valkeinen #define CN700_FUNCTION2     0x2314
581f7018c21STomi Valkeinen #define CN700_FUNCTION3     0x3208
582f7018c21STomi Valkeinen /* VT3324 chipset */
583f7018c21STomi Valkeinen #define CX700_FUNCTION2     0x2324
584f7018c21STomi Valkeinen #define CX700_FUNCTION3     0x3324
585f7018c21STomi Valkeinen /* VT3204 chipset*/
586f7018c21STomi Valkeinen #define KM800_FUNCTION3      0x3204
587f7018c21STomi Valkeinen /* VT3336 chipset*/
588f7018c21STomi Valkeinen #define KM890_FUNCTION3      0x3336
589f7018c21STomi Valkeinen /* VT3327 chipset*/
590f7018c21STomi Valkeinen #define P4M890_FUNCTION3     0x3327
591f7018c21STomi Valkeinen /* VT3293 chipset*/
592f7018c21STomi Valkeinen #define CN750_FUNCTION3     0x3208
593f7018c21STomi Valkeinen /* VT3364 chipset*/
594f7018c21STomi Valkeinen #define P4M900_FUNCTION3    0x3364
595f7018c21STomi Valkeinen /* VT3353 chipset*/
596f7018c21STomi Valkeinen #define VX800_FUNCTION3     0x3353
597f7018c21STomi Valkeinen /* VT3409 chipset*/
598f7018c21STomi Valkeinen #define VX855_FUNCTION3     0x3409
599f7018c21STomi Valkeinen /* VT3410 chipset*/
600f7018c21STomi Valkeinen #define VX900_FUNCTION3     0x3410
601f7018c21STomi Valkeinen 
602f7018c21STomi Valkeinen struct IODATA {
603f7018c21STomi Valkeinen 	u8 Index;
604f7018c21STomi Valkeinen 	u8 Mask;
605f7018c21STomi Valkeinen 	u8 Data;
606f7018c21STomi Valkeinen };
607f7018c21STomi Valkeinen 
608f7018c21STomi Valkeinen struct pci_device_id_info {
609f7018c21STomi Valkeinen 	u32 vendor;
610f7018c21STomi Valkeinen 	u32 device;
611f7018c21STomi Valkeinen 	u32 chip_index;
612f7018c21STomi Valkeinen };
613f7018c21STomi Valkeinen 
614f7018c21STomi Valkeinen struct via_device_mapping {
615f7018c21STomi Valkeinen 	u32 device;
616f7018c21STomi Valkeinen 	const char *name;
617f7018c21STomi Valkeinen };
618f7018c21STomi Valkeinen 
619f7018c21STomi Valkeinen extern int viafb_SAMM_ON;
620f7018c21STomi Valkeinen extern int viafb_dual_fb;
621f7018c21STomi Valkeinen extern int viafb_LCD2_ON;
622f7018c21STomi Valkeinen extern int viafb_LCD_ON;
623f7018c21STomi Valkeinen extern int viafb_DVI_ON;
624f7018c21STomi Valkeinen extern int viafb_hotplug;
625f7018c21STomi Valkeinen 
626f7018c21STomi Valkeinen struct via_display_timing var_to_timing(const struct fb_var_screeninfo *var,
627f7018c21STomi Valkeinen 	u16 cxres, u16 cyres);
628f7018c21STomi Valkeinen void viafb_fill_crtc_timing(const struct fb_var_screeninfo *var,
629f7018c21STomi Valkeinen 	u16 cxres, u16 cyres, int iga);
630f7018c21STomi Valkeinen void viafb_set_vclock(u32 CLK, int set_iga);
631f7018c21STomi Valkeinen void viafb_load_reg(int timing_value, int viafb_load_reg_num,
632f7018c21STomi Valkeinen 	struct io_register *reg,
633f7018c21STomi Valkeinen 	      int io_type);
634f7018c21STomi Valkeinen void via_set_source(u32 devices, u8 iga);
635f7018c21STomi Valkeinen void via_set_state(u32 devices, u8 state);
636f7018c21STomi Valkeinen void via_set_sync_polarity(u32 devices, u8 polarity);
637f7018c21STomi Valkeinen u32 via_parse_odev(char *input, char **end);
638f7018c21STomi Valkeinen void via_odev_to_seq(struct seq_file *m, u32 odev);
639f7018c21STomi Valkeinen void init_ad9389(void);
640f7018c21STomi Valkeinen /* Access I/O Function */
641f7018c21STomi Valkeinen void viafb_lock_crt(void);
642f7018c21STomi Valkeinen void viafb_unlock_crt(void);
643f7018c21STomi Valkeinen void viafb_load_fetch_count_reg(int h_addr, int bpp_byte, int set_iga);
644f7018c21STomi Valkeinen void viafb_write_regx(struct io_reg RegTable[], int ItemNum);
645f7018c21STomi Valkeinen void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active);
646f7018c21STomi Valkeinen void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\
647f7018c21STomi Valkeinen 					*p_gfx_dpa_setting);
648f7018c21STomi Valkeinen 
649f7018c21STomi Valkeinen int viafb_setmode(void);
650f7018c21STomi Valkeinen void viafb_fill_var_timing_info(struct fb_var_screeninfo *var,
651f7018c21STomi Valkeinen 	const struct fb_videomode *mode);
652f7018c21STomi Valkeinen void viafb_init_chip_info(int chip_type);
653f7018c21STomi Valkeinen void viafb_init_dac(int set_iga);
654f7018c21STomi Valkeinen int viafb_get_refresh(int hres, int vres, u32 float_refresh);
655f7018c21STomi Valkeinen void viafb_update_device_setting(int hres, int vres, int bpp, int flag);
656f7018c21STomi Valkeinen 
657f7018c21STomi Valkeinen void viafb_set_iga_path(void);
658f7018c21STomi Valkeinen void viafb_set_primary_color_register(u8 index, u8 red, u8 green, u8 blue);
659f7018c21STomi Valkeinen void viafb_set_secondary_color_register(u8 index, u8 red, u8 green, u8 blue);
660f7018c21STomi Valkeinen void viafb_get_fb_info(unsigned int *fb_base, unsigned int *fb_len);
661f7018c21STomi Valkeinen 
662f7018c21STomi Valkeinen #endif /* __HW_H__ */
663