From patchwork Tue Jan 13 17:46:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Deucher X-Patchwork-Id: 5622981 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id D25929FB2D for ; Tue, 13 Jan 2015 17:47:28 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id F34B420591 for ; Tue, 13 Jan 2015 17:47:27 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 11B5620558 for ; Tue, 13 Jan 2015 17:47:27 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DFD64720A2; Tue, 13 Jan 2015 09:47:21 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qa0-f46.google.com (mail-qa0-f46.google.com [209.85.216.46]) by gabe.freedesktop.org (Postfix) with ESMTP id 99D5F6E640 for ; Tue, 13 Jan 2015 09:47:14 -0800 (PST) Received: by mail-qa0-f46.google.com with SMTP id j7so3138963qaq.5 for ; Tue, 13 Jan 2015 09:47:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7ugECb+rsBXmCoYHU0Q4tjaZMy/1ENBtyoI6REU26mI=; b=ef+VRvxkwV6HoYpvPxNS5K/0JpGuTbujjBBNBy8kTcrsJrJ92bJOBWJuV9Aoy3R824 5nt4NNdHpN1arsLgyC1hWF52eNq9Vta8caYqqWaOYQp1pMXwxuskmeKkhaHlTIRSiewh X/Yf52LI4yLT2ahZPBT53XqCnYNLDGca9O2RScogpkNFnciGLMWBjpS26wKmmY+7EsfD fz3cmFaePmy4LUX4qntkoKGfYhYkltJzAMxEsod1nBUCmHO5QRyEpIbE6LZKoQvaVScP CPC2R5vHxn2mfN02pTQ+hDUzxdZuo0q1zu0gN7dkgnEfJdnYmGDYO3NZQ3HtzKOV/+m2 JRwg== X-Received: by 10.224.43.202 with SMTP id x10mr60190163qae.16.1421171234186; Tue, 13 Jan 2015 09:47:14 -0800 (PST) Received: from localhost.localdomain (static-74-96-105-49.washdc.fios.verizon.net. [74.96.105.49]) by mx.google.com with ESMTPSA id 43sm18213707qgb.17.2015.01.13.09.47.13 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Jan 2015 09:47:13 -0800 (PST) From: Alex Deucher X-Google-Original-From: Alex Deucher To: dri-devel@lists.freedesktop.org Subject: [PATCH 22/24] radeon/audio: moved audio caps programming to audio_hotplug() function Date: Tue, 13 Jan 2015 12:46:51 -0500 Message-Id: <1421171213-23977-23-git-send-email-alexander.deucher@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1421171213-23977-1-git-send-email-alexander.deucher@amd.com> References: <1421171213-23977-1-git-send-email-alexander.deucher@amd.com> Cc: Alex Deucher , slava.grigorev@amd.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Slava Grigorev Signed-off-by: Slava Grigorev Signed-off-by: Alex Deucher --- drivers/gpu/drm/radeon/radeon_audio.c | 78 +++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c index 6c4631b..fc7a975 100644 --- a/drivers/gpu/drm/radeon/radeon_audio.c +++ b/drivers/gpu/drm/radeon/radeon_audio.c @@ -301,38 +301,6 @@ int radeon_audio_init(struct radeon_device *rdev) return 0; } -void radeon_audio_detect(struct drm_connector *connector, - enum drm_connector_status status) -{ - if (!connector || !connector->encoder) - return; - - if (status == connector_status_connected) { - int sink_type; - struct radeon_device *rdev = connector->encoder->dev->dev_private; - struct radeon_connector *radeon_connector; - struct radeon_encoder *radeon_encoder = - to_radeon_encoder(connector->encoder); - - if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) { - radeon_encoder->audio = 0; - return; - } - - radeon_connector = to_radeon_connector(connector); - sink_type = radeon_dp_getsinktype(radeon_connector); - - if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && - sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) - radeon_encoder->audio = rdev->audio.dp_funcs; - else - radeon_encoder->audio = rdev->audio.hdmi_funcs; - /* TODO: set up the sads, etc. and set the audio enable_mask */ - } else { - /* TODO: reset the audio enable_mask */ - } -} - u32 radeon_audio_endpoint_rreg(struct radeon_device *rdev, u32 offset, u32 reg) { if (rdev->audio.funcs->endpoint_rreg) @@ -471,6 +439,49 @@ void radeon_audio_enable(struct radeon_device *rdev, rdev->audio.funcs->enable(rdev, pin, enable_mask); } +void radeon_audio_detect(struct drm_connector *connector, + enum drm_connector_status status) +{ + struct radeon_device *rdev; + struct radeon_encoder *radeon_encoder; + struct radeon_encoder_atom_dig *dig; + + if (!connector || !connector->encoder) + return; + + rdev = connector->encoder->dev->dev_private; + radeon_encoder = to_radeon_encoder(connector->encoder); + dig = radeon_encoder->enc_priv; + + if (status == connector_status_connected) { + struct radeon_connector *radeon_connector; + int sink_type; + + if (!drm_detect_monitor_audio(radeon_connector_edid(connector))) { + radeon_encoder->audio = 0; + return; + } + + radeon_connector = to_radeon_connector(connector); + sink_type = radeon_dp_getsinktype(radeon_connector); + + if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && + sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) + radeon_encoder->audio = rdev->audio.dp_funcs; + else + radeon_encoder->audio = rdev->audio.hdmi_funcs; + + radeon_audio_write_speaker_allocation(connector->encoder); + radeon_audio_write_sad_regs(connector->encoder); + if (connector->encoder->crtc) + radeon_audio_write_latency_fields(connector->encoder, + &connector->encoder->crtc->mode); + radeon_audio_enable(rdev, dig->afmt->pin, 0xf); + } else { + radeon_audio_enable(rdev, dig->afmt->pin, 0); + } +} + void radeon_audio_fini(struct radeon_device *rdev) { int i; @@ -689,11 +700,8 @@ static void radeon_audio_hdmi_mode_set(struct drm_encoder *encoder, radeon_hdmi_set_color_depth(encoder); radeon_audio_set_mute(encoder, false); radeon_audio_update_acr(encoder, mode->clock); - radeon_audio_write_speaker_allocation(encoder); radeon_audio_set_audio_packet(encoder); radeon_audio_select_pin(encoder); - radeon_audio_write_sad_regs(encoder); - radeon_audio_write_latency_fields(encoder, mode); if (radeon_audio_set_avi_packet(encoder, mode) < 0) return;