ASoC: Intel: Skylake: Fix module init data correctly
authorJeeja KP <jeeja.kp@intel.com>
Thu, 3 Dec 2015 17:59:53 +0000 (23:29 +0530)
committerMark Brown <broonie@kernel.org>
Tue, 8 Dec 2015 17:57:51 +0000 (17:57 +0000)
Module initialization parameter data can be set by
     - INIT_INSTANCE IPC by using the default value
     - SET_PARAMS immediately after INIT_INSTANCE
     - SET_PARAMS data from kcontrol values set
this patch add param type to identify the parameters
has to be sent to DSP.

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

index be02214e80dbe1c4630049d3bf439ee4f4fb4612..eb31235f704096dcd81037ae496a1ebe2156b044 100644 (file)
@@ -331,7 +331,7 @@ static int skl_tplg_set_module_params(struct snd_soc_dapm_widget *w,
        struct skl_specific_cfg *sp_cfg;
 
        if (mconfig->formats_config.caps_size > 0 &&
-               mconfig->formats_config.set_params) {
+               mconfig->formats_config.set_params == SKL_PARAM_SET) {
                sp_cfg = &mconfig->formats_config;
                ret = skl_set_module_params(ctx, sp_cfg->caps,
                                        sp_cfg->caps_size,
@@ -346,7 +346,7 @@ static int skl_tplg_set_module_params(struct snd_soc_dapm_widget *w,
                        sb = (void *) k->private_value;
                        bc = (struct skl_algo_data *)sb->dobj.private;
 
-                       if (bc->set_params) {
+                       if (bc->set_params == SKL_PARAM_SET) {
                                ret = skl_set_module_params(ctx,
                                                (u32 *)bc->params, bc->max,
                                                bc->param_id, mconfig);
@@ -379,7 +379,7 @@ static int skl_tplg_set_module_init_data(struct snd_soc_dapm_widget *w)
                        sb = (struct soc_bytes_ext *)k->private_value;
                        bc = (struct skl_algo_data *)sb->dobj.private;
 
-                       if (bc->set_params)
+                       if (bc->set_params != SKL_PARAM_INIT)
                                continue;
 
                        mconfig->formats_config.caps = (u32 *)&bc->params;
index 349f2a3b66134f2140aa0b4a82dde1e63e1ae6cd..6ba0bdc7753c121883ea6939feee9eb73c990901 100644 (file)
@@ -211,7 +211,7 @@ struct skl_module_pin {
 };
 
 struct skl_specific_cfg {
-       bool set_params;
+       u32 set_params;
        u32 param_id;
        u32 caps_size;
        u32 *caps;
@@ -294,7 +294,7 @@ struct skl_module_cfg {
 
 struct skl_algo_data {
        u32 param_id;
-       bool set_params;
+       u32 set_params;
        u32 max;
        char *params;
 };
index 626b148317fe4f9314934b6f8dac5b00c684dbfe..c9ae010b3cc8dc1df5a359a67987a44186e588cc 100644 (file)
@@ -141,6 +141,12 @@ enum module_pin_type {
        SKL_PIN_TYPE_HETEROGENEOUS,
 };
 
+enum skl_module_param_type {
+       SKL_PARAM_DEFAULT = 0,
+       SKL_PARAM_INIT,
+       SKL_PARAM_SET
+};
+
 struct skl_dfw_module_pin {
        u16 module_id;
        u16 instance_id;
@@ -158,8 +164,8 @@ struct skl_dfw_module_fmt {
 } __packed;
 
 struct skl_dfw_module_caps {
-       u32 set_params:1;
-       u32 rsvd:31;
+       u32 set_params:2;
+       u32 rsvd:30;
        u32 param_id;
        u32 caps_size;
        u32 caps[HDA_SST_CFG_MAX];
@@ -214,10 +220,10 @@ struct skl_dfw_module {
 } __packed;
 
 struct skl_dfw_algo_data {
-       u32 set_params:1;
-       u32 rsvd:31;
-       u32 max;
+       u32 set_params:2;
+       u32 rsvd:30;
        u32 param_id;
+       u32 max;
        char params[0];
 } __packed;