summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2008-07-14 12:18:52 -0400
committerAlex Deucher <alexdeucher@gmail.com>2008-07-14 12:18:52 -0400
commit3f40d069f22f1fa93e6f9c92afe777f9389df424 (patch)
treef9eb3ea8bc7f098f9107dc3c5cd947fc9c4dc74a
parentc624d2f440b1fe1365c3bd9dd019bf810e8b5e61 (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.c64
-rw-r--r--src/rhd_atombios.h3
-rw-r--r--src/rhd_atomcrtc.c2
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;