drm/nouveau/disp: add hdmi audio hal function
authorBen Skeggs <bskeggs@redhat.com>
Tue, 19 Sep 2023 21:56:20 +0000 (17:56 -0400)
committerLyude Paul <lyude@redhat.com>
Tue, 19 Sep 2023 22:22:10 +0000 (18:22 -0400)
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 <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Acked-by: Danilo Krummrich <me@dakr.org>
Signed-off-by: Lyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230919220442.202488-26-lyude@redhat.com
drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h
drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c

index 6e750890bcc936c6e019c2c9814ac9600e93b42f..8686e5c044a5dd778f2adf53aef7e2e8aea358a0 100644 (file)
@@ -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 {
index ad75dc5c50cf7ef5bb2fbf1df2962e6fd3ab48b7..7574f220064417ed4d2e09cd3b95e61985953610 100644 (file)
@@ -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;