···712712 /* Do not create a PCM for this DAI link (Backend link) */713713 unsigned int ignore:1;714714715715+ /* This flag will reorder stop sequence. By enabling this flag716716+ * DMA controller stop sequence will be invoked first followed by717717+ * CPU DAI driver stop sequence718718+ */719719+ unsigned int stop_dma_first:1;720720+715721#ifdef CONFIG_SND_SOC_TOPOLOGY716722 struct snd_soc_dobj dobj; /* For topology */717723#endif
···969969970970 acp_set_sram_bank_state(rtd->acp_mmio, 0, true);971971 /* Save for runtime private data */972972- rtd->dma_addr = substream->dma_buffer.addr;972972+ rtd->dma_addr = runtime->dma_addr;973973 rtd->order = get_order(size);974974975975 /* Fill the page table entries in ACP SRAM */
···35353636#include "tlv320aic31xx.h"37373838+static int aic31xx_set_jack(struct snd_soc_component *component,3939+ struct snd_soc_jack *jack, void *data);4040+3841static const struct reg_default aic31xx_reg_defaults[] = {3942 { AIC31XX_CLKMUX, 0x00 },4043 { AIC31XX_PLLPR, 0x11 },···12591256 return ret;12601257 }1261125812591259+ /*12601260+ * The jack detection configuration is in the same register12611261+ * that is used to report jack detect status so is volatile12621262+ * and not covered by the cache sync, restore it separately.12631263+ */12641264+ aic31xx_set_jack(component, aic31xx->jack, NULL);12651265+12621266 return 0;12631267}12641268···16141604 ret);16151605 return ret;16161606 }16071607+ regcache_cache_only(aic31xx->regmap, true);16081608+16171609 aic31xx->dev = &i2c->dev;16181610 aic31xx->irq = i2c->irq;16191611
···1014101410151015static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)10161016{10171017+ struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);10171018 int ret = -EINVAL, _ret = 0;10181019 int rollback = 0;10191020···10551054 case SNDRV_PCM_TRIGGER_STOP:10561055 case SNDRV_PCM_TRIGGER_SUSPEND:10571056 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:10581058- ret = snd_soc_pcm_dai_trigger(substream, cmd, rollback);10591059- if (ret < 0)10601060- break;10571057+ if (rtd->dai_link->stop_dma_first) {10581058+ ret = snd_soc_pcm_component_trigger(substream, cmd, rollback);10591059+ if (ret < 0)10601060+ break;1061106110621062- ret = snd_soc_pcm_component_trigger(substream, cmd, rollback);10631063- if (ret < 0)10641064- break;10621062+ ret = snd_soc_pcm_dai_trigger(substream, cmd, rollback);10631063+ if (ret < 0)10641064+ break;10651065+ } else {10661066+ ret = snd_soc_pcm_dai_trigger(substream, cmd, rollback);10671067+ if (ret < 0)10681068+ break;1065106910701070+ ret = snd_soc_pcm_component_trigger(substream, cmd, rollback);10711071+ if (ret < 0)10721072+ break;10731073+ }10661074 ret = snd_soc_link_trigger(substream, cmd, rollback);10671075 break;10681076 }
+2-2
sound/soc/sof/intel/Kconfig
···278278279279config SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE280280 tristate281281+ select SOUNDWIRE_INTEL if SND_SOC_SOF_INTEL_SOUNDWIRE282282+ select SND_INTEL_SOUNDWIRE_ACPI if SND_SOC_SOF_INTEL_SOUNDWIRE281283282284config SND_SOC_SOF_INTEL_SOUNDWIRE283285 tristate "SOF support for SoundWire"···287285 depends on SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE288286 depends on ACPI && SOUNDWIRE289287 depends on !(SOUNDWIRE=m && SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=y)290290- select SOUNDWIRE_INTEL291291- select SND_INTEL_SOUNDWIRE_ACPI292288 help293289 This adds support for SoundWire with Sound Open Firmware294290 for Intel(R) platforms.
+2-2
sound/soc/sof/intel/hda-ipc.c
···107107 } else {108108 /* reply correct size ? */109109 if (reply.hdr.size != msg->reply_size &&110110- /* getter payload is never known upfront */111111- !(reply.hdr.cmd & SOF_IPC_GLB_PROBE)) {110110+ /* getter payload is never known upfront */111111+ ((reply.hdr.cmd & SOF_GLB_TYPE_MASK) != SOF_IPC_GLB_PROBE)) {112112 dev_err(sdev->dev, "error: reply expected %zu got %u bytes\n",113113 msg->reply_size, reply.hdr.size);114114 ret = -EINVAL;
+12
sound/soc/sof/intel/hda.c
···200200int hda_sdw_startup(struct snd_sof_dev *sdev)201201{202202 struct sof_intel_hda_dev *hdev;203203+ struct snd_sof_pdata *pdata = sdev->pdata;203204204205 hdev = sdev->pdata->hw_pdata;205206206207 if (!hdev->sdw)208208+ return 0;209209+210210+ if (pdata->machine && !pdata->machine->mach_params.link_mask)207211 return 0;208212209213 return sdw_intel_startup(hdev->sdw);···10191015 hda_mach->mach_params.dmic_num = dmic_num;10201016 pdata->machine = hda_mach;10211017 pdata->tplg_filename = tplg_filename;10181018+10191019+ if (codec_num == 2) {10201020+ /*10211021+ * Prevent SoundWire links from starting when an external10221022+ * HDaudio codec is used10231023+ */10241024+ hda_mach->mach_params.link_mask = 0;10251025+ }10221026 }10231027 }10241028