diff options
author | Abhinav Kumar <abhinavk@codeaurora.org> | 2020-09-12 13:49:32 -0700 |
---|---|---|
committer | Rob Clark <robdclark@chromium.org> | 2020-09-15 10:54:35 -0700 |
commit | 158b9aa74479c9979b7b4806cefdbf0c9a72ba49 (patch) | |
tree | 6768265267b788f69ada719bc8440524ee63b0e8 /drivers/gpu/drm/msm/dp/dp_display.h | |
parent | bf4a1b3127d34b0b6ee0565b31ff699b3dc9c48e (diff) | |
download | linux-158b9aa74479c9979b7b4806cefdbf0c9a72ba49.tar.gz linux-158b9aa74479c9979b7b4806cefdbf0c9a72ba49.tar.bz2 linux-158b9aa74479c9979b7b4806cefdbf0c9a72ba49.zip |
drm/msm/dp: wait for audio notification before disabling clocks
In the current implementation, there is a very small window for
the audio side to safely signal the hdmi_code_shutdown() before
the clocks are disabled.
Add some synchronization between the DP display and DP audio module
to safely disable the clocks to avoid unclocked access from audio
side.
In addition, audio side can open the sound card even if DP monitor
is not connected. Avoid programming hardware registers in this case
and bail out early.
Changes in v4:
- removed some leftover prints
Changes in v5:
- fix crash when user tries to play audio in suspended
state
Changes in v6:
- rebased on top of latest patchset of dependency
Signed-off-by: Abhinav Kumar <abhinavk@codeaurora.org>
Signed-off-by: Rob Clark <robdclark@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/msm/dp/dp_display.h')
-rw-r--r-- | drivers/gpu/drm/msm/dp/dp_display.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/dp_display.h index 5020faf360db..8b78b40bbd6c 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -15,6 +15,8 @@ struct msm_dp { struct drm_connector *connector; struct drm_encoder *encoder; bool is_connected; + bool audio_enabled; + bool power_on; hdmi_codec_plugged_cb plugged_cb; @@ -32,6 +34,7 @@ int dp_display_get_modes(struct msm_dp *dp_display, int dp_display_request_irq(struct msm_dp *dp_display); bool dp_display_check_video_test(struct msm_dp *dp_display); int dp_display_get_test_bpp(struct msm_dp *dp_display); +void dp_display_signal_audio_complete(struct msm_dp *dp_display); void __init msm_dp_pll_driver_register(void); void __exit msm_dp_pll_driver_unregister(void); |