blob: bc185967a9359f3381d839efe9478ce97d6c9a55 [file] [log] [blame]
/*------------------------------------------------------------------------------
* Copyright © 2002-2005, Silicon Image, Inc. All rights reserved.
*
* No part of this work may be reproduced, modified, distributed, transmitted,
* transcribed, or translated into any language or computer format, in any form
* or by any means without written permission of: Silicon Image, Inc.,
* 1060 East Arques Avenue, Sunnyvale, California 94085
*----------------------------------------------------------------------------
*/
#ifndef _SII_VID_RES_
#define _SII_VID_RES_
#include "SiITypeDefs.h"
#include "SiIRXAPIDefs.h"
struct SyncInfoType_s {
WORD ClocksPerLine;
WORD HTot;
WORD VFreq;
BYTE RefrTypeVHPol;
BYTE bFPix;
};
/*------------------------------------------------------------------*/
struct ModeIdType_s {
BYTE Mode_C1;
BYTE Mode_C2;
BYTE SubMode;
};
/*------------------------------------------------------------------*/
struct PxlLnTotalType_s {
WORD Pixels;
WORD Lines;
};
/*------------------------------------------------------------------*/
struct HVPositionType_s {
WORD H;
WORD V;
};
/*------------------------------------------------------------------*/
struct HVResolutionType_s {
WORD H;
WORD V;
};
/*------------------------------------------------------------------*/
struct TagType_s {
BYTE RefrTypeVHPol;
WORD VFreq;
struct PxlLnTotalType_s Total;
};
/*------------------------------------------------------------------*/
struct _656Type_s {
BYTE IntAdjMode;
WORD HLength;
WORD VLength;
WORD Top;
WORD Dly;
WORD HBit2HSync;
WORD VBit2VSync;
WORD Field2Offset;
};
/*------------------------------------------------------------------*/
struct VModeInfoType_s {
struct ModeIdType_s ModeId;
BYTE PixClk;
struct TagType_s Tag;
struct HVResolutionType_s Res;
BYTE PixRepl;
};
/*------------------------------------------------------------------*/
struct InterlaceCSyncType_s {
WORD CapHalfLineCnt;
WORD PreEqPulseCnt;
WORD SerratedCnt;
WORD PostEqPulseCnt;
BYTE Field2BackPorch;
};
/* Aspect ratio */
#define _4 0 /* 4:3 */
#define _4or16 1 /* 4:3 or 16:9 */
#define _16 2 /* 16:9 */
#define NSM 0 /* no sub. mode */
#define VGA 0
#ifdef SII_PCMODES
#ifdef SII_861C_MODES
#define PC_BASE (28 + 15)
#define NMODES (PC_BASE + 54) /* CEA 861C + PC Video Modes */
#else
#define PC_BASE 28
#define NMODES (PC_BASE + 54) /* CEA 861B + PC Video Modes */
#endif
#else /* CEA modes only */
#ifndef SII_861C_MODES /* only CEA 861B are included */
#define PC_BASE 28
#define NMODES 28 /* CEA 861 B Video Modes */
#endif
#ifdef SII_861C_MODES
#define PC_BASE (28 + 15)
#define NMODES PC_BASE /* CEA 861 C Video Modes */
#endif
#endif
#define _480i_60Hz 4
#define _576i_50Hz 19
#define ProgrVPosHPos 0x03
#define ProgrVNegHPos 0x02
#define ProgrVPosHNeg 0x01
#define ProgrVNegHNeg 0x00
#define InterlaceVPosHPos 0x07
#define InterlaceVNegHPos 0x06
#define InterlaceVPosHNeg 0x05
#define InterlaceVNegHNeg 0x04
#define SiI_InterlaceMask 0x04
#ifdef SII_861C_MODES
#define H_TOLERANCE 50 /* +- 500 Hz */
#define V_TOLERANCE 400 /* +- 4.0 Hz */
#define LINES_TOLERANCE 15
#define PIXELS_TOLERANCE 4
#define CLK_TOLERANCE 5
#define CHIP_OSC_CLK_MUL128 (3625216000) /* *1000 MHz */
#define INTERLACE_VFREQ_LOW_LIMIT 2500 /* 25 Hz */
#define PROGRESSIVE_VFREQ_LOW_LIMIT 2300 /* 23 Hz */
#define INTERLACE_HFREQ_LOW_LIMIT 1500 /* 15 kHz */
#define PROGRESSIVE_HFREQ_LOW_LIMIT 1500 /* 15 kHz */
#define INTERLACE_VFREQ_HIGH_LIMIT 25000 /* 250 Hz */
#define PROGRESSIVE_VFREQ_HIGH_LIMIT 25000 /* 250 Hz */
#define INTERLACE_HFREQ_HIGH_LIMIT 7500 /* 75 kHz */
#define PROGRESSIVE_HFREQ_HIGH_LIMIT 15000 /* 150 kHz */
#define INTERLACE_MASK 0x04
#else
#define H_TOLERANCE 50 /* +- 500 Hz */
#define V_TOLERANCE 400 /* +- 4.0 Hz */
#define LINES_TOLERANCE 15
#define PIXELS_TOLERANCE 4
#define CLK_TOLERANCE 5
#define CHIP_OSC_CLK_MUL128 (3625216000) /* *1000 MHz */
#define INTERLACE_VFREQ_LOW_LIMIT 2500 /* 25 Hz */
#define PROGRESSIVE_VFREQ_LOW_LIMIT 2300 /* 23 Hz */
#define INTERLACE_HFREQ_LOW_LIMIT 1500 /* 15 kHz */
#define PROGRESSIVE_HFREQ_LOW_LIMIT 1500 /* 15 kHz */
#define INTERLACE_VFREQ_HIGH_LIMIT 6500 /* 65 Hz */
#define PROGRESSIVE_VFREQ_HIGH_LIMIT 10500 /* 105 Hz */
#define INTERLACE_HFREQ_HIGH_LIMIT 5500 /* 55 kHz */
#define PROGRESSIVE_HFREQ_HIGH_LIMIT 9700 /* 97 kHz */
#define INTERLACE_MASK 0x04
#endif
#define GetRefrTypeHVPol() siiReadByteHDMIRXP0(RX_VID_STAT_ADDR)
#define GetXClock() siiReadByteHDMIRXP0(RX_VID_XCNT_ADDR)
#define GetXClockW() siiReadWordHDMIRXP0(RX_VID_XCNT_ADDR - 1)
extern ROM const struct VModeInfoType_s VModeTables[NMODES];
extern ROM const struct InterlaceCSyncType_s InterlaceCSync[3];
BYTE siiVideoModeDetection(BYTE *pbIndex, struct SyncInfoType_s *SyncInf);
BOOL siiCheckOutOfRangeConditions(struct SyncInfoType_s *SyncInfo);
BYTE siiSetVidResDependentVidOutputFormat(BYTE bVidResId,
BYTE bVideoPathSelect, BYTE bAVI_State);
void siiGetSyncInfo(struct SyncInfoType_s *SyncInfo);
BOOL siiCheckSyncDetect(void);
BOOL siiCheckClockDetect(void);
BYTE siiGetPixClockFromTables(BYTE bIndex);
BOOL siiCompareNewOldSync(struct SyncInfoType_s *OldSyncInfo,
struct SyncInfoType_s *NewSyncInfo);
void siiPrintVModeParameters(BYTE Index, BYTE SearchRes);
void siiGetVideoInputResolution(BYTE bVidResIndex, BYTE *pbVideoResInfo);
void siiGetVideoInputResolutionromRegisters(BYTE *pbVideoResInfo);
BYTE siiGetVideoResId(BYTE bVidResIndex);
#endif