ASoC: Intel: Skylake: Add helper routines to handle module params
authorJeeja KP <jeeja.kp@intel.com>
Sat, 28 Nov 2015 09:31:47 +0000 (15:01 +0530)
committerMark Brown <broonie@kernel.org>
Tue, 1 Dec 2015 22:17:00 +0000 (22:17 +0000)
Some DSP modules have user configurable parameters. These
parameters are required by modules in the following scenario
-  during initialization
-  after initialization using set parameter

This patch adds helper routine to set module parameters using
large config set IPC message and removes params to be passed as
init module routine.

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>
sound/soc/intel/skylake/skl-messages.c
sound/soc/intel/skylake/skl-topology.c
sound/soc/intel/skylake/skl-topology.h

index d71b58322cc77a71f325c0a2180045f5fd255b6e..30762734d859a3525bafe744378268d8477f73e4 100644 (file)
@@ -556,7 +556,7 @@ static void skl_clear_module_state(struct skl_module_pin *mpin, int max,
  * invoke the DSP by sending IPC INIT_INSTANCE using ipc helper
  */
 int skl_init_module(struct skl_sst *ctx,
-                       struct skl_module_cfg *mconfig, char *param)
+                       struct skl_module_cfg *mconfig)
 {
        u16 module_config_size = 0;
        void *param_data = NULL;
@@ -855,3 +855,17 @@ int skl_stop_pipe(struct skl_sst *ctx, struct skl_pipe *pipe)
 
        return 0;
 }
+
+/* Algo parameter set helper function */
+int skl_set_module_params(struct skl_sst *ctx, u32 *params, int size,
+                               u32 param_id, struct skl_module_cfg *mcfg)
+{
+       struct skl_ipc_large_config_msg msg;
+
+       msg.module_id = mcfg->id.module_id;
+       msg.instance_id = mcfg->id.instance_id;
+       msg.param_data_size = size;
+       msg.large_param_id = param_id;
+
+       return skl_ipc_set_large_config(&ctx->ipc, &msg, params);
+}
index f221c758d6016e1c8caa4432f524d0b237ca8d42..7a03bea48a9ad36870a56868c7798d8ce1fc67cb 100644 (file)
@@ -340,7 +340,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
                 * FE/BE params
                 */
                skl_tplg_update_module_params(w, ctx);
-               ret = skl_init_module(ctx, mconfig, NULL);
+               ret = skl_init_module(ctx, mconfig);
                if (ret < 0)
                        return ret;
        }
index 57cb7b8dd269f9ebb712642baa6aa2244630a4b4..5ba985b362276da382bd9e23a5aa3df556480fb7 100644 (file)
@@ -312,8 +312,7 @@ int skl_delete_pipe(struct skl_sst *ctx, struct skl_pipe *pipe);
 
 int skl_stop_pipe(struct skl_sst *ctx, struct skl_pipe *pipe);
 
-int skl_init_module(struct skl_sst *ctx, struct skl_module_cfg *module_config,
-       char *param);
+int skl_init_module(struct skl_sst *ctx, struct skl_module_cfg *module_config);
 
 int skl_bind_modules(struct skl_sst *ctx, struct skl_module_cfg
        *src_module, struct skl_module_cfg *dst_module);
@@ -321,5 +320,8 @@ int skl_bind_modules(struct skl_sst *ctx, struct skl_module_cfg
 int skl_unbind_modules(struct skl_sst *ctx, struct skl_module_cfg
        *src_module, struct skl_module_cfg *dst_module);
 
+int skl_set_module_params(struct skl_sst *ctx, u32 *params, int size,
+                       u32 param_id, struct skl_module_cfg *mcfg);
+
 enum skl_bitdepth skl_get_bit_depth(int params);
 #endif