Mailinglist Archive: radeonhd (271 mails)

< Previous Next >
[radeonhd] Re: Status of HDMI Audio on RV730 and RV710 Chipset (HD4550 and others)
Hi everybody,

my tests with the RV790 chipset were quite unsuccessfully, the RV790
chipset works flawless out of the box. Initially I hoped that my fiend
has a RV730, but this doesn't proved to be true.

But since I promised a patch I summed up everything known about the
RV710 and RV730 chipset and stuff it together in one change. So the
attached patch is more a ugly hack than a real solution.

It should apply cleanly with "git apply test.patch" ontop of current
master, please give it a try and make a new dump of the 0x7000-0x7FFF
register range while audio is playing.

Happy testing,
Christian.



diff --git a/src/rhd_audio.c b/src/rhd_audio.c
index 5e3c4e2..442c979 100644
--- a/src/rhd_audio.c
+++ b/src/rhd_audio.c
@@ -239,6 +239,7 @@ RHDAudioSetClock(RHDPtr rhdPtr, struct rhdOutput* Output,
CARD32 Clock)

case RHD_OUTPUT_UNIPHYA:
case RHD_OUTPUT_UNIPHYB:
+ case RHD_OUTPUT_UNIPHYE:
case RHD_OUTPUT_KLDSKP_LVTMA:
RHDRegMask(Audio, AUDIO_TIMING, 0x100, 0x301);
break;
diff --git a/src/rhd_driver.c b/src/rhd_driver.c
index 2d7f803..075c3eb 100644
--- a/src/rhd_driver.c
+++ b/src/rhd_driver.c
@@ -2205,7 +2205,7 @@ rhdModeLayoutSelect(RHDPtr rhdPtr)
rhdOutputConnectorCheck(Connector);
}

- i = 0; /* counter for CRTCs */
+ i = 1; /* counter for CRTCs */
for (Output = rhdPtr->Outputs; Output; Output = Output->Next)
if (Output->Connector) {
struct rhdMonitor *Monitor = NULL;
diff --git a/src/rhd_hdmi.c b/src/rhd_hdmi.c
index c786fcd..6538d50 100644
--- a/src/rhd_hdmi.c
+++ b/src/rhd_hdmi.c
@@ -268,6 +268,7 @@ RHDHdmiInit(RHDPtr rhdPtr, struct rhdOutput* Output)
hdmi->Offset = HDMI_TMDS;
break;

+ case RHD_OUTPUT_UNIPHYE:
case RHD_OUTPUT_KLDSKP_LVTMA:
hdmi->Offset = HDMI_DIG;
break;
@@ -323,6 +324,10 @@ RHDHdmiSetMode(struct rhdHdmi *hdmi, DisplayModePtr Mode)

/* update? reset? don't realy know */
RHDRegMask(hdmi, hdmi->Offset+HDMI_CNTL, 0x14000000, 0x14000000);
+
+
+ if(RHDPTRI(hdmi)->ChipSet == RHD_RV710 || RHDPTRI(hdmi)->ChipSet ==
RHD_RV730)
+ RHDRegMask(hdmi, 0x7604, 0x00000001, 0x00000001);
}

/*
@@ -441,6 +446,10 @@ RHDHdmiEnable(struct rhdHdmi *hdmi, Bool Enable)
RHDRegWrite(hdmi, hdmi->Offset+HDMI_ENABLE, Enable ? 0x110 : 0x0);
break;

+ case RHD_OUTPUT_UNIPHYE:
+ RHDRegWrite(hdmi, hdmi->Offset+HDMI_ENABLE, Enable ? 0x011 : 0x0);
+ break;
+
default:
xf86DrvMsg(hdmi->scrnIndex, X_ERROR, "%s: unknown HDMI output
type\n", __func__);
break;
diff --git a/src/rhd_output.c b/src/rhd_output.c
index 0e33d4e..bbaa119 100644
--- a/src/rhd_output.c
+++ b/src/rhd_output.c
@@ -307,6 +307,7 @@ RHDOutputTmdsIndex(struct rhdOutput *Output)
break;

case RHD_OUTPUT_UNIPHYB:
+ case RHD_OUTPUT_UNIPHYE:
case RHD_OUTPUT_KLDSKP_LVTMA:
index=1;
break;
diff --git a/src/rhd_randr.c b/src/rhd_randr.c
index 36d783b..f1e84c8 100644
--- a/src/rhd_randr.c
+++ b/src/rhd_randr.c
@@ -1924,7 +1924,7 @@ RHDRandrPreInit(ScrnInfoPtr pScrn)
randr->RandrCrtc[i] = xf86CrtcCreate(pScrn, &rhdRRCrtcFuncs);
ASSERT(randr->RandrCrtc[i]);
randr->RandrCrtc[i]->driver_private = xnfcalloc(sizeof(struct
rhdRandrCrtc),1);
- ((struct rhdRandrCrtc*) randr->RandrCrtc[i]->driver_private)->rhdCrtc =
rhdPtr->Crtc[i]; /* TODO: not cleaning up correctly */
+ ((struct rhdRandrCrtc*) randr->RandrCrtc[i]->driver_private)->rhdCrtc =
rhdPtr->Crtc[i ^ 1]; /* TODO: not cleaning up correctly */
}

/* First count, then allocate */
< Previous Next >
Follow Ups