summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Garrett <mjg59@srcf.ucam.org>2007-09-15 00:38:12 +0100
committerMatthew Garrett <mjg59@srcf.ucam.org>2007-09-15 00:38:12 +0100
commitdf63e84fcecb0a80a41bd367535aeb7365d8d116 (patch)
treed8d1bb76630db67017d131822231f3f3d0f47f36
parentb33e7867a320a7781b6b1246859ce885f90f8549 (diff)
Demagicafy DAC registers
-rw-r--r--avivotool/avivotool.c61
-rw-r--r--include/radeon_reg.h40
-rw-r--r--xorg/avivo_output.c28
-rw-r--r--xorg/avivo_state.c24
4 files changed, 86 insertions, 67 deletions
diff --git a/avivotool/avivotool.c b/avivotool/avivotool.c
index cb86211..3f79aa1 100644
--- a/avivotool/avivotool.c
+++ b/avivotool/avivotool.c
@@ -492,26 +492,27 @@ void radeon_output_set(char *output, char *status)
}
else if (strcmp(output, "dac1") == 0) {
if (on) {
- SET_REG(AVIVO_DAC1_MYSTERY1, 0x00000000);
- SET_REG(AVIVO_DAC1_MYSTERY2, 0x00000000);
- SET_REG(AVIVO_DAC1_CNTL, AVIVO_DAC_EN);
+ SET_REG(AVIVO_DACA_FORCE_OUTPUT_CNTL, 0x00000000);
+ SET_REG(AVIVO_DACA_POWERDOWN, 0x00000000);
+ SET_REG(AVIVO_DACA_CNTL, AVIVO_DAC_EN);
}
else {
- SET_REG(AVIVO_DAC1_CNTL, 0x00000000);
- SET_REG(AVIVO_DAC1_MYSTERY1, AVIVO_DAC_MYSTERY1_DIS);
- SET_REG(AVIVO_DAC1_MYSTERY2, AVIVO_DAC_MYSTERY2_DIS);
+ SET_REG(AVIVO_DACA_CNTL, 0x00000000);
+ SET_REG(AVIVO_DACA_FORCE_OUTPUT_CNTL, (AVIVO_DACA_FORCE_OUTPUT_CNTL_FORCE_DATA_EN | ((AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_BLUE | AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_GREEN | AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_RED) << AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_SHIFT)));
+ SET_REG(AVIVO_DACA_POWERDOWN, (AVIVO_DACA_POWERDOWN_POWERDOWN | AVIVO_DACA_POWERDOWN_BLUE | AVIVO_DACA_POWERDOWN_GREEN | AVIVO_DACA_POWERDOWN_RED));
}
}
else if (strcmp(output, "dac2") == 0) {
if (on) {
- SET_REG(AVIVO_DAC2_MYSTERY1, 0x00000000);
- SET_REG(AVIVO_DAC2_MYSTERY2, 0x00000000);
- SET_REG(AVIVO_DAC2_CNTL, AVIVO_DAC_EN);
+ SET_REG(AVIVO_DACB_FORCE_OUTPUT_CNTL, 0x00000000);
+ SET_REG(AVIVO_DACB_POWERDOWN, 0x00000000);
+ SET_REG(AVIVO_DACB_CNTL, AVIVO_DAC_EN);
+ SET_REG(AVIVO_DACB_FORCE_OUTPUT_CNTL, (AVIVO_DACB_FORCE_OUTPUT_CNTL_FORCE_DATA_EN | ((AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_BLUE | AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_GREEN | AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_RED) << AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_SHIFT)));
+ SET_REG(AVIVO_DACB_POWERDOWN, (AVIVO_DACB_POWERDOWN_POWERDOWN | AVIVO_DACB_POWERDOWN_BLUE | AVIVO_DACB_POWERDOWN_GREEN | AVIVO_DACB_POWERDOWN_RED));
+
}
else {
- SET_REG(AVIVO_DAC2_CNTL, 0x00000000);
- SET_REG(AVIVO_DAC2_MYSTERY1, AVIVO_DAC_MYSTERY1_DIS);
- SET_REG(AVIVO_DAC2_MYSTERY2, AVIVO_DAC_MYSTERY2_DIS);
+ SET_REG(AVIVO_DACB_CNTL, 0x00000000);
}
}
else if (strcmp(output, "crtc1") == 0) {
@@ -784,12 +785,12 @@ static struct {
REGLIST(AVIVO_CRTC2_PITCH),
REGLIST(AVIVO_CRTC2_X_LENGTH),
REGLIST(AVIVO_CRTC2_Y_LENGTH),
- REGLIST(AVIVO_DAC1_CNTL),
- REGLIST(AVIVO_DAC1_MYSTERY1),
- REGLIST(AVIVO_DAC1_MYSTERY2),
- REGLIST(AVIVO_DAC2_CNTL),
- REGLIST(AVIVO_DAC2_MYSTERY1),
- REGLIST(AVIVO_DAC2_MYSTERY2),
+ REGLIST(AVIVO_DACA_CNTL),
+ REGLIST(AVIVO_DACA_FORCE_OUTPUT_CNTL),
+ REGLIST(AVIVO_DACA_POWERDOWN),
+ REGLIST(AVIVO_DACB_CNTL),
+ REGLIST(AVIVO_DACB_FORCE_OUTPUT_CNTL),
+ REGLIST(AVIVO_DACB_POWERDOWN),
REGLIST(AVIVO_TMDSA_CNTL),
REGLIST(AVIVO_TMDSA_TRANSMITTER_ENABLE),
REGLIST(AVIVO_TMDSA_BIT_DEPTH_CONTROL),
@@ -894,9 +895,9 @@ void radeon_cmd_regs(const char *type)
show_crtc1 = 1;
if (GET_REG(AVIVO_CRTC2_CNTL) & AVIVO_CRTC_EN)
show_crtc2 = 1;
- if (GET_REG(AVIVO_DAC1_CNTL) & AVIVO_DAC_EN)
+ if (GET_REG(AVIVO_DACA_CNTL) & AVIVO_DAC_EN)
show_dac1 = 1;
- if (GET_REG(AVIVO_DAC2_CNTL) & AVIVO_DAC_EN)
+ if (GET_REG(AVIVO_DACB_CNTL) & AVIVO_DAC_EN)
show_dac2 = 1;
if (GET_REG(AVIVO_TMDSA_CNTL) & AVIVO_TMDSA_CNTL_ENABLE)
show_tmds1 = 1;
@@ -1138,25 +1139,25 @@ void radeon_cmd_regs(const char *type)
}
if (show_dac1) {
- printf("\nDAC1:\n");
- SHOW_REG(AVIVO_DAC1_CNTL);
- SHOW_REG(AVIVO_DAC1_MYSTERY1);
- SHOW_REG(AVIVO_DAC1_MYSTERY2);
+ printf("\nDACA:\n");
+ SHOW_REG(AVIVO_DACA_CNTL);
+ SHOW_REG(AVIVO_DACA_FORCE_OUTPUT_CNTL);
+ SHOW_REG(AVIVO_DACA_POWERDOWN);
}
else {
if (!shut_up)
- printf("\nDAC1 disabled\n");
+ printf("\nDACA disabled\n");
}
if (show_dac2) {
- printf("\nDAC2:\n");
- SHOW_REG(AVIVO_DAC2_CNTL);
- SHOW_REG(AVIVO_DAC2_MYSTERY1);
- SHOW_REG(AVIVO_DAC2_MYSTERY2);
+ printf("\nDACB:\n");
+ SHOW_REG(AVIVO_DACB_CNTL);
+ SHOW_REG(AVIVO_DACB_FORCE_OUTPUT_CNTL);
+ SHOW_REG(AVIVO_DACB_POWERDOWN);
}
else {
if (!shut_up)
- printf("\nDAC2 disabled\n");
+ printf("\nDACB disabled\n");
}
if (show_tmds1) {
diff --git a/include/radeon_reg.h b/include/radeon_reg.h
index 4797055..5363fd9 100644
--- a/include/radeon_reg.h
+++ b/include/radeon_reg.h
@@ -3339,18 +3339,36 @@
#define AVIVO_CRTC2_65C0 0x6dc0
#define AVIVO_CRTC2_65C8 0x6dc8
-#define AVIVO_DAC1_CNTL 0x7800
-#define AVIVO_DAC1_CRTC_SOURCE 0x7804
+#define AVIVO_DACA_CNTL 0x7800
+#define AVIVO_DACA_CRTC_SOURCE 0x7804
# define AVIVO_DAC_EN (1 << 0)
-#define AVIVO_DAC1_MYSTERY1 0x783c
-# define AVIVO_DAC_MYSTERY1_DIS ((1 << 0) | (1 << 8) | (1 << 9) | (1 << 10))
-#define AVIVO_DAC1_MYSTERY2 0x7850
-# define AVIVO_DAC_MYSTERY2_DIS ((1 << 0) | (1 << 8) | (1 << 16) | (1 << 24))
-
-#define AVIVO_DAC2_CNTL 0x7a00
-#define AVIVO_DAC2_CRTC_SOURCE 0x7a04
-#define AVIVO_DAC2_MYSTERY1 0x7a3c
-#define AVIVO_DAC2_MYSTERY2 0x7a50
+#define AVIVO_DACA_FORCE_OUTPUT_CNTL 0x783c
+# define AVIVO_DACA_FORCE_OUTPUT_CNTL_FORCE_DATA_EN (1 << 0)
+# define AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_SHIFT (8)
+# define AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_BLUE (1 << 0)
+# define AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_GREEN (1 << 1)
+# define AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_SEL_RED (1 << 2)
+# define AVIVO_DACA_FORCE_OUTPUT_CNTL_DATA_ON_BLANKB_ONLY (1 << 24)
+#define AVIVO_DACA_POWERDOWN 0x7850
+# define AVIVO_DACA_POWERDOWN_POWERDOWN (1 << 0)
+# define AVIVO_DACA_POWERDOWN_BLUE (1 << 8)
+# define AVIVO_DACA_POWERDOWN_GREEN (1 << 16)
+# define AVIVO_DACA_POWERDOWN_RED (1 << 24)
+
+#define AVIVO_DACB_CNTL 0x7a00
+#define AVIVO_DACB_CRTC_SOURCE 0x7a04
+#define AVIVO_DACB_FORCE_OUTPUT_CNTL 0x7a3c
+# define AVIVO_DACB_FORCE_OUTPUT_CNTL_FORCE_DATA_EN (1 << 0)
+# define AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_SHIFT (8)
+# define AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_BLUE (1 << 0)
+# define AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_GREEN (1 << 1)
+# define AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_SEL_RED (1 << 2)
+# define AVIVO_DACB_FORCE_OUTPUT_CNTL_DATA_ON_BLANKB_ONLY (1 << 24)
+#define AVIVO_DACB_POWERDOWN 0x7a50
+# define AVIVO_DACB_POWERDOWN_POWERDOWN (1 << 0)
+# define AVIVO_DACB_POWERDOWN_BLUE (1 << 8)
+# define AVIVO_DACB_POWERDOWN_GREEN (1 << 16)
+# define AVIVO_DACB_POWERDOWN_RED (1 << 24)
/* Frustratingly, at least on my R580, the DAC and TMDS orders
* appear inversed: 7800 and 7a80 enable/disable the same physical
diff --git a/xorg/avivo_output.c b/xorg/avivo_output.c
index bb0fc23..16cd9f2 100644
--- a/xorg/avivo_output.c
+++ b/xorg/avivo_output.c
@@ -43,14 +43,14 @@ avivo_output_dac1_setup(xf86OutputPtr output)
struct avivo_crtc_private *avivo_crtc = output->crtc->driver_private;
xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
- "(DAC1) %s connector associated to crtc(%d)\n",
+ "(DACA) %s connector associated to crtc(%d)\n",
xf86ConnectorGetName(avivo_output->type),
avivo_crtc->crtc_number);
- OUTREG(AVIVO_DAC1_CRTC_SOURCE, avivo_crtc->crtc_number);
+ OUTREG(AVIVO_DACA_CRTC_SOURCE, avivo_crtc->crtc_number);
}
- OUTREG(AVIVO_DAC1_MYSTERY1, 0);
- OUTREG(AVIVO_DAC1_MYSTERY2, 0);
- OUTREG(AVIVO_DAC1_CNTL, AVIVO_DAC_EN);
+ OUTREG(AVIVO_DACA_FORCE_OUTPUT_CNTL, 0);
+ OUTREG(AVIVO_DACA_POWERDOWN, 0);
+ OUTREG(AVIVO_DACA_CNTL, AVIVO_DAC_EN);
}
static void
@@ -63,14 +63,14 @@ avivo_output_dac2_setup(xf86OutputPtr output)
struct avivo_crtc_private *avivo_crtc = output->crtc->driver_private;
xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
- "(DAC2) %s connector associated to crtc(%d)\n",
+ "(DACB) %s connector associated to crtc(%d)\n",
xf86ConnectorGetName(avivo_output->type),
avivo_crtc->crtc_number);
- OUTREG(AVIVO_DAC2_CRTC_SOURCE, avivo_crtc->crtc_number);
+ OUTREG(AVIVO_DACB_CRTC_SOURCE, avivo_crtc->crtc_number);
}
- OUTREG(AVIVO_DAC2_MYSTERY1, 0);
- OUTREG(AVIVO_DAC2_MYSTERY2, 0);
- OUTREG(AVIVO_DAC2_CNTL, AVIVO_DAC_EN);
+ OUTREG(AVIVO_DACB_FORCE_OUTPUT_CNTL, 0);
+ OUTREG(AVIVO_DACB_POWERDOWN, 0);
+ OUTREG(AVIVO_DACB_CNTL, AVIVO_DAC_EN);
}
static void
@@ -165,12 +165,12 @@ avivo_output_dac1_dpms(xf86OutputPtr output, int mode)
switch(mode) {
case DPMSModeOn:
- OUTREG(AVIVO_DAC1_CNTL, AVIVO_DAC_EN);
+ OUTREG(AVIVO_DACA_CNTL, AVIVO_DAC_EN);
break;
case DPMSModeStandby:
case DPMSModeSuspend:
case DPMSModeOff:
- OUTREG(AVIVO_DAC1_CNTL, 0);
+ OUTREG(AVIVO_DACA_CNTL, 0);
break;
}
}
@@ -182,12 +182,12 @@ avivo_output_dac2_dpms(xf86OutputPtr output, int mode)
switch(mode) {
case DPMSModeOn:
- OUTREG(AVIVO_DAC2_CNTL, AVIVO_DAC_EN);
+ OUTREG(AVIVO_DACB_CNTL, AVIVO_DAC_EN);
break;
case DPMSModeStandby:
case DPMSModeSuspend:
case DPMSModeOff:
- OUTREG(AVIVO_DAC2_CNTL, 0);
+ OUTREG(AVIVO_DACB_CNTL, 0);
break;
}
}
diff --git a/xorg/avivo_state.c b/xorg/avivo_state.c
index 3dff5e1..50c709e 100644
--- a/xorg/avivo_state.c
+++ b/xorg/avivo_state.c
@@ -156,17 +156,17 @@ avivo_restore_state(ScrnInfoPtr screen_info)
OUTREG(AVIVO_CRTC2_X_LENGTH, state->crtc2_x_length);
OUTREG(AVIVO_CRTC2_Y_LENGTH, state->crtc2_y_length);
- OUTREG(AVIVO_DAC1_CNTL, state->dac1_cntl);
- OUTREG(AVIVO_DAC1_MYSTERY1, state->dac1_mystery1);
- OUTREG(AVIVO_DAC1_MYSTERY2, state->dac1_mystery2);
+ OUTREG(AVIVO_DACA_CNTL, state->dac1_cntl);
+ OUTREG(AVIVO_DACA_FORCE_OUTPUT_CNTL, state->dac1_mystery1);
+ OUTREG(AVIVO_DACA_POWERDOWN, state->dac1_mystery2);
OUTREG(AVIVO_TMDSA_CNTL, state->tmds1_cntl);
OUTREG(AVIVO_TMDSA_BIT_DEPTH_CONTROL, state->tmds1_mystery1);
OUTREG(AVIVO_TMDSA_DATA_SYNCHRONIZATION, state->tmds1_mystery2);
OUTREG(AVIVO_TMDSA_TRANSMITTER_ENABLE, state->tmds1_clock_cntl);
OUTREG(AVIVO_TMDSA_TRANSMITTER_CONTROL, state->tmds1_mystery3);
- OUTREG(AVIVO_DAC2_CNTL, state->dac2_cntl);
- OUTREG(AVIVO_DAC2_MYSTERY1, state->dac2_mystery1);
- OUTREG(AVIVO_DAC2_MYSTERY2, state->dac2_mystery2);
+ OUTREG(AVIVO_DACB_CNTL, state->dac2_cntl);
+ OUTREG(AVIVO_DACB_FORCE_OUTPUT_CNTL, state->dac2_mystery1);
+ OUTREG(AVIVO_DACB_POWERDOWN, state->dac2_mystery2);
OUTREG(AVIVO_LVTMA_CNTL, state->tmds2_cntl);
OUTREG(AVIVO_LVTMA_BIT_DEPTH_CONTROL, state->tmds2_mystery1);
OUTREG(AVIVO_LVTMA_DATA_SYNCHRONIZATION, state->tmds2_mystery2);
@@ -273,9 +273,9 @@ avivo_save_state(ScrnInfoPtr screen_info)
state->crtc2_x_length = INREG(AVIVO_CRTC2_X_LENGTH);
state->crtc2_y_length = INREG(AVIVO_CRTC2_Y_LENGTH);
- state->dac1_cntl = INREG(AVIVO_DAC1_CNTL);
- state->dac1_mystery1 = INREG(AVIVO_DAC1_MYSTERY1);
- state->dac1_mystery2 = INREG(AVIVO_DAC1_MYSTERY2);
+ state->dac1_cntl = INREG(AVIVO_DACA_CNTL);
+ state->dac1_mystery1 = INREG(AVIVO_DACA_FORCE_OUTPUT_CNTL);
+ state->dac1_mystery2 = INREG(AVIVO_DACA_POWERDOWN);
state->tmds1_cntl = INREG(AVIVO_TMDSA_CNTL);
state->tmds1_mystery1 = INREG(AVIVO_TMDSA_BIT_DEPTH_CONTROL);
@@ -283,9 +283,9 @@ avivo_save_state(ScrnInfoPtr screen_info)
state->tmds1_clock_cntl = INREG(AVIVO_TMDSA_TRANSMITTER_ENABLE);
state->tmds1_mystery3 = INREG(AVIVO_TMDSA_TRANSMITTER_CONTROL);
- state->dac2_cntl = INREG(AVIVO_DAC2_CNTL);
- state->dac2_mystery1 = INREG(AVIVO_DAC2_MYSTERY1);
- state->dac2_mystery2 = INREG(AVIVO_DAC2_MYSTERY2);
+ state->dac2_cntl = INREG(AVIVO_DACB_CNTL);
+ state->dac2_mystery1 = INREG(AVIVO_DACB_FORCE_OUTPUT_CNTL);
+ state->dac2_mystery2 = INREG(AVIVO_DACB_POWERDOWN);
state->tmds2_cntl = INREG(AVIVO_LVTMA_CNTL);
state->tmds2_mystery1 = INREG(AVIVO_LVTMA_BIT_DEPTH_CONTROL);