forked from Minki/linux
ASoC: Intel: Skylake: Fill BE blob with default params
When we have a path that connects to DSP sink and source, we need to query the blob using the default params. So add a function to query the params for such path Signed-off-by: Jeeja KP <jeeja.kp@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
c5a76a2469
commit
2d1419a329
@ -260,6 +260,64 @@ static void skl_tplg_update_buffer_size(struct skl_sst *ctx,
|
||||
multiplier;
|
||||
}
|
||||
|
||||
static int skl_tplg_update_be_blob(struct snd_soc_dapm_widget *w,
|
||||
struct skl_sst *ctx)
|
||||
{
|
||||
struct skl_module_cfg *m_cfg = w->priv;
|
||||
int link_type, dir;
|
||||
u32 ch, s_freq, s_fmt;
|
||||
struct nhlt_specific_cfg *cfg;
|
||||
struct skl *skl = get_skl_ctx(ctx->dev);
|
||||
|
||||
/* check if we already have blob */
|
||||
if (m_cfg->formats_config.caps_size > 0)
|
||||
return 0;
|
||||
|
||||
switch (m_cfg->dev_type) {
|
||||
case SKL_DEVICE_DMIC:
|
||||
link_type = NHLT_LINK_DMIC;
|
||||
dir = 1;
|
||||
s_freq = m_cfg->in_fmt[0].s_freq;
|
||||
s_fmt = m_cfg->in_fmt[0].bit_depth;
|
||||
ch = m_cfg->in_fmt[0].channels;
|
||||
break;
|
||||
|
||||
case SKL_DEVICE_I2S:
|
||||
link_type = NHLT_LINK_SSP;
|
||||
if (m_cfg->hw_conn_type == SKL_CONN_SOURCE) {
|
||||
dir = 1;
|
||||
s_freq = m_cfg->in_fmt[0].s_freq;
|
||||
s_fmt = m_cfg->in_fmt[0].bit_depth;
|
||||
ch = m_cfg->in_fmt[0].channels;
|
||||
} else {
|
||||
dir = 0;
|
||||
s_freq = m_cfg->out_fmt[0].s_freq;
|
||||
s_fmt = m_cfg->out_fmt[0].bit_depth;
|
||||
ch = m_cfg->out_fmt[0].channels;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* update the blob based on virtual bus_id and default params */
|
||||
cfg = skl_get_ep_blob(skl, m_cfg->vbus_id, link_type,
|
||||
s_fmt, ch, s_freq, dir);
|
||||
if (cfg) {
|
||||
m_cfg->formats_config.caps_size = cfg->size;
|
||||
m_cfg->formats_config.caps = (u32 *) &cfg->caps;
|
||||
} else {
|
||||
dev_err(ctx->dev, "Blob NULL for id %x type %d dirn %d\n",
|
||||
m_cfg->vbus_id, link_type, dir);
|
||||
dev_err(ctx->dev, "PCM: ch %d, freq %d, fmt %d\n",
|
||||
ch, s_freq, s_fmt);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void skl_tplg_update_module_params(struct snd_soc_dapm_widget *w,
|
||||
struct skl_sst *ctx)
|
||||
{
|
||||
@ -433,6 +491,9 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* update blob if blob is null for be with default value */
|
||||
skl_tplg_update_be_blob(w, ctx);
|
||||
|
||||
/*
|
||||
* apply fix/conversion to module params based on
|
||||
* FE/BE params
|
||||
|
Loading…
Reference in New Issue
Block a user