From nobody Tue Jun 16 19:33:56 2026 Received: from mail-dl1-f48.google.com (mail-dl1-f48.google.com [74.125.82.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3778F3FCB1A for ; Wed, 29 Apr 2026 13:20:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777468820; cv=none; b=bje9nU27mY+kF9BXJ34mTlpYYSjWoam8yPfKiuIFP2YPzenKCcgjw9tHL0+PAxU5EncqcQtlDIHaUOr1n8DK1I7kZHDwQ1IZUNF6BaxgvthEQ6LZealetRG6dhC4n3hhIIq/AXL07tZ+5oAlAqw7849B/ShHkl/32hHbYCV3i5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777468820; c=relaxed/simple; bh=qY6eB96FgX4rdA5fSKY5R/IfRUGHMZl8tl+qMd0TShc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EJKdNOFvLdLJfEB9X6XKnbwkTmtRNrNXTirmnq2ZcMDJROwzCP3fhvGgxFKr4jQcvIjE1tEfZiViD5Fl3J9dIPPCECZ8skooHlJo51wRYdG940nOQbhA0vHILLLKF7+2T/7EHXBZvq8gp7NLHLH0lTA1UY7zouwfTBeCd9oyFHw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CqijdlY4; arc=none smtp.client-ip=74.125.82.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CqijdlY4" Received: by mail-dl1-f48.google.com with SMTP id a92af1059eb24-12dbd0f7ecaso4683372c88.0 for ; Wed, 29 Apr 2026 06:20:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777468818; x=1778073618; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UR0FCOG1yA7m2DxeXQAQxx+l2dMQw9njJ++QgkzdIdw=; b=CqijdlY45PbkwkTiQ0qg8vOWJv22ZUPqXa/jzs3SicOn4Iz3NzAYGD0AA5YAY5Pg7n 53GCIltbWdbPF/h4Y8Ypx9Ywv/2gRmdVSOMbXO0krHUOUL573O8XG+qwRGGMRRG+sHf9 MwLYdsdXFBV9AdEsf0I9xAm8ZTLzkD77RVswROuMEORJkgprys/I5HpFbTsasOhwMCaz qL9/XY4ti28Radv2891fGSlkmOVlc9z6qGHk8jhUdnqRc+oaLZ+NDuWGe/XqIL7665NS mblpKfoAI0Kx8gYX+CHusBoIgVZj9WyZH50rmWXZBExg10r/dvAMt9AgUife7/thYMER MyOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777468818; x=1778073618; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=UR0FCOG1yA7m2DxeXQAQxx+l2dMQw9njJ++QgkzdIdw=; b=pfmndFRst7h02rXBr6mKLopBmjRqAkBspYWBHPEUY0F900uX0jlxCgHEPpXnMtbaOT xRURuHdFZT3+cmcrCfRDtXb8wIxhYUkZiYx8bgvb6s168iWEtLALuYfPAb26aD7UZoU1 fQ7JmFKHIR+/5wmTLgYqp3KC0zP02tXt1XHMy49hq4MAdC8XB5B8H2TM3MGVyxP+1CuS agxTFxaQB10pCdXDLGoJXRLNQ/Znp8amHOiuTyHjfy3Gy6+1UcOaiwQmoQJK4QyXu+QW 1kfSi5uPPC5F4Vfqgp3v+3YpUPAfqcUlwt/xWkTpeOP5iJWx+4fyaRUrrobh8etpuhnW c05A== X-Forwarded-Encrypted: i=1; AFNElJ/cx8CEoBTwTLlXKzAAJbRJAqoB8NufYOvIj5nzeFImnuvedEWGpdkqQpvhY4xaAqwZmDeX7E/2GlaK8ks=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9PFHWZW3pKw1yY38HBkrkXcFU2wCNeLkQkhX/AJoQsCG2FVma zs8VMZHYxwcc1bJ06j4UL24zKZhwPhHZyT62koxZ88zcmxbYMT5ubGES X-Gm-Gg: AeBDietoYrHJ3zLVB8h7nPWeANRgVive5wFsfBmCZnzJlk6Arv7TGG+hP7kTrRzn5EU 4KwA9hSn8e420F0ZjJTUSeoFEGOHFmZDSvLSQqz+ua/z+omNKIq5h3zdvDhdN7kf2MLQf3rI9Ie vv/m14WeilHMssuzB1SvTaU4I7A9rib+GT0w5EpTfn9uUTxtpc8z+pa0n0kRzDxOdm5/shVC1B2 Sx1GJ26tXAmTtPbTQJQqklvfsZr8H0RKgJHFIJAc/1ViWsapfpsZZi5JeROW823rBA+dYZa7Qnb JMILTE3HZQWdRi8f8S/B+Epgo6Yr4x2BF/4GbpSw3dsWtrJNiK7riYKaqNKTgUVT5/BI99hP9ob 8OTyU28fVx+fwUsZ/lgB9Qb+K2w//MlC155fG3/jTSW0DlZN3SmoJhMkJbie0HebZx8HFKSZZax X9SPCkC4f/0uNeaOXVvh/OjrKORg0LwJvN+Ii13ShUmEihQiLdQxSSXwgkpdw9y7S8J0tpzcb4q oUIsFlWsZMc X-Received: by 2002:a05:7023:b05:b0:12d:de3f:d848 with SMTP id a92af1059eb24-12de2a76b36mr1531162c88.43.1777468818213; Wed, 29 Apr 2026 06:20:18 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-87.user3p.v-tal.net.br. [177.4.161.87]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12de321df36sm3336852c88.7.2026.04.29.06.20.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 06:20:17 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Wed, 29 Apr 2026 10:20:01 -0300 Subject: [PATCH 1/2] ALSA: usb-audio: Roll back quirk control caches on write errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260429-alsa-usb-quirks-cache-rollback-v1-1-01b35c688b80@gmail.com> References: <20260429-alsa-usb-quirks-cache-rollback-v1-0-01b35c688b80@gmail.com> In-Reply-To: <20260429-alsa-usb-quirks-cache-rollback-v1-0-01b35c688b80@gmail.com> To: Takashi Iwai Cc: Thomas Ebeling , Ian Douglas Scott , Jaroslav Kysela , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= , stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5747; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=qY6eB96FgX4rdA5fSKY5R/IfRUGHMZl8tl+qMd0TShc=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDJmfWLt+Jr3vZcthXVazcHpSSTDLtdcBaeI1nexvtsgF6 lZPe9HXUcrCIMbFICumyLI6aZHlnq4HV+vjVnjAzGFlAhnCwMUpABNZ8IPhN8t5me7S2RcuRL24 qiuV4zzJeukc5qOdV7d79d5SWe85az4jw0rG19pptwOzd1+eK1+674HDb10br9ZzpbLHN/+cMCt 9MiMA X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 Several mixer quirk callbacks cache the requested control value in kcontrol->private_value before issuing a single vendor or class write. Their paired get and resume paths consume that cache directly, so a failed write currently leaves software state changed even though the update did not succeed. That can make later reads report a value the device never accepted and can replay the stale cache on resume. Restore the previous cached value on failure in the Audigy2NX LED, Emu0204 channel switch, Xonar U1 output switch, Native Instruments controls, FTU effect program switch, and Sound Blaster E1 input source switch. Fixes: 9cf3689bfe07 ("ALSA: usb-audio: Add audigy2nx resume support") Fixes: 5f503ee9e270 ("ALSA: usb-audio: Add Emu0204 channel switch resume su= pport") Fixes: 2bfb14c3b8fb ("ALSA: usb-audio: Add Xonar U1 resume support") Fixes: da6d276957ea ("ALSA: usb-audio: Add resume support for Native Instru= ments controls") Fixes: 0b4e9cfcef05 ("ALSA: usb-audio: Add resume support for FTU controls") Fixes: 388fdb8f882a ("ALSA: usb-audio: Support changing input on Sound Blas= ter E1") Cc: stable@vger.kernel.org Signed-off-by: C=C3=A1ssio Gabriel --- sound/usb/mixer_quirks.c | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c index 1bdaa46d4fe1..229be55e9158 100644 --- a/sound/usb/mixer_quirks.c +++ b/sound/usb/mixer_quirks.c @@ -333,6 +333,7 @@ static int snd_audigy2nx_led_put(struct snd_kcontrol *k= control, int index =3D kcontrol->private_value & 0xff; unsigned int value =3D ucontrol->value.integer.value[0]; int old_value =3D kcontrol->private_value >> 8; + unsigned long old_pval =3D kcontrol->private_value; int err; =20 if (value > 1) @@ -341,7 +342,11 @@ static int snd_audigy2nx_led_put(struct snd_kcontrol *= kcontrol, return 0; kcontrol->private_value =3D (value << 8) | index; err =3D snd_audigy2nx_led_update(mixer, value, index); - return err < 0 ? err : 1; + if (err < 0) { + kcontrol->private_value =3D old_pval; + return err; + } + return 1; } =20 static int snd_audigy2nx_led_resume(struct usb_mixer_elem_list *list) @@ -487,6 +492,7 @@ static int snd_emu0204_ch_switch_put(struct snd_kcontro= l *kcontrol, struct usb_mixer_elem_list *list =3D snd_kcontrol_chip(kcontrol); struct usb_mixer_interface *mixer =3D list->mixer; unsigned int value =3D ucontrol->value.enumerated.item[0]; + unsigned long old_pval =3D kcontrol->private_value; int err; =20 if (value > 1) @@ -497,7 +503,11 @@ static int snd_emu0204_ch_switch_put(struct snd_kcontr= ol *kcontrol, =20 kcontrol->private_value =3D value; err =3D snd_emu0204_ch_switch_update(mixer, value); - return err < 0 ? err : 1; + if (err < 0) { + kcontrol->private_value =3D old_pval; + return err; + } + return 1; } =20 static int snd_emu0204_ch_switch_resume(struct usb_mixer_elem_list *list) @@ -821,7 +831,11 @@ static int snd_xonar_u1_switch_put(struct snd_kcontrol= *kcontrol, =20 kcontrol->private_value =3D new_status; err =3D snd_xonar_u1_switch_update(list->mixer, new_status); - return err < 0 ? err : 1; + if (err < 0) { + kcontrol->private_value =3D old_status; + return err; + } + return 1; } =20 static int snd_xonar_u1_switch_resume(struct usb_mixer_elem_list *list) @@ -1159,7 +1173,8 @@ static int snd_nativeinstruments_control_put(struct s= nd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct usb_mixer_elem_list *list =3D snd_kcontrol_chip(kcontrol); - u8 oldval =3D (kcontrol->private_value >> 24) & 0xff; + unsigned long old_pval =3D kcontrol->private_value; + u8 oldval =3D (old_pval >> 24) & 0xff; u8 newval =3D ucontrol->value.integer.value[0]; int err; =20 @@ -1169,7 +1184,11 @@ static int snd_nativeinstruments_control_put(struct = snd_kcontrol *kcontrol, kcontrol->private_value &=3D ~(0xff << 24); kcontrol->private_value |=3D (unsigned int)newval << 24; err =3D snd_ni_update_cur_val(list); - return err < 0 ? err : 1; + if (err < 0) { + kcontrol->private_value =3D old_pval; + return err; + } + return 1; } =20 static const struct snd_kcontrol_new snd_nativeinstruments_ta6_mixers[] = =3D { @@ -1324,7 +1343,8 @@ static int snd_ftu_eff_switch_put(struct snd_kcontrol= *kctl, struct snd_ctl_elem_value *ucontrol) { struct usb_mixer_elem_list *list =3D snd_kcontrol_chip(kctl); - unsigned int pval =3D list->kctl->private_value; + unsigned long old_pval =3D list->kctl->private_value; + unsigned int pval =3D old_pval; int cur_val, err, new_val; =20 cur_val =3D pval >> 24; @@ -1335,7 +1355,11 @@ static int snd_ftu_eff_switch_put(struct snd_kcontro= l *kctl, kctl->private_value &=3D ~(0xff << 24); kctl->private_value |=3D new_val << 24; err =3D snd_ftu_eff_switch_update(list); - return err < 0 ? err : 1; + if (err < 0) { + kctl->private_value =3D old_pval; + return err; + } + return 1; } =20 static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer, @@ -2114,13 +2138,18 @@ static int snd_soundblaster_e1_switch_put(struct sn= d_kcontrol *kcontrol, { struct usb_mixer_elem_list *list =3D snd_kcontrol_chip(kcontrol); unsigned char value =3D !!ucontrol->value.integer.value[0]; + unsigned long old_pval =3D kcontrol->private_value; int err; =20 if (kcontrol->private_value =3D=3D value) return 0; kcontrol->private_value =3D value; err =3D snd_soundblaster_e1_switch_update(list->mixer, value); - return err < 0 ? err : 1; + if (err < 0) { + kcontrol->private_value =3D old_pval; + return err; + } + return 1; } =20 static int snd_soundblaster_e1_switch_resume(struct usb_mixer_elem_list *l= ist) --=20 2.54.0 From nobody Tue Jun 16 19:33:56 2026 Received: from mail-dl1-f44.google.com (mail-dl1-f44.google.com [74.125.82.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D84A23FCB27 for ; Wed, 29 Apr 2026 13:20:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777468825; cv=none; b=OjhlQfmf/oEfxKA4C1WjVFQGIYL8BvKvJuJ37VkPKb10BsqY5MLHepuywGQf++eFURG1RYFLbcHvS1TOvIjVcgqN4u/AFkz5OiM0raYU8lshXJTpLMwryYHwhYdBsymiay+wk5XaZn0YvbXNG9hUo/k7oN6Gu0zxSv9VqV1zCCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777468825; c=relaxed/simple; bh=feuCS+Wde8W7EpfVCWxGj5z6QZqJHZ4hcRmQpIJg2Y8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OUGmOHzHIQ1fYkdXnJMrNNMcxp5JuNhTEO8bqU7Md+YL8ioQ+p+o761yLm4GyqiRqC2/RQKggxJqxwVdrkQOovObU5Af9M4xN5ZosCKGRuSZ3FrNHh0Uni6avZv3XCzFlUrgbcOdxCeM4Un2s05yu7APkqWkIIhbfJo1NWB5PZQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=k2gXbMUj; arc=none smtp.client-ip=74.125.82.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k2gXbMUj" Received: by mail-dl1-f44.google.com with SMTP id a92af1059eb24-12db2e415a7so5124015c88.1 for ; Wed, 29 Apr 2026 06:20:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777468823; x=1778073623; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=syI6vCyidI7u0qaJd4ZC0RGGlbIolm5pPKH0di9GsB0=; b=k2gXbMUjAHIP9ks38qtvQQyWs2hSgZTiskIWCXpVnMz3H1jJiOJQo8xQRRu1mjeANA GoiytNp6pASpSH50tNwIOpS8nBto25mpeTgIOhL+gu8Z+9m8GO2kixc3ojTBvuEEIa89 U5iVAK+2/FTHI3t+TVMlbF+7NlCHm4eGu455n0fe5j0Q9g6VWiKoCyXYK/tVaktWaTdf 9JJbQSOT5vNsz5YWedSDrBev2J34aItEUL7bVrR9lLScHLUR6QIE1bUcGwR7jwG0OLhN 5CutsLThTzdwQVRa4VGE2NYB8mkWwna4BmdPiWRhsc5nisc7tvbZ8EUj+Hth3ew9Dd98 Or9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777468823; x=1778073623; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=syI6vCyidI7u0qaJd4ZC0RGGlbIolm5pPKH0di9GsB0=; b=IwHuuI3fW/SSxxGYl4nVjZVgwN43XN93aMVAPLg8yL5E29m3d6V2YEzsh8to6Qq71b 7WfASzKJLXTB2Eufpgvs8otsm382pIZ4cdXciLLgFujSNX/6CBX6b3Fk376SM7xpYwqV dr/MhaNPTvGgwSDK6jBs3uSkogZZ3dh2wM3ISX7RASrR2UaSJVD1RKrCq3PH2pYJ4hUP maBfJmnV48te9nmaj0kyu1QT74buIS7L3dh6lf7TH1FbO7t6tUByPLSB+d+ZdEMQ8qGM QCd65704qj013EFDGHW8rXYSq5qFy1BeJvKWSb8hynH8u3tw1b/jfQDe7yTYlqH5H+QD AUcg== X-Forwarded-Encrypted: i=1; AFNElJ8EUvbl9ZuMD9pZRxOL94WS2/QYJ6sdnr2gHjV2AecfEfdQgHyvg+CbuF3tfIvNzheaov8zLP3SuZUg3rg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4S5fCjnwRc+VmzCNKI5ImSAu9YqxGH/vk5JK/rLYZrT67UPfx 1j+pVn4tQluKgT4fGZSH3945FyL/nxqdPZdzWEB/ZYx900+QquYM0qB3 X-Gm-Gg: AeBDies6VXw/lVDc7io6IumgSjRfEKWJ/4yFHYW9v9LqDwwhUht0QSeFNUvUUf097Ax cSoOSwsBfD5ozreLK7DdPn1uDkElL2iL3KlVqwx1zYJXNgAXsHYoFaF43JskLz3it86isw8+hCj Ay/+XS8gSTOR8r19m1yzRcoATyHhkRAKxGyhaNCeaRCluXiwL9sz3rBZHG8i+M/Hkiz/a6ZANs3 PdTRVF6cxihL9NU8kiXOxdXNB4XmPPtTytmCq53URW/EljOJ+GKcYHxVQsiyvk9bq78Wc+CHnOo WszsXMa1TKI9GkwyrZVMjn+htauFcczlRAlcLCuDk0C7/yldQb5wrz+8mLvB5aVQu91T2YYQ1PX eU9G1b/bVBA5foAHM4ty9YwdX3gV95M2Xlq3GaEcEB4aVBfy3IwZn8BNUqSBJQiJggxQZQxgMBc BBkQsAwwpsGDrFRfkpTqGo2BhJs65DHCgT+iNevx+79hs7fVNIiLX4vDaUUXnSOek8zqLUUjx2e tc3ksImz/Yv X-Received: by 2002:a05:7022:e98d:b0:127:366f:8bb7 with SMTP id a92af1059eb24-12de2a4b858mr1514450c88.25.1777468822679; Wed, 29 Apr 2026 06:20:22 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-87.user3p.v-tal.net.br. [177.4.161.87]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12de321df36sm3336852c88.7.2026.04.29.06.20.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2026 06:20:22 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Wed, 29 Apr 2026 10:20:02 -0300 Subject: [PATCH 2/2] ALSA: usb-audio: Update Babyface Pro control caches only after successful writes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260429-alsa-usb-quirks-cache-rollback-v1-2-01b35c688b80@gmail.com> References: <20260429-alsa-usb-quirks-cache-rollback-v1-0-01b35c688b80@gmail.com> In-Reply-To: <20260429-alsa-usb-quirks-cache-rollback-v1-0-01b35c688b80@gmail.com> To: Takashi Iwai Cc: Thomas Ebeling , Ian Douglas Scott , Jaroslav Kysela , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= , stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1885; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=feuCS+Wde8W7EpfVCWxGj5z6QZqJHZ4hcRmQpIJg2Y8=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDJmfWLtajwc095kkiQt6yG67uunhz0dcbCv2ZizvXpO19 ZT3g+UpHaUsDGJcDLJiiiyrkxZZ7ul6cLU+boUHzBxWJpAhDFycAjAR2ceMDC/O8VfwN3XZpQQv m6kTe0jx7U7lwL3c7yqd/X2fOal3rmZkWLNdozE37vv6Tb0bz216FvG7dNOFcpHFTvM2TJFztZj EwQkA X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 snd_bbfpro_ctl_put() and snd_bbfpro_vol_put() cache the requested packed control state in kcontrol->private_value before issuing the USB write. Their get and resume paths use that cached value directly, so a failed write can leave the driver reporting and later replaying a setting the hardware never accepted. Update the cached state only after a successful USB write. Fixes: 3e8f3bd04716 ("ALSA: usb-audio: RME Babyface Pro mixer patch") Cc: stable@vger.kernel.org Signed-off-by: C=C3=A1ssio Gabriel --- sound/usb/mixer_quirks.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c index 229be55e9158..99975c3240a5 100644 --- a/sound/usb/mixer_quirks.c +++ b/sound/usb/mixer_quirks.c @@ -3027,12 +3027,14 @@ static int snd_bbfpro_ctl_put(struct snd_kcontrol *= kcontrol, if (val =3D=3D old_value) return 0; =20 + err =3D snd_bbfpro_ctl_update(mixer, reg, idx, val); + if (err < 0) + return err; + kcontrol->private_value =3D reg | ((idx & SND_BBFPRO_CTL_IDX_MASK) << SND_BBFPRO_CTL_IDX_SHIFT) | ((val & SND_BBFPRO_CTL_VAL_MASK) << SND_BBFPRO_CTL_VAL_SHIFT); - - err =3D snd_bbfpro_ctl_update(mixer, reg, idx, val); - return err < 0 ? err : 1; + return 1; } =20 static int snd_bbfpro_ctl_resume(struct usb_mixer_elem_list *list) @@ -3217,11 +3219,13 @@ static int snd_bbfpro_vol_put(struct snd_kcontrol *= kcontrol, =20 new_val =3D uvalue & SND_BBFPRO_MIXER_VAL_MASK; =20 + err =3D snd_bbfpro_vol_update(mixer, idx, new_val); + if (err < 0) + return err; + kcontrol->private_value =3D idx | (new_val << SND_BBFPRO_MIXER_VAL_SHIFT); - - err =3D snd_bbfpro_vol_update(mixer, idx, new_val); - return err < 0 ? err : 1; + return 1; } =20 static int snd_bbfpro_vol_resume(struct usb_mixer_elem_list *list) --=20 2.54.0