Commit b5a41620 authored by Charlene Liu's avatar Charlene Liu Committed by Alex Deucher
Browse files

drm/amd/display: support spdif



[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: default avatarCharlene Liu <charlene.liu@amd.com>
Reviewed-by: default avatarDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: default avatarBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a9f54ce3
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -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)) {
	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];
		}
+2 −2
Original line number Diff line number Diff line
@@ -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;
}