That is what I meant -- having the encoder in DVI at the same time as the AUX pins in AUX mode is the weird state since that configuration is incompatible with everything.
That is what I was guessing at. Thank you for confirming. The monitor was probed in DP mode when the power was turned on so that the bios would be able to post to it. That set the pads into AUX mode and it stayed there.You need to switch the pad mode when you want to use aux vs i2c. The state of the register is left in whatever state was last used. If the vbios tried to probe a DP monitor they will be in AUX mode, if the last thing it tried was non-DP it will be in i2c mode. The vbios doesn't try i2c since the sink type always returns DP on your board. I think that is the fundamental problem with your board: the pins are wired such that there always appears to be a DP monitor attached.
When you say that it usually works anyway, that's got to be because the monitor was probed in DVI mode during power on, so they stay there.... generally keeps working because that's what it was set to.
Got that already...In your case, you'll still have to hack radeon_dp_detect() since the sink type always returns DP on your board which is wrong. it should only return DP when there is actually a DP monitor attached. In addtion to patch I linked to, you'll need something like:
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -998,6 +998,10 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto
}
}
+ radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D;
+ if (radeon_ddc_probe(radeon_connector))
+ ret = connector_status_connected;
+
return ret;
}
... any that aren't working, i.e. radeon_dp_getdpcd()==false. It obviously makes no sense at all to force a DP monitor that DOES work into a mode where it CAN'T work, and if radeon_dp_getdpcd() fails, there's no way that DP is going to work anyway.Options like this get tricky when you have multiple connectors. If you have more than 1 DP port, which one does forceDPDVI apply to?
As it is, the common modes are all just being thrown in with generic 60 Hz (from what I can see)... which is better than nothing since they *might* work, and might supersedes *won't* (as in "won't be available"). If it is available as an option, you get to try, if it doesn't work, nothing is lost.As for the maxCommonMode that gets tricky as well since the mode timings can vary wildly between monitors.
That would definitely be nice.The linux framebuffer layer really need to learn the concept of multiple heads.
It might be better like this:Something like the following should allow you to force the connector on in non-DP mode using xrandr:
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -990,12 +990,14 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto
if (radeon_dp_getdpcd(radeon_connector)) {
radeon_dig_connector->dp_sink_type = sink_type;
ret = connector_status_connected;
- }
+ } else
+ radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D;
} else {
if (radeon_ddc_probe(radeon_connector)) {
radeon_dig_connector->dp_sink_type = sink_type;
ret = connector_status_connected;
- }
+ } else
+ radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D;
}
return ret;
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -990,12 +990,14 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto
if (radeon_dp_getdpcd(radeon_connector)) {
radeon_dig_connector->dp_sink_type = sink_type;
ret = connector_status_connected;
- }
+ } else
+ radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D;
} else {
if (radeon_ddc_probe(radeon_connector)) {
- radeon_dig_connector->dp_sink_type = sink_type;
ret = connector_status_connected;
}
+ radeon_dig_connector->dp_sink_type = sink_type;
}
return ret;
** since in the second case, we already know that sink_type is NOT set to DP, so just let it set to whatever it is, but no activating it.





Reply With Quote
