Lines Matching full:audio

31 static inline u32 msm_dp_read_link(struct msm_dp_audio_private *audio, u32 offset)  in msm_dp_read_link()  argument
33 return readl_relaxed(audio->link_base + offset); in msm_dp_read_link()
36 static inline void msm_dp_write_link(struct msm_dp_audio_private *audio, in msm_dp_write_link() argument
43 writel(data, audio->link_base + offset); in msm_dp_write_link()
46 static void msm_dp_audio_stream_sdp(struct msm_dp_audio_private *audio) in msm_dp_audio_stream_sdp() argument
52 .HB3 = audio->channels - 1, in msm_dp_audio_stream_sdp()
58 msm_dp_write_link(audio, MMSS_DP_AUDIO_STREAM_0, header[0]); in msm_dp_audio_stream_sdp()
59 msm_dp_write_link(audio, MMSS_DP_AUDIO_STREAM_1, header[1]); in msm_dp_audio_stream_sdp()
62 static void msm_dp_audio_timestamp_sdp(struct msm_dp_audio_private *audio) in msm_dp_audio_timestamp_sdp() argument
74 msm_dp_write_link(audio, MMSS_DP_AUDIO_TIMESTAMP_0, header[0]); in msm_dp_audio_timestamp_sdp()
75 msm_dp_write_link(audio, MMSS_DP_AUDIO_TIMESTAMP_1, header[1]); in msm_dp_audio_timestamp_sdp()
78 static void msm_dp_audio_infoframe_sdp(struct msm_dp_audio_private *audio) in msm_dp_audio_infoframe_sdp() argument
90 msm_dp_write_link(audio, MMSS_DP_AUDIO_INFOFRAME_0, header[0]); in msm_dp_audio_infoframe_sdp()
91 msm_dp_write_link(audio, MMSS_DP_AUDIO_INFOFRAME_1, header[1]); in msm_dp_audio_infoframe_sdp()
94 static void msm_dp_audio_copy_management_sdp(struct msm_dp_audio_private *audio) in msm_dp_audio_copy_management_sdp() argument
106 msm_dp_write_link(audio, MMSS_DP_AUDIO_COPYMANAGEMENT_0, header[0]); in msm_dp_audio_copy_management_sdp()
107 msm_dp_write_link(audio, MMSS_DP_AUDIO_COPYMANAGEMENT_1, header[1]); in msm_dp_audio_copy_management_sdp()
110 static void msm_dp_audio_isrc_sdp(struct msm_dp_audio_private *audio) in msm_dp_audio_isrc_sdp() argument
122 reg = msm_dp_read_link(audio, MMSS_DP_AUDIO_ISRC_1); in msm_dp_audio_isrc_sdp()
127 msm_dp_write_link(audio, MMSS_DP_AUDIO_ISRC_0, header[0]); in msm_dp_audio_isrc_sdp()
128 msm_dp_write_link(audio, MMSS_DP_AUDIO_ISRC_1, header[1]); in msm_dp_audio_isrc_sdp()
131 static void msm_dp_audio_config_sdp(struct msm_dp_audio_private *audio) in msm_dp_audio_config_sdp() argument
135 sdp_cfg = msm_dp_read_link(audio, MMSS_DP_SDP_CFG); in msm_dp_audio_config_sdp()
147 drm_dbg_dp(audio->drm_dev, "sdp_cfg = 0x%x\n", sdp_cfg); in msm_dp_audio_config_sdp()
149 msm_dp_write_link(audio, MMSS_DP_SDP_CFG, sdp_cfg); in msm_dp_audio_config_sdp()
151 sdp_cfg2 = msm_dp_read_link(audio, MMSS_DP_SDP_CFG2); in msm_dp_audio_config_sdp()
157 drm_dbg_dp(audio->drm_dev, "sdp_cfg2 = 0x%x\n", sdp_cfg2); in msm_dp_audio_config_sdp()
159 msm_dp_write_link(audio, MMSS_DP_SDP_CFG2, sdp_cfg2); in msm_dp_audio_config_sdp()
162 static void msm_dp_audio_setup_sdp(struct msm_dp_audio_private *audio) in msm_dp_audio_setup_sdp() argument
164 msm_dp_audio_config_sdp(audio); in msm_dp_audio_setup_sdp()
166 msm_dp_audio_stream_sdp(audio); in msm_dp_audio_setup_sdp()
167 msm_dp_audio_timestamp_sdp(audio); in msm_dp_audio_setup_sdp()
168 msm_dp_audio_infoframe_sdp(audio); in msm_dp_audio_setup_sdp()
169 msm_dp_audio_copy_management_sdp(audio); in msm_dp_audio_setup_sdp()
170 msm_dp_audio_isrc_sdp(audio); in msm_dp_audio_setup_sdp()
173 static void msm_dp_audio_setup_acr(struct msm_dp_audio_private *audio) in msm_dp_audio_setup_acr() argument
177 switch (audio->msm_dp_audio.bw_code) { in msm_dp_audio_setup_acr()
191 drm_dbg_dp(audio->drm_dev, "Unknown link rate\n"); in msm_dp_audio_setup_acr()
198 drm_dbg_dp(audio->drm_dev, "select: %#x, acr_ctrl: %#x\n", in msm_dp_audio_setup_acr()
201 msm_dp_write_link(audio, MMSS_DP_AUDIO_ACR_CTRL, acr_ctrl); in msm_dp_audio_setup_acr()
204 static void msm_dp_audio_safe_to_exit_level(struct msm_dp_audio_private *audio) in msm_dp_audio_safe_to_exit_level() argument
208 switch (audio->msm_dp_audio.lane_count) { in msm_dp_audio_safe_to_exit_level()
220 drm_dbg_dp(audio->drm_dev, in msm_dp_audio_safe_to_exit_level()
226 mainlink_levels = msm_dp_read_link(audio, REG_DP_MAINLINK_LEVELS); in msm_dp_audio_safe_to_exit_level()
230 drm_dbg_dp(audio->drm_dev, in msm_dp_audio_safe_to_exit_level()
234 msm_dp_write_link(audio, REG_DP_MAINLINK_LEVELS, mainlink_levels); in msm_dp_audio_safe_to_exit_level()
237 static void msm_dp_audio_enable(struct msm_dp_audio_private *audio, bool enable) in msm_dp_audio_enable() argument
241 audio_ctrl = msm_dp_read_link(audio, MMSS_DP_AUDIO_CFG); in msm_dp_audio_enable()
248 drm_dbg_dp(audio->drm_dev, "dp_audio_cfg = 0x%x\n", audio_ctrl); in msm_dp_audio_enable()
250 msm_dp_write_link(audio, MMSS_DP_AUDIO_CFG, audio_ctrl); in msm_dp_audio_enable()
251 /* make sure audio engine is disabled */ in msm_dp_audio_enable()
274 struct msm_dp_audio_private *audio; in msm_dp_audio_prepare() local
282 * unclocked access as the audio subsystem relies on the DP in msm_dp_audio_prepare()
292 audio = msm_dp_audio_get_data(msm_dp_display); in msm_dp_audio_prepare()
293 if (IS_ERR(audio)) { in msm_dp_audio_prepare()
294 rc = PTR_ERR(audio); in msm_dp_audio_prepare()
298 audio->channels = params->channels; in msm_dp_audio_prepare()
300 msm_dp_audio_setup_sdp(audio); in msm_dp_audio_prepare()
301 msm_dp_audio_setup_acr(audio); in msm_dp_audio_prepare()
302 msm_dp_audio_safe_to_exit_level(audio); in msm_dp_audio_prepare()
303 msm_dp_audio_enable(audio, true); in msm_dp_audio_prepare()
314 struct msm_dp_audio_private *audio; in msm_dp_audio_shutdown() local
318 audio = msm_dp_audio_get_data(msm_dp_display); in msm_dp_audio_shutdown()
319 if (IS_ERR(audio)) { in msm_dp_audio_shutdown()
320 DRM_ERROR("failed to get audio data\n"); in msm_dp_audio_shutdown()
325 * if audio was not enabled there is no need in msm_dp_audio_shutdown()
328 * access when audio subsystem calls this without DP being in msm_dp_audio_shutdown()
335 msm_dp_audio_enable(audio, false); in msm_dp_audio_shutdown()
344 struct msm_dp_audio_private *audio; in msm_dp_audio_get() local
353 audio = devm_kzalloc(&pdev->dev, sizeof(*audio), GFP_KERNEL); in msm_dp_audio_get()
354 if (!audio) { in msm_dp_audio_get()
359 audio->pdev = pdev; in msm_dp_audio_get()
360 audio->link_base = link_base; in msm_dp_audio_get()
362 msm_dp_audio = &audio->msm_dp_audio; in msm_dp_audio_get()
371 struct msm_dp_audio_private *audio; in msm_dp_audio_put() local
376 audio = container_of(msm_dp_audio, struct msm_dp_audio_private, msm_dp_audio); in msm_dp_audio_put()
378 devm_kfree(&audio->pdev->dev, audio); in msm_dp_audio_put()