OSDN Git Service

ASoC: Intel: Skylake: Strip T and L from TLV IPCs
authorKamil Lulko <kamilx.lulko@intel.com>
Thu, 13 Jun 2019 19:04:36 +0000 (21:04 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 25 Jun 2019 14:33:57 +0000 (15:33 +0100)
cAVS modules do not require Type and Length header within the
set_module_params IPC. This is also true for Vendor modules. The
userspace (like tinymix) always appends this header to TLV controls
which are used for set_module_params. Simply assume this header is
always present in the payload and omit it from the IPC.

Signed-off-by: Kamil Lulko <kamilx.lulko@intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl-topology.c

index 99825dd..c353eb1 100644 (file)
@@ -1492,22 +1492,18 @@ static int skl_tplg_tlv_control_set(struct snd_kcontrol *kcontrol,
        struct skl *skl = get_skl_ctx(w->dapm->dev);
 
        if (ac->params) {
+               /*
+                * Widget data is expected to be stripped of T and L
+                */
+               size -= 2 * sizeof(unsigned int);
+               data += 2;
+
                if (size > ac->max)
                        return -EINVAL;
-
                ac->size = size;
-               /*
-                * if the param_is is of type Vendor, firmware expects actual
-                * parameter id and size from the control.
-                */
-               if (ac->param_id == SKL_PARAM_VENDOR_ID) {
-                       if (copy_from_user(ac->params, data, size))
-                               return -EFAULT;
-               } else {
-                       if (copy_from_user(ac->params,
-                                          data + 2, size))
-                               return -EFAULT;
-               }
+
+               if (copy_from_user(ac->params, data, size))
+                       return -EFAULT;
 
                if (w->power)
                        return skl_set_module_params(skl->skl_sst,