···462462EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_alg_base_in_words, "FW_CS_DSP_KUNIT_TEST_UTILS");463463464464/**465465- * cs_dsp_mock_xm_header_get_fw_version_from_regmap() - Firmware version.466466- *467467- * @priv: Pointer to struct cs_dsp_test.468468- *469469- * Return: Firmware version word value.470470- */471471-unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv)472472-{473473- unsigned int xm = cs_dsp_mock_base_addr_for_mem(priv, WMFW_ADSP2_XM);474474- union {475475- struct wmfw_id_hdr adsp2;476476- struct wmfw_v3_id_hdr halo;477477- } hdr;478478-479479- switch (priv->dsp->type) {480480- case WMFW_ADSP2:481481- regmap_raw_read(priv->dsp->regmap, xm, &hdr.adsp2, sizeof(hdr.adsp2));482482- return be32_to_cpu(hdr.adsp2.ver);483483- case WMFW_HALO:484484- regmap_raw_read(priv->dsp->regmap, xm, &hdr.halo, sizeof(hdr.halo));485485- return be32_to_cpu(hdr.halo.ver);486486- default:487487- KUNIT_FAIL(priv->test, NULL);488488- return 0;489489- }490490-}491491-EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_fw_version_from_regmap,492492- "FW_CS_DSP_KUNIT_TEST_UTILS");493493-494494-/**495465 * cs_dsp_mock_xm_header_get_fw_version() - Firmware version.496466 *497467 * @header: Pointer to struct cs_dsp_mock_xm_header.
+1-1
drivers/firmware/cirrus/test/cs_dsp_test_bin.c
···2198219821992199 priv->local->bin_builder =22002200 cs_dsp_mock_bin_init(priv, 1,22012201- cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv));22012201+ cs_dsp_mock_xm_header_get_fw_version(xm_hdr));22022202 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->local->bin_builder);2203220322042204 /* We must provide a dummy wmfw to load */
···104104unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *priv,105105 unsigned int alg_id,106106 int mem_type);107107-unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv);108107unsigned int cs_dsp_mock_xm_header_get_fw_version(struct cs_dsp_mock_xm_header *header);109108void cs_dsp_mock_xm_header_drop_from_regmap_cache(struct cs_dsp_test *priv);110109int cs_dsp_mock_xm_header_write_to_regmap(struct cs_dsp_mock_xm_header *header);
+2-3
sound/soc/codecs/Kconfig
···780780 tristate781781782782config SND_SOC_CS_AMP_LIB_TEST783783- tristate "KUnit test for Cirrus Logic cs-amp-lib"784784- depends on KUNIT783783+ tristate "KUnit test for Cirrus Logic cs-amp-lib" if !KUNIT_ALL_TESTS784784+ depends on SND_SOC_CS_AMP_LIB && KUNIT785785 default KUNIT_ALL_TESTS786786- select SND_SOC_CS_AMP_LIB787786 help788787 This builds KUnit tests for the Cirrus Logic common789788 amplifier library.
···199199 else200200 i2s_write_reg(dev->i2s_base, IRER, 1);201201202202- /* I2S needs to enable IRQ to make a handshake with DMAC on the JH7110 SoC */203203- if (dev->use_pio || dev->is_jh7110)204204- i2s_enable_irqs(dev, substream->stream, config->chan_nr);205205- else202202+ if (!(dev->use_pio || dev->is_jh7110))206203 i2s_enable_dma(dev, substream->stream);207204205205+ i2s_enable_irqs(dev, substream->stream, config->chan_nr);208206 i2s_write_reg(dev->i2s_base, CER, 1);209207}210208···216218 else217219 i2s_write_reg(dev->i2s_base, IRER, 0);218220219219- if (dev->use_pio || dev->is_jh7110)220220- i2s_disable_irqs(dev, substream->stream, 8);221221- else221221+ if (!(dev->use_pio || dev->is_jh7110))222222 i2s_disable_dma(dev, substream->stream);223223+224224+ i2s_disable_irqs(dev, substream->stream, 8);225225+223226224227 if (!dev->active) {225228 i2s_write_reg(dev->i2s_base, CER, 0);
+14-1
sound/soc/fsl/fsl_asrc_dma.c
···156156 for_each_dpcm_be(rtd, stream, dpcm) {157157 struct snd_soc_pcm_runtime *be = dpcm->be;158158 struct snd_pcm_substream *substream_be;159159- struct snd_soc_dai *dai = snd_soc_rtd_to_cpu(be, 0);159159+ struct snd_soc_dai *dai_cpu = snd_soc_rtd_to_cpu(be, 0);160160+ struct snd_soc_dai *dai_codec = snd_soc_rtd_to_codec(be, 0);161161+ struct snd_soc_dai *dai;160162161163 if (dpcm->fe != rtd)162164 continue;165165+166166+ /*167167+ * With audio graph card, original cpu dai is changed to codec168168+ * device in backend, so if cpu dai is dummy device in backend,169169+ * get the codec dai device, which is the real hardware device170170+ * connected.171171+ */172172+ if (!snd_soc_dai_is_dummy(dai_cpu))173173+ dai = dai_cpu;174174+ else175175+ dai = dai_codec;163176164177 substream_be = snd_soc_dpcm_get_substream(be, stream);165178 dma_params_be = snd_soc_dai_get_dma_data(dai, substream_be);
+3
sound/soc/fsl/fsl_qmc_audio.c
···250250 switch (cmd) {251251 case SNDRV_PCM_TRIGGER_START:252252 bitmap_zero(prtd->chans_pending, 64);253253+ prtd->buffer_ended = 0;254254+ prtd->ch_dma_addr_current = prtd->ch_dma_addr_start;255255+253256 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {254257 for (i = 0; i < prtd->channels; i++)255258 prtd->qmc_dai->chans[i].prtd_tx = prtd;
···15841584 /*15851585 * Filter for systems with 'component_chaining' enabled.15861586 * This helps to avoid unnecessary re-configuration of an15871587- * already active BE on such systems.15871587+ * already active BE on such systems and ensures the BE DAI15881588+ * widget is powered ON after hw_params() BE DAI callback.15881589 */15891590 if (fe->card->component_chaining &&15901591 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_NEW) &&15921592+ (be->dpcm[stream].state != SND_SOC_DPCM_STATE_OPEN) &&15931593+ (be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&15911594 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_CLOSE))15921595 continue;15931596