From df63e84fcecb0a80a41bd367535aeb7365d8d116 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Sat, 15 Sep 2007 00:38:12 +0100 Subject: Demagicafy DAC registers --- avivotool/avivotool.c | 61 ++++++++++++++++++++++++++------------------------- include/radeon_reg.h | 40 +++++++++++++++++++++++---------- xorg/avivo_output.c | 28 +++++++++++------------ xorg/avivo_state.c | 24 ++++++++++---------- 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); -- cgit v1.2.3