ASoC: Fixes for v5.15
A crop of mostly device specific fixes that have been applied since the merge window, nothing particularly standout here. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmFIe80ACgkQJNaLcl1U h9DaFAf6A4VlW7tUXJE+JP7eQGEjxhep84wDnSWJDGFccdbGINVumBTmirzutguU dhq0NRCZgSDfBqKKP7f6l27yc/2Ei35wN7yK2VzIIdtqtcZ+Ho3ipFpvdqDyzbuf DriMTP83qEs9AJve+GMePwB8aUyGj7QKjkIHXj65FsLI+c2KBQkNf127ydwd4faq UrFCuYrs11bD0ohx8GDDbdsmz2jriUZBfaesPwuzfy/O/59caaKqt9Uq1qUxqOJ7 3Gx1xB3mBhg005dezHgAED9coFW2TSAetIcEMnPrHBqzx8MB6DomcK1+Y8pRbekC 4NoZrRxuTm2o5TGEwi/XPlCnSb7CAw== =29Gi -----END PGP SIGNATURE----- Merge tag 'asoc-fix-v5.15-rc2' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus ASoC: Fixes for v5.15 A crop of mostly device specific fixes that have been applied since the merge window, nothing particularly standout here.
This commit is contained in:
commit
77ff9e7be0
|
@ -17891,7 +17891,8 @@ M: Olivier Moysan <olivier.moysan@foss.st.com>
|
|||
M: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/iio/adc/st,stm32-*.yaml
|
||||
F: Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.yaml
|
||||
F: Documentation/devicetree/bindings/sound/st,stm32-*.yaml
|
||||
F: sound/soc/stm/
|
||||
|
||||
STM32 TIMER/LPTIMER DRIVERS
|
||||
|
|
|
@ -1073,6 +1073,16 @@ static int fsl_esai_probe(struct platform_device *pdev)
|
|||
if (ret < 0)
|
||||
goto err_pm_get_sync;
|
||||
|
||||
/*
|
||||
* Register platform component before registering cpu dai for there
|
||||
* is not defer probe for platform component in snd_soc_add_pcm_runtime().
|
||||
*/
|
||||
ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
|
||||
goto err_pm_get_sync;
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_esai_component,
|
||||
&fsl_esai_dai, 1);
|
||||
if (ret) {
|
||||
|
@ -1082,12 +1092,6 @@ static int fsl_esai_probe(struct platform_device *pdev)
|
|||
|
||||
INIT_WORK(&esai_priv->work, fsl_esai_hw_reset);
|
||||
|
||||
ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret);
|
||||
goto err_pm_get_sync;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
err_pm_get_sync:
|
||||
|
|
|
@ -737,18 +737,23 @@ static int fsl_micfil_probe(struct platform_device *pdev)
|
|||
pm_runtime_enable(&pdev->dev);
|
||||
regcache_cache_only(micfil->regmap, true);
|
||||
|
||||
/*
|
||||
* Register platform component before registering cpu dai for there
|
||||
* is not defer probe for platform component in snd_soc_add_pcm_runtime().
|
||||
*/
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to pcm register\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_micfil_component,
|
||||
&fsl_micfil_dai, 1);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to register component %s\n",
|
||||
fsl_micfil_component.name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret)
|
||||
dev_err(&pdev->dev, "failed to pcm register\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1152,11 +1152,10 @@ static int fsl_sai_probe(struct platform_device *pdev)
|
|||
if (ret < 0)
|
||||
goto err_pm_get_sync;
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component,
|
||||
&sai->cpu_dai_drv, 1);
|
||||
if (ret)
|
||||
goto err_pm_get_sync;
|
||||
|
||||
/*
|
||||
* Register platform component before registering cpu dai for there
|
||||
* is not defer probe for platform component in snd_soc_add_pcm_runtime().
|
||||
*/
|
||||
if (sai->soc_data->use_imx_pcm) {
|
||||
ret = imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE);
|
||||
if (ret)
|
||||
|
@ -1167,6 +1166,11 @@ static int fsl_sai_probe(struct platform_device *pdev)
|
|||
goto err_pm_get_sync;
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component,
|
||||
&sai->cpu_dai_drv, 1);
|
||||
if (ret)
|
||||
goto err_pm_get_sync;
|
||||
|
||||
return ret;
|
||||
|
||||
err_pm_get_sync:
|
||||
|
|
|
@ -1434,6 +1434,16 @@ static int fsl_spdif_probe(struct platform_device *pdev)
|
|||
pm_runtime_enable(&pdev->dev);
|
||||
regcache_cache_only(spdif_priv->regmap, true);
|
||||
|
||||
/*
|
||||
* Register platform component before registering cpu dai for there
|
||||
* is not defer probe for platform component in snd_soc_add_pcm_runtime().
|
||||
*/
|
||||
ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
|
||||
if (ret) {
|
||||
dev_err_probe(&pdev->dev, ret, "imx_pcm_dma_init failed\n");
|
||||
goto err_pm_disable;
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_spdif_component,
|
||||
&spdif_priv->cpu_dai_drv, 1);
|
||||
if (ret) {
|
||||
|
@ -1441,12 +1451,6 @@ static int fsl_spdif_probe(struct platform_device *pdev)
|
|||
goto err_pm_disable;
|
||||
}
|
||||
|
||||
ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE);
|
||||
if (ret) {
|
||||
dev_err_probe(&pdev->dev, ret, "imx_pcm_dma_init failed\n");
|
||||
goto err_pm_disable;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
err_pm_disable:
|
||||
|
|
|
@ -1215,18 +1215,23 @@ static int fsl_xcvr_probe(struct platform_device *pdev)
|
|||
pm_runtime_enable(dev);
|
||||
regcache_cache_only(xcvr->regmap, true);
|
||||
|
||||
/*
|
||||
* Register platform component before registering cpu dai for there
|
||||
* is not defer probe for platform component in snd_soc_add_pcm_runtime().
|
||||
*/
|
||||
ret = devm_snd_dmaengine_pcm_register(dev, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to pcm register\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_component(dev, &fsl_xcvr_comp,
|
||||
&fsl_xcvr_dai, 1);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to register component %s\n",
|
||||
fsl_xcvr_comp.name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_snd_dmaengine_pcm_register(dev, NULL, 0);
|
||||
if (ret)
|
||||
dev_err(dev, "failed to pcm register\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -929,6 +929,11 @@ static int create_sdw_dailink(struct snd_soc_card *card,
|
|||
cpus + *cpu_id, cpu_dai_num,
|
||||
codecs, codec_num,
|
||||
NULL, &sdw_ops);
|
||||
/*
|
||||
* SoundWire DAILINKs use 'stream' functions and Bank Switch operations
|
||||
* based on wait_for_completion(), tag them as 'nonatomic'.
|
||||
*/
|
||||
dai_links[*be_index].nonatomic = true;
|
||||
|
||||
ret = set_codec_init_func(card, link, dai_links + (*be_index)++,
|
||||
playback, group_id);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config SND_SOC_MEDIATEK
|
||||
tristate
|
||||
select REGMAP_MMIO
|
||||
|
||||
config SND_SOC_MT2701
|
||||
tristate "ASoC support for Mediatek MT2701 chip"
|
||||
|
@ -188,7 +189,9 @@ config SND_SOC_MT8192_MT6359_RT1015_RT5682
|
|||
config SND_SOC_MT8195
|
||||
tristate "ASoC support for Mediatek MT8195 chip"
|
||||
depends on ARCH_MEDIATEK || COMPILE_TEST
|
||||
depends on COMMON_CLK
|
||||
select SND_SOC_MEDIATEK
|
||||
select MFD_SYSCON if SND_SOC_MT6359
|
||||
help
|
||||
This adds ASoC platform driver support for Mediatek MT8195 chip
|
||||
that can be used with other codecs.
|
||||
|
|
|
@ -334,9 +334,11 @@ int mtk_afe_suspend(struct snd_soc_component *component)
|
|||
devm_kcalloc(dev, afe->reg_back_up_list_num,
|
||||
sizeof(unsigned int), GFP_KERNEL);
|
||||
|
||||
for (i = 0; i < afe->reg_back_up_list_num; i++)
|
||||
regmap_read(regmap, afe->reg_back_up_list[i],
|
||||
&afe->reg_back_up[i]);
|
||||
if (afe->reg_back_up) {
|
||||
for (i = 0; i < afe->reg_back_up_list_num; i++)
|
||||
regmap_read(regmap, afe->reg_back_up_list[i],
|
||||
&afe->reg_back_up[i]);
|
||||
}
|
||||
|
||||
afe->suspended = true;
|
||||
afe->runtime_suspend(dev);
|
||||
|
@ -356,12 +358,13 @@ int mtk_afe_resume(struct snd_soc_component *component)
|
|||
|
||||
afe->runtime_resume(dev);
|
||||
|
||||
if (!afe->reg_back_up)
|
||||
if (!afe->reg_back_up) {
|
||||
dev_dbg(dev, "%s no reg_backup\n", __func__);
|
||||
|
||||
for (i = 0; i < afe->reg_back_up_list_num; i++)
|
||||
mtk_regmap_write(regmap, afe->reg_back_up_list[i],
|
||||
afe->reg_back_up[i]);
|
||||
} else {
|
||||
for (i = 0; i < afe->reg_back_up_list_num; i++)
|
||||
mtk_regmap_write(regmap, afe->reg_back_up_list[i],
|
||||
afe->reg_back_up[i]);
|
||||
}
|
||||
|
||||
afe->suspended = false;
|
||||
return 0;
|
||||
|
|
|
@ -424,8 +424,8 @@ static int mt8195_hdmi_codec_init(struct snd_soc_pcm_runtime *rtd)
|
|||
return snd_soc_component_set_jack(cmpnt_codec, &priv->hdmi_jack, NULL);
|
||||
}
|
||||
|
||||
static int mt8195_hdmitx_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params)
|
||||
static int mt8195_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
struct snd_pcm_hw_params *params)
|
||||
|
||||
{
|
||||
/* fix BE i2s format to 32bit, clean param mask first */
|
||||
|
@ -902,7 +902,7 @@ static struct snd_soc_dai_link mt8195_mt6359_rt1019_rt5682_dai_links[] = {
|
|||
.no_pcm = 1,
|
||||
.dpcm_playback = 1,
|
||||
.ops = &mt8195_dptx_ops,
|
||||
.be_hw_params_fixup = mt8195_hdmitx_dptx_hw_params_fixup,
|
||||
.be_hw_params_fixup = mt8195_dptx_hw_params_fixup,
|
||||
SND_SOC_DAILINK_REG(DPTX_BE),
|
||||
},
|
||||
[DAI_LINK_ETDM1_IN_BE] = {
|
||||
|
@ -953,7 +953,6 @@ static struct snd_soc_dai_link mt8195_mt6359_rt1019_rt5682_dai_links[] = {
|
|||
SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS,
|
||||
.dpcm_playback = 1,
|
||||
.be_hw_params_fixup = mt8195_hdmitx_dptx_hw_params_fixup,
|
||||
SND_SOC_DAILINK_REG(ETDM3_OUT_BE),
|
||||
},
|
||||
[DAI_LINK_PCM1_BE] = {
|
||||
|
|
|
@ -371,7 +371,6 @@ int snd_sof_device_remove(struct device *dev)
|
|||
dev_warn(dev, "error: %d failed to prepare DSP for device removal",
|
||||
ret);
|
||||
|
||||
snd_sof_fw_unload(sdev);
|
||||
snd_sof_ipc_free(sdev);
|
||||
snd_sof_free_debug(sdev);
|
||||
snd_sof_free_trace(sdev);
|
||||
|
@ -394,8 +393,7 @@ int snd_sof_device_remove(struct device *dev)
|
|||
snd_sof_remove(sdev);
|
||||
|
||||
/* release firmware */
|
||||
release_firmware(pdata->fw);
|
||||
pdata->fw = NULL;
|
||||
snd_sof_fw_unload(sdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -365,7 +365,14 @@ static int imx8_remove(struct snd_sof_dev *sdev)
|
|||
/* on i.MX8 there is 1 to 1 match between type and BAR idx */
|
||||
static int imx8_get_bar_index(struct snd_sof_dev *sdev, u32 type)
|
||||
{
|
||||
return type;
|
||||
/* Only IRAM and SRAM bars are valid */
|
||||
switch (type) {
|
||||
case SOF_FW_BLK_TYPE_IRAM:
|
||||
case SOF_FW_BLK_TYPE_SRAM:
|
||||
return type;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
static void imx8_ipc_msg_data(struct snd_sof_dev *sdev,
|
||||
|
|
|
@ -228,7 +228,14 @@ static int imx8m_remove(struct snd_sof_dev *sdev)
|
|||
/* on i.MX8 there is 1 to 1 match between type and BAR idx */
|
||||
static int imx8m_get_bar_index(struct snd_sof_dev *sdev, u32 type)
|
||||
{
|
||||
return type;
|
||||
/* Only IRAM and SRAM bars are valid */
|
||||
switch (type) {
|
||||
case SOF_FW_BLK_TYPE_IRAM:
|
||||
case SOF_FW_BLK_TYPE_SRAM:
|
||||
return type;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
static void imx8m_ipc_msg_data(struct snd_sof_dev *sdev,
|
||||
|
|
|
@ -729,10 +729,10 @@ int snd_sof_load_firmware_raw(struct snd_sof_dev *sdev)
|
|||
ret = request_firmware(&plat_data->fw, fw_filename, sdev->dev);
|
||||
|
||||
if (ret < 0) {
|
||||
dev_err(sdev->dev, "error: request firmware %s failed err: %d\n",
|
||||
fw_filename, ret);
|
||||
dev_err(sdev->dev,
|
||||
"you may need to download the firmware from https://github.com/thesofproject/sof-bin/\n");
|
||||
"error: sof firmware file is missing, you might need to\n");
|
||||
dev_err(sdev->dev,
|
||||
" download it from https://github.com/thesofproject/sof-bin/\n");
|
||||
goto err;
|
||||
} else {
|
||||
dev_dbg(sdev->dev, "request_firmware %s successful\n",
|
||||
|
@ -880,5 +880,7 @@ EXPORT_SYMBOL(snd_sof_run_firmware);
|
|||
void snd_sof_fw_unload(struct snd_sof_dev *sdev)
|
||||
{
|
||||
/* TODO: support module unloading at runtime */
|
||||
release_firmware(sdev->pdata->fw);
|
||||
sdev->pdata->fw = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(snd_sof_fw_unload);
|
||||
|
|
|
@ -530,7 +530,6 @@ void snd_sof_trace_notify_for_error(struct snd_sof_dev *sdev)
|
|||
return;
|
||||
|
||||
if (sdev->dtrace_is_enabled) {
|
||||
dev_err(sdev->dev, "error: waking up any trace sleepers\n");
|
||||
sdev->dtrace_error = true;
|
||||
wake_up(&sdev->trace_sleep);
|
||||
}
|
||||
|
|
|
@ -122,9 +122,9 @@ static void xtensa_stack(struct snd_sof_dev *sdev, void *oops, u32 *stack,
|
|||
* 0x0049fbb0: 8000f2d0 0049fc00 6f6c6c61 00632e63
|
||||
*/
|
||||
for (i = 0; i < stack_words; i += 4) {
|
||||
hex_dump_to_buffer(stack + i * 4, 16, 16, 4,
|
||||
hex_dump_to_buffer(stack + i, 16, 16, 4,
|
||||
buf, sizeof(buf), false);
|
||||
dev_err(sdev->dev, "0x%08x: %s\n", stack_ptr + i, buf);
|
||||
dev_err(sdev->dev, "0x%08x: %s\n", stack_ptr + i * 4, buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue