mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 14:41:39 +00:00
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: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
b8af8b1d80
commit
f0c8e1d9c4
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user