24 Apr
2019
24 Apr
'19
4:08 p.m.
On Tue, 23 Apr 2019 21:39:50 +0200, Takashi Iwai wrote:
+static int byt_cht_cx2072x_fixup(struct snd_soc_pcm_runtime *rtd,
struct snd_pcm_hw_params *params)
+{
- struct snd_interval *rate =
hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
- struct snd_interval *channels =
hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
- int ret;
- /* The DSP will covert the FE rate to 48k, stereo, 24bits */
- rate->min = rate->max = 48000;
- channels->min = channels->max = 2;
- /* set SSP2 to 24-bit */
- params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
- /*
* Default mode for SSP configuration is TDM 4 slot, override config
* with explicit setting to I2S 2ch 24-bit. The word length is set with
* dai_set_tdm_slot() since there is no other API exposed
*/
- ret = snd_soc_dai_set_fmt(rtd->cpu_dai,
SND_SOC_DAIFMT_I2S |
SND_SOC_DAIFMT_NB_NF |
SND_SOC_DAIFMT_CBS_CFS);
- if (ret < 0) {
dev_err(rtd->dev, "can't set format to I2S, err %d\n", ret);
return ret;
- }
- ret = snd_soc_dai_set_tdm_slot(rtd->cpu_dai, 0x3, 0x3, 2, 24);
- if (ret < 0) {
dev_err(rtd->dev, "can't set I2S config, err %d\n", ret);
return ret;
- }
- snd_soc_dai_set_bclk_ratio(rtd->codec_dai, 50);
that part would be problematic for SOF. IIRC we put all clock-related stuff in the init, and ignore the fixups to use topology-based information instead. If this call to _set_bclk_ratio can be moved to the init it's more future-proof. Is there a reason to do this here in the fixup?
No particular reason from my side. I just took over your code ;)
That is, it'd be appreciated if you can give a fixup patch that can be applied on top.
OK, I tried just moving snd_soc_dai_set_bclk_ratio() into the init callback, and it seems working fine. The fix will be included in v2 patch.
thanks,
Takashi