Hi ALSA ML soc-pcm has snd_pcm_limit_hw_rates() which determine rate_min/rate_max fields. It updates runtime->hw.rate_min/max (A) based on hw->rates (B). int snd_pcm_limit_hw_rates(struct snd_pcm_runtime *runtime) { int i; for (i = 0; i < (int)snd_pcm_known_rates.count; i++) { (B) if (runtime->hw.rates & (1 << i)) { (A) runtime->hw.rate_min = snd_pcm_known_rates.list[i]; break; } } for (i = (int)snd_pcm_known_rates.count - 1; i >= 0; i--) { (B) if (runtime->hw.rates & (1 << i)) { (A) runtime->hw.rate_max = snd_pcm_known_rates.list[i]; break; } } return 0; } I guess the calling timing is 1) set hw->rates 2) call snd_pcm_limit_hw_rates() 3) update hw->rate_min/max soc_pcm_init_runtime_hw() is calling it as this order static void soc_pcm_init_runtime_hw(xxx) { ... 1) hw->rates = snd_pcm_rate_mask_intersect(rates, cpu_stream->rates); 2) snd_pcm_limit_hw_rates(runtime); 3) hw->rate_min = max(hw->rate_min, cpu_stream->rate_min); hw->rate_min = max(hw->rate_min, rate_min); hw->rate_max = min_not_zero(hw->rate_max, cpu_stream->rate_max); hw->rate_max = min_not_zero(hw->rate_max, rate_max); } But, dpcm_fe_dai_startup() are different. static int dpcm_fe_dai_startup(xxx) { ... /* * dpcm_set_fe_runtime() updates runtime->hw.xxx */ 1) 3) dpcm_set_fe_runtime(fe_substream); 2) snd_pcm_limit_hw_rates(runtime); ... } I guess we need fixup dpcm_fe_dai_startup() ? Thank you for your help !! Best regards --- Kuninori Morimoto _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel