Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0c8e1d9 authored by Subhransu S. Prusty's avatar Subhransu S. Prusty Committed by Mark Brown
Browse files

ASoC: Intel: Skylake: Fix ibs/obs calc for non-integral sampling rates



FW expects sampling rate rounded up to next higher integer value
when calculating ibs/obs. For example for 44.1k, it should be
rounded up to 45 to calculate ibs/obs.

Signed-off-by: default avatarSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent b8af8b1d
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -239,6 +239,7 @@ static void skl_tplg_update_buffer_size(struct skl_sst *ctx,
{
	int multiplier = 1;
	struct skl_module_fmt *in_fmt, *out_fmt;
	int in_rate, out_rate;


	/* Since fixups is applied to pin 0 only, ibs, obs needs
@@ -249,13 +250,22 @@ static void skl_tplg_update_buffer_size(struct skl_sst *ctx,

	if (mcfg->m_type == SKL_MODULE_TYPE_SRCINT)
		multiplier = 5;
	mcfg->ibs = (in_fmt->s_freq / 1000) *
				(mcfg->in_fmt->channels) *

	if (in_fmt->s_freq % 1000)
		in_rate = (in_fmt->s_freq / 1000) + 1;
	else
		in_rate = (in_fmt->s_freq / 1000);

	mcfg->ibs = in_rate * (mcfg->in_fmt->channels) *
			(mcfg->in_fmt->bit_depth >> 3) *
			multiplier;

	mcfg->obs = (mcfg->out_fmt->s_freq / 1000) *
				(mcfg->out_fmt->channels) *
	if (mcfg->out_fmt->s_freq % 1000)
		out_rate = (mcfg->out_fmt->s_freq / 1000) + 1;
	else
		out_rate = (mcfg->out_fmt->s_freq / 1000);

	mcfg->obs = out_rate * (mcfg->out_fmt->channels) *
			(mcfg->out_fmt->bit_depth >> 3) *
			multiplier;
}