Commit 5514830d authored by Jaikrishna Nemallapudi's avatar Jaikrishna Nemallapudi Committed by Mark Brown

ASoC: Intel: Skylake: Modify skl_dsp_set_dma_control API arguments

Set dma control ipc can be used to set the M/N divider, enable the clks. It
takes different payload for different configuration. So modify the
skl_dsp_set_dma_control API to take the size and node_id as argument.
Signed-off-by: default avatarJaikrishna Nemallapudi <jaikrishnax.nemallapudi@intel.com>
Signed-off-by: default avatarSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Acked-By: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0087f201
...@@ -613,8 +613,10 @@ static void skl_setup_cpr_gateway_cfg(struct skl_sst *ctx, ...@@ -613,8 +613,10 @@ static void skl_setup_cpr_gateway_cfg(struct skl_sst *ctx,
} }
#define DMA_CONTROL_ID 5 #define DMA_CONTROL_ID 5
#define DMA_I2S_BLOB_SIZE 21
int skl_dsp_set_dma_control(struct skl_sst *ctx, struct skl_module_cfg *mconfig) int skl_dsp_set_dma_control(struct skl_sst *ctx, u32 *caps,
u32 caps_size, u32 node_id)
{ {
struct skl_dma_control *dma_ctrl; struct skl_dma_control *dma_ctrl;
struct skl_ipc_large_config_msg msg = {0}; struct skl_ipc_large_config_msg msg = {0};
...@@ -624,24 +626,27 @@ int skl_dsp_set_dma_control(struct skl_sst *ctx, struct skl_module_cfg *mconfig) ...@@ -624,24 +626,27 @@ int skl_dsp_set_dma_control(struct skl_sst *ctx, struct skl_module_cfg *mconfig)
/* /*
* if blob size zero, then return * if blob size zero, then return
*/ */
if (mconfig->formats_config.caps_size == 0) if (caps_size == 0)
return 0; return 0;
msg.large_param_id = DMA_CONTROL_ID; msg.large_param_id = DMA_CONTROL_ID;
msg.param_data_size = sizeof(struct skl_dma_control) + msg.param_data_size = sizeof(struct skl_dma_control) + caps_size;
mconfig->formats_config.caps_size;
dma_ctrl = kzalloc(msg.param_data_size, GFP_KERNEL); dma_ctrl = kzalloc(msg.param_data_size, GFP_KERNEL);
if (dma_ctrl == NULL) if (dma_ctrl == NULL)
return -ENOMEM; return -ENOMEM;
dma_ctrl->node_id = skl_get_node_id(ctx, mconfig); dma_ctrl->node_id = node_id;
/* size in dwords */ /*
dma_ctrl->config_length = mconfig->formats_config.caps_size / 4; * NHLT blob may contain additional configs along with i2s blob.
* firmware expects only the i2s blob size as the config_length.
* So fix to i2s blob size.
* size in dwords.
*/
dma_ctrl->config_length = DMA_I2S_BLOB_SIZE;
memcpy(dma_ctrl->config_data, mconfig->formats_config.caps, memcpy(dma_ctrl->config_data, caps, caps_size);
mconfig->formats_config.caps_size);
err = skl_ipc_set_large_config(&ctx->ipc, &msg, (u32 *)dma_ctrl); err = skl_ipc_set_large_config(&ctx->ipc, &msg, (u32 *)dma_ctrl);
......
...@@ -455,8 +455,8 @@ static inline struct skl *get_skl_ctx(struct device *dev) ...@@ -455,8 +455,8 @@ static inline struct skl *get_skl_ctx(struct device *dev)
int skl_tplg_be_update_params(struct snd_soc_dai *dai, int skl_tplg_be_update_params(struct snd_soc_dai *dai,
struct skl_pipe_params *params); struct skl_pipe_params *params);
int skl_dsp_set_dma_control(struct skl_sst *ctx, int skl_dsp_set_dma_control(struct skl_sst *ctx, u32 *caps,
struct skl_module_cfg *mconfig); u32 caps_size, u32 node_id);
void skl_tplg_set_be_dmic_config(struct snd_soc_dai *dai, void skl_tplg_set_be_dmic_config(struct snd_soc_dai *dai,
struct skl_pipe_params *params, int stream); struct skl_pipe_params *params, int stream);
int skl_tplg_init(struct snd_soc_platform *platform, int skl_tplg_init(struct snd_soc_platform *platform,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment