150806d53Smrg/*
250806d53Smrg * Copyright 1994-2000 by Robin Cutshaw <robin@XFree86.Org>
350806d53Smrg *
450806d53Smrg * Permission to use, copy, modify, distribute, and sell this software and its
550806d53Smrg * documentation for any purpose is hereby granted without fee, provided that
650806d53Smrg * the above copyright notice appear in all copies and that both that
750806d53Smrg * copyright notice and this permission notice appear in supporting
850806d53Smrg * documentation, and that the name of Robin Cutshaw not be used in
950806d53Smrg * advertising or publicity pertaining to distribution of the software without
1050806d53Smrg * specific, written prior permission.  Robin Cutshaw makes no representations
1150806d53Smrg * about the suitability of this software for any purpose.  It is provided
1250806d53Smrg * "as is" without express or implied warranty.
1350806d53Smrg *
1450806d53Smrg * ROBIN CUTSHAW DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1550806d53Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1650806d53Smrg * EVENT SHALL ROBIN CUTSHAW BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1750806d53Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1850806d53Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1950806d53Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2050806d53Smrg * PERFORMANCE OF THIS SOFTWARE.
2150806d53Smrg *
2250806d53Smrg */
2350806d53Smrg
2450806d53Smrg#include "compiler.h"
2550806d53Smrg
2650806d53Smrg/* Indirect indexed registers */
2750806d53Smrg
2850806d53Smrg#define TI_CURS_X_LOW		0x00
2950806d53Smrg#define TI_CURS_X_HIGH		0x01    /* only lower 4 bits are used */
3050806d53Smrg#define TI_CURS_Y_LOW		0x02
3150806d53Smrg#define TI_CURS_Y_HIGH		0x03    /* only lower 4 bits are used */
3250806d53Smrg#define TI_SPRITE_ORIGIN_X	0x04
3350806d53Smrg#define TI_SPRITE_ORIGIN_Y	0x05
3450806d53Smrg#define TI_CURS_CONTROL		0x06
3550806d53Smrg#define   TI_PLANAR_ACCESS	0x80    /* 3025 only - 80 == BT485 mode */
3650806d53Smrg#define   TI_CURS_SPRITE_ENABLE 0x40
3750806d53Smrg#define   TI_CURS_X_WINDOW_MODE 0x10
3850806d53Smrg#define   TI_CURS_CTRL_MASK     (TI_CURS_SPRITE_ENABLE | TI_CURS_X_WINDOW_MODE)
3950806d53Smrg#define TI_CURS_RAM_ADDR_LOW	0x08
4050806d53Smrg#define TI_CURS_RAM_ADDR_HIGH	0x09
4150806d53Smrg#define TI_CURS_RAM_DATA	0x0A
4250806d53Smrg#define TI_TRUE_COLOR_CONTROL	0x0E    /* 3025 only */
4350806d53Smrg#define   TI_TC_BTMODE		0x04    /* on = BT485 mode, off = TI3020 mode */
4450806d53Smrg#define   TI_TC_NONVGAMODE	0x02    /* on = nonvgamode, off = vgamode */
4550806d53Smrg#define   TI_TC_8BIT		0x01    /* on = 8/4bit, off = 16/32bit */
4650806d53Smrg#define TI_VGA_SWITCH_CONTROL	0x0F    /* 3025 only */
4750806d53Smrg#define TI_LATCH_CONTROL	0x0F    /* 3026 only */
4850806d53Smrg#define TI_WINDOW_START_X_LOW	0x10
4950806d53Smrg#define TI_WINDOW_START_X_HIGH	0x11
5050806d53Smrg#define TI_WINDOW_STOP_X_LOW	0x12
5150806d53Smrg#define TI_WINDOW_STOP_X_HIGH	0x13
5250806d53Smrg#define TI_WINDOW_START_Y_LOW	0x14
5350806d53Smrg#define TI_WINDOW_START_Y_HIGH	0x15
5450806d53Smrg#define TI_WINDOW_STOP_Y_LOW	0x16
5550806d53Smrg#define TI_WINDOW_STOP_Y_HIGH	0x17
5650806d53Smrg#define TI_MUX_CONTROL_1	0x18
5750806d53Smrg#define   TI_MUX1_PSEUDO_COLOR	0x80
5850806d53Smrg#define   TI_MUX1_DIRECT_888	0x06
5950806d53Smrg#define   TI_MUX1_DIRECT_565	0x05
6050806d53Smrg#define   TI_MUX1_DIRECT_555	0x04
6150806d53Smrg#define   TI_MUX1_DIRECT_664	0x03
6250806d53Smrg#define   TI_MUX1_TRUE_888	0x46
6350806d53Smrg#define   TI_MUX1_TRUE_565	0x45
6450806d53Smrg#define   TI_MUX1_TRUE_555	0x44
6550806d53Smrg#define   TI_MUX1_TRUE_664	0x43
6650806d53Smrg#define   TI_MUX1_3025D_888	0x0E     /* 3025 only */
6750806d53Smrg#define   TI_MUX1_3025D_565	0x0D     /* 3025 only */
6850806d53Smrg#define   TI_MUX1_3025D_555	0x0C     /* 3025 only */
6950806d53Smrg#define   TI_MUX1_3025T_888	0x4E     /* 3025 only */
7050806d53Smrg#define   TI_MUX1_3025T_565	0x4D     /* 3025 only */
7150806d53Smrg#define   TI_MUX1_3025T_555	0x4C     /* 3025 only */
7250806d53Smrg#define   TI_MUX1_3026D_888	0x06     /* 3026 only */
7350806d53Smrg#define   TI_MUX1_3026D_565	0x05     /* 3026 only */
7450806d53Smrg#define   TI_MUX1_3026D_555	0x04     /* 3026 only */
7550806d53Smrg#define   TI_MUX1_3026D_888_P8	0x16     /* 3026 only */
7650806d53Smrg#define   TI_MUX1_3026D_888_P5	0x1e     /* 3026 only */
7750806d53Smrg#define   TI_MUX1_3026T_888	0x46     /* 3026 only */
7850806d53Smrg#define   TI_MUX1_3026T_565	0x45     /* 3026 only */
7950806d53Smrg#define   TI_MUX1_3026T_555	0x44     /* 3026 only */
8050806d53Smrg#define   TI_MUX1_3026T_888_P8	0x56     /* 3026 only */
8150806d53Smrg#define   TI_MUX1_3026T_888_P5	0x5e     /* 3026 only */
8250806d53Smrg#define TI_MUX_CONTROL_2	0x19
8350806d53Smrg#define   TI_MUX2_BUS_VGA	0x98
8450806d53Smrg#define   TI_MUX2_BUS_PC_D8P64	0x1C
8550806d53Smrg#define   TI_MUX2_BUS_DC_D24P64	0x1C
8650806d53Smrg#define   TI_MUX2_BUS_DC_D16P64	0x04
8750806d53Smrg#define   TI_MUX2_BUS_DC_D15P64	0x04
8850806d53Smrg#define   TI_MUX2_BUS_TC_D24P64	0x04
8950806d53Smrg#define   TI_MUX2_BUS_TC_D16P64	0x04
9050806d53Smrg#define   TI_MUX2_BUS_TC_D15P64	0x04
9150806d53Smrg#define   TI_MUX2_BUS_3026PC_D8P64	0x4C
9250806d53Smrg#define   TI_MUX2_BUS_3026DC_D24P64	0x5C
9350806d53Smrg#define   TI_MUX2_BUS_3026DC_D16P64	0x54
9450806d53Smrg#define   TI_MUX2_BUS_3026DC_D15P64	0x54
9550806d53Smrg#define   TI_MUX2_BUS_3026TC_D24P64	0x5c
9650806d53Smrg#define   TI_MUX2_BUS_3026TC_D16P64	0x54
9750806d53Smrg#define   TI_MUX2_BUS_3026TC_D15P64	0x54
9850806d53Smrg#define   TI_MUX2_BUS_3030PC_D8P128	0x4d
9950806d53Smrg#define   TI_MUX2_BUS_3030DC_D24P128	0x5d
10050806d53Smrg#define   TI_MUX2_BUS_3030DC_D16P128	0x55
10150806d53Smrg#define   TI_MUX2_BUS_3030DC_D15P128	0x55
10250806d53Smrg#define   TI_MUX2_BUS_3030TC_D24P128	0x5d
10350806d53Smrg#define   TI_MUX2_BUS_3030TC_D16P128	0x55
10450806d53Smrg#define   TI_MUX2_BUS_3030TC_D15P128	0x55
10550806d53Smrg#define TI_INPUT_CLOCK_SELECT	0x1A
10650806d53Smrg#define   TI_ICLK_CLK0		0x00
10750806d53Smrg#define   TI_ICLK_CLK0_DOUBLE	0x10
10850806d53Smrg#define   TI_ICLK_CLK1		0x01
10950806d53Smrg#define   TI_ICLK_CLK1_DOUBLE	0x11
11050806d53Smrg#define   TI_ICLK_CLK2		0x02     /* 3025 only */
11150806d53Smrg#define   TI_ICLK_CLK2_DOUBLE	0x12     /* 3025 only */
11250806d53Smrg#define   TI_ICLK_CLK2_I	0x03     /* 3025 only */
11350806d53Smrg#define   TI_ICLK_CLK2_I_DOUBLE	0x13     /* 3025 only */
11450806d53Smrg#define   TI_ICLK_CLK2_E	0x04     /* 3025 only */
11550806d53Smrg#define   TI_ICLK_CLK2_E_DOUBLE	0x14     /* 3025 only */
11650806d53Smrg#define   TI_ICLK_PLL		0x05     /* 3025 only */
11750806d53Smrg#define TI_OUTPUT_CLOCK_SELECT	0x1B
11850806d53Smrg#define   TI_OCLK_VGA		0x3E
11950806d53Smrg#define   TI_OCLK_S		0x40
12050806d53Smrg#define   TI_OCLK_NS		0x80     /* 3025 only */
12150806d53Smrg#define   TI_OCLK_V1		0x00
12250806d53Smrg#define   TI_OCLK_V2		0x08
12350806d53Smrg#define   TI_OCLK_V4		0x10
12450806d53Smrg#define   TI_OCLK_V8		0x18
12550806d53Smrg#define   TI_OCLK_R1		0x00
12650806d53Smrg#define   TI_OCLK_R2		0x01
12750806d53Smrg#define   TI_OCLK_R4		0x02
12850806d53Smrg#define   TI_OCLK_R8		0x03
12950806d53Smrg#define   TI_OCLK_S_V1_R8	(TI_OCLK_S | TI_OCLK_V1 | TI_OCLK_R8)
13050806d53Smrg#define   TI_OCLK_S_V2_R8	(TI_OCLK_S | TI_OCLK_V2 | TI_OCLK_R8)
13150806d53Smrg#define   TI_OCLK_S_V4_R8	(TI_OCLK_S | TI_OCLK_V4 | TI_OCLK_R8)
13250806d53Smrg#define   TI_OCLK_S_V8_R8	(TI_OCLK_S | TI_OCLK_V8 | TI_OCLK_R8)
13350806d53Smrg#define   TI_OCLK_S_V2_R4	(TI_OCLK_S | TI_OCLK_V2 | TI_OCLK_R4)
13450806d53Smrg#define   TI_OCLK_S_V4_R4	(TI_OCLK_S | TI_OCLK_V4 | TI_OCLK_R4)
13550806d53Smrg#define   TI_OCLK_S_V1_R2	(TI_OCLK_S | TI_OCLK_V1 | TI_OCLK_R2)
13650806d53Smrg#define   TI_OCLK_S_V2_R2	(TI_OCLK_S | TI_OCLK_V2 | TI_OCLK_R2)
13750806d53Smrg#define   TI_OCLK_NS_V1_R1	(TI_OCLK_NS | TI_OCLK_V1 | TI_OCLK_R1)
13850806d53Smrg#define   TI_OCLK_NS_V2_R2	(TI_OCLK_NS | TI_OCLK_V2 | TI_OCLK_R2)
13950806d53Smrg#define   TI_OCLK_NS_V4_R4	(TI_OCLK_NS | TI_OCLK_V4 | TI_OCLK_R4)
14050806d53Smrg#define TI_PALETTE_PAGE		0x1C
14150806d53Smrg#define TI_GENERAL_CONTROL	0x1D
14250806d53Smrg#define TI_MISC_CONTROL		0x1E     /* 3025 only */
14350806d53Smrg#define   TI_MC_POWER_DOWN	0x01
14450806d53Smrg#define   TI_MC_DOTCLK_DISABLE	0x02
14550806d53Smrg#define   TI_MC_INT_6_8_CONTROL	0x04     /* 00 == external 6/8 pin */
14650806d53Smrg#define   TI_MC_8_BPP		0x08     /* 00 == 6bpp */
14750806d53Smrg#define   TI_MC_PSEL_POLARITY	0x20	 /* 3026 only, PSEL polarity select */
14850806d53Smrg#define   TI_MC_VCLK_POLARITY	0x20
14950806d53Smrg#define   TI_MC_LCLK_LATCH	0x40     /* VCLK == 00, default */
15050806d53Smrg#define   TI_MC_LOOP_PLL_RCLK	0x80
15150806d53Smrg#define TI_OVERSCAN_COLOR_RED	0x20
15250806d53Smrg#define TI_OVERSCAN_COLOR_GREEN	0x21
15350806d53Smrg#define TI_OVERSCAN_COLOR_BLUE	0x22
15450806d53Smrg#define TI_CURSOR_COLOR_0_RED	0x23
15550806d53Smrg#define TI_CURSOR_COLOR_0_GREEN	0x24
15650806d53Smrg#define TI_CURSOR_COLOR_0_BLUE	0x25
15750806d53Smrg#define TI_CURSOR_COLOR_1_RED	0x26
15850806d53Smrg#define TI_CURSOR_COLOR_1_GREEN	0x27
15950806d53Smrg#define TI_CURSOR_COLOR_1_BLUE	0x28
16050806d53Smrg#define TI_AUXILIARY_CONTROL	0x29
16150806d53Smrg#define   TI_AUX_SELF_CLOCK	0x08
16250806d53Smrg#define   TI_AUX_W_CMPL		0x01
16350806d53Smrg#define TI_GENERAL_IO_CONTROL	0x2A
16450806d53Smrg#define   TI_GIC_ALL_BITS	0x1F
16550806d53Smrg#define TI_GENERAL_IO_DATA	0x2B
16650806d53Smrg#define   TI_GID_W2000_6BIT     0x00
16750806d53Smrg#define   TI_GID_N9_964		0x01
16850806d53Smrg#define   TI_GID_ELSA_SOG	0x04
16950806d53Smrg#define   TI_GID_W2000_8BIT     0x08
17050806d53Smrg#define   TI_GID_S3_DAC_6BIT	0x1C
17150806d53Smrg#define   TI_GID_S3_DAC_8BIT	0x1E
17250806d53Smrg#define   TI_GID_TI_DAC_6BIT	0x1D
17350806d53Smrg#define   TI_GID_TI_DAC_8BIT	0x1F
17450806d53Smrg#define TI_PLL_CONTROL		0x2C    /* 3025 only */
17550806d53Smrg#define TI_PIXEL_CLOCK_PLL_DATA	0x2D    /* 3025 only */
17650806d53Smrg#define   TI_PLL_ENABLE		0x08    /* 3025 only */
17750806d53Smrg#define TI_MCLK_PLL_DATA	0x2E    /* 3025 only */
17850806d53Smrg#define TI_LOOP_CLOCK_PLL_DATA	0x2F    /* 3025 only */
17950806d53Smrg#define TI_COLOR_KEY_OLVGA_LOW	0x30
18050806d53Smrg#define TI_COLOR_KEY_OLVGA_HIGH	0x31
18150806d53Smrg#define TI_COLOR_KEY_RED_LOW	0x32
18250806d53Smrg#define TI_COLOR_KEY_RED_HIGH	0x33
18350806d53Smrg#define TI_COLOR_KEY_GREEN_LOW	0x34
18450806d53Smrg#define TI_COLOR_KEY_GREEN_HIGH	0x35
18550806d53Smrg#define TI_COLOR_KEY_BLUE_LOW	0x36
18650806d53Smrg#define TI_COLOR_KEY_BLUE_HIGH	0x37
18750806d53Smrg#define TI_COLOR_KEY_CONTROL	0x38
18850806d53Smrg#define   TI_COLOR_KEY_CMPL	0x10
18950806d53Smrg#define TI_MCLK_DCLK_CONTROL	0x39    /* 3025 only */
19050806d53Smrg#define TI_MCLK_LCLK_CONTROL	0x39    /* 3026 only */
19150806d53Smrg#define TI_SENSE_TEST		0x3A
19250806d53Smrg#define TI_TEST_DATA		0x3B
19350806d53Smrg#define TI_CRC_LOW		0x3C
19450806d53Smrg#define TI_CRC_HIGH		0x3D
19550806d53Smrg#define TI_CRC_CONTROL		0x3E
19650806d53Smrg#define TI_ID			0x3F
19750806d53Smrg#define   TI_VIEWPOINT20_ID	0x20
19850806d53Smrg#define   TI_VIEWPOINT25_ID	0x25
19950806d53Smrg#define TI_MODE_85_CONTROL	0xD5    /* 3025 only */
20050806d53Smrg
20150806d53Smrg#define TI_REF_FREQ		14.31818  /* 3025 only */
20250806d53Smrg
20350806d53Smrg/*
20450806d53Smrg * which clocks should be set (just flags...)
20550806d53Smrg */
20650806d53Smrg#define TI_BOTH_CLOCKS	1
20750806d53Smrg#define TI_LOOP_CLOCK	2
208