Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2489566pxj; Mon, 10 May 2021 04:20:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxwqnFtkj/9WSRCB+AnTCfdDcV6ZSOCgPdx5q3k4zFmnLhL/k6mJitT2jlflFs9EwP2IQrF X-Received: by 2002:a92:cccb:: with SMTP id u11mr17646796ilq.36.1620645648239; Mon, 10 May 2021 04:20:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620645648; cv=none; d=google.com; s=arc-20160816; b=Bxg6Ez4pFjyVOkF0nKFgzZ4q6K9019wJJTOw6aSjsCU/DIGPXaX62t338OpKQHjeS7 yaHG8MBJ92o0HHzziY1DKmce64U3c7YAiSpjPkvPpQy+nBvaS7SzxvTv53hoFZfnrWta 9i3vbfu+51g0Bb1aKXP3u5KEjgdNyIN5BMaBiYq+rxVVr8DLXlK1hli2WLEoLBjI1lnY hSPYRMbMji0YWToIvQeJiWN4nBS8RqBZ52EYYrpRVKxEUqlikq7UMqDPjdKhSwBUKFLa s39DqnBW/qwJuVGjovh2bHyy4H2JIe6I9EmfRdrNDFAJAk/k5eySmiZHEF0+ASr6iTg+ ZxwQ== 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=KO/n0HFH5/K+aKlWotmbL1kGBAhZYNiFuUMXbfA536Uvdt1tzpVF9wo9vX1MdSKgYW 5Z23M6v24tlaIye1zbN1u8Ue44a0Eqr5q13P59f3fTfyupeSA8Vetnn2W9tYMUdI+6wr u9I8n2roemZvj+xo/VF8uJhg85rJXBacrY705FAE90CLvAqcaRs8ZOH4nj8xk+fB4yTN B/bJ7X5/A4/G37Rmafb5r4JAyJHtMDKRHA+yg9rrqh0QWjROBxvGQdC3NWZ1hb9aRdy2 LM51GoeRyRzzzkDhG6Se0akWrmyg07G0fj3wvCxRVi1ddAYt4prPN1PgiTC0aEEN0ODl qPnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=TxAt6ES8; 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 k7si15935815ilo.146.2021.05.10.04.20.35; Mon, 10 May 2021 04:20:48 -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=TxAt6ES8; 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 S233545AbhEJLON (ORCPT + 99 others); Mon, 10 May 2021 07:14:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:42198 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233682AbhEJKub (ORCPT ); Mon, 10 May 2021 06:50:31 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2AF8E616E9; Mon, 10 May 2021 10:39:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620643182; bh=W4jsf7k3eBjDF7OUPqH+bVQTdM2ddfSmjemxqPJ8l3w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TxAt6ES8/ze2KO0TGvEX6C5z4p3VLdbcLhYvi79dwr4nflmAN8buQtZe+AtQJn3u6 6ZMnCGlEU4WhPev375kZHVZ4YoWuBzto1Z7Ujnisr/h4nbm2zEjSOqVcCGxiXp3Bsq lJPjflOntWO2kDT5+kPBDud0FjWwn9/tXpdIarok= 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.10 212/299] ALSA: usb-audio: Explicitly set up the clock selector Date: Mon, 10 May 2021 12:20:09 +0200 Message-Id: <20210510102011.945422522@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510102004.821838356@linuxfoundation.org> References: <20210510102004.821838356@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;