Lines Matching +full:audio +full:- +full:subsystem

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
7 #define pr_fmt(fmt) "[drm-dp] %s: " fmt, __func__
32 static void msm_dp_audio_stream_sdp(struct msm_dp_audio_private *audio)
38 .HB3 = audio->channels - 1,
41 msm_dp_catalog_write_audio_stream(audio->catalog, &sdp_hdr);
44 static void msm_dp_audio_timestamp_sdp(struct msm_dp_audio_private *audio)
53 msm_dp_catalog_write_audio_timestamp(audio->catalog, &sdp_hdr);
56 static void msm_dp_audio_infoframe_sdp(struct msm_dp_audio_private *audio)
65 msm_dp_catalog_write_audio_infoframe(audio->catalog, &sdp_hdr);
68 static void msm_dp_audio_copy_management_sdp(struct msm_dp_audio_private *audio)
77 msm_dp_catalog_write_audio_copy_mgmt(audio->catalog, &sdp_hdr);
80 static void msm_dp_audio_isrc_sdp(struct msm_dp_audio_private *audio)
89 msm_dp_catalog_write_audio_isrc(audio->catalog, &sdp_hdr);
92 static void msm_dp_audio_setup_sdp(struct msm_dp_audio_private *audio)
94 msm_dp_catalog_audio_config_sdp(audio->catalog);
96 msm_dp_audio_stream_sdp(audio);
97 msm_dp_audio_timestamp_sdp(audio);
98 msm_dp_audio_infoframe_sdp(audio);
99 msm_dp_audio_copy_management_sdp(audio);
100 msm_dp_audio_isrc_sdp(audio);
103 static void msm_dp_audio_setup_acr(struct msm_dp_audio_private *audio)
106 struct msm_dp_catalog *catalog = audio->catalog;
108 switch (audio->msm_dp_audio.bw_code) {
122 drm_dbg_dp(audio->drm_dev, "Unknown link rate\n");
130 static void msm_dp_audio_safe_to_exit_level(struct msm_dp_audio_private *audio)
132 struct msm_dp_catalog *catalog = audio->catalog;
135 switch (audio->msm_dp_audio.lane_count) {
147 drm_dbg_dp(audio->drm_dev,
156 static void msm_dp_audio_enable(struct msm_dp_audio_private *audio, bool enable)
158 struct msm_dp_catalog *catalog = audio->catalog;
167 msm_dp_audio = msm_dp_display->msm_dp_audio;
170 return ERR_PTR(-EINVAL);
182 struct msm_dp_audio_private *audio;
185 msm_dp_display = to_dp_bridge(bridge)->msm_dp_display;
190 * unclocked access as the audio subsystem relies on the DP
195 if (!msm_dp_display->power_on) {
196 rc = -EINVAL;
200 audio = msm_dp_audio_get_data(msm_dp_display);
201 if (IS_ERR(audio)) {
202 rc = PTR_ERR(audio);
206 audio->channels = params->channels;
208 msm_dp_audio_setup_sdp(audio);
209 msm_dp_audio_setup_acr(audio);
210 msm_dp_audio_safe_to_exit_level(audio);
211 msm_dp_audio_enable(audio, true);
213 msm_dp_display->audio_enabled = true;
222 struct msm_dp_audio_private *audio;
225 msm_dp_display = to_dp_bridge(bridge)->msm_dp_display;
226 audio = msm_dp_audio_get_data(msm_dp_display);
227 if (IS_ERR(audio)) {
228 DRM_ERROR("failed to get audio data\n");
233 * if audio was not enabled there is no need
236 * access when audio subsystem calls this without DP being
240 if (!msm_dp_display->audio_enabled)
243 msm_dp_audio_enable(audio, false);
252 struct msm_dp_audio_private *audio;
257 rc = -EINVAL;
261 audio = devm_kzalloc(&pdev->dev, sizeof(*audio), GFP_KERNEL);
262 if (!audio) {
263 rc = -ENOMEM;
267 audio->pdev = pdev;
268 audio->catalog = catalog;
270 msm_dp_audio = &audio->msm_dp_audio;
279 struct msm_dp_audio_private *audio;
284 audio = container_of(msm_dp_audio, struct msm_dp_audio_private, msm_dp_audio);
286 devm_kfree(&audio->pdev->dev, audio);