Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+14 -21
+12 -15
drivers/gpu/drm/radeon/radeon_audio.c
··· 460 460 if (!connector || !connector->encoder) 461 461 return; 462 462 463 - if (!radeon_encoder_is_digital(connector->encoder)) 464 - return; 465 - 466 463 rdev = connector->encoder->dev->dev_private; 467 464 468 465 if (!radeon_audio_chipset_supported(rdev)) ··· 468 471 radeon_encoder = to_radeon_encoder(connector->encoder); 469 472 dig = radeon_encoder->enc_priv; 470 473 471 - if (!dig->afmt) 472 - return; 473 - 474 474 if (status == connector_status_connected) { 475 - struct radeon_connector *radeon_connector = to_radeon_connector(connector); 475 + struct radeon_connector *radeon_connector; 476 + int sink_type; 477 + 478 + if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) { 479 + radeon_encoder->audio = NULL; 480 + return; 481 + } 482 + 483 + radeon_connector = to_radeon_connector(connector); 484 + sink_type = radeon_dp_getsinktype(radeon_connector); 476 485 477 486 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && 478 - radeon_dp_getsinktype(radeon_connector) == 479 - CONNECTOR_OBJECT_ID_DISPLAYPORT) 487 + sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) 480 488 radeon_encoder->audio = rdev->audio.dp_funcs; 481 489 else 482 490 radeon_encoder->audio = rdev->audio.hdmi_funcs; 483 491 484 492 dig->afmt->pin = radeon_audio_get_pin(connector->encoder); 485 - if (drm_detect_monitor_audio(radeon_connector_edid(connector))) { 486 - radeon_audio_enable(rdev, dig->afmt->pin, 0xf); 487 - } else { 488 - radeon_audio_enable(rdev, dig->afmt->pin, 0); 489 - dig->afmt->pin = NULL; 490 - } 493 + radeon_audio_enable(rdev, dig->afmt->pin, 0xf); 491 494 } else { 492 495 radeon_audio_enable(rdev, dig->afmt->pin, 0); 493 496 dig->afmt->pin = NULL;
+2 -6
drivers/gpu/drm/radeon/radeon_connectors.c
··· 1379 1379 /* updated in get modes as well since we need to know if it's analog or digital */ 1380 1380 radeon_connector_update_scratch_regs(connector, ret); 1381 1381 1382 - if (radeon_audio != 0) { 1383 - radeon_connector_get_edid(connector); 1382 + if (radeon_audio != 0) 1384 1383 radeon_audio_detect(connector, ret); 1385 - } 1386 1384 1387 1385 exit: 1388 1386 pm_runtime_mark_last_busy(connector->dev->dev); ··· 1717 1719 1718 1720 radeon_connector_update_scratch_regs(connector, ret); 1719 1721 1720 - if (radeon_audio != 0) { 1721 - radeon_connector_get_edid(connector); 1722 + if (radeon_audio != 0) 1722 1723 radeon_audio_detect(connector, ret); 1723 - } 1724 1724 1725 1725 out: 1726 1726 pm_runtime_mark_last_busy(connector->dev->dev);