ASoC: Intel: Skylake: Add helper routine to handle Algo parameter
authorJeeja KP <jeeja.kp@intel.com>
Sat, 28 Nov 2015 09:31:48 +0000 (15:01 +0530)
committerMark Brown <broonie@kernel.org>
Tue, 1 Dec 2015 22:17:00 +0000 (22:17 +0000)
Some DSP modules has user configurable parameters, which are
required by some modules at module initialization.

To configure the module algorithm parameter during initialization
we add helpers here

Signed-off-by: Divya Prakash <divya1.prakash@intel.com>
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.h
sound/soc/intel/skylake/skl-tplg-interface.h

index 30762734d859a3525bafe744378268d8477f73e4..7770a7e4162f4b3f288607ca27493b188a92dd79 100644 (file)
@@ -387,6 +387,28 @@ static void skl_set_copier_format(struct skl_sst *ctx,
        skl_setup_cpr_gateway_cfg(ctx, mconfig, cpr_mconfig);
 }
 
+/*
+ * Algo module are DSP pre processing modules. Algo module take base module
+ * configuration and params
+ */
+
+static void skl_set_algo_format(struct skl_sst *ctx,
+                       struct skl_module_cfg *mconfig,
+                       struct skl_algo_cfg *algo_mcfg)
+{
+       struct skl_base_cfg *base_cfg = (struct skl_base_cfg *)algo_mcfg;
+
+       skl_set_base_module_format(ctx, mconfig, base_cfg);
+
+       if (mconfig->formats_config.caps_size == 0)
+               return;
+
+       memcpy(algo_mcfg->params,
+                       mconfig->formats_config.caps,
+                       mconfig->formats_config.caps_size);
+
+}
+
 static u16 skl_get_module_param_size(struct skl_sst *ctx,
                        struct skl_module_cfg *mconfig)
 {
@@ -404,6 +426,11 @@ static u16 skl_get_module_param_size(struct skl_sst *ctx,
        case SKL_MODULE_TYPE_UPDWMIX:
                return sizeof(struct skl_up_down_mixer_cfg);
 
+       case SKL_MODULE_TYPE_ALGO:
+               param_size = sizeof(struct skl_base_cfg);
+               param_size += mconfig->formats_config.caps_size;
+               return param_size;
+
        default:
                /*
                 * return only base cfg when no specific module type is
@@ -450,6 +477,10 @@ static int skl_set_module_format(struct skl_sst *ctx,
                skl_set_updown_mixer_format(ctx, module_config, *param_data);
                break;
 
+       case SKL_MODULE_TYPE_ALGO:
+               skl_set_algo_format(ctx, module_config, *param_data);
+               break;
+
        default:
                skl_set_base_module_format(ctx, module_config, *param_data);
                break;
index 5ba985b362276da382bd9e23a5aa3df556480fb7..0a66fab5982861d51621cbb683791ef717c533e2 100644 (file)
@@ -140,6 +140,11 @@ struct skl_up_down_mixer_cfg {
        s32 coeff[UP_DOWN_MIXER_MAX_COEFF];
 } __packed;
 
+struct skl_algo_cfg {
+       struct skl_base_cfg  base_cfg;
+       char params[0];
+} __packed;
+
 enum skl_dma_type {
        SKL_DMA_HDA_HOST_OUTPUT_CLASS = 0,
        SKL_DMA_HDA_HOST_INPUT_CLASS = 1,
index 20c068754d08206ee7b39c9ad37cbc7bf57de5ea..63c83a3eeb7e9fa320938cc464d740bed2d110bd 100644 (file)
@@ -81,7 +81,8 @@ enum skl_module_type {
        SKL_MODULE_TYPE_MIXER = 0,
        SKL_MODULE_TYPE_COPIER,
        SKL_MODULE_TYPE_UPDWMIX,
-       SKL_MODULE_TYPE_SRCINT
+       SKL_MODULE_TYPE_SRCINT,
+       SKL_MODULE_TYPE_ALGO
 };
 
 enum skl_core_affinity {