Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp2970882rdb; Mon, 4 Dec 2023 12:38:25 -0800 (PST) X-Google-Smtp-Source: AGHT+IEDwPsVVZxEyDvqhkfMUTsPbEWBesfkh9wvnrznLHRen36alBczbjYOicwh187pmDqgT8vX X-Received: by 2002:a17:902:7d87:b0:1d0:6ffd:aded with SMTP id a7-20020a1709027d8700b001d06ffdadedmr1856052plm.84.1701722305360; Mon, 04 Dec 2023 12:38:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701722305; cv=none; d=google.com; s=arc-20160816; b=IPxhEvJ95XrO3iOy0WWrrrnLwtgBuf0y7bf83kBM6PDbFLwxDr8ipzPOv7Y/FfNhny cX+0FPNk/oIyAops4Myx7zaz72MgW678ALPqKi6Q3DhMCj76DoZ3sRTqRTzbZCRCRugW zsxJ3vnNKduY4Qk+ddqMEozTOjy+aWDcBIGW3Dqun5vSZF9BLnw0qeFABObOn/+tzbEe brrIo+39YU7RAkr5xoWW1KaphSrhh9zODs2fA27bKE2I3MdbV4Qn6u2CSD9P35y5XiLH 4yAKZy56G/Je0mEetgyIJp9D7ZdYXy8mfHEPANBug6XuL8UosbAucmrkCNmR326/jCUI PXtg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=QfY5dpooq+7+XRKcdrLv5IjGRhN06lOrclIsbIQjMYs=; fh=4mu/FpAkVp24UmPGNI06K0EgbVaGUUKhCiKUcxDebBQ=; b=Q+uIpvsSc3XYqDbK44MFd2+6VVar6UR0zqtfEc4DwYuCr+bNS3mN04eVSNFweQn12g fB4qGKlr22/HyCTljrUZw1nijp1oJB+RxciYKAeCil69VBzXo0nh5KGTt4ouasLWk7bX qT+4qSaUIbu9ohS8lc2GlS+AZ7jmpFx2A8GtcG1a0gxo9mmAzyaEKgWgGFeUGCYkE4Je 84ay7A5zJlVSrMTXGh1+Jb3SFR0x2PGXeOjj3DxEP/oHrrvAJ5DMN7pRtmpfP6433uZf zveobB7riBVccsYO7djBGbK9CuCKprxFC8iIoPUHysLpjaTH3yj4nlKt5XiwHcQjAPc2 Q4gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=tFO35PCL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id j3-20020a17090276c300b001cf5c99f036si8462595plt.90.2023.12.04.12.38.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 12:38:25 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=tFO35PCL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 6193A80ADF1E; Mon, 4 Dec 2023 12:38:24 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346429AbjLDUiJ (ORCPT + 99 others); Mon, 4 Dec 2023 15:38:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346169AbjLDUhi (ORCPT ); Mon, 4 Dec 2023 15:37:38 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DC6BE1FC9 for ; Mon, 4 Dec 2023 12:35:45 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E9076C433C7; Mon, 4 Dec 2023 20:35:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1701722145; bh=W49vv/JqMjouqkjwibwavXXrMU6TnI5qndMQ4YxP1eY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tFO35PCLdomiqVBBFQJcF+asRYNDqXmOKeo6PnkehoztYPMAxaPMEbk2X3Xii0Fp3 tpMG30FP9wjyrzoLfM3yYpb7nVVe/1xiBUTtWw7Q4VsL8BsUplN9/t2GNGx8wOBDlA Wl907MyRN2K2aezxYr+qOWGxGkIrHEJp8rJtlCaw+iJ9CYS7gVvN1ICja/jo0eIgAg KX3Hvx8pZ/qgjgbx1cZPJZiM6CF2z31KmAgR7zpXqwkux19hu4HDukx62VhZ2tzKeG qXpj4eKqnOhukqwCIpTM/8StILwEKylW0JMamZotOReB6AWIapYz7uCV6v0aBbAw5J m7v2CxmDAkKYA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Peter Ujfalusi , Kai Vehmanen , Pierre-Louis Bossart , Ranjani Sridharan , Takashi Iwai , Sasha Levin , perex@perex.cz, tiwai@suse.com, linux-sound@vger.kernel.org Subject: [PATCH AUTOSEL 6.1 11/17] ALSA: hda: intel-nhlt: Ignore vbps when looking for DMIC 32 bps format Date: Mon, 4 Dec 2023 15:34:56 -0500 Message-ID: <20231204203514.2093855-11-sashal@kernel.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231204203514.2093855-1-sashal@kernel.org> References: <20231204203514.2093855-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.1.65 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 04 Dec 2023 12:38:24 -0800 (PST) From: Peter Ujfalusi [ Upstream commit 7b4c93a50a2ebbbaf656cc4fa6aca74a6166d85b ] When looking up DMIC blob from the NHLT table and the format is 32 bits, ignore the vbps matching for 32 bps for DMIC since some NHLT table have the vbps as 24, some have it as 32. The DMIC hardware supports only one type of 32 bit sample size, which is 24 bit sampling on the MSB side and bits[1:0] is used for indicating the channel number. Signed-off-by: Peter Ujfalusi Reviewed-by: Kai Vehmanen Reviewed-by: Pierre-Louis Bossart Reviewed-by: Ranjani Sridharan Link: https://lore.kernel.org/r/20231127111658.17275-1-peter.ujfalusi@linux.intel.com Signed-off-by: Takashi Iwai Signed-off-by: Sasha Levin --- sound/hda/intel-nhlt.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/sound/hda/intel-nhlt.c b/sound/hda/intel-nhlt.c index 2c4dfc0b7e342..696a958d93e9c 100644 --- a/sound/hda/intel-nhlt.c +++ b/sound/hda/intel-nhlt.c @@ -238,7 +238,7 @@ EXPORT_SYMBOL(intel_nhlt_ssp_mclk_mask); static struct nhlt_specific_cfg * nhlt_get_specific_cfg(struct device *dev, struct nhlt_fmt *fmt, u8 num_ch, - u32 rate, u8 vbps, u8 bps) + u32 rate, u8 vbps, u8 bps, bool ignore_vbps) { struct nhlt_fmt_cfg *cfg = fmt->fmt_config; struct wav_fmt *wfmt; @@ -255,8 +255,12 @@ nhlt_get_specific_cfg(struct device *dev, struct nhlt_fmt *fmt, u8 num_ch, dev_dbg(dev, "Endpoint format: ch=%d fmt=%d/%d rate=%d\n", wfmt->channels, _vbps, _bps, wfmt->samples_per_sec); + /* + * When looking for exact match of configuration ignore the vbps + * from NHLT table when ignore_vbps is true + */ if (wfmt->channels == num_ch && wfmt->samples_per_sec == rate && - vbps == _vbps && bps == _bps) + (ignore_vbps || vbps == _vbps) && bps == _bps) return &cfg->config; cfg = (struct nhlt_fmt_cfg *)(cfg->config.caps + cfg->config.size); @@ -289,6 +293,7 @@ intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt, { struct nhlt_specific_cfg *cfg; struct nhlt_endpoint *epnt; + bool ignore_vbps = false; struct nhlt_fmt *fmt; int i; @@ -298,7 +303,26 @@ intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt, dev_dbg(dev, "Looking for configuration:\n"); dev_dbg(dev, " vbus_id=%d link_type=%d dir=%d, dev_type=%d\n", bus_id, link_type, dir, dev_type); - dev_dbg(dev, " ch=%d fmt=%d/%d rate=%d\n", num_ch, vbps, bps, rate); + if (link_type == NHLT_LINK_DMIC && bps == 32 && (vbps == 24 || vbps == 32)) { + /* + * The DMIC hardware supports only one type of 32 bits sample + * size, which is 24 bit sampling on the MSB side and bits[1:0] + * are used for indicating the channel number. + * It has been observed that some NHLT tables have the vbps + * specified as 32 while some uses 24. + * The format these variations describe are identical, the + * hardware is configured and behaves the same way. + * Note: when the samples assumed to be vbps=32 then the 'noise' + * introduced by the lower two bits (channel number) have no + * real life implication on audio quality. + */ + dev_dbg(dev, + " ch=%d fmt=%d rate=%d (vbps is ignored for DMIC 32bit format)\n", + num_ch, bps, rate); + ignore_vbps = true; + } else { + dev_dbg(dev, " ch=%d fmt=%d/%d rate=%d\n", num_ch, vbps, bps, rate); + } dev_dbg(dev, "Endpoint count=%d\n", nhlt->endpoint_count); epnt = (struct nhlt_endpoint *)nhlt->desc; @@ -307,7 +331,8 @@ intel_nhlt_get_endpoint_blob(struct device *dev, struct nhlt_acpi_table *nhlt, if (nhlt_check_ep_match(dev, epnt, bus_id, link_type, dir, dev_type)) { fmt = (struct nhlt_fmt *)(epnt->config.caps + epnt->config.size); - cfg = nhlt_get_specific_cfg(dev, fmt, num_ch, rate, vbps, bps); + cfg = nhlt_get_specific_cfg(dev, fmt, num_ch, rate, + vbps, bps, ignore_vbps); if (cfg) return cfg; } -- 2.42.0