Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f16ce291 authored by Zhou Song's avatar Zhou Song
Browse files

afe: release codec port when afe starts failed



When afe port starts failed, allocated port should
be released to avoid subsequent allocation failed.

Change-Id: If0cacce296d14135d23bf45e47de5b253372ea31
Signed-off-by: default avatarZhou Song <zhous@codeaurora.org>
parent a64a703e
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -5822,6 +5822,7 @@ static int __afe_port_start(u16 port_id, union afe_port_config *afe_config,
	enum afe_mad_type mad_type;
	uint16_t port_index;
	u32 power_mode = 0;
	u16 i;

	memset(&param_hdr, 0, sizeof(param_hdr));
	memset(&port_cfg, 0, sizeof(port_cfg));
@@ -6247,8 +6248,21 @@ static int __afe_port_start(u16 port_id, union afe_port_config *afe_config,
	ret = afe_send_cmd_port_start(port_id);

fail_cmd:
	if (ret)
	if (ret) {
		this_afe.afe_port_start_failed[port_index] = true;
		if ((codec_format != ASM_MEDIA_FMT_NONE) &&
			(cfg_type == AFE_PARAM_ID_SLIMBUS_CONFIG)) {
			if ((q6core_get_avcs_api_version_per_service(
				APRV2_IDS_SERVICE_ID_ADSP_CORE_V) >= AVCS_API_VERSION_V5)) {
				for (i = 0; i < MAX_ALLOWED_USE_CASES; i++) {
					if (pm[i] && pm[i]->port_id == port_id) {
						q6afe_unload_avcs_modules(port_id, i);
						break;
					}
				}
			}
		}
	}
	mutex_unlock(&this_afe.afe_cmd_lock);
	return ret;
}