Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2715015pxv; Sun, 11 Jul 2021 23:36:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwNeaBYrKyqKBRpzKDPeBMHqFTqb39NwbwqfrgG1hgB+TRDq3ZWSJsTViRu1HOiy2NrWVCu X-Received: by 2002:a17:906:90ca:: with SMTP id v10mr6062537ejw.325.1626071788123; Sun, 11 Jul 2021 23:36:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626071788; cv=none; d=google.com; s=arc-20160816; b=cZT6rUt7olvP7LVpsIQpnSjXXIoYhzhm60XTQqIdqgyZDjoXHvuvFONfkl1Nm2cYbk N5isvcf1N5g/9NVfuDPJyRZE57JF/ARVcQ/VxqPhad5ik9WNGKTRBBrVO7fJRhTye3Nq ctLjqz1JTXIyUw0UFyrv+SLBYYwi5eHZ890v5y9XXtrk56lD5gUMfiDB7CUtFMDdGu68 +JL95OrmT3nKGXXKSu0IpT1sx20WfwO5EWiV+kJ1kqQHrHmdmTLXOjsSzTEhPiuT0/fp iIATnSzDbRgSE7L1KQf8JIHyefkxFVEEeGucIaE+9CLfxni3CL6EeZtlFY+8N9klDtZL +kNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=mw9McPmdPArhmfrlR5ZO+HwZcqAOAlsbPJ/L5XbzqEo=; b=nRQh4nei6uqn/haykJZtqkBWhgtYl3+CbWGqtKWdP321hJYdi16D8QEuLKTKRGKrT0 PbHIXQ9AJZhgG4DJRFDpblqOTf0rrZBrtbx6O10JWBJWSTypUWbcOX9KTLHolFV6lXg3 LfIlZflqOMrhYqK7OLmMSD9ufpBYMvcyX0Tc+lEzkJCtnrTcisJk2YeixNt0xyQstZiY PUlcLGC7z/ctoYwqV/uKBz+NZNYQprZceN4b3GBsMR53LMCu7alNiblTEcX3vpz0mEjN Ak37e7g1HFyIM0hJzIsie7/1ZYxk9n4Jpa8XTaZxjIatecj0iudaxbV84u3wSYp/yHpD qzYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vyW+ge2R; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b7si13020134edy.314.2021.07.11.23.36.05; Sun, 11 Jul 2021 23:36:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vyW+ge2R; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237011AbhGLGiB (ORCPT + 99 others); Mon, 12 Jul 2021 02:38:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:54392 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235658AbhGLGbj (ORCPT ); Mon, 12 Jul 2021 02:31:39 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9434F61183; Mon, 12 Jul 2021 06:28:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626071331; bh=OdVxhyYuYiddY8iejrOHqD+7/l8pxK2vvpZh8C284lU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vyW+ge2RCv1ZriapmPKowVulI/L/M8TFeQNUP4EMdiTOVcvvJptwu6rBf8WNbyH75 GqjeqJhwyQzoJkLzhOt6pG0vID5oVG2CnsIW0AvvFLsFVJSxMGC8Aw3RQQv1meABnJ eXXyEP/iHRW8icNS/6acJJVElfhxpqQxwTWQWx8I= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Geoffrey D. Bennett" , Takashi Iwai Subject: [PATCH 5.10 007/593] ALSA: usb-audio: scarlett2: Fix wrong resume call Date: Mon, 12 Jul 2021 08:02:47 +0200 Message-Id: <20210712060843.978749134@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060843.180606720@linuxfoundation.org> References: <20210712060843.180606720@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Takashi Iwai commit 785b6f29a795f109685f286b91e0250c206fbffb upstream. The current way of the scarlett2 mixer code managing the usb_mixer_elem_info object is wrong in two ways: it passes its internal index to the head.id field, and the val_type field is uninitialized. This ended up with the wrong execution at the resume because a bogus unit id is passed wrongly. Also, in the later code extensions, we'll have more mixer elements, and passing the index will overflow the unit id size (of 256). This patch corrects those issues. It introduces a new value type, USB_MIXER_BESPOKEN, which indicates a non-standard mixer element, and use this type for all scarlett2 mixer elements, as well as initializing the fixed unit id 0 for avoiding the overflow. Tested-by: Geoffrey D. Bennett Signed-off-by: Geoffrey D. Bennett Cc: Link: https://lore.kernel.org/r/49721219f45b7e175e729b0d9d9c142fd8f4342a.1624379707.git.g@b4.vu Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/usb/mixer.c | 3 +++ sound/usb/mixer.h | 1 + sound/usb/mixer_scarlett_gen2.c | 7 ++++++- 3 files changed, 10 insertions(+), 1 deletion(-) --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -3631,6 +3631,9 @@ static int restore_mixer_value(struct us struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list); int c, err, idx; + if (cval->val_type == USB_MIXER_BESPOKEN) + return 0; + if (cval->cmask) { idx = 0; for (c = 0; c < MAX_CHANNELS; c++) { --- a/sound/usb/mixer.h +++ b/sound/usb/mixer.h @@ -55,6 +55,7 @@ enum { USB_MIXER_U16, USB_MIXER_S32, USB_MIXER_U32, + USB_MIXER_BESPOKEN, /* non-standard type */ }; typedef void (*usb_mixer_elem_dump_func_t)(struct snd_info_buffer *buffer, --- a/sound/usb/mixer_scarlett_gen2.c +++ b/sound/usb/mixer_scarlett_gen2.c @@ -949,10 +949,15 @@ static int scarlett2_add_new_ctl(struct if (!elem) return -ENOMEM; + /* We set USB_MIXER_BESPOKEN type, so that the core USB mixer code + * ignores them for resume and other operations. + * Also, the head.id field is set to 0, as we don't use this field. + */ elem->head.mixer = mixer; elem->control = index; - elem->head.id = index; + elem->head.id = 0; elem->channels = channels; + elem->val_type = USB_MIXER_BESPOKEN; kctl = snd_ctl_new1(ncontrol, elem); if (!kctl) {