Commit 4630b307 authored by Alex Deucher's avatar Alex Deucher Committed by Luis Henriques

drm/radeon: report disconnected for LVDS/eDP with PX if ddc fails

commit 13485794 upstream.

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=904417Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
[ luis: backported to 3.16:
  - dropped changes to radeon_connector_get_edid() ]
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent 5da25209
...@@ -695,6 +695,8 @@ static int radeon_lvds_mode_valid(struct drm_connector *connector, ...@@ -695,6 +695,8 @@ static int radeon_lvds_mode_valid(struct drm_connector *connector,
static enum drm_connector_status static enum drm_connector_status
radeon_lvds_detect(struct drm_connector *connector, bool force) 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 radeon_connector *radeon_connector = to_radeon_connector(connector);
struct drm_encoder *encoder = radeon_best_single_encoder(connector); struct drm_encoder *encoder = radeon_best_single_encoder(connector);
enum drm_connector_status ret = connector_status_disconnected; enum drm_connector_status ret = connector_status_disconnected;
...@@ -711,7 +713,11 @@ radeon_lvds_detect(struct drm_connector *connector, bool force) ...@@ -711,7 +713,11 @@ radeon_lvds_detect(struct drm_connector *connector, bool force)
/* check if panel is valid */ /* check if panel is valid */
if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
ret = connector_status_connected; 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 */ /* check for edid as well */
...@@ -1492,6 +1498,11 @@ radeon_dp_detect(struct drm_connector *connector, bool force) ...@@ -1492,6 +1498,11 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
/* check if panel is valid */ /* check if panel is valid */
if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
ret = connector_status_connected; 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 */ /* eDP is always DP */
radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment