[v2,1/3] ALSA: hda: cs35l41: Correct error condition handling

Message ID 20230213145008.1215849-2-sbinding@opensource.cirrus.com
State New
Headers
Series Fixes and Improvements for CS35L41 HDA |

Commit Message

Stefan Binding Feb. 13, 2023, 2:50 p.m. UTC
  From: Vitaly Rodionov <vitalyr@opensource.cirrus.com>

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>
---
 sound/pci/hda/hda_cs_dsp_ctl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Richard Fitzgerald Feb. 26, 2023, 11:16 a.m. UTC | #1
On 13/2/23 14:50, Stefan Binding wrote:
> From: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
> 
> 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>
> ---
>   sound/pci/hda/hda_cs_dsp_ctl.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/pci/hda/hda_cs_dsp_ctl.c b/sound/pci/hda/hda_cs_dsp_ctl.c
> index 5433f6227ac9..463ca06036bf 100644
> --- 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 *dsp, const char *name, int type,
>   	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;

Hi Takashi

Could you queue this patch as a bugfix for 6.2 please?
The cs_dsp patch to return 1 for changed has gone into 6.2
but we missed that this hda_cs_dsp code would break.
  
Takashi Iwai Feb. 27, 2023, 11:48 p.m. UTC | #2
On Sun, 26 Feb 2023 12:16:43 +0100,
Richard Fitzgerald wrote:
> 
> On 13/2/23 14:50, Stefan Binding wrote:
> > From: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
> > 
> > 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>
> > ---
> >   sound/pci/hda/hda_cs_dsp_ctl.c | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/sound/pci/hda/hda_cs_dsp_ctl.c b/sound/pci/hda/hda_cs_dsp_ctl.c
> > index 5433f6227ac9..463ca06036bf 100644
> > --- 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 *dsp, const char *name, int type,
> >   	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;
> 
> Hi Takashi
> 
> Could you queue this patch as a bugfix for 6.2 please?
> The cs_dsp patch to return 1 for changed has gone into 6.2
> but we missed that this hda_cs_dsp code would break.

Could you just request the cherry-pick of the necessary fix commits
via stable@vger.kernel.org (with Cc to Greg / Sasha)?

I've been still traveling in this week, so it's better for you doing
that by yourself.


thanks,

Takashi
  

Patch

diff --git a/sound/pci/hda/hda_cs_dsp_ctl.c b/sound/pci/hda/hda_cs_dsp_ctl.c
index 5433f6227ac9..463ca06036bf 100644
--- 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 *dsp, const char *name, int type,
 	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;