···8899maintainers:1010 - Cheng-Yi Chiang <cychiang@chromium.org>1111- - Tzung-Bi Shih <tzungbi@google.com>1111+ - Tzung-Bi Shih <tzungbi@kernel.org>12121313description: |1414 Google's ChromeOS EC codec is a digital mic codec provided by the
···77title: Realtek rt1015p codec devicetree bindings8899maintainers:1010- - Tzung-Bi Shih <tzungbi@google.com>1010+ - Tzung-Bi Shih <tzungbi@kernel.org>11111212description: |1313 Rt1015p is a rt1015 variant which does not support I2C and
···25032503 snd_soc_component_update_bits(component, WM8962_CLOCKING2,25042504 WM8962_SYSCLK_ENA_MASK, WM8962_SYSCLK_ENA);2505250525062506+ /* DSPCLK_DIV field in WM8962_CLOCKING1 register is used to generate25072507+ * correct frequency of LRCLK and BCLK. Sometimes the read-only value25082508+ * can't be updated timely after enabling SYSCLK. This results in wrong25092509+ * calculation values. Delay is introduced here to wait for newest25102510+ * value from register. The time of the delay should be at least25112511+ * 500~1000us according to test.25122512+ */25132513+ usleep_range(500, 1000);25062514 dspclk = snd_soc_component_read(component, WM8962_CLOCKING1);2507251525082516 if (snd_soc_component_get_bias_level(component) != SND_SOC_BIAS_ON)
+1-1
sound/soc/fsl/fsl_asrc.c
···12321232 }1233123312341234 ret = pm_runtime_put_sync(&pdev->dev);12351235- if (ret < 0)12351235+ if (ret < 0 && ret != -ENOSYS)12361236 goto err_pm_get_sync;1237123712381238 ret = devm_snd_soc_register_component(&pdev->dev, &fsl_asrc_component,
+1-1
sound/soc/fsl/fsl_esai.c
···10691069 regmap_write(esai_priv->regmap, REG_ESAI_RSMB, 0);1070107010711071 ret = pm_runtime_put_sync(&pdev->dev);10721072- if (ret < 0)10721072+ if (ret < 0 && ret != -ENOSYS)10731073 goto err_pm_get_sync;1074107410751075 /*
+19
sound/soc/fsl/fsl_micfil.c
···376376 if (ret)377377 return ret;378378379379+ /*380380+ * SRES is self-cleared bit, but REG_MICFIL_CTRL1 is defined381381+ * as non-volatile register, so SRES still remain in regmap382382+ * cache after set, that every update of REG_MICFIL_CTRL1,383383+ * software reset happens. so clear it explicitly.384384+ */385385+ ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1,386386+ MICFIL_CTRL1_SRES);387387+ if (ret)388388+ return ret;389389+390390+ /*391391+ * Set SRES should clear CHnF flags, But even add delay here392392+ * the CHnF may not be cleared sometimes, so clear CHnF explicitly.393393+ */394394+ ret = regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, 0xFF, 0xFF);395395+ if (ret)396396+ return ret;397397+379398 return 0;380399}381400
···3477347734783478static int __init snd_soc_init(void)34793479{34803480- snd_soc_debugfs_init();34813481- snd_soc_util_init();34803480+ int ret;3482348134833483- return platform_driver_register(&soc_driver);34823482+ snd_soc_debugfs_init();34833483+ ret = snd_soc_util_init();34843484+ if (ret)34853485+ goto err_util_init;34863486+34873487+ ret = platform_driver_register(&soc_driver);34883488+ if (ret)34893489+ goto err_register;34903490+ return 0;34913491+34923492+err_register:34933493+ snd_soc_util_exit();34943494+err_util_init:34953495+ snd_soc_debugfs_exit();34963496+ return ret;34843497}34853498module_init(snd_soc_init);34863499
+1-1
sound/soc/soc-dapm.c
···3620362036213621 switch (w->id) {36223622 case snd_soc_dapm_regulator_supply:36233623- w->regulator = devm_regulator_get(dapm->dev, w->name);36233623+ w->regulator = devm_regulator_get(dapm->dev, widget->name);36243624 if (IS_ERR(w->regulator)) {36253625 ret = PTR_ERR(w->regulator);36263626 goto request_failed;
+8-3
sound/soc/soc-ops.c
···452452 val = ucontrol->value.integer.value[0];453453 if (mc->platform_max && val > mc->platform_max)454454 return -EINVAL;455455- if (val > max - min)455455+ if (val > max)456456 return -EINVAL;457457 val_mask = mask << shift;458458 val = (val + min) & mask;···464464 ret = err;465465466466 if (snd_soc_volsw_is_stereo(mc)) {467467- unsigned int val2;467467+ unsigned int val2 = ucontrol->value.integer.value[1];468468+469469+ if (mc->platform_max && val2 > mc->platform_max)470470+ return -EINVAL;471471+ if (val2 > max)472472+ return -EINVAL;468473469474 val_mask = mask << rshift;470470- val2 = (ucontrol->value.integer.value[1] + min) & mask;475475+ val2 = (val2 + min) & mask;471476 val2 = val2 << rshift;472477473478 err = snd_soc_component_update_bits(component, reg2, val_mask,
+2-5
sound/soc/soc-pcm.c
···822822 ret = snd_soc_dai_startup(dai, substream);823823 if (ret < 0)824824 goto err;825825-826826- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)827827- dai->tx_mask = 0;828828- else829829- dai->rx_mask = 0;830825 }831826832827 /* Dynamic PCM DAI links compat checks use dynamic capabilities */···12471252 return;1248125312491254 be_substream = snd_soc_dpcm_get_substream(be, stream);12551255+ if (!be_substream)12561256+ return;1250125712511258 for_each_dpcm_fe(be, stream, dpcm) {12521259 if (dpcm->fe == fe)
+10-5
sound/soc/sof/ipc3-topology.c
···22752275 struct sof_ipc_fw_version *v = &sdev->fw_ready.version;22762276 struct snd_sof_widget *swidget;22772277 struct snd_sof_route *sroute;22782278+ bool dyn_widgets = false;22782279 int ret;2279228022802281 /*···22852284 * topology loading the sound card unavailable to open PCMs.22862285 */22872286 list_for_each_entry(swidget, &sdev->widget_list, list) {22882288- if (swidget->dynamic_pipeline_widget)22872287+ if (swidget->dynamic_pipeline_widget) {22882288+ dyn_widgets = true;22892289 continue;22902290+ }2290229122912291- /* Do not free widgets for static pipelines with FW ABI older than 3.19 */22922292+ /* Do not free widgets for static pipelines with FW older than SOF2.2 */22922293 if (!verify && !swidget->dynamic_pipeline_widget &&22932293- v->abi_version < SOF_ABI_VER(3, 19, 0)) {22942294+ SOF_FW_VER(v->major, v->minor, v->micro) < SOF_FW_VER(2, 2, 0)) {22942295 swidget->use_count = 0;22952296 swidget->complete = 0;22962297 continue;···23062303 /*23072304 * Tear down all pipelines associated with PCMs that did not get suspended23082305 * and unset the prepare flag so that they can be set up again during resume.23092309- * Skip this step for older firmware.23062306+ * Skip this step for older firmware unless topology has any23072307+ * dynamic pipeline (in which case the step is mandatory).23102308 */23112311- if (!verify && v->abi_version >= SOF_ABI_VER(3, 19, 0)) {23092309+ if (!verify && (dyn_widgets || SOF_FW_VER(v->major, v->minor, v->micro) >=23102310+ SOF_FW_VER(2, 2, 0))) {23122311 ret = sof_tear_down_left_over_pipelines(sdev);23132312 if (ret < 0) {23142313 dev_err(sdev->dev, "failed to tear down paused pipelines\n");
+10-10
sound/soc/sof/topology.c
···14991499 break;15001500 }1501150115021502- if (sof_debug_check_flag(SOF_DBG_DISABLE_MULTICORE)) {15031503- swidget->core = SOF_DSP_PRIMARY_CORE;15041504- } else {15051505- int core = sof_get_token_value(SOF_TKN_COMP_CORE_ID, swidget->tuples,15061506- swidget->num_tuples);15071507-15081508- if (core >= 0)15091509- swidget->core = core;15101510- }15111511-15121502 /* check token parsing reply */15131503 if (ret < 0) {15141504 dev_err(scomp->dev,···15081518 ? tw->sname : "none");15091519 kfree(swidget);15101520 return ret;15211521+ }15221522+15231523+ if (sof_debug_check_flag(SOF_DBG_DISABLE_MULTICORE)) {15241524+ swidget->core = SOF_DSP_PRIMARY_CORE;15251525+ } else {15261526+ int core = sof_get_token_value(SOF_TKN_COMP_CORE_ID, swidget->tuples,15271527+ swidget->num_tuples);15281528+15291529+ if (core >= 0)15301530+ swidget->core = core;15111531 }1512153215131533 /* bind widget to external event */