drm/amd/display: support spdif
authorCharlene Liu <charlene.liu@amd.com>
Fri, 2 Aug 2019 18:49:58 +0000 (14:49 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 23 Aug 2019 16:42:05 +0000 (11:42 -0500)
[Description]
port spdif fix to staging:
 spdif hardwired to afmt inst 1.
 spdif func pointer
 spdif resource allocation (reserve last audio endpoint for spdif only)

Signed-off-by: Charlene Liu <charlene.liu@amd.com>
Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_resource.c
drivers/gpu/drm/amd/display/dc/dce/dce_audio.c

index 30bae60918ea067f96ea6225ae8708a0fb6a46ad..ac908141b3950a44f9c6d641836b7a381f4b5d10 100644 (file)
@@ -262,12 +262,10 @@ bool resource_construct(
                                DC_ERR("DC: failed to create audio!\n");
                                return false;
                        }
-
                        if (!aud->funcs->endpoint_valid(aud)) {
                                aud->funcs->destroy(&aud);
                                break;
                        }
-
                        pool->audios[i] = aud;
                        pool->audio_count++;
                }
@@ -1621,24 +1619,25 @@ static struct audio *find_first_free_audio(
                const struct resource_pool *pool,
                enum engine_id id)
 {
-       int i;
-       for (i = 0; i < pool->audio_count; i++) {
+       int i, available_audio_count;
+
+       available_audio_count = pool->audio_count;
+
+       for (i = 0; i < available_audio_count; i++) {
                if ((res_ctx->is_audio_acquired[i] == false) && (res_ctx->is_stream_enc_acquired[i] == true)) {
                        /*we have enough audio endpoint, find the matching inst*/
                        if (id != i)
                                continue;
-
                        return pool->audios[i];
                }
        }
 
-    /* use engine id to find free audio */
-       if ((id < pool->audio_count) && (res_ctx->is_audio_acquired[id] == false)) {
+       /* use engine id to find free audio */
+       if ((id < available_audio_count) && (res_ctx->is_audio_acquired[id] == false)) {
                return pool->audios[id];
        }
-
        /*not found the matching one, first come first serve*/
-       for (i = 0; i < pool->audio_count; i++) {
+       for (i = 0; i < available_audio_count; i++) {
                if (res_ctx->is_audio_acquired[i] == false) {
                        return pool->audios[i];
                }
index 8d83708f349576217386da079d342fbc1a71771f..5a35495bc11db229a5dc4d194751111fb7a7f84f 100644 (file)
@@ -613,6 +613,8 @@ void dce_aud_az_configure(
 
        AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_SINK_INFO1,
                value);
+       DC_LOG_HW_AUDIO("\n\tAUDIO:az_configure: index: %u data, 0x%x, displayName %s: \n",
+               audio->inst, value, audio_info->display_name);
 
        /*
        *write the port ID:
@@ -922,7 +924,6 @@ static const struct audio_funcs funcs = {
        .az_configure = dce_aud_az_configure,
        .destroy = dce_aud_destroy,
 };
-
 void dce_aud_destroy(struct audio **audio)
 {
        struct dce_audio *aud = DCE_AUD(*audio);
@@ -953,7 +954,6 @@ struct audio *dce_audio_create(
        audio->regs = reg;
        audio->shifts = shifts;
        audio->masks = masks;
-
        return &audio->base;
 }