···1277127712781278 ret = snd_soc_tplg_component_load(component, &audioreach_tplg_ops, fw);12791279 if (ret < 0) {12801280- dev_err(dev, "tplg component load failed%d\n", ret);12811281- ret = -EINVAL;12801280+ if (ret != -EPROBE_DEFER)12811281+ dev_err(dev, "tplg component load failed: %d\n", ret);12821282 }1283128312841284 release_firmware(fw);
+4-2
sound/soc/soc-core.c
···19881988 /* probe all components used by DAI links on this card */19891989 ret = soc_probe_link_components(card);19901990 if (ret < 0) {19911991- dev_err(card->dev,19921992- "ASoC: failed to instantiate card %d\n", ret);19911991+ if (ret != -EPROBE_DEFER) {19921992+ dev_err(card->dev,19931993+ "ASoC: failed to instantiate card %d\n", ret);19941994+ }19931995 goto probe_end;19941996 }19951997
+7-3
sound/soc/soc-topology.c
···1732173217331733 ret = snd_soc_add_pcm_runtimes(tplg->comp->card, link, 1);17341734 if (ret < 0) {17351735- dev_err(tplg->dev, "ASoC: adding FE link failed\n");17351735+ if (ret != -EPROBE_DEFER)17361736+ dev_err(tplg->dev, "ASoC: adding FE link failed\n");17361737 goto err;17371738 }17381739···24932492 /* load the header object */24942493 ret = soc_tplg_load_header(tplg, hdr);24952494 if (ret < 0) {24962496- dev_err(tplg->dev,24972497- "ASoC: topology: could not load header: %d\n", ret);24952495+ if (ret != -EPROBE_DEFER) {24962496+ dev_err(tplg->dev,24972497+ "ASoC: topology: could not load header: %d\n",24982498+ ret);24992499+ }24982500 return ret;24992501 }25002502
+7-3
sound/soc/sof/amd/acp.c
···217217 unsigned int image_length)218218{219219 struct snd_sof_dev *sdev = adata->dev;220220+ const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata);220221 unsigned int tx_count, fw_qualifier, val;221222 int ret;222223···252251 return ret;253252 }254253255255- ret = psp_send_cmd(adata, MBOX_ACP_SHA_DMA_COMMAND);256256- if (ret)257257- return ret;254254+ /* psp_send_cmd only required for renoir platform (rev - 3) */255255+ if (desc->rev == 3) {256256+ ret = psp_send_cmd(adata, MBOX_ACP_SHA_DMA_COMMAND);257257+ if (ret)258258+ return ret;259259+ }258260259261 ret = snd_sof_dsp_read_poll_timeout(sdev, ACP_DSP_BAR, ACP_SHA_DSP_FW_QUALIFIER,260262 fw_qualifier, fw_qualifier & DSP_FW_RUN_ENABLE,
+22-12
sound/soc/tegra/tegra210_adx.c
···22//33// tegra210_adx.c - Tegra210 ADX driver44//55-// Copyright (c) 2021 NVIDIA CORPORATION. All rights reserved.55+// Copyright (c) 2021-2023 NVIDIA CORPORATION. All rights reserved.6677#include <linux/clk.h>88#include <linux/device.h>···175175 mc = (struct soc_mixer_control *)kcontrol->private_value;176176 enabled = adx->byte_mask[mc->reg / 32] & (1 << (mc->reg % 32));177177178178+ /*179179+ * TODO: Simplify this logic to just return from bytes_map[]180180+ *181181+ * Presently below is required since bytes_map[] is182182+ * tightly packed and cannot store the control value of 256.183183+ * Byte mask state is used to know if 256 needs to be returned.184184+ * Note that for control value of 256, the put() call stores 0185185+ * in the bytes_map[] and disables the corresponding bit in186186+ * byte_mask[].187187+ */178188 if (enabled)179189 ucontrol->value.integer.value[0] = bytes_map[mc->reg];180190 else181181- ucontrol->value.integer.value[0] = 0;191191+ ucontrol->value.integer.value[0] = 256;182192183193 return 0;184194}···202192 int value = ucontrol->value.integer.value[0];203193 struct soc_mixer_control *mc =204194 (struct soc_mixer_control *)kcontrol->private_value;195195+ unsigned int mask_val = adx->byte_mask[mc->reg / 32];205196206206- if (value == bytes_map[mc->reg])197197+ if (value >= 0 && value <= 255)198198+ mask_val |= (1 << (mc->reg % 32));199199+ else200200+ mask_val &= ~(1 << (mc->reg % 32));201201+202202+ if (mask_val == adx->byte_mask[mc->reg / 32])207203 return 0;208204209209- if (value >= 0 && value <= 255) {210210- /* update byte map and enable slot */211211- bytes_map[mc->reg] = value;212212- adx->byte_mask[mc->reg / 32] |= (1 << (mc->reg % 32));213213- } else {214214- /* reset byte map and disable slot */215215- bytes_map[mc->reg] = 0;216216- adx->byte_mask[mc->reg / 32] &= ~(1 << (mc->reg % 32));217217- }205205+ /* Update byte map and slot */206206+ bytes_map[mc->reg] = value % 256;207207+ adx->byte_mask[mc->reg / 32] = mask_val;218208219209 return 1;220210}
+22-18
sound/soc/tegra/tegra210_amx.c
···22//33// tegra210_amx.c - Tegra210 AMX driver44//55-// Copyright (c) 2021 NVIDIA CORPORATION. All rights reserved.55+// Copyright (c) 2021-2023 NVIDIA CORPORATION. All rights reserved.6677#include <linux/clk.h>88#include <linux/device.h>···203203 else204204 enabled = amx->byte_mask[0] & (1 << reg);205205206206+ /*207207+ * TODO: Simplify this logic to just return from bytes_map[]208208+ *209209+ * Presently below is required since bytes_map[] is210210+ * tightly packed and cannot store the control value of 256.211211+ * Byte mask state is used to know if 256 needs to be returned.212212+ * Note that for control value of 256, the put() call stores 0213213+ * in the bytes_map[] and disables the corresponding bit in214214+ * byte_mask[].215215+ */206216 if (enabled)207217 ucontrol->value.integer.value[0] = bytes_map[reg];208218 else209209- ucontrol->value.integer.value[0] = 0;219219+ ucontrol->value.integer.value[0] = 256;210220211221 return 0;212222}···231221 unsigned char *bytes_map = (unsigned char *)&amx->map;232222 int reg = mc->reg;233223 int value = ucontrol->value.integer.value[0];224224+ unsigned int mask_val = amx->byte_mask[reg / 32];234225235235- if (value == bytes_map[reg])226226+ if (value >= 0 && value <= 255)227227+ mask_val |= (1 << (reg % 32));228228+ else229229+ mask_val &= ~(1 << (reg % 32));230230+231231+ if (mask_val == amx->byte_mask[reg / 32])236232 return 0;237233238238- if (value >= 0 && value <= 255) {239239- /* Update byte map and enable slot */240240- bytes_map[reg] = value;241241- if (reg > 31)242242- amx->byte_mask[1] |= (1 << (reg - 32));243243- else244244- amx->byte_mask[0] |= (1 << reg);245245- } else {246246- /* Reset byte map and disable slot */247247- bytes_map[reg] = 0;248248- if (reg > 31)249249- amx->byte_mask[1] &= ~(1 << (reg - 32));250250- else251251- amx->byte_mask[0] &= ~(1 << reg);252252- }234234+ /* Update byte map and slot */235235+ bytes_map[reg] = value % 256;236236+ amx->byte_mask[reg / 32] = mask_val;253237254238 return 1;255239}