Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit a8cd7066 authored by Kamil Lulko's avatar Kamil Lulko Committed by Mark Brown
Browse files

ASoC: Intel: Skylake: Strip T and L from TLV IPCs



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: default avatarKamil Lulko <kamilx.lulko@intel.com>
Signed-off-by: default avatarCezary Rojewski <cezary.rojewski@intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 02923faa
Loading
Loading
Loading
Loading
+9 −13
Original line number Diff line number Diff line
@@ -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 (w->power)
			return skl_set_module_params(skl->skl_sst,