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

Commit 939c18a8 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge 07145f7e on remote branch

Change-Id: I1602c8fbb83bdd0034d1c565bb21dfaafcf591a8
parents 3ecec726 07145f7e
Loading
Loading
Loading
Loading
+2 −19
Original line number Diff line number Diff line
@@ -509,7 +509,6 @@ static int va_macro_mclk_event(struct snd_soc_dapm_widget *w,
	int ret = 0;
	struct device *va_dev = NULL;
	struct va_macro_priv *va_priv = NULL;
	int clk_src = 0;

	if (!va_macro_get_data(component, &va_dev, &va_priv, __func__))
		return -EINVAL;
@@ -531,22 +530,6 @@ static int va_macro_mclk_event(struct snd_soc_dapm_widget *w,
		break;
	case SND_SOC_DAPM_POST_PMD:
		if (va_priv->lpi_enable) {
			if (va_priv->version == BOLERO_VERSION_2_1) {
				if (va_priv->swr_ctrl_data) {
					clk_src = CLK_SRC_TX_RCG;
					ret = swrm_wcd_notify(
					va_priv->swr_ctrl_data[0].va_swr_pdev,
					SWR_REQ_CLK_SWITCH, &clk_src);
					if (ret)
						dev_dbg(va_dev,
					"%s: clock switch failed\n",
						__func__);
				}
			} else if (bolero_tx_clk_switch(component,
					CLK_SRC_TX_RCG)) {
				dev_dbg(va_dev, "%s: clock switch failed\n",
					__func__);
			}
			va_macro_mclk_enable(va_priv, 0, true);
		} else {
			bolero_tx_mclk_enable(component, 0);
@@ -1919,7 +1902,7 @@ static const struct snd_soc_dapm_widget va_macro_dapm_widgets_v2[] = {
		VA_MACRO_AIF3_CAP, 0,
		va_aif3_cap_mixer_v2, ARRAY_SIZE(va_aif3_cap_mixer_v2)),

	SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -1, SND_SOC_NOPM, 0, 0,
	SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -2, SND_SOC_NOPM, 0, 0,
			      va_macro_swr_pwr_event_v2,
			      SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),

@@ -1961,7 +1944,7 @@ static const struct snd_soc_dapm_widget va_macro_dapm_widgets_v3[] = {
			   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
			   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),

	SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -1, SND_SOC_NOPM, 0, 0,
	SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -2, SND_SOC_NOPM, 0, 0,
			      va_macro_swr_pwr_event,
			      SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
};
+31 −2
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 */

#include <linux/kernel.h>
@@ -33,6 +33,8 @@

#define ADSP_STATE_READY_TIMEOUT_MS 3000

#define ADSP_MODULES_READY_AVS_STATE 5

#define APR_ENOTREADY 10
#define MEMPOOL_ID_MASK 0xFF
#define MDF_MAP_TOKEN 0xF000
@@ -935,12 +937,39 @@ int32_t q6core_avcs_load_unload_modules(struct avcs_load_unload_modules_payload
	size_t packet_size = 0,  payload_size = 0;
	struct avcs_cmd_dynamic_modules *mod = NULL;
	int num_modules;
	unsigned long timeout;

	if (payload == NULL) {
		pr_err("%s: payload is null\n", __func__);
		return -EINVAL;
	}

	if ((q6core_lcl.avs_state != ADSP_MODULES_READY_AVS_STATE)
		&& (preload_type == AVCS_LOAD_MODULES)) {
		timeout = jiffies +
			msecs_to_jiffies(ADSP_STATE_READY_TIMEOUT_MS);

		do {
			q6core_is_adsp_ready();
			if (q6core_lcl.param == ADSP_MODULES_READY_AVS_STATE) {
				pr_debug("%s: ADSP state up with all modules loaded\n",
					 __func__);
				q6core_lcl.avs_state = ADSP_MODULES_READY_AVS_STATE;
				break;
			}

			/*
			 * ADSP will be coming up after boot up and AVS might
			 * not be fully up with all modules when the control reaches here.
			 * So, wait for 50msec before checking ADSP state again.
			 */
			msleep(50);
		} while (time_after(timeout, jiffies));

		if (q6core_lcl.param != ADSP_MODULES_READY_AVS_STATE)
			pr_err("%s: all modules might be not loaded yet on ADSP\n",
				__func__);
	}
	mutex_lock(&(q6core_lcl.cmd_lock));
	num_modules = payload->num_modules;
	ocm_core_open();
@@ -1951,7 +1980,7 @@ static int q6core_is_avs_up(int32_t *avs_state)
		msleep(50);
	} while (time_after(timeout, jiffies));

	*avs_state = adsp_ready;
	*avs_state = q6core_lcl.param;
	pr_debug("%s: ADSP Audio is %s\n", __func__,
	       adsp_ready ? "ready" : "not ready");