radeon_hd: Fix digital output

* Resolves blocker #8322.
* Should resolve #8151, #8163, #8282, #8457
* Digital output on DVII was getting hard set
  in the encoder to analog / CRT mode.
* We now check the edid "type" flag
* Flag gets set to 1 if edid data from digital
  transmitter, 0 if analog transmitter.
This commit is contained in:
Alexander von Gluck IV 2012-04-18 21:36:16 +00:00
parent af6e0179ca
commit e47f861975
1 changed files with 18 additions and 3 deletions

View File

@ -388,15 +388,30 @@ display_get_encoder_mode(uint32 connectorIndex)
return ATOM_ENCODER_MODE_DVO;
}
// Find crtc for connector
int32 crtc = -1;
for (int32 id = 0; id < MAX_DISPLAY; id++) {
if (gDisplay[id]->connectorIndex == connectorIndex) {
crtc = id;
break;
}
}
if (crtc == -1) {
ERROR("%s: BUG: ran on connector without crtc!\n", __func__);
return ATOM_ENCODER_MODE_CRT;
}
edid1_info* edid = &gDisplay[crtc]->edid_info;
// Normal encoder situations
switch (gConnector[connectorIndex]->type) {
case VIDEO_CONNECTOR_DVII:
case VIDEO_CONNECTOR_HDMIB: /* HDMI-B is DL-DVI; analog works fine */
// TODO: if audio detected on edid and DCE4, ATOM_ENCODER_MODE_DVI
// if audio detected on edid not DCE4, ATOM_ENCODER_MODE_HDMI
// if (gConnector[connectorIndex]->use_digital)
// return ATOM_ENCODER_MODE_DVI;
// else
if (edid->display.input_type) // is digital?
return ATOM_ENCODER_MODE_DVI;
else
return ATOM_ENCODER_MODE_CRT;
break;
case VIDEO_CONNECTOR_DVID: