195b296d0Smrg/* 295b296d0Smrg * VIA TV additions 395b296d0Smrg */ 495b296d0Smrg 595b296d0Smrg 695b296d0Smrg#ifdef HAVE_CONFIG_H 795b296d0Smrg#include "config.h" 895b296d0Smrg#endif 995b296d0Smrg 1095b296d0Smrg#include "trident.h" 1195b296d0Smrg#include "trident_regs.h" 1295b296d0Smrg 1395b296d0Smrg/*************************************************************************** 1495b296d0Smrg * 1595b296d0Smrg * TV parameters for VT1621 1695b296d0Smrg * 1795b296d0Smrg ***************************************************************************/ 1895b296d0Smrg#define TV_MODE 8 1995b296d0Smrg#define TVX_MODE_SIZE 0X72 2095b296d0Smrg#define TVX_CRTC_NUM 0x10 2195b296d0Smrg#define TVX_REG_NUM 0x62 2295b296d0Smrg#define TVX_VT1621_PORT 0x40 2395b296d0Smrg#define SMBUS_BASE 0x5000 2495b296d0Smrgunsigned char TVX_VT1621_Table[TV_MODE][TVX_MODE_SIZE] = { 2595b296d0Smrg{ 2695b296d0Smrg/* NTSC, 640x480, bpp=8,16 */ 2795b296d0Smrg0x02, 0x54, 0xE0, 0xFA, 0x11, 0x5D, 0x11, 0x57, 0x5A, 0x56, 2895b296d0Smrg0xA0, 0x26, 0x0A, 0x55, 0x37, 0x86, 2995b296d0Smrg 3095b296d0Smrg0x6A, 0x0B, 0x22, 0x27, 0x43, 0x50, 0x13, 0x50, 3195b296d0Smrg0xB0, 0x07, 0xEE, 0x15, 0x90, 0xE4, 0x00, 0xA8, 3295b296d0Smrg0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x00, 0x1C, 3395b296d0Smrg0x00, 0x40, 0x0C, 0x02, 0x01, 0x80, 0x00, 0x00, 3495b296d0Smrg0x0F, 0x06, 0x99, 0x7C, 0x04, 0x5D, 0x36, 0x9B, 3595b296d0Smrg0x54, 0x00, 0x00, 0xB4, 0x2F, 0x85, 0xFF, 0x00, 3695b296d0Smrg0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02, 3795b296d0Smrg0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F, 3895b296d0Smrg0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF, 3995b296d0Smrg0x03, 0x01, 0x90, 0x33, 0x00, 0x00, 0x00, 0x00, 4095b296d0Smrg0x00, 0x04, 0x47, 0x02, 0x02, 0xFD, 0x06, 0xf8, 4195b296d0Smrg0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1, 4295b296d0Smrg0x11, 0x6E 4395b296d0Smrg}, 4495b296d0Smrg{ 4595b296d0Smrg/* NTSC, 800x600, bpp=8,16 */ 4695b296d0Smrg0X02, 0x79, 0XE0, 0x73, 0x02, 0x80, 0x01, 0x7A, 0x7E, 0xEC, 4795b296d0Smrg0xA0, 0x8A, 0x0E, 0xEB, 0x8B, 0x89, 4895b296d0Smrg 4995b296d0Smrg0x8B, 0x0B, 0x6A, 0x27, 0x43, 0x50, 0x12, 0x50, 5095b296d0Smrg0xBC, 0x0A, 0XE8, 0x15, 0x88, 0xDC, 0x00, 0x98, 5195b296d0Smrg0x00, 0x00, 0x0A, 0x48, 0x1C, 0x28, 0x03, 0x20, 5295b296d0Smrg0x00, 0x40, 0x36, 0x02, 0x03, 0x80, 0x00, 0x00, 5395b296d0Smrg0x0D, 0x04, 0x04, 0x7B, 0x00, 0x5D, 0xC1, 0x9B, 5495b296d0Smrg0x6B, 0x00, 0x00, 0xA1, 0x3F, 0x9D, 0x2F, 0x10, 5595b296d0Smrg0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02, 5695b296d0Smrg0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F, 5795b296d0Smrg0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF, 5895b296d0Smrg0x03, 0x01, 0xD6, 0x80, 0x00, 0x00, 0x00, 0x00, 5995b296d0Smrg0x00, 0x0C, 0x46, 0x02, 0x02, 0xFD, 0x06, 0xF8, 6095b296d0Smrg0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1, 6195b296d0Smrg0x11, 0x6E 6295b296d0Smrg}, 6395b296d0Smrg{ 6495b296d0Smrg/* NTSC, 640x480, bpp=32 */ 6595b296d0Smrg0X02, 0x54, 0XE0, 0xFA, 0x11, 0x5D, 0x01, 0x57, 0x5A, 0x56, 6695b296d0Smrg0xA0, 0x26, 0x0A, 0X55, 0x37, 0x46, 6795b296d0Smrg 6895b296d0Smrg0x6A, 0x0B, 0x23, 0x33, 0x43, 0x50, 0x13, 0x51, 6995b296d0Smrg0xB0, 0x07, 0xAB, 0x15, 0x90, 0xA9, 0x00, 0x98, 7095b296d0Smrg0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x03, 0x1C, 7195b296d0Smrg0x00, 0x40, 0x0C, 0x02, 0x03, 0x80, 0x00, 0x00, 7295b296d0Smrg0x0F, 0x04, 0x99, 0x7A, 0x04, 0x5E, 0xB6, 0x90, 7395b296d0Smrg0x5B, 0x00, 0x00, 0x67, 0x2F, 0x88, 0xFA, 0x00, 7495b296d0Smrg0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02, 7595b296d0Smrg0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F, 7695b296d0Smrg0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF, 7795b296d0Smrg0x03, 0x01, 0xA0, 0x33, 0x1B, 0x00, 0X00, 0x00, 7895b296d0Smrg0x00, 0x08, 0x47, 0x02, 0x02, 0xFD, 0x06, 0xf8, 7995b296d0Smrg0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1, 8095b296d0Smrg0x11, 0x6E 8195b296d0Smrg}, 8295b296d0Smrg{ 8395b296d0Smrg/* NTSC, 800x600, bpp=32 */ 8495b296d0Smrg0X02, 0x79, 0XE0, 0x73, 0x02, 0x80, 0x01, 0x7B, 0x7E, 0xEC, 8595b296d0Smrg0xA0, 0x8A, 0x0E, 0xEB, 0x8B, 0x49, 8695b296d0Smrg 8795b296d0Smrg0x8B, 0x0B, 0x6B, 0x27, 0x43, 0x50, 0x12, 0x2D, 8895b296d0Smrg0xBC, 0x0C, 0xED, 0x15, 0x88, 0xEE, 0x00, 0x99, 8995b296d0Smrg0x00, 0x00, 0x0A, 0x48, 0x1C, 0x28, 0x03, 0x20, 9095b296d0Smrg0x00, 0x40, 0x36, 0x02, 0x03, 0x80, 0x00, 0x00, 9195b296d0Smrg0x0D, 0x04, 0x04, 0x7A, 0x00, 0x5D, 0xC1, 0x9B, 9295b296d0Smrg0x6B, 0x00, 0x00, 0xA1, 0x3F, 0x9D, 0x2F, 0x10, 9395b296d0Smrg0x00, 0x17, 0x15, 0x21, 0x15, 0x05, 0x05, 0x02, 9495b296d0Smrg0x1B, 0x1B, 0x24, 0xF8, 0x07, 0x00, 0x00, 0x0F, 9595b296d0Smrg0x0F, 0x60, 0x01, 0x0A, 0x00, 0x05, 0x04, 0xFF, 9695b296d0Smrg0x03, 0x01, 0xC6, 0x90, 0x00, 0x00, 0x00, 0x00, 9795b296d0Smrg0x00, 0x08, 0x46, 0x02, 0x02, 0xFD, 0x06, 0xF8, 9895b296d0Smrg0x0B, 0xF3, 0x0F, 0x70, 0x05, 0xF9, 0x0B, 0xF1, 9995b296d0Smrg0x11, 0x6E 10095b296d0Smrg}, 10195b296d0Smrg{ 10295b296d0Smrg/* PAL, 640x480, bpp=8,16 */ 10395b296d0Smrg0X82, 0x5D, 0XE0, 0x23, 0x02, 0x64, 0x01, 0x56, 0x5A, 0x6F, 10495b296d0Smrg0xA0, 0x0D, 0x0F, 0x6E, 0x24, 0xC1, 10595b296d0Smrg 10695b296d0Smrg0x6B, 0x0B, 0x03, 0x67, 0x40, 0x50, 0x12, 0x96, 10795b296d0Smrg0xCE, 0x32, 0xFF, 0x01, 0x7E, 0xF6, 0x00, 0xA8, 10895b296d0Smrg0x00, 0x00, 0x07, 0x48, 0x20, 0x1C, 0x44, 0x60, 10995b296d0Smrg0x44, 0x4F, 0x1B, 0x02, 0x03, 0x80, 0x00, 0x00, 11095b296d0Smrg0x0C, 0x0C, 0xD7, 0x84, 0x04, 0x68, 0x3B, 0x9C, 11195b296d0Smrg0x57, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x29, 0x10, 11295b296d0Smrg0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00, 11395b296d0Smrg0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE, 11495b296d0Smrg0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55, 11595b296d0Smrg0x01, 0x01, 0xA0, 0x33, 0x00, 0x00, 0x00, 0x00, 11695b296d0Smrg0x00, 0x0C, 0x4E, 0xFE, 0x03, 0xFB, 0x06, 0xF8, 11795b296d0Smrg0x0A, 0xF5, 0x0C, 0x73, 0x06, 0xF8, 0x0B, 0xF2, 11895b296d0Smrg0x10, 0x6F 11995b296d0Smrg}, 12095b296d0Smrg{ 12195b296d0Smrg/* PAL, 800x600, bpp=8,16 */ 12295b296d0Smrg0X82, 0x5B, 0XE0, 0x91, 0x02, 0x73, 0x07, 0x6C, 0x70, 0xEC, 12395b296d0Smrg0xA0, 0xA8, 0x0B, 0xEB, 0xAD, 0xC7, 12495b296d0Smrg 12595b296d0Smrg0x8B, 0x0B, 0x1A, 0x47, 0x40, 0x50, 0x12, 0x56, 12695b296d0Smrg0x00, 0x37, 0xF7, 0x00, 0x7D, 0xE2, 0x00, 0xB9, 12795b296d0Smrg0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x44, 0x62, 12895b296d0Smrg0x44, 0x4F, 0x53, 0x02, 0x07, 0x80, 0x00, 0x00, 12995b296d0Smrg0x0A, 0x05, 0xA2, 0x83, 0x08, 0x68, 0x46, 0x99, 13095b296d0Smrg0x68, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x6B, 0x10, 13195b296d0Smrg0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00, 13295b296d0Smrg0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE, 13395b296d0Smrg0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55, 13495b296d0Smrg0x01, 0x01, 0xE6, 0x90, 0x00, 0x00, 0x00, 0x00, 13595b296d0Smrg0x00, 0x0C, 0x4D, 0xFB, 0x04, 0xFB, 0x07, 0xF8, 13695b296d0Smrg0x09, 0xF6, 0x0A, 0x74, 0x06, 0xF8, 0x0B, 0xF2, 13795b296d0Smrg0x10, 0x6F 13895b296d0Smrg}, 13995b296d0Smrg{ 14095b296d0Smrg/* PAL, 640x480, bpp=32 */ 14195b296d0Smrg0X82, 0x5D, 0XE0, 0x23, 0x02, 0x64, 0x01, 0x56, 0x5A, 0x6F, 14295b296d0Smrg0xA0, 0x0D, 0x0F, 0x6E, 0x24, 0x81, 14395b296d0Smrg 14495b296d0Smrg0x6B, 0x0B, 0x02, 0x67, 0x40, 0x50, 0x12, 0x93, 14595b296d0Smrg0xCE, 0x32, 0xF0, 0x01, 0x88, 0xE8, 0x00, 0xA8, 14695b296d0Smrg0x00, 0x00, 0x07, 0x48, 0x20, 0x1C, 0x44, 0x60, 14795b296d0Smrg0x44, 0x4F, 0x1B, 0x02, 0x03, 0x80, 0x00, 0x00, 14895b296d0Smrg0x0C, 0x05, 0xE2, 0x84, 0x00, 0x68, 0x3B, 0x9C, 14995b296d0Smrg0x57, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x29, 0x10, 15095b296d0Smrg0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00, 15195b296d0Smrg0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE, 15295b296d0Smrg0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55, 15395b296d0Smrg0x01, 0x01, 0xA0, 0x33, 0x00, 0x00, 0x00, 0x00, 15495b296d0Smrg0x00, 0x0C, 0x4E, 0xFE, 0x03, 0xFB, 0x06, 0xF8, 15595b296d0Smrg0x0A, 0xF5, 0x0C, 0x73, 0x06, 0xF8, 0x0B, 0xF2, 15695b296d0Smrg0x10, 0x6F 15795b296d0Smrg}, 15895b296d0Smrg{ 15995b296d0Smrg/* PAL, 800x600, bpp=32 */ 16095b296d0Smrg0X82, 0x5B, 0XE0, 0x91, 0x02, 0x73, 0x07, 0x6C, 0x70, 0xEC, 16195b296d0Smrg0xA0, 0xA8, 0x0B, 0xEB, 0xAD, 0x87, 16295b296d0Smrg 16395b296d0Smrg0x8B, 0x0B, 0x1A, 0x67, 0x40, 0x50, 0x12, 0x53, 16495b296d0Smrg0x00, 0x37, 0xEE, 0x00, 0x83, 0xEB, 0x00, 0xB9, 16595b296d0Smrg0x00, 0x00, 0x0E, 0x48, 0x38, 0x38, 0x44, 0x62, 16695b296d0Smrg0x44, 0x4F, 0x53, 0x02, 0x07, 0x80, 0x00, 0x00, 16795b296d0Smrg0x0A, 0x05, 0x5E, 0x83, 0x08, 0x68, 0x46, 0x99, 16895b296d0Smrg0x68, 0x63, 0x17, 0xAC, 0x25, 0x80, 0x6B, 0x10, 16995b296d0Smrg0x00, 0x1A, 0x22, 0x2A, 0x22, 0x05, 0x02, 0x00, 17095b296d0Smrg0x1C, 0x3D, 0x14, 0xFE, 0x03, 0x54, 0x01, 0xFE, 17195b296d0Smrg0x7E, 0x60, 0x00, 0x08, 0x00, 0x04, 0x07, 0x55, 17295b296d0Smrg0x01, 0x01, 0xA0, 0x22, 0x00, 0x00, 0x00, 0x00, 17395b296d0Smrg0x00, 0x0C, 0x4D, 0xFB, 0x04, 0xFB, 0x07, 0xF8, 17495b296d0Smrg0x09, 0xF6, 0x0A, 0x74, 0x06, 0xF8, 0x0B, 0xF2, 17595b296d0Smrg0x10, 0x6F 17695b296d0Smrg} 17795b296d0Smrg}; 17895b296d0Smrg/* TV Parameters for CH7005C */ 17995b296d0Smrg#define TV_CH7005C_MODE_SIZE 45 18095b296d0Smrg#define TV_CH7005C_CRTC_NUM 0x10 18195b296d0Smrg#define TV_CH7005C_TVREG_NUM 29 18295b296d0Smrg#define TV_CH7005C_PORT 0xEA 18395b296d0Smrgunsigned char TV_CH7005C_Table[TV_MODE][TV_CH7005C_MODE_SIZE]={ 18495b296d0Smrg{ 18595b296d0Smrg/* NTSC 640x480 bpp=8,16 */ 18695b296d0Smrg0x02, 0x80, 0x20, 0x02, 0x00, 0x5D, 0X80, 0X57, 0X80, 0X56, 18795b296d0Smrg0XBA, 0X10, 0X8C, 0X50, 0XF8, 0X7F, 18895b296d0Smrg 18995b296d0Smrg0X6A, 0X7A, 0X00, 0X09, 0X80, 0X66, 0X00, 0X60, 19095b296d0Smrg0X2E, 0XFF, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F, 19195b296d0Smrg0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00, 19295b296d0Smrg0X00, 0X00, 0X0A, 0X02, 0X05 19395b296d0Smrg}, 19495b296d0Smrg{ 19595b296d0Smrg/* NTSC 800X600 bpp=8,16 */ 19695b296d0Smrg0x02, 0x80, 0x20, 0x02, 0x00, 0x7D, 0X80, 0X6E, 0X1C, 0XBA, 19795b296d0Smrg0XF0, 0X70, 0X8C, 0XBA, 0X78, 0X53, 19895b296d0Smrg 19995b296d0Smrg0X8C, 0X4A, 0X00, 0X09, 0X80, 0XAE, 0X01, 0X80, 20095b296d0Smrg0X2E, 0X02, 0X01, 0X0B, 0X7E, 0X7E, 0X7E, 0X7E, 20195b296d0Smrg0X7E, 0X40, 0X01, 0X0C, 0X00, 0X00, 0X00, 0X00, 20295b296d0Smrg0X00, 0X00, 0X0A, 0X00, 0X05 20395b296d0Smrg}, 20495b296d0Smrg{ 20595b296d0Smrg/* NTSC 640x480 bpp=32 */ 20695b296d0Smrg0x02, 0x80, 0x20, 0x02, 0x00, 0x5D, 0X80, 0X57, 0X80, 0X56, 20795b296d0Smrg0XBA, 0X10, 0X8C, 0X50, 0XBD, 0X57, 20895b296d0Smrg 20995b296d0Smrg0X6A, 0X7A, 0X00, 0X09, 0X80, 0X67, 0X00, 0X60, 21095b296d0Smrg0X2E, 0XFF, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F, 21195b296d0Smrg0X7E, 0X40, 0X02, 0X00, 0X07, 0X0C, 0X0D, 0X00, 21295b296d0Smrg0X00, 0X00, 0X0A, 0X02, 0X05 21395b296d0Smrg}, 21495b296d0Smrg{ 21595b296d0Smrg/* NTSC 800X600 bpp=32 */ 21695b296d0Smrg0x02, 0x80, 0x20, 0x02, 0x00, 0x7D, 0X80, 0X6E, 0X1C, 0XBA, 21795b296d0Smrg0XF0, 0X70, 0X8C, 0XBA, 0XF8, 0X53, 21895b296d0Smrg 21995b296d0Smrg0X8C, 0X4A, 0X00, 0X09, 0X80, 0XAF, 0X01, 0X80, 22095b296d0Smrg0X2E, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F, 22195b296d0Smrg0X7E, 0X40, 0X01, 0X0C, 0X00, 0X00, 0X00, 0X00, 22295b296d0Smrg0X00, 0X00, 0X0A, 0X00, 0X05 22395b296d0Smrg}, 22495b296d0Smrg{ 22595b296d0Smrg/* PAL 640x480 bpp=8,16 */ 22695b296d0Smrg0x82, 0x80, 0x20, 0x02, 0x00, 0x71, 0X74, 0X62, 0X84, 0X6F, 22795b296d0Smrg0XF0, 0X10, 0X09, 0XEB, 0X80, 0X5F, 22895b296d0Smrg 22995b296d0Smrg0X81, 0X4A, 0X00, 0X09, 0X80, 0X84, 0X00, 0X70, 23095b296d0Smrg0X28, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F, 23195b296d0Smrg0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00, 23295b296d0Smrg0X00, 0X00, 0X0A, 0X01, 0X05 23395b296d0Smrg}, 23495b296d0Smrg{ 23595b296d0Smrg/* PAL 800x600 bpp=8,16 */ 23695b296d0Smrg0x82, 0x80, 0x20, 0x02, 0x00, 0x73, 0X76, 0X6A, 0X8C, 0XEC, 23795b296d0Smrg0XF0, 0X7E, 0X09, 0XEB, 0X8F, 0X8D, 23895b296d0Smrg 23995b296d0Smrg0X83, 0X4A, 0X00, 0X09, 0X80, 0X7E, 0X00, 0X70, 24095b296d0Smrg0X3F, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F, 24195b296d0Smrg0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00, 24295b296d0Smrg0X00, 0X00, 0X0A, 0X01, 0X05 24395b296d0Smrg}, 24495b296d0Smrg{ 24595b296d0Smrg/* PAL 640x480 bpp=32 */ 24695b296d0Smrg0x82, 0x80, 0x20, 0x02, 0x00, 0x71, 0X74, 0X62, 0X84, 0X6F, 24795b296d0Smrg0XF0, 0X10, 0X09, 0XEB, 0X80, 0X1F, 24895b296d0Smrg 24995b296d0Smrg0X81, 0X4A, 0X00, 0X09, 0X80, 0X84, 0X00, 0X70, 25095b296d0Smrg0X28, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F, 25195b296d0Smrg0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00, 25295b296d0Smrg0X00, 0X00, 0X0A, 0X01, 0X05 25395b296d0Smrg}, 25495b296d0Smrg{ 25595b296d0Smrg/* PAL 800X600 bpp=32 */ 25695b296d0Smrg0x82, 0x80, 0x20, 0x02, 0x00, 0x73, 0X76, 0X6A, 0X8C, 0XEC, 25795b296d0Smrg0XF0, 0X7E, 0X09, 0XEB, 0X5D, 0X48, 25895b296d0Smrg 25995b296d0Smrg0X83, 0X4A, 0X00, 0X09, 0X80, 0X7E, 0X00, 0X70, 26095b296d0Smrg0X3F, 0X02, 0X01, 0X0B, 0X0C, 0X03, 0X40, 0X3F, 26195b296d0Smrg0X7E, 0X40, 0X02, 0X00, 0X08, 0X00, 0X00, 0X00, 26295b296d0Smrg0X00, 0X00, 0X0A, 0X01, 0X05 26395b296d0Smrg} 26495b296d0Smrg}; 26595b296d0Smrg 26695b296d0Smrgstatic unsigned char smbus_read(ScrnInfoPtr pScrn, unsigned char bIndex, unsigned char devAdr) 26795b296d0Smrg{ 26895b296d0Smrg TRIDENTPtr pTrident=TRIDENTPTR(pScrn); 26995b296d0Smrg unsigned short i; 27095b296d0Smrg unsigned char bData; 27195b296d0Smrg 27295b296d0Smrg /* clear host status */ 27395b296d0Smrg OUTB(SMBUS_BASE, 0xFF); 27495b296d0Smrg 27595b296d0Smrg /* check SMBUS ready */ 27695b296d0Smrg for ( i = 0; i < 0xFFFF; i++ ) 27795b296d0Smrg if ( (INB(SMBUS_BASE) & 0x01) == 0 ) 27895b296d0Smrg break; 27995b296d0Smrg 28095b296d0Smrg /* set host command */ 28195b296d0Smrg OUTB(SMBUS_BASE+3, bIndex); 28295b296d0Smrg 28395b296d0Smrg /* set slave address */ 28495b296d0Smrg OUTB(SMBUS_BASE+4, devAdr | 0x01); 28595b296d0Smrg 28695b296d0Smrg /* start */ 28795b296d0Smrg OUTB(SMBUS_BASE+2, 0x48); 28895b296d0Smrg 28995b296d0Smrg /* SMBUS Wait Ready */ 29095b296d0Smrg for ( i = 0; i < 0xFFFF; i++ ) 29195b296d0Smrg if ( (INB(SMBUS_BASE) & 0x01) == 0 ) 29295b296d0Smrg break; 29395b296d0Smrg bData=INB(SMBUS_BASE+5); 29495b296d0Smrg 29595b296d0Smrg return bData; 29695b296d0Smrg 29795b296d0Smrg} 29895b296d0Smrg 29995b296d0Smrgstatic void smbus_write(ScrnInfoPtr pScrn, unsigned char bData, unsigned char bIndex, unsigned char devAdr) 30095b296d0Smrg{ 30195b296d0Smrg TRIDENTPtr pTrident=TRIDENTPTR(pScrn); 30295b296d0Smrg unsigned short i; 30395b296d0Smrg 30495b296d0Smrg /* clear host status */ 30595b296d0Smrg OUTB(SMBUS_BASE, 0xFF); 30695b296d0Smrg 30795b296d0Smrg /* check SMBUS ready */ 30895b296d0Smrg for ( i = 0; i < 0xFFFF; i++ ) 30995b296d0Smrg if ( (INB(SMBUS_BASE) & 0x01) == 0 ) 31095b296d0Smrg break; 31195b296d0Smrg 31295b296d0Smrg OUTB(SMBUS_BASE+2, 0x08); 31395b296d0Smrg 31495b296d0Smrg /* set host command */ 31595b296d0Smrg OUTB(SMBUS_BASE+3, bIndex); 31695b296d0Smrg 31795b296d0Smrg /* set slave address */ 31895b296d0Smrg OUTB(SMBUS_BASE+4, devAdr & 0xFE); 31995b296d0Smrg 32095b296d0Smrg OUTB(SMBUS_BASE+5, bData); 32195b296d0Smrg 32295b296d0Smrg /* start */ 32395b296d0Smrg OUTB(SMBUS_BASE+2, 0x48); 32495b296d0Smrg 32595b296d0Smrg /* SMBUS Wait Ready */ 32695b296d0Smrg for ( i = 0; i < 0xFFFF; i++ ) 32795b296d0Smrg if ( (INB(SMBUS_BASE) & 0x01) == 0 ) 32895b296d0Smrg break; 32995b296d0Smrg} 33095b296d0Smrgvoid VIA_SaveTVDepentVGAReg(ScrnInfoPtr pScrn) 33195b296d0Smrg{ 33295b296d0Smrg TRIDENTPtr pTrident=TRIDENTPTR(pScrn); 33395b296d0Smrg unsigned char protect; 33495b296d0Smrg unsigned char bTmp; 33595b296d0Smrg int i; 33695b296d0Smrg unsigned char VGA_RegIdx_about_TV[VGA_REGNUM_ABOUT_TV]={ 33795b296d0Smrg 0xD8,0XD9,/* SR */ 33895b296d0Smrg 0X33,/* GR */ 33995b296d0Smrg 0XC0,0XD0,0XD1,0XD2,0XD3,0XE0,0XE3,0XE4,0XE5,/* CR */ 34095b296d0Smrg 0XE6,0XE7,0XF0,0XF1,0XF6,0XFE,0XFF 34195b296d0Smrg }; 34295b296d0Smrg unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={ 34395b296d0Smrg 0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09, 34495b296d0Smrg 0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14, 34595b296d0Smrg 0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D, 34695b296d0Smrg 0X1E,0X1F,0X20,0X21,0X3D 34795b296d0Smrg }; 34895b296d0Smrg 34995b296d0Smrg /*ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg:\n");*/ 35095b296d0Smrg 35195b296d0Smrg /* Unprotect */ 35295b296d0Smrg OUTB(0x3C4, 0x11); 35395b296d0Smrg protect = INB(0x3C5); 35495b296d0Smrg OUTB(0x3C5, 0x92); 35595b296d0Smrg 35695b296d0Smrg /* Set TV Hw environment */ 35795b296d0Smrg OUTB(0x3d4,0xc1); 35895b296d0Smrg OUTB(0x3d5,0x41); 35995b296d0Smrg 36095b296d0Smrg /* SR_d8,SR_d9 */ 36195b296d0Smrg for (i=0; i<2; i++) 36295b296d0Smrg { 36395b296d0Smrg OUTB(0x3c4,VGA_RegIdx_about_TV[i]); 36495b296d0Smrg bTmp=INB(0x3c5); 36595b296d0Smrg pTrident->DefaultTVDependVGASetting[i]=bTmp; 36695b296d0Smrg } 36795b296d0Smrg 36895b296d0Smrg /* GR_33 */ 36995b296d0Smrg OUTB(0x3ce,0x33); 37095b296d0Smrg bTmp=INB(0x3cf); 37195b296d0Smrg pTrident->DefaultTVDependVGASetting[2]=bTmp; 37295b296d0Smrg 37395b296d0Smrg /* CR_c0,d0,d1,d2,d3,e0,e3,e4,e5,e6,e7,f0,f1,f6,fe,ff */ 37495b296d0Smrg for (i=3; i<VGA_REGNUM_ABOUT_TV; i++) 37595b296d0Smrg { 37695b296d0Smrg OUTB(0x3d4,VGA_RegIdx_about_TV[i]); 37795b296d0Smrg bTmp=INB(0x3d5); 37895b296d0Smrg pTrident->DefaultTVDependVGASetting[i]=bTmp; 37995b296d0Smrg } 38095b296d0Smrg 38195b296d0Smrg switch (pTrident->TVChipset) 38295b296d0Smrg { 38395b296d0Smrg case 1: 38495b296d0Smrg for (i=0; i<TVX_REG_NUM; i++) 38595b296d0Smrg { 38695b296d0Smrg bTmp=smbus_read(pScrn,i,TVX_VT1621_PORT); 38795b296d0Smrg pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp; 38895b296d0Smrg } 38995b296d0Smrg break; 39095b296d0Smrg case 2: 39195b296d0Smrg for (i=0; i<TV_CH7005C_TVREG_NUM; i++) 39295b296d0Smrg { 39395b296d0Smrg bTmp=smbus_read(pScrn,TV_CH7005C_RegIdx[i],TV_CH7005C_PORT); 39495b296d0Smrg pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]=bTmp; 39595b296d0Smrg } 39695b296d0Smrg break; 39795b296d0Smrg default: 39895b296d0Smrg ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg: Wrong Chipset setting\n"); 39995b296d0Smrg break; 40095b296d0Smrg 40195b296d0Smrg } 40295b296d0Smrg /* protect */ 40395b296d0Smrg OUTB(0x3C4, 0x11); 40495b296d0Smrg OUTB(0x3C5, protect); 40595b296d0Smrg} 40695b296d0Smrgvoid VIA_RestoreTVDependVGAReg(ScrnInfoPtr pScrn) 40795b296d0Smrg{ 40895b296d0Smrg TRIDENTPtr pTrident=TRIDENTPTR(pScrn); 40995b296d0Smrg unsigned char protect; 41095b296d0Smrg unsigned char bTmp; 41195b296d0Smrg int i; 41295b296d0Smrg unsigned char VGA_RegIdx_about_TV[VGA_REGNUM_ABOUT_TV]={ 41395b296d0Smrg 0xD8,0XD9,/* SR */ 41495b296d0Smrg 0X33,/* GR */ 41595b296d0Smrg 0XC0,0XD0,0XD1,0XD2,0XD3,0XE0,0XE3,0XE4,0XE5,/* CR */ 41695b296d0Smrg 0XE6,0XE7,0XF0,0XF1,0XF6,0XFE,0XFF 41795b296d0Smrg }; 41895b296d0Smrg unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={ 41995b296d0Smrg 0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09, 42095b296d0Smrg 0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14, 42195b296d0Smrg 0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D, 42295b296d0Smrg 0X1E,0X1F,0X20,0X21,0X3D 42395b296d0Smrg }; 42495b296d0Smrg 42595b296d0Smrg /*ErrorF("VIAB3D: VIA_RestoreTVDependVGAReg:\n");*/ 42695b296d0Smrg 42795b296d0Smrg /* Unprotect */ 42895b296d0Smrg OUTB(0x3C4, 0x11); 42995b296d0Smrg protect = INB(0x3C5); 43095b296d0Smrg OUTB(0x3C5, 0x92); 43195b296d0Smrg 43295b296d0Smrg /* Set TV Hw environment */ 43395b296d0Smrg OUTB(0x3d4,0xc1); 43495b296d0Smrg OUTB(0x3d5,0x41); 43595b296d0Smrg 43695b296d0Smrg /* SR_d8,SR_d9 */ 43795b296d0Smrg for (i=0; i<2; i++) 43895b296d0Smrg { 43995b296d0Smrg OUTB(0x3c4,VGA_RegIdx_about_TV[i]); 44095b296d0Smrg bTmp=pTrident->DefaultTVDependVGASetting[i]; 44195b296d0Smrg OUTB(0x3c5,bTmp); 44295b296d0Smrg } 44395b296d0Smrg /* GR_33 */ 44495b296d0Smrg OUTB(0x3ce,0x33); 44595b296d0Smrg bTmp=pTrident->DefaultTVDependVGASetting[2]; 44695b296d0Smrg OUTB(0x3cf,bTmp); 44795b296d0Smrg 44895b296d0Smrg /* CR_c0,d0,d1,d2,d3,e0,e3,e4,e5,e6,e7,f0,f1,f6,fe,ff */ 44995b296d0Smrg for (i=3; i<VGA_REGNUM_ABOUT_TV; i++) 45095b296d0Smrg { 45195b296d0Smrg OUTB(0x3d4,VGA_RegIdx_about_TV[i]); 45295b296d0Smrg bTmp=pTrident->DefaultTVDependVGASetting[i]; 45395b296d0Smrg OUTB(0x3d5,bTmp); 45495b296d0Smrg } 45595b296d0Smrg switch (pTrident->TVChipset) 45695b296d0Smrg { 45795b296d0Smrg case 1: 45895b296d0Smrg for (i=0; i<TVX_REG_NUM; i++) 45995b296d0Smrg { 46095b296d0Smrg bTmp=pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]; 46195b296d0Smrg smbus_write(pScrn,bTmp,i,TVX_VT1621_PORT); 46295b296d0Smrg } 46395b296d0Smrg break; 46495b296d0Smrg case 2: 46595b296d0Smrg for (i=0; i<TV_CH7005C_TVREG_NUM; i++) 46695b296d0Smrg { 46795b296d0Smrg bTmp=pTrident->DefaultTVDependVGASetting[VGA_REGNUM_ABOUT_TV+i]; 46895b296d0Smrg smbus_write(pScrn,bTmp,TV_CH7005C_RegIdx[i],TV_CH7005C_PORT); 46995b296d0Smrg } 47095b296d0Smrg break; 47195b296d0Smrg default: 47295b296d0Smrg ErrorF("VIAB3D: VIA_SaveTVDepentVGAReg: Wrong Chipset setting\n"); 47395b296d0Smrg break; 47495b296d0Smrg } 47595b296d0Smrg /* protect */ 47695b296d0Smrg OUTB(0x3C4, 0x11); 47795b296d0Smrg OUTB(0x3C5, protect); 47895b296d0Smrg} 47995b296d0Smrgvoid VIA_TVInit(ScrnInfoPtr pScrn) 48095b296d0Smrg{ 48195b296d0Smrg TRIDENTPtr pTrident=TRIDENTPTR(pScrn); 48295b296d0Smrg unsigned char idx=0; 48395b296d0Smrg unsigned char i; 48495b296d0Smrg unsigned char protect; 48595b296d0Smrg unsigned char TV_CRTC[TVX_CRTC_NUM] = 48695b296d0Smrg { 0xC0,0xD0,0xD1,0xD2,0xD3,0xE0,0xE3,0xE4,0xE5, 48795b296d0Smrg 0xE6,0xE7,0xF0,0xF1,0xF6,0xFE,0xFF }; 48895b296d0Smrg unsigned char TV_CH7005C_RegIdx[TV_CH7005C_TVREG_NUM]={ 48995b296d0Smrg 0X00,0X01,0X03,0X04,0X06,0X07,0X08,0X09, 49095b296d0Smrg 0X0A,0X0B,0X0D,0X0E,0X10,0X11,0X13,0X14, 49195b296d0Smrg 0X15,0X17,0X18,0X19,0X1A,0X1B,0X1C,0X1D, 49295b296d0Smrg 0X1E,0X1F,0X20,0X21,0X3D 49395b296d0Smrg }; 49495b296d0Smrg 49595b296d0Smrg#ifdef DEBUG_CODE_TRACE 49695b296d0Smrg ErrorF("VIAB3D: VIA_TVInit:\n"); 49795b296d0Smrg#endif 49895b296d0Smrg 49995b296d0Smrg if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 0) 50095b296d0Smrg { 50195b296d0Smrg /* Overlay window 1 position OK */ 50295b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x8(16) NTSC\n"); 50395b296d0Smrg idx=0; 50495b296d0Smrg pTrident->OverrideHsync=-71; 50595b296d0Smrg pTrident->OverrideVsync=15; 50695b296d0Smrg } 50795b296d0Smrg else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 0) 50895b296d0Smrg { 50995b296d0Smrg /* Overlay window 1 position OK */ 51095b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x8(16) NTSC\n"); 51195b296d0Smrg idx=1; 51295b296d0Smrg pTrident->OverrideHsync=-152; 51395b296d0Smrg pTrident->OverrideVsync=72; 51495b296d0Smrg } 51595b296d0Smrg else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && pScrn->depth==24 && pTrident->TVSignalMode == 0) 51695b296d0Smrg { 51795b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x32 NTSC\n"); 51895b296d0Smrg idx=2; 51995b296d0Smrg pTrident->OverrideHsync=-65; 52095b296d0Smrg pTrident->OverrideVsync=14; 52195b296d0Smrg } 52295b296d0Smrg else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && pScrn->depth==24 && pTrident->TVSignalMode == 0) 52395b296d0Smrg { 52495b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x32 NTSC\n"); 52595b296d0Smrg idx=3; 52695b296d0Smrg pTrident->OverrideHsync=-158; 52795b296d0Smrg pTrident->OverrideVsync=72; 52895b296d0Smrg } 52995b296d0Smrg else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 1) 53095b296d0Smrg { 53195b296d0Smrg /* Overlay window 1 position OK */ 53295b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x8(16) PAL\n"); 53395b296d0Smrg idx=4; 53495b296d0Smrg pTrident->OverrideHsync=2; 53595b296d0Smrg pTrident->OverrideVsync=65; 53695b296d0Smrg } 53795b296d0Smrg else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && (pScrn->depth==8 || pScrn->depth==16) && pTrident->TVSignalMode == 1) 53895b296d0Smrg { 53995b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x8(16) PAL\n"); 54095b296d0Smrg /* patch TV screen defection */ 54195b296d0Smrg idx=5; 54295b296d0Smrg /* patch 800x600 screen defect */ 54395b296d0Smrg OUTB(0x3d4,0x2f); 54495b296d0Smrg OUTB(0x3d5,0xbf); 54595b296d0Smrg pTrident->OverrideHsync=-145; 54695b296d0Smrg pTrident->OverrideVsync=43; 54795b296d0Smrg } 54895b296d0Smrg else if (pScrn->currentMode->HDisplay==640 && pScrn->currentMode->VDisplay==480 && pScrn->depth==24 && pTrident->TVSignalMode == 1) 54995b296d0Smrg { 55095b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 640x480x32 PAL\n"); 55195b296d0Smrg idx=6; 55295b296d0Smrg pTrident->OverrideHsync=0; 55395b296d0Smrg pTrident->OverrideVsync=63; 55495b296d0Smrg } 55595b296d0Smrg else if (pScrn->currentMode->HDisplay==800 && pScrn->currentMode->VDisplay==600 && pScrn->depth==24 && pTrident->TVSignalMode == 1) 55695b296d0Smrg { 55795b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params 800x600x32 PAL\n"); 55895b296d0Smrg idx=7; 55995b296d0Smrg OUTB(0x3d4,0x2f); 56095b296d0Smrg OUTB(0x3d5,0xbf); 56195b296d0Smrg pTrident->OverrideHsync=-141; 56295b296d0Smrg pTrident->OverrideVsync=42; 56395b296d0Smrg } 56495b296d0Smrg else 56595b296d0Smrg { 56695b296d0Smrg ErrorF("VIAB3D: VIA_TVInit: TV Params default mode\n"); 56795b296d0Smrg return; 56895b296d0Smrg } 56995b296d0Smrg 57095b296d0Smrg /* Unprotect */ 57195b296d0Smrg OUTB(0x3C4, 0x11); 57295b296d0Smrg protect = INB(0x3C5); 57395b296d0Smrg OUTB(0x3C5, 0x92); 57495b296d0Smrg 57595b296d0Smrg /* Set TV hw environment */ 57695b296d0Smrg OUTB(0x3c4,0x24); 57795b296d0Smrg OUTB(0x3c5,0x4f); 57895b296d0Smrg OUTB(0x3d4,0xc1); 57995b296d0Smrg OUTB(0x3d5,0x41); 58095b296d0Smrg OUTB(0x3ce,0x23); 58195b296d0Smrg OUTB(0x3cf,0x88); 58295b296d0Smrg 58395b296d0Smrg /* set CRT + TV */ 58495b296d0Smrg OUTB(0x3CE,0x33); 58595b296d0Smrg OUTB(0x3CF,0x20); 58695b296d0Smrg 58795b296d0Smrg /* set CRTC */ 58895b296d0Smrg for( i = 0; i < TVX_CRTC_NUM; i++ ) 58995b296d0Smrg { 59095b296d0Smrg OUTB(0x3D4, TV_CRTC[i]); 59195b296d0Smrg 59295b296d0Smrg if (pTrident->TVChipset==2) { 59395b296d0Smrg OUTB(0x3D5, TV_CH7005C_Table[idx][i]); 59495b296d0Smrg } 59595b296d0Smrg else { 59695b296d0Smrg OUTB(0x3D5, TVX_VT1621_Table[idx][i]); 59795b296d0Smrg } 59895b296d0Smrg } 59995b296d0Smrg 60095b296d0Smrg 60195b296d0Smrg /* Digital TV interface control */ 60295b296d0Smrg switch (pTrident->TVChipset) 60395b296d0Smrg { 60495b296d0Smrg case 1: OUTB(0x3C4,0xD8); 60595b296d0Smrg OUTB(0x3C5,0x60); 60695b296d0Smrg OUTB(0x3C4,0xD9); 60795b296d0Smrg OUTB(0x3C5,0x38); 60895b296d0Smrg break; 60995b296d0Smrg case 2: OUTB(0x3c4,0xd8); 61095b296d0Smrg OUTB(0x3c5,0x24); 61195b296d0Smrg OUTB(0x3C4,0xD9); 61295b296d0Smrg OUTB(0x3C5,0x18); 61395b296d0Smrg break; 61495b296d0Smrg } 61595b296d0Smrg 61695b296d0Smrg switch (pTrident->TVChipset) 61795b296d0Smrg { 61895b296d0Smrg case 1: 61995b296d0Smrg /* set TVX registers */ 62095b296d0Smrg for (i=0; i < TVX_REG_NUM; i++ ) 62195b296d0Smrg { 62295b296d0Smrg smbus_write(pScrn,TVX_VT1621_Table[idx][TVX_CRTC_NUM+i], i, TVX_VT1621_PORT); 62395b296d0Smrg } 62495b296d0Smrg break; 62595b296d0Smrg case 2: 62695b296d0Smrg for (i=0; i<TV_CH7005C_TVREG_NUM; i++) 62795b296d0Smrg { 62895b296d0Smrg smbus_write(pScrn,TV_CH7005C_Table[idx][TV_CH7005C_CRTC_NUM+i], TV_CH7005C_RegIdx[i], TV_CH7005C_PORT); 62995b296d0Smrg } 63095b296d0Smrg break; 63195b296d0Smrg } 63295b296d0Smrg 63395b296d0Smrg /*VIA_DumpReg(pScrn);*/ 63495b296d0Smrg 63595b296d0Smrg /* protect */ 63695b296d0Smrg OUTB(0x3C4, 0x11); 63795b296d0Smrg OUTB(0x3C5, protect); 63895b296d0Smrg} 63995b296d0Smrgvoid VIA_DumpReg(ScrnInfoPtr pScrn) 64095b296d0Smrg{ 64195b296d0Smrg TRIDENTPtr pTrident=TRIDENTPTR(pScrn); 64295b296d0Smrg int i,j; 64395b296d0Smrg unsigned char bTmp; 64495b296d0Smrg unsigned char protect; 64595b296d0Smrg 64695b296d0Smrg /* Unprotect */ 64795b296d0Smrg OUTB(0x3C4, 0x11); 64895b296d0Smrg protect = INB(0x3C5); 64995b296d0Smrg OUTB(0x3C5, 0x92); 65095b296d0Smrg 65195b296d0Smrg /* SR */ 65295b296d0Smrg for (i=0; i<16; i++) 65395b296d0Smrg { 65495b296d0Smrg for (j=0; j<16; j++) 65595b296d0Smrg { 65695b296d0Smrg OUTB(0x3c4,(16*i+j)); 65795b296d0Smrg bTmp=INB(0x3c5); 65895b296d0Smrg 65995b296d0Smrg ErrorF("SR%02x=%02x ",(16*i+j),bTmp); 66095b296d0Smrg } 66195b296d0Smrg ErrorF("\n"); 66295b296d0Smrg } 66395b296d0Smrg ErrorF("\n"); 66495b296d0Smrg /* CR */ 66595b296d0Smrg for (i=0; i<16; i++) 66695b296d0Smrg { 66795b296d0Smrg for (j=0; j<16; j++) 66895b296d0Smrg { 66995b296d0Smrg OUTB(0x3d4,(16*i+j)); 67095b296d0Smrg bTmp=INB(0x3d5); 67195b296d0Smrg 67295b296d0Smrg ErrorF("CR%02x=%02x ",(16*i+j),bTmp); 67395b296d0Smrg } 67495b296d0Smrg ErrorF("\n"); 67595b296d0Smrg } 67695b296d0Smrg ErrorF("\n"); 67795b296d0Smrg /* GR */ 67895b296d0Smrg for (i=0; i<16; i++) 67995b296d0Smrg { 68095b296d0Smrg for (j=0; j<16; j++) 68195b296d0Smrg { 68295b296d0Smrg OUTB(0x3ce,(16*i+j)); 68395b296d0Smrg bTmp=INB(0x3cf); 68495b296d0Smrg 68595b296d0Smrg ErrorF("GR%02x=%02x ",(16*i+j),bTmp); 68695b296d0Smrg } 68795b296d0Smrg ErrorF("\n"); 68895b296d0Smrg } 68995b296d0Smrg ErrorF("\n"); 69095b296d0Smrg /* SM */ 69195b296d0Smrg for (i=0; i<16; i++) 69295b296d0Smrg { 69395b296d0Smrg for (j=0; j<16; j++) 69495b296d0Smrg { 69595b296d0Smrg if (pTrident->TVChipset==2) 69695b296d0Smrg bTmp=smbus_read(pScrn,(16*i+j),TV_CH7005C_PORT); 69795b296d0Smrg else bTmp=smbus_read(pScrn,(16*i+j),TVX_VT1621_PORT); 69895b296d0Smrg ErrorF("SM%02x=%02x ",(16*i+j),bTmp); 69995b296d0Smrg } 70095b296d0Smrg ErrorF("\n"); 70195b296d0Smrg } 70295b296d0Smrg ErrorF("\n"); 70395b296d0Smrg /* protect */ 70495b296d0Smrg OUTB(0x3C4, 0x11); 70595b296d0Smrg OUTB(0x3C5, protect); 70695b296d0Smrg 70795b296d0Smrg} 708