From: Ben Skeggs <bske...@redhat.com>

This just adds a hook for RM to use, HW paths remain untouched, but
should probably be cleaned up to use this too at some point.

Signed-off-by: Ben Skeggs <bske...@redhat.com>
Reviewed-by: Lyude Paul <ly...@redhat.com>
Acked-by: Danilo Krummrich <m...@dakr.org>
Signed-off-by: Lyude Paul <ly...@redhat.com>
---
 drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h   |  1 +
 drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c | 10 +++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h 
b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
index 6e750890bcc93..8686e5c044a5d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
@@ -74,6 +74,7 @@ struct nvkm_ior_func {
                             bool scrambling_low_rates);
                void (*infoframe_avi)(struct nvkm_ior *, int head, void *data, 
u32 size);
                void (*infoframe_vsi)(struct nvkm_ior *, int head, void *data, 
u32 size);
+               void (*audio)(struct nvkm_ior *, int head, bool enable);
        } *hdmi;
 
        const struct nvkm_ior_func_dp {
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c 
b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
index ad75dc5c50cf7..7574f22006441 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
@@ -99,12 +99,20 @@ nvkm_uoutp_mthd_hda_eld(struct nvkm_outp *outp, void *argv, 
u32 argc)
        if (argc && args->v0.data[0]) {
                if (outp->info.type == DCB_OUTPUT_DP)
                        ior->func->dp->audio(ior, args->v0.head, true);
+               else
+               if (ior->func->hdmi->audio)
+                       ior->func->hdmi->audio(ior, args->v0.head, true);
+
                ior->func->hda->hpd(ior, args->v0.head, true);
                ior->func->hda->eld(ior, args->v0.head, args->v0.data, argc);
        } else {
+               ior->func->hda->hpd(ior, args->v0.head, false);
+
                if (outp->info.type == DCB_OUTPUT_DP)
                        ior->func->dp->audio(ior, args->v0.head, false);
-               ior->func->hda->hpd(ior, args->v0.head, false);
+               else
+               if (ior->func->hdmi->audio)
+                       ior->func->hdmi->audio(ior, args->v0.head, false);
        }
 
        return 0;
-- 
2.41.0

Reply via email to