--- /dev/null
+From 943f4e64ee177cf44d7f2c235281fcda7c32bb28 Mon Sep 17 00:00:00 2001
+From: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
+Date: Mon, 13 Feb 2023 14:50:06 +0000
+Subject: ALSA: hda: cs35l41: Correct error condition handling
+
+From: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
+
+commit 943f4e64ee177cf44d7f2c235281fcda7c32bb28 upstream.
+
+Function cs_dsp_coeff_write_ctrl() can return 3 possible values:
+0 - no change, 1 - value has changed and -1 - error, so positive value
+is not an error.
+Fixes: 7406bdbc4fb8 ("ASoC: wm_adsp: Return whether changed when writing controls")
+
+Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
+Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
+Link: https://lore.kernel.org/r/20230213145008.1215849-2-sbinding@opensource.cirrus.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Cc: Richard Fitzgerald <rf@opensource.cirrus.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/hda_cs_dsp_ctl.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/sound/pci/hda/hda_cs_dsp_ctl.c
++++ b/sound/pci/hda/hda_cs_dsp_ctl.c
+@@ -218,10 +218,10 @@ int hda_cs_dsp_write_ctl(struct cs_dsp *
+ cs_ctl = cs_dsp_get_ctl(dsp, name, type, alg);
+ ret = cs_dsp_coeff_write_ctrl(cs_ctl, 0, buf, len);
+ mutex_unlock(&dsp->pwr_lock);
+- if (ret)
++ if (ret < 0)
+ return ret;
+
+- if (cs_ctl->flags & WMFW_CTL_FLAG_SYS)
++ if (ret == 0 || (cs_ctl->flags & WMFW_CTL_FLAG_SYS))
+ return 0;
+
+ ctl = cs_ctl->priv;