Support DP501 Output

This commit is contained in:
Y.C. Chen
2014-03-14 22:52:11 +08:00
parent 7f24775a46
commit 2a2ecb5517
5 changed files with 4049 additions and 58 deletions

View File

@@ -71,8 +71,15 @@ typedef enum _CHIP_ID {
AST1180
} CHIP_ID;
typedef enum _TX_CHIPTYPE {
Tx_NONE,
Tx_Sil164,
Tx_Ite66121,
Tx_DP501
} TX_CHIPTYPE;
/* AST REC Info */
#define AST_NAME "AST"
#define AST_NAME "AST"
#define AST_DRIVER_NAME "ast"
#define AST_MAJOR_VERSION PACKAGE_VERSION_MAJOR
#define AST_MINOR_VERSION PACKAGE_VERSION_MINOR
@@ -82,11 +89,15 @@ typedef enum _CHIP_ID {
/* Customized Info */
#define DEFAULT_VIDEOMEM_SIZE 0x00800000
#define DEFAULT_MMIO_SIZE 0x00020000
#define DEFAULT_CMDQ_SIZE 0x00100000
#define MIN_CMDQ_SIZE 0x00040000
#define DEFAULT_MMIO_SIZE 0x00020000
#define DEFAULT_CMDQ_SIZE 0x00100000
#define MIN_CMDQ_SIZE 0x00040000
#define CMD_QUEUE_GUARD_BAND 0x00000020
#define DEFAULT_HWC_NUM 0x00000002
#define DEFAULT_HWC_NUM 0x00000002
/* Customized Info. for DVO */
#define HDMI_I2C_CHANNEL 1
#define HDMI_TX_I2C_SLAVE_ADDR 0x98
/* Patch Info */
#define ABI_VIDEODRV_VERSION_PATCH SET_ABI_VERSION(0, 5)
@@ -269,6 +280,10 @@ typedef struct _ASTRec {
int mon_h_active; /* Monitor Info. */
int mon_v_active;
UCHAR jTxChipType; /* 3rd TX */
UCHAR DP501_MaxVCLK;
UCHAR *pDP501FWBufferVirtualAddress;
#ifdef AstVideo
XF86VideoAdaptorPtr adaptor;
Atom xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation;

View File

@@ -85,6 +85,9 @@ extern Bool bInitAST1180(ScrnInfoPtr pScrn);
extern void GetAST1180DRAMInfo(ScrnInfoPtr pScrn);
extern void vEnableASTVGAMMIO(ScrnInfoPtr pScrn);
extern Bool ReadEDID_M68K(ScrnInfoPtr pScrn, BYTE *pEDIDData);
extern UCHAR GetLinkMaxCLK(ScrnInfoPtr pScrn);
extern Bool bInitCMDQInfo(ScrnInfoPtr pScrn, ASTRecPtr pAST);
extern Bool bEnableCMDQ(ScrnInfoPtr pScrn, ASTRecPtr pAST);
extern void vDisable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST);
@@ -1265,10 +1268,14 @@ ASTGetRec(ScrnInfoPtr pScrn)
static void
ASTFreeRec(ScrnInfoPtr pScrn)
{
ASTRecPtr pAST = ASTPTR(pScrn);
if (!pScrn)
return;
if (!pScrn->driverPrivate)
return;
if (pAST->pDP501FWBufferVirtualAddress)
free(pAST->pDP501FWBufferVirtualAddress);
free(pScrn->driverPrivate);
pScrn->driverPrivate = 0;
}
@@ -1533,6 +1540,12 @@ ASTProbeDDC(ScrnInfoPtr pScrn, int index)
{
if (pAST->jChipType == AST1180)
Flags = GetVGA2EDID(pScrn, DDC_data);
else if (pAST->jTxChipType == Tx_DP501)
{
Flags = ReadEDID_M68K(pScrn, DDC_data);
if (Flags == FALSE)
Flags = GetVGAEDID(pScrn, DDC_data);
}
else
Flags = GetVGAEDID(pScrn, DDC_data);
@@ -1577,6 +1590,14 @@ ASTDoDDC(ScrnInfoPtr pScrn, int index)
{
if (pAST->jChipType == AST1180)
Flags = GetVGA2EDID(pScrn, DDC_data);
else if (pAST->jTxChipType == Tx_DP501)
{
pAST->DP501_MaxVCLK = 0xFF;
Flags = ReadEDID_M68K(pScrn, DDC_data);
if (Flags) pAST->DP501_MaxVCLK = GetLinkMaxCLK(pScrn);
else
Flags = GetVGAEDID(pScrn, DDC_data);
}
else
Flags = GetVGAEDID(pScrn, DDC_data);

View File

@@ -413,8 +413,8 @@ VBIOS_DAC_INFO DAC_VGA[] = {
/* extern. function */
extern void vASTOpenKey(ScrnInfoPtr pScrn);
extern Bool bASTRegInit(ScrnInfoPtr pScrn);
extern void vAST1000DisplayOn(ASTRecPtr pAST);
extern void vAST1000DisplayOff(ASTRecPtr pAST);
extern void vAST1000DisplayOn(ScrnInfoPtr pScrn);
extern void vAST1000DisplayOff(ScrnInfoPtr pScrn);
extern Bool bEnable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST);
extern void vDisable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST);
@@ -465,6 +465,8 @@ ASTSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
vASTOpenKey(pScrn);
bASTRegInit(pScrn);
vAST1000DisplayOff(pScrn);
vSetStdReg(pScrn, mode, &vgamodeinfo);
vSetCRTCReg(pScrn, mode, &vgamodeinfo);
vSetOffsetReg(pScrn, mode, &vgamodeinfo);
@@ -472,6 +474,8 @@ ASTSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
vSetExtReg(pScrn, mode, &vgamodeinfo);
vSetSyncReg(pScrn, mode, &vgamodeinfo);
bSetDACReg(pScrn, mode, &vgamodeinfo);
vAST1000DisplayOn(pScrn);
}
/* post set mode */
@@ -491,7 +495,6 @@ ASTSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
}
}
#endif
vAST1000DisplayOn(pAST);
return (TRUE);
}

File diff suppressed because it is too large Load Diff

View File

@@ -166,3 +166,7 @@
*(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1; \
*(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data); \
}
/* Delay */
#define DelayUS(x) usleep(x)
#define DelayMS(x) DelayUS(1000*x)