Messages in this thread | | | Subject | Re: [PATCH v3] ASoC: Intel: kbl_rt5663_rt5514_max98927: Split be_hw_params_fixup function | From | Pierre-Louis Bossart <> | Date | Thu, 21 May 2020 11:32:27 -0500 |
| |
On 5/21/20 11:25 AM, Lukasz Majczak wrote: > Split be_hw_params_fixup function for different codecs as current common > function, leads to crash while trying to get snd_soc_dpcm with > container_of() macro in kabylake_ssp_fixup(). > The crash call path looks as below: > soc_pcm_hw_params() > snd_soc_dai_hw_params(codec_dai, substream, &codec_params); > rtd->dai_link->be_hw_params_fixup(rtd, params) > kabylake_ssp_fixup() > In this case, codec_params is just a copy of an internal structure and is > not embedded into struct snd_soc_dpcm thus we cannot use > container_of() on it. > > v1 -> v2: > - Extract dmic from SSP0 as every BE should have own fixup function. > v2 -> v3: > - Restore naming in the dapm route table to not confuse with other > drivers > - Fixed indentations
you need the changelog to be below the --- marker two lines down.
> > Signed-off-by: Lukasz Majczak <lma@semihalf.com> > ---
[...]
> +static int kabylake_dmic01_hw_params(struct snd_pcm_substream *substream, > + struct snd_pcm_hw_params *params) > +{ > + struct snd_soc_pcm_runtime *rtd = substream->private_data; > + int ret = 0; > + > + ret = snd_soc_dai_set_tdm_slot(rtd->codec_dai, 0xF, 0, 8, 16); > + if (ret < 0) { > + dev_err(rtd->dev, "set TDM slot err:%d\n", ret); > + return ret; > + } > + > + ret = snd_soc_dai_set_sysclk(rtd->codec_dai, > + RT5514_SCLK_S_MCLK, 24576000, SND_SOC_CLOCK_IN); > + if (ret < 0) { > + dev_err(rtd->dev, "set sysclk err: %d\n", ret); > + return ret; > + } > + > + return ret; > +} > + > static struct snd_soc_ops kabylake_ssp0_ops = { > .hw_params = kabylake_ssp0_hw_params, > }; > > +static struct snd_soc_ops kabylake_dmic01_ops = { > + .hw_params = kabylake_dmic01_hw_params, > +}; > + > static const unsigned int channels_dmic[] = { > 4, > }; > @@ -507,14 +528,19 @@ SND_SOC_DAILINK_DEF(ssp0_pin, > SND_SOC_DAILINK_DEF(ssp0_codec, > DAILINK_COMP_ARRAY( > /* Left */ COMP_CODEC(MAXIM_DEV0_NAME, KBL_MAXIM_CODEC_DAI), > - /* Right */COMP_CODEC(MAXIM_DEV1_NAME, KBL_MAXIM_CODEC_DAI), > - /* dmic */ COMP_CODEC(RT5514_DEV_NAME, KBL_REALTEK_DMIC_CODEC_DAI))); > + /* Right */COMP_CODEC(MAXIM_DEV1_NAME, KBL_MAXIM_CODEC_DAI))); > > SND_SOC_DAILINK_DEF(ssp1_pin, > DAILINK_COMP_ARRAY(COMP_CPU("SSP1 Pin"))); > SND_SOC_DAILINK_DEF(ssp1_codec, > DAILINK_COMP_ARRAY(COMP_CODEC(RT5663_DEV_NAME, KBL_REALTEK_CODEC_DAI))); > > +SND_SOC_DAILINK_DEF(dmic01_pin, > + DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin"))); > +SND_SOC_DAILINK_DEF(dmic01_codec, > + DAILINK_COMP_ARRAY( > + COMP_CODEC(RT5514_DEV_NAME, KBL_REALTEK_DMIC_CODEC_DAI))); > + > SND_SOC_DAILINK_DEF(idisp1_pin, > DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin"))); > SND_SOC_DAILINK_DEF(idisp1_codec, > @@ -618,9 +644,8 @@ static struct snd_soc_dai_link kabylake_dais[] = { > SND_SOC_DAIFMT_NB_NF | > SND_SOC_DAIFMT_CBS_CFS, > .ignore_pmdown_time = 1, > - .be_hw_params_fixup = kabylake_ssp_fixup, > + .be_hw_params_fixup = kabylake_ssp0_fixup, > .dpcm_playback = 1, > - .dpcm_capture = 1, > .ops = &kabylake_ssp0_ops, > SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform), > }, > @@ -632,12 +657,25 @@ static struct snd_soc_dai_link kabylake_dais[] = { > .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | > SND_SOC_DAIFMT_CBS_CFS, > .ignore_pmdown_time = 1, > - .be_hw_params_fixup = kabylake_ssp_fixup, > + .be_hw_params_fixup = kabylake_ssp1_fixup, > .ops = &kabylake_rt5663_ops, > .dpcm_playback = 1, > .dpcm_capture = 1, > SND_SOC_DAILINK_REG(ssp1_pin, ssp1_codec, platform), > }, > + { > + .name = "dmic01", > + .id = 2, > + .no_pcm = 1, > + .dai_fmt = SND_SOC_DAIFMT_DSP_B | > + SND_SOC_DAIFMT_NB_NF | > + SND_SOC_DAIFMT_CBS_CFS, > + .ignore_pmdown_time = 1, > + .be_hw_params_fixup = kabylake_dmic_fixup, > + .dpcm_capture = 1, > + .ops = &kabylake_dmic01_ops, > + SND_SOC_DAILINK_REG(dmic01_pin, dmic01_codec, platform), > + },
don't add a new dailink, this is not right.
> { > .name = "iDisp1", > .id = 3, > > base-commit: a4f6fc98cd2fa1774bcaeb248c67156ef9402a56 >
| |