diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2008-07-14 12:18:52 -0400 |
---|---|---|
committer | Alex Deucher <alexdeucher@gmail.com> | 2008-07-14 12:18:52 -0400 |
commit | 3f40d069f22f1fa93e6f9c92afe777f9389df424 (patch) | |
tree | f9eb3ea8bc7f098f9107dc3c5cd947fc9c4dc74a | |
parent | c624d2f440b1fe1365c3bd9dd019bf810e8b5e61 (diff) |
Add support for UpdateCRTC_DoubleBufferRegisters
This function locks/unlocks the crtc/mode/grph regs
They should be locked when updating the crtc.
-rw-r--r-- | src/rhd_atombios.c | 64 | ||||
-rw-r--r-- | src/rhd_atombios.h | 3 | ||||
-rw-r--r-- | src/rhd_atomcrtc.c | 2 |
3 files changed, 68 insertions, 1 deletions
diff --git a/src/rhd_atombios.c b/src/rhd_atombios.c index d584f00..34ce6ca 100644 --- a/src/rhd_atombios.c +++ b/src/rhd_atombios.c @@ -1740,6 +1740,70 @@ rhdAtomEncoderControlVersion(atomBiosHandlePtr handle, enum atomEncoder EncoderI * */ Bool +rhdAtomUpdateCRTC_DoubleBufferRegisters(atomBiosHandlePtr handle, enum atomCrtc CrtcId, + enum atomCrtcAction Action) +{ + AtomBiosArgRec data; + union + { + ENABLE_CRTC_PARAMETERS crtc; + ENABLE_CRTC_PS_ALLOCATION crtc_a; + } ps; + + RHDFUNC(handle); + + switch (CrtcId) { + case atomCrtc1: + ps.crtc.ucCRTC = ATOM_CRTC1; + break; + case atomCrtc2: + ps.crtc.ucCRTC = ATOM_CRTC2; + break; + } + + switch (Action) { + case atomCrtcEnable: + ps.crtc.ucEnable = ATOM_ENABLE; + break; + case atomCrtcDisable: + ps.crtc.ucEnable = ATOM_DISABLE; + break; + } + + data.exec.index = GetIndexIntoMasterTable(COMMAND, UpdateCRTC_DoubleBufferRegisters); + + data.exec.dataSpace = NULL; + data.exec.pspace = &ps; + + xf86DrvMsg(handle->scrnIndex, X_INFO, "Calling UpdateCRTC_DoubleBufferRegisters\n"); + if (RHDAtomBiosFunc(handle->scrnIndex, handle, + ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) { + xf86DrvMsg(handle->scrnIndex, X_INFO, "UpdateCRTC_DoubleBufferRegisters Successful\n"); + return TRUE; + } + xf86DrvMsg(handle->scrnIndex, X_INFO, "UpdateCRTC_DoubleBufferRegisters Failed\n"); + return FALSE; +} + +/* + * + */ +struct atomCodeTableVersion +rhdAtomUpdateCRTC_DoubleBufferRegistersVersion(atomBiosHandlePtr handle) +{ + struct atomCodeTableVersion version; + int index = GetIndexIntoMasterTable(COMMAND, UpdateCRTC_DoubleBufferRegisters); + rhdAtomGetCommandTableRevisionSize(handle, index, &version.cref, &version.fref, NULL); + + DEBUG_VERSION(index, handle, version); + + return version; +} + +/* + * + */ +Bool rhdAtomEnableCrtc(atomBiosHandlePtr handle, enum atomCrtc CrtcId, enum atomCrtcAction Action) { diff --git a/src/rhd_atombios.h b/src/rhd_atombios.h index c7661a8..be01b28 100644 --- a/src/rhd_atombios.h +++ b/src/rhd_atombios.h @@ -474,6 +474,9 @@ extern Bool rhdAtomEncoderControl(atomBiosHandlePtr handle, enum atomEncoder id, enum atomEncoderAction action, struct atomEncoderConfig *config); struct atomCodeTableVersion rhdAtomEncoderControlVersion(atomBiosHandlePtr handle, enum atomEncoder id); +extern Bool rhdAtomUpdateCRTC_DoubleBufferRegisters(atomBiosHandlePtr handle, enum atomCrtc id, + enum atomCrtcAction action); +extern struct atomCodeTableVersion rhdAtomUpdateCRTC_DoubleBufferRegistersVersion(atomBiosHandlePtr handle); extern Bool rhdAtomEnableCrtc(atomBiosHandlePtr handle, enum atomCrtc id, enum atomCrtcAction action); extern struct atomCodeTableVersion rhdAtomEnableCrtcVersion(atomBiosHandlePtr handle); diff --git a/src/rhd_atomcrtc.c b/src/rhd_atomcrtc.c index bef118e..c5a1e75 100644 --- a/src/rhd_atomcrtc.c +++ b/src/rhd_atomcrtc.c @@ -89,7 +89,7 @@ rhdAtomScaleSet(struct rhdCrtc *Crtc, enum rhdCrtcScaleType Type, Mode->CrtcHDisplay, Mode->CrtcVDisplay); /* D1Mode registers */ - if (Crtc->Id == RHD_CRTC_1) + if (Crtc->Id == RHD_CRTC_1) RegOff = D1_REG_OFFSET; else RegOff = D2_REG_OFFSET; |