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