drm/radeon: report disconnected for LVDS/eDP with PX if ddc fails
If ddc fails, presumably the i2c mux (and hopefully the signal mux) are switched to the other GPU so don't fetch the edid from the vbios so that the connector reports disconnected. bug: https://bugzilla.opensuse.org/show_bug.cgi?id=904417 Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
This commit is contained in:
parent
a0fc608178
commit
1348579433
|
@ -322,6 +322,12 @@ static void radeon_connector_get_edid(struct drm_connector *connector)
|
|||
}
|
||||
|
||||
if (!radeon_connector->edid) {
|
||||
/* don't fetch the edid from the vbios if ddc fails and runpm is
|
||||
* enabled so we report disconnected.
|
||||
*/
|
||||
if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
|
||||
return;
|
||||
|
||||
if (rdev->is_atom_bios) {
|
||||
/* some laptops provide a hardcoded edid in rom for LCDs */
|
||||
if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
|
||||
|
@ -826,6 +832,8 @@ static int radeon_lvds_mode_valid(struct drm_connector *connector,
|
|||
static enum drm_connector_status
|
||||
radeon_lvds_detect(struct drm_connector *connector, bool force)
|
||||
{
|
||||
struct drm_device *dev = connector->dev;
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
struct drm_encoder *encoder = radeon_best_single_encoder(connector);
|
||||
enum drm_connector_status ret = connector_status_disconnected;
|
||||
|
@ -842,7 +850,11 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
|
|||
/* check if panel is valid */
|
||||
if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
|
||||
ret = connector_status_connected;
|
||||
|
||||
/* don't fetch the edid from the vbios if ddc fails and runpm is
|
||||
* enabled so we report disconnected.
|
||||
*/
|
||||
if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
|
||||
ret = connector_status_disconnected;
|
||||
}
|
||||
|
||||
/* check for edid as well */
|
||||
|
@ -1589,6 +1601,11 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
|||
/* check if panel is valid */
|
||||
if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
|
||||
ret = connector_status_connected;
|
||||
/* don't fetch the edid from the vbios if ddc fails and runpm is
|
||||
* enabled so we report disconnected.
|
||||
*/
|
||||
if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
|
||||
ret = connector_status_disconnected;
|
||||
}
|
||||
/* eDP is always DP */
|
||||
radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
|
||||
|
|
Loading…
Reference in New Issue