Skip to content

Commit f2f46b8

Browse files
Kuogee Hsiehrobclark
authored andcommitted
drm/msm/dp: initialize audio_comp when audio starts
Initialize audio_comp when audio starts and wait for audio_comp at dp_display_disable(). This will take care of both dongle unplugged and display off (suspend) cases. Changes in v2: -- add dp_display_signal_audio_start() Changes in v3: -- restore dp_display_handle_plugged_change() at dp_hpd_unplug_handle(). Changes in v4: -- none Signed-off-by: Kuogee Hsieh <[email protected]> Reviewed-by: Stephen Boyd <[email protected]> Tested-by: Stephen Boyd <[email protected]> Fixes: c703d57 ("drm/msm/dp: trigger unplug event in msm_dp_display_disable") Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Rob Clark <[email protected]>
1 parent d9aa657 commit f2f46b8

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

drivers/gpu/drm/msm/dp/dp_audio.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ int dp_audio_hw_params(struct device *dev,
527527
dp_audio_setup_acr(audio);
528528
dp_audio_safe_to_exit_level(audio);
529529
dp_audio_enable(audio, true);
530+
dp_display_signal_audio_start(dp_display);
530531
dp_display->audio_enabled = true;
531532

532533
end:

drivers/gpu/drm/msm/dp/dp_display.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,15 @@ static int dp_del_event(struct dp_display_private *dp_priv, u32 event)
178178
return 0;
179179
}
180180

181+
void dp_display_signal_audio_start(struct msm_dp *dp_display)
182+
{
183+
struct dp_display_private *dp;
184+
185+
dp = container_of(dp_display, struct dp_display_private, dp_display);
186+
187+
reinit_completion(&dp->audio_comp);
188+
}
189+
181190
void dp_display_signal_audio_complete(struct msm_dp *dp_display)
182191
{
183192
struct dp_display_private *dp;
@@ -649,7 +658,6 @@ static int dp_hpd_unplug_handle(struct dp_display_private *dp, u32 data)
649658
dp_add_event(dp, EV_DISCONNECT_PENDING_TIMEOUT, 0, DP_TIMEOUT_5_SECOND);
650659

651660
/* signal the disconnect event early to ensure proper teardown */
652-
reinit_completion(&dp->audio_comp);
653661
dp_display_handle_plugged_change(g_dp_display, false);
654662

655663
dp_catalog_hpd_config_intr(dp->catalog, DP_DP_HPD_PLUG_INT_MASK |
@@ -894,7 +902,6 @@ static int dp_display_disable(struct dp_display_private *dp, u32 data)
894902
/* wait only if audio was enabled */
895903
if (dp_display->audio_enabled) {
896904
/* signal the disconnect event */
897-
reinit_completion(&dp->audio_comp);
898905
dp_display_handle_plugged_change(dp_display, false);
899906
if (!wait_for_completion_timeout(&dp->audio_comp,
900907
HZ * 5))

drivers/gpu/drm/msm/dp/dp_display.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ int dp_display_get_modes(struct msm_dp *dp_display,
3434
int dp_display_request_irq(struct msm_dp *dp_display);
3535
bool dp_display_check_video_test(struct msm_dp *dp_display);
3636
int dp_display_get_test_bpp(struct msm_dp *dp_display);
37+
void dp_display_signal_audio_start(struct msm_dp *dp_display);
3738
void dp_display_signal_audio_complete(struct msm_dp *dp_display);
3839

3940
#endif /* _DP_DISPLAY_H_ */

0 commit comments

Comments
 (0)