Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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.

+97 -51
+2 -1
MAINTAINERS
··· 17891 17891 M: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com> 17892 17892 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 17893 17893 S: Maintained 17894 - F: Documentation/devicetree/bindings/iio/adc/st,stm32-*.yaml 17894 + F: Documentation/devicetree/bindings/iio/adc/st,stm32-dfsdm-adc.yaml 17895 + F: Documentation/devicetree/bindings/sound/st,stm32-*.yaml 17895 17896 F: sound/soc/stm/ 17896 17897 17897 17898 STM32 TIMER/LPTIMER DRIVERS
+10 -6
sound/soc/fsl/fsl_esai.c
··· 1073 1073 if (ret < 0) 1074 1074 goto err_pm_get_sync; 1075 1075 1076 + /* 1077 + * Register platform component before registering cpu dai for there 1078 + * is not defer probe for platform component in snd_soc_add_pcm_runtime(). 1079 + */ 1080 + ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE); 1081 + if (ret) { 1082 + dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret); 1083 + goto err_pm_get_sync; 1084 + } 1085 + 1076 1086 ret = devm_snd_soc_register_component(&pdev->dev, &fsl_esai_component, 1077 1087 &fsl_esai_dai, 1); 1078 1088 if (ret) { ··· 1091 1081 } 1092 1082 1093 1083 INIT_WORK(&esai_priv->work, fsl_esai_hw_reset); 1094 - 1095 - ret = imx_pcm_dma_init(pdev, IMX_ESAI_DMABUF_SIZE); 1096 - if (ret) { 1097 - dev_err(&pdev->dev, "failed to init imx pcm dma: %d\n", ret); 1098 - goto err_pm_get_sync; 1099 - } 1100 1084 1101 1085 return ret; 1102 1086
+10 -5
sound/soc/fsl/fsl_micfil.c
··· 737 737 pm_runtime_enable(&pdev->dev); 738 738 regcache_cache_only(micfil->regmap, true); 739 739 740 + /* 741 + * Register platform component before registering cpu dai for there 742 + * is not defer probe for platform component in snd_soc_add_pcm_runtime(). 743 + */ 744 + ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); 745 + if (ret) { 746 + dev_err(&pdev->dev, "failed to pcm register\n"); 747 + return ret; 748 + } 749 + 740 750 ret = devm_snd_soc_register_component(&pdev->dev, &fsl_micfil_component, 741 751 &fsl_micfil_dai, 1); 742 752 if (ret) { 743 753 dev_err(&pdev->dev, "failed to register component %s\n", 744 754 fsl_micfil_component.name); 745 - return ret; 746 755 } 747 - 748 - ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); 749 - if (ret) 750 - dev_err(&pdev->dev, "failed to pcm register\n"); 751 756 752 757 return ret; 753 758 }
+9 -5
sound/soc/fsl/fsl_sai.c
··· 1152 1152 if (ret < 0) 1153 1153 goto err_pm_get_sync; 1154 1154 1155 - ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component, 1156 - &sai->cpu_dai_drv, 1); 1157 - if (ret) 1158 - goto err_pm_get_sync; 1159 - 1155 + /* 1156 + * Register platform component before registering cpu dai for there 1157 + * is not defer probe for platform component in snd_soc_add_pcm_runtime(). 1158 + */ 1160 1159 if (sai->soc_data->use_imx_pcm) { 1161 1160 ret = imx_pcm_dma_init(pdev, IMX_SAI_DMABUF_SIZE); 1162 1161 if (ret) ··· 1165 1166 if (ret) 1166 1167 goto err_pm_get_sync; 1167 1168 } 1169 + 1170 + ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component, 1171 + &sai->cpu_dai_drv, 1); 1172 + if (ret) 1173 + goto err_pm_get_sync; 1168 1174 1169 1175 return ret; 1170 1176
+10 -6
sound/soc/fsl/fsl_spdif.c
··· 1434 1434 pm_runtime_enable(&pdev->dev); 1435 1435 regcache_cache_only(spdif_priv->regmap, true); 1436 1436 1437 + /* 1438 + * Register platform component before registering cpu dai for there 1439 + * is not defer probe for platform component in snd_soc_add_pcm_runtime(). 1440 + */ 1441 + ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE); 1442 + if (ret) { 1443 + dev_err_probe(&pdev->dev, ret, "imx_pcm_dma_init failed\n"); 1444 + goto err_pm_disable; 1445 + } 1446 + 1437 1447 ret = devm_snd_soc_register_component(&pdev->dev, &fsl_spdif_component, 1438 1448 &spdif_priv->cpu_dai_drv, 1); 1439 1449 if (ret) { 1440 1450 dev_err(&pdev->dev, "failed to register DAI: %d\n", ret); 1441 - goto err_pm_disable; 1442 - } 1443 - 1444 - ret = imx_pcm_dma_init(pdev, IMX_SPDIF_DMABUF_SIZE); 1445 - if (ret) { 1446 - dev_err_probe(&pdev->dev, ret, "imx_pcm_dma_init failed\n"); 1447 1451 goto err_pm_disable; 1448 1452 } 1449 1453
+10 -5
sound/soc/fsl/fsl_xcvr.c
··· 1215 1215 pm_runtime_enable(dev); 1216 1216 regcache_cache_only(xcvr->regmap, true); 1217 1217 1218 + /* 1219 + * Register platform component before registering cpu dai for there 1220 + * is not defer probe for platform component in snd_soc_add_pcm_runtime(). 1221 + */ 1222 + ret = devm_snd_dmaengine_pcm_register(dev, NULL, 0); 1223 + if (ret) { 1224 + dev_err(dev, "failed to pcm register\n"); 1225 + return ret; 1226 + } 1227 + 1218 1228 ret = devm_snd_soc_register_component(dev, &fsl_xcvr_comp, 1219 1229 &fsl_xcvr_dai, 1); 1220 1230 if (ret) { 1221 1231 dev_err(dev, "failed to register component %s\n", 1222 1232 fsl_xcvr_comp.name); 1223 - return ret; 1224 1233 } 1225 - 1226 - ret = devm_snd_dmaengine_pcm_register(dev, NULL, 0); 1227 - if (ret) 1228 - dev_err(dev, "failed to pcm register\n"); 1229 1234 1230 1235 return ret; 1231 1236 }
+5
sound/soc/intel/boards/sof_sdw.c
··· 929 929 cpus + *cpu_id, cpu_dai_num, 930 930 codecs, codec_num, 931 931 NULL, &sdw_ops); 932 + /* 933 + * SoundWire DAILINKs use 'stream' functions and Bank Switch operations 934 + * based on wait_for_completion(), tag them as 'nonatomic'. 935 + */ 936 + dai_links[*be_index].nonatomic = true; 932 937 933 938 ret = set_codec_init_func(card, link, dai_links + (*be_index)++, 934 939 playback, group_id);
+3
sound/soc/mediatek/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 config SND_SOC_MEDIATEK 3 3 tristate 4 + select REGMAP_MMIO 4 5 5 6 config SND_SOC_MT2701 6 7 tristate "ASoC support for Mediatek MT2701 chip" ··· 189 188 config SND_SOC_MT8195 190 189 tristate "ASoC support for Mediatek MT8195 chip" 191 190 depends on ARCH_MEDIATEK || COMPILE_TEST 191 + depends on COMMON_CLK 192 192 select SND_SOC_MEDIATEK 193 + select MFD_SYSCON if SND_SOC_MT6359 193 194 help 194 195 This adds ASoC platform driver support for Mediatek MT8195 chip 195 196 that can be used with other codecs.
+11 -8
sound/soc/mediatek/common/mtk-afe-fe-dai.c
··· 334 334 devm_kcalloc(dev, afe->reg_back_up_list_num, 335 335 sizeof(unsigned int), GFP_KERNEL); 336 336 337 - for (i = 0; i < afe->reg_back_up_list_num; i++) 338 - regmap_read(regmap, afe->reg_back_up_list[i], 339 - &afe->reg_back_up[i]); 337 + if (afe->reg_back_up) { 338 + for (i = 0; i < afe->reg_back_up_list_num; i++) 339 + regmap_read(regmap, afe->reg_back_up_list[i], 340 + &afe->reg_back_up[i]); 341 + } 340 342 341 343 afe->suspended = true; 342 344 afe->runtime_suspend(dev); ··· 358 356 359 357 afe->runtime_resume(dev); 360 358 361 - if (!afe->reg_back_up) 359 + if (!afe->reg_back_up) { 362 360 dev_dbg(dev, "%s no reg_backup\n", __func__); 363 - 364 - for (i = 0; i < afe->reg_back_up_list_num; i++) 365 - mtk_regmap_write(regmap, afe->reg_back_up_list[i], 366 - afe->reg_back_up[i]); 361 + } else { 362 + for (i = 0; i < afe->reg_back_up_list_num; i++) 363 + mtk_regmap_write(regmap, afe->reg_back_up_list[i], 364 + afe->reg_back_up[i]); 365 + } 367 366 368 367 afe->suspended = false; 369 368 return 0;
+3 -4
sound/soc/mediatek/mt8195/mt8195-mt6359-rt1019-rt5682.c
··· 424 424 return snd_soc_component_set_jack(cmpnt_codec, &priv->hdmi_jack, NULL); 425 425 } 426 426 427 - static int mt8195_hdmitx_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, 428 - struct snd_pcm_hw_params *params) 427 + static int mt8195_dptx_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, 428 + struct snd_pcm_hw_params *params) 429 429 430 430 { 431 431 /* fix BE i2s format to 32bit, clean param mask first */ ··· 902 902 .no_pcm = 1, 903 903 .dpcm_playback = 1, 904 904 .ops = &mt8195_dptx_ops, 905 - .be_hw_params_fixup = mt8195_hdmitx_dptx_hw_params_fixup, 905 + .be_hw_params_fixup = mt8195_dptx_hw_params_fixup, 906 906 SND_SOC_DAILINK_REG(DPTX_BE), 907 907 }, 908 908 [DAI_LINK_ETDM1_IN_BE] = { ··· 953 953 SND_SOC_DAIFMT_NB_NF | 954 954 SND_SOC_DAIFMT_CBS_CFS, 955 955 .dpcm_playback = 1, 956 - .be_hw_params_fixup = mt8195_hdmitx_dptx_hw_params_fixup, 957 956 SND_SOC_DAILINK_REG(ETDM3_OUT_BE), 958 957 }, 959 958 [DAI_LINK_PCM1_BE] = {
+1 -3
sound/soc/sof/core.c
··· 371 371 dev_warn(dev, "error: %d failed to prepare DSP for device removal", 372 372 ret); 373 373 374 - snd_sof_fw_unload(sdev); 375 374 snd_sof_ipc_free(sdev); 376 375 snd_sof_free_debug(sdev); 377 376 snd_sof_free_trace(sdev); ··· 393 394 snd_sof_remove(sdev); 394 395 395 396 /* release firmware */ 396 - release_firmware(pdata->fw); 397 - pdata->fw = NULL; 397 + snd_sof_fw_unload(sdev); 398 398 399 399 return 0; 400 400 }
+8 -1
sound/soc/sof/imx/imx8.c
··· 365 365 /* on i.MX8 there is 1 to 1 match between type and BAR idx */ 366 366 static int imx8_get_bar_index(struct snd_sof_dev *sdev, u32 type) 367 367 { 368 - return type; 368 + /* Only IRAM and SRAM bars are valid */ 369 + switch (type) { 370 + case SOF_FW_BLK_TYPE_IRAM: 371 + case SOF_FW_BLK_TYPE_SRAM: 372 + return type; 373 + default: 374 + return -EINVAL; 375 + } 369 376 } 370 377 371 378 static void imx8_ipc_msg_data(struct snd_sof_dev *sdev,
+8 -1
sound/soc/sof/imx/imx8m.c
··· 228 228 /* on i.MX8 there is 1 to 1 match between type and BAR idx */ 229 229 static int imx8m_get_bar_index(struct snd_sof_dev *sdev, u32 type) 230 230 { 231 - return type; 231 + /* Only IRAM and SRAM bars are valid */ 232 + switch (type) { 233 + case SOF_FW_BLK_TYPE_IRAM: 234 + case SOF_FW_BLK_TYPE_SRAM: 235 + return type; 236 + default: 237 + return -EINVAL; 238 + } 232 239 } 233 240 234 241 static void imx8m_ipc_msg_data(struct snd_sof_dev *sdev,
+5 -3
sound/soc/sof/loader.c
··· 729 729 ret = request_firmware(&plat_data->fw, fw_filename, sdev->dev); 730 730 731 731 if (ret < 0) { 732 - dev_err(sdev->dev, "error: request firmware %s failed err: %d\n", 733 - fw_filename, ret); 734 732 dev_err(sdev->dev, 735 - "you may need to download the firmware from https://github.com/thesofproject/sof-bin/\n"); 733 + "error: sof firmware file is missing, you might need to\n"); 734 + dev_err(sdev->dev, 735 + " download it from https://github.com/thesofproject/sof-bin/\n"); 736 736 goto err; 737 737 } else { 738 738 dev_dbg(sdev->dev, "request_firmware %s successful\n", ··· 880 880 void snd_sof_fw_unload(struct snd_sof_dev *sdev) 881 881 { 882 882 /* TODO: support module unloading at runtime */ 883 + release_firmware(sdev->pdata->fw); 884 + sdev->pdata->fw = NULL; 883 885 } 884 886 EXPORT_SYMBOL(snd_sof_fw_unload);
-1
sound/soc/sof/trace.c
··· 530 530 return; 531 531 532 532 if (sdev->dtrace_is_enabled) { 533 - dev_err(sdev->dev, "error: waking up any trace sleepers\n"); 534 533 sdev->dtrace_error = true; 535 534 wake_up(&sdev->trace_sleep); 536 535 }
+2 -2
sound/soc/sof/xtensa/core.c
··· 122 122 * 0x0049fbb0: 8000f2d0 0049fc00 6f6c6c61 00632e63 123 123 */ 124 124 for (i = 0; i < stack_words; i += 4) { 125 - hex_dump_to_buffer(stack + i * 4, 16, 16, 4, 125 + hex_dump_to_buffer(stack + i, 16, 16, 4, 126 126 buf, sizeof(buf), false); 127 - dev_err(sdev->dev, "0x%08x: %s\n", stack_ptr + i, buf); 127 + dev_err(sdev->dev, "0x%08x: %s\n", stack_ptr + i * 4, buf); 128 128 } 129 129 } 130 130