Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2510452pxj; Mon, 10 May 2021 04:52:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz8hd1n97w0BszToawF/W5p3pe+R0i3vVoH4eKWrtcNarrtNHWaK1C+FO7Z+QviFwLwonyZ X-Received: by 2002:a17:906:ce5a:: with SMTP id se26mr25623644ejb.332.1620647463550; Mon, 10 May 2021 04:51:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620647463; cv=none; d=google.com; s=arc-20160816; b=FRDU3mxJzzuWxRmrBs6i7n/VFSB+fORJoRqnEe4/bbmKXBcJr8XfXKlwvPJA0prv1y ms/vYmqi/MEN+vN+8kTOOqOrD0YpfaZ7/ECLu4VsDVw0cGYLCEDxd+zB9H+LtIIz8bcQ X3EFTXBO+fbs+kpTpUi6lXsoWj87+hcSbCIeeXe9P2Dv3AKjDflArvnZTEukahqdhzge +VFcdg2BH+GyRkf1wEqYQcHcORc0FOzVTMlwZv/RAea1lLPpp2FT2FRB4Lw8R+1DU/p6 sVKfkJR2qmrURsWUTBMP8xPQce14+1fSpjpkzy8CVPVRNDTGUnS1B8T4IpJfmfgyfAhy Y9xg== 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=GrHRxiJ/41mhVtKHA4OdMPjXDdW9xmlvlyD6q7H26io=; b=j/oDcEcnOIRvxBXOXuyRqx7+lpZZdl2iJVMAS2K6L3oXTPXWlBgY+3MNffAqj/GlkJ yS38c7N30Rt3S7eUtDQXzPDMkD1OkGJFZXSWj/AjmQA9NLJBzQXdeBF5DOOGanyh36Ph ihkALhq7IP0sTJ3apVgr0i6xp/MwqugIA8Pew5JdF8yt7IfknWRzV1eSBKYCrKJM8ZuD 2lZ7LkQ3+stGSHalKmlyYZN/xV9GoGrgiNe+amd7zvFbvB0z/kZr6r/wrbmOS6xHpeO8 HA9G3UAPAxZQ4nmbSZS/hPoOPVmRTWb6OZSIwHr4Afrdx2LW0GeywUr8pPugProX9C/5 DJZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=RpwZGpT2; 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 u12si13300381ejb.458.2021.05.10.04.50.37; Mon, 10 May 2021 04:51:03 -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=RpwZGpT2; 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 S242822AbhEJLrq (ORCPT + 99 others); Mon, 10 May 2021 07:47:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:52744 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235223AbhEJLA3 (ORCPT ); Mon, 10 May 2021 07:00:29 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4C17961C49; Mon, 10 May 2021 10:53:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620643993; bh=W4jsf7k3eBjDF7OUPqH+bVQTdM2ddfSmjemxqPJ8l3w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RpwZGpT2qGsm0RvgKahOl9Sna9r9xy1LDS9ua+BNYRz+v4ddVG+a7Jar9YtfENKwV Q8rs8uDkK9oVLW8WdejIGGDYooAbrdARlTD8i8eS/+zxzE02fCvd+AkzOS2gmIDLW9 6PeKXyHFHEnIjkM9O0S4hDGKKwQiPE+gBmvWdwmQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Geraldo Nascimento , Takashi Iwai Subject: [PATCH 5.11 243/342] ALSA: usb-audio: Explicitly set up the clock selector Date: Mon, 10 May 2021 12:20:33 +0200 Message-Id: <20210510102018.111724295@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102010.096403571@linuxfoundation.org> References: <20210510102010.096403571@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 d2e8f641257d0d3af6e45d6ac2d6f9d56b8ea964 upstream. In the current code, we have some assumption that the audio clock selector has been set up implicitly and don't want to touch it unless it's really needed for the fallback autoclock setup. This works for most devices but some seem having a problem. Partially this was covered for the devices with a single connector at the initialization phase (commit 086b957cc17f "ALSA: usb-audio: Skip the clock selector inquiry for single connections"), but also there are cases where the wrong clock set up is kept silently. The latter seems to be the cause of the noises on Behringer devices. In this patch, we explicitly set up the audio clock selector whenever the appropriate node is found. Reported-by: Geraldo Nascimento BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=199327 Link: https://lore.kernel.org/r/CAEsQvcvF7LnO8PxyyCxuRCx=7jNeSCvFAd-+dE0g_rd1rOxxdw@mail.gmail.com Cc: Link: https://lore.kernel.org/r/20210413084152.32325-1-tiwai@suse.de Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/usb/clock.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) --- a/sound/usb/clock.c +++ b/sound/usb/clock.c @@ -296,7 +296,7 @@ static int __uac_clock_find_source(struc selector = snd_usb_find_clock_selector(chip->ctrl_intf, entity_id); if (selector) { - int ret, i, cur; + int ret, i, cur, err; /* the entity ID we are looking for is a selector. * find out what it currently selects */ @@ -318,13 +318,17 @@ static int __uac_clock_find_source(struc ret = __uac_clock_find_source(chip, fmt, selector->baCSourceID[ret - 1], visited, validate); + if (ret > 0) { + err = uac_clock_selector_set_val(chip, entity_id, cur); + if (err < 0) + return err; + } + if (!validate || ret > 0 || !chip->autoclock) return ret; /* The current clock source is invalid, try others. */ for (i = 1; i <= selector->bNrInPins; i++) { - int err; - if (i == cur) continue; @@ -390,7 +394,7 @@ static int __uac3_clock_find_source(stru selector = snd_usb_find_clock_selector_v3(chip->ctrl_intf, entity_id); if (selector) { - int ret, i, cur; + int ret, i, cur, err; /* the entity ID we are looking for is a selector. * find out what it currently selects */ @@ -412,6 +416,12 @@ static int __uac3_clock_find_source(stru ret = __uac3_clock_find_source(chip, fmt, selector->baCSourceID[ret - 1], visited, validate); + if (ret > 0) { + err = uac_clock_selector_set_val(chip, entity_id, cur); + if (err < 0) + return err; + } + if (!validate || ret > 0 || !chip->autoclock) return ret;