Support DP501 Display Output

This commit is contained in:
Y.C. Chen
2014-03-19 09:48:51 +08:00
parent b308902b4a
commit 0bbae30ffc
5 changed files with 4046 additions and 54 deletions

View File

@@ -71,6 +71,13 @@ 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_DRIVER_NAME "ast"
@@ -88,6 +95,10 @@ typedef enum _CHIP_ID {
#define CMD_QUEUE_GUARD_BAND 0x00000020
#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)
@@ -240,7 +251,7 @@ typedef struct _ASTRec {
Bool VGA2Clone;
Bool SupportWideScreen;
ULONG FBPhysAddr; /* Frame buffer physical address */
ULONG FBPhysAddr; /* Frame buffer physical address */
ULONG MMIOPhysAddr; /* MMIO region physical address */
ULONG BIOSPhysAddr; /* BIOS physical address */
@@ -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);
@@ -1286,10 +1289,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;
}
@@ -1554,6 +1561,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);
@@ -1598,6 +1611,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)