aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2015-05-27 11:43:53 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-05-27 12:08:29 -0400
commit2d1c18bba15daf89d75ce475ecd2068f483aa12f (patch)
tree469ed8e4de8ad30075dd0f24d2a1a7bbe5ba90b3 /drivers/gpu/drm/radeon
parenta10f0df0615abb194968fc08147f3cdd70fd5aa5 (diff)
Revert "drm/radeon: only mark audio as connected if the monitor supports it (v3)"
This breaks too many things. bugs: https://bugzilla.kernel.org/show_bug.cgi?id=99041 https://bugs.freedesktop.org/show_bug.cgi?id=90681 This reverts commit 0f55db36d49d45b80eff0c0a2a498766016f458b. Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/radeon_audio.c27
-rw-r--r--drivers/gpu/drm/radeon/radeon_connectors.c8
2 files changed, 14 insertions, 21 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
index dcb779647c57..25191f126f3b 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.c
+++ b/drivers/gpu/drm/radeon/radeon_audio.c
@@ -460,9 +460,6 @@ void radeon_audio_detect(struct drm_connector *connector,
460 if (!connector || !connector->encoder) 460 if (!connector || !connector->encoder)
461 return; 461 return;
462 462
463 if (!radeon_encoder_is_digital(connector->encoder))
464 return;
465
466 rdev = connector->encoder->dev->dev_private; 463 rdev = connector->encoder->dev->dev_private;
467 464
468 if (!radeon_audio_chipset_supported(rdev)) 465 if (!radeon_audio_chipset_supported(rdev))
@@ -471,26 +468,26 @@ void radeon_audio_detect(struct drm_connector *connector,
471 radeon_encoder = to_radeon_encoder(connector->encoder); 468 radeon_encoder = to_radeon_encoder(connector->encoder);
472 dig = radeon_encoder->enc_priv; 469 dig = radeon_encoder->enc_priv;
473 470
474 if (!dig->afmt)
475 return;
476
477 if (status == connector_status_connected) { 471 if (status == connector_status_connected) {
478 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 472 struct radeon_connector *radeon_connector;
473 int sink_type;
474
475 if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) {
476 radeon_encoder->audio = NULL;
477 return;
478 }
479
480 radeon_connector = to_radeon_connector(connector);
481 sink_type = radeon_dp_getsinktype(radeon_connector);
479 482
480 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && 483 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort &&
481 radeon_dp_getsinktype(radeon_connector) == 484 sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
482 CONNECTOR_OBJECT_ID_DISPLAYPORT)
483 radeon_encoder->audio = rdev->audio.dp_funcs; 485 radeon_encoder->audio = rdev->audio.dp_funcs;
484 else 486 else
485 radeon_encoder->audio = rdev->audio.hdmi_funcs; 487 radeon_encoder->audio = rdev->audio.hdmi_funcs;
486 488
487 dig->afmt->pin = radeon_audio_get_pin(connector->encoder); 489 dig->afmt->pin = radeon_audio_get_pin(connector->encoder);
488 if (drm_detect_monitor_audio(radeon_connector_edid(connector))) { 490 radeon_audio_enable(rdev, dig->afmt->pin, 0xf);
489 radeon_audio_enable(rdev, dig->afmt->pin, 0xf);
490 } else {
491 radeon_audio_enable(rdev, dig->afmt->pin, 0);
492 dig->afmt->pin = NULL;
493 }
494 } else { 491 } else {
495 radeon_audio_enable(rdev, dig->afmt->pin, 0); 492 radeon_audio_enable(rdev, dig->afmt->pin, 0);
496 dig->afmt->pin = NULL; 493 dig->afmt->pin = NULL;
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index d17d251dbd4f..cebb65e07e1d 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -1379,10 +1379,8 @@ out:
1379 /* updated in get modes as well since we need to know if it's analog or digital */ 1379 /* updated in get modes as well since we need to know if it's analog or digital */
1380 radeon_connector_update_scratch_regs(connector, ret); 1380 radeon_connector_update_scratch_regs(connector, ret);
1381 1381
1382 if (radeon_audio != 0) { 1382 if (radeon_audio != 0)
1383 radeon_connector_get_edid(connector);
1384 radeon_audio_detect(connector, ret); 1383 radeon_audio_detect(connector, ret);
1385 }
1386 1384
1387exit: 1385exit:
1388 pm_runtime_mark_last_busy(connector->dev->dev); 1386 pm_runtime_mark_last_busy(connector->dev->dev);
@@ -1719,10 +1717,8 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
1719 1717
1720 radeon_connector_update_scratch_regs(connector, ret); 1718 radeon_connector_update_scratch_regs(connector, ret);
1721 1719
1722 if (radeon_audio != 0) { 1720 if (radeon_audio != 0)
1723 radeon_connector_get_edid(connector);
1724 radeon_audio_detect(connector, ret); 1721 radeon_audio_detect(connector, ret);
1725 }
1726 1722
1727out: 1723out:
1728 pm_runtime_mark_last_busy(connector->dev->dev); 1724 pm_runtime_mark_last_busy(connector->dev->dev);