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

radeon/audio: moved audio caps programming to audio_hotplug() function

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Slava Grigorev <slava.grigorev@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Slava Grigorev and committed by
Alex Deucher
ccd4be7e 6f945693

+43 -35
+43 -35
drivers/gpu/drm/radeon/radeon_audio.c
··· 302 302 return 0; 303 303 } 304 304 305 - void radeon_audio_detect(struct drm_connector *connector, 306 - enum drm_connector_status status) 307 - { 308 - if (!connector || !connector->encoder) 309 - return; 310 - 311 - if (status == connector_status_connected) { 312 - int sink_type; 313 - struct radeon_device *rdev = connector->encoder->dev->dev_private; 314 - struct radeon_connector *radeon_connector; 315 - struct radeon_encoder *radeon_encoder = 316 - to_radeon_encoder(connector->encoder); 317 - 318 - if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) { 319 - radeon_encoder->audio = 0; 320 - return; 321 - } 322 - 323 - radeon_connector = to_radeon_connector(connector); 324 - sink_type = radeon_dp_getsinktype(radeon_connector); 325 - 326 - if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && 327 - sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) 328 - radeon_encoder->audio = rdev->audio.dp_funcs; 329 - else 330 - radeon_encoder->audio = rdev->audio.hdmi_funcs; 331 - /* TODO: set up the sads, etc. and set the audio enable_mask */ 332 - } else { 333 - /* TODO: reset the audio enable_mask */ 334 - } 335 - } 336 - 337 305 u32 radeon_audio_endpoint_rreg(struct radeon_device *rdev, u32 offset, u32 reg) 338 306 { 339 307 if (rdev->audio.funcs->endpoint_rreg) ··· 438 470 { 439 471 if (rdev->audio.funcs->enable) 440 472 rdev->audio.funcs->enable(rdev, pin, enable_mask); 473 + } 474 + 475 + void radeon_audio_detect(struct drm_connector *connector, 476 + enum drm_connector_status status) 477 + { 478 + struct radeon_device *rdev; 479 + struct radeon_encoder *radeon_encoder; 480 + struct radeon_encoder_atom_dig *dig; 481 + 482 + if (!connector || !connector->encoder) 483 + return; 484 + 485 + rdev = connector->encoder->dev->dev_private; 486 + radeon_encoder = to_radeon_encoder(connector->encoder); 487 + dig = radeon_encoder->enc_priv; 488 + 489 + if (status == connector_status_connected) { 490 + struct radeon_connector *radeon_connector; 491 + int sink_type; 492 + 493 + if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) { 494 + radeon_encoder->audio = 0; 495 + return; 496 + } 497 + 498 + radeon_connector = to_radeon_connector(connector); 499 + sink_type = radeon_dp_getsinktype(radeon_connector); 500 + 501 + if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && 502 + sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) 503 + radeon_encoder->audio = rdev->audio.dp_funcs; 504 + else 505 + radeon_encoder->audio = rdev->audio.hdmi_funcs; 506 + 507 + radeon_audio_write_speaker_allocation(connector->encoder); 508 + radeon_audio_write_sad_regs(connector->encoder); 509 + if (connector->encoder->crtc) 510 + radeon_audio_write_latency_fields(connector->encoder, 511 + &connector->encoder->crtc->mode); 512 + radeon_audio_enable(rdev, dig->afmt->pin, 0xf); 513 + } else { 514 + radeon_audio_enable(rdev, dig->afmt->pin, 0); 515 + } 441 516 } 442 517 443 518 void radeon_audio_fini(struct radeon_device *rdev) ··· 701 690 radeon_hdmi_set_color_depth(encoder); 702 691 radeon_audio_set_mute(encoder, false); 703 692 radeon_audio_update_acr(encoder, mode->clock); 704 - radeon_audio_write_speaker_allocation(encoder); 705 693 radeon_audio_set_audio_packet(encoder); 706 694 radeon_audio_select_pin(encoder); 707 - radeon_audio_write_sad_regs(encoder); 708 - radeon_audio_write_latency_fields(encoder, mode); 709 695 710 696 if (radeon_audio_set_avi_packet(encoder, mode) < 0) 711 697 return;