ASoC: Intel: Skylake: Add dynamic module id support
authorSriram Periyasamy <sriramx.periyasamy@intel.com>
Tue, 7 Nov 2017 10:46:23 +0000 (16:16 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 8 Nov 2017 18:58:16 +0000 (18:58 +0000)
Module id is a property of firmware manifest and can vary between
platforms so use the uuid instead of module id for pins.

Signed-off-by: Sriram Periyasamy <sriramx.periyasamy@intel.com>
Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com>
Acked-By: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl-topology.c

index 90f8c83..b590742 100644 (file)
@@ -2054,6 +2054,8 @@ static int skl_tplg_fill_pin(struct device *dev,
                        struct skl_module_pin *m_pin,
                        int pin_index)
 {
+       int ret;
+
        switch (tkn_elem->token) {
        case SKL_TKN_U32_PIN_MOD_ID:
                m_pin[pin_index].id.module_id = tkn_elem->value;
@@ -2063,6 +2065,14 @@ static int skl_tplg_fill_pin(struct device *dev,
                m_pin[pin_index].id.instance_id = tkn_elem->value;
                break;
 
+       case SKL_TKN_UUID:
+               ret = skl_tplg_get_uuid(dev, m_pin[pin_index].id.mod_uuid.b,
+                       (struct snd_soc_tplg_vendor_uuid_elem *)tkn_elem);
+               if (ret < 0)
+                       return ret;
+
+               break;
+
        default:
                dev_err(dev, "%d Not a pin token\n", tkn_elem->token);
                return -EINVAL;
@@ -2487,6 +2497,7 @@ static int skl_tplg_get_token(struct device *dev,
 
        case SKL_TKN_U32_PIN_MOD_ID:
        case SKL_TKN_U32_PIN_INST_ID:
+       case SKL_TKN_UUID:
                ret = skl_tplg_fill_pins_info(dev,
                                mconfig, tkn_elem, dir,
                                pin_index);
@@ -2549,6 +2560,7 @@ static int skl_tplg_get_tokens(struct device *dev,
        struct snd_soc_tplg_vendor_value_elem *tkn_elem;
        int tkn_count = 0, ret;
        int off = 0, tuple_size = 0;
+       bool is_module_guid = true;
 
        if (block_size <= 0)
                return -EINVAL;
@@ -2564,8 +2576,15 @@ static int skl_tplg_get_tokens(struct device *dev,
                        continue;
 
                case SND_SOC_TPLG_TUPLE_TYPE_UUID:
-                       ret = skl_tplg_get_uuid(dev, mconfig->guid,
-                                       array->uuid);
+                       if (is_module_guid) {
+                               ret = skl_tplg_get_uuid(dev, mconfig->guid,
+                                                       array->uuid);
+                               is_module_guid = false;
+                       } else {
+                               ret = skl_tplg_get_token(dev, array->value, skl,
+                                                        mconfig);
+                       }
+
                        if (ret < 0)
                                return ret;