Message ID | 20240118165811.13672-2-johan+linaro@kernel.org |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-30383-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2bc4:b0:101:a8e8:374 with SMTP id hx4csp478461dyb; Thu, 18 Jan 2024 08:59:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IEFLQ7ji4Pa1jV8AiyVPR02Z58QJkvggY771ZbrBM03xS8ulj6PLNggdnlBS94FDw18626D X-Received: by 2002:a17:906:fc26:b0:a2c:e44a:ebdc with SMTP id ov38-20020a170906fc2600b00a2ce44aebdcmr643308ejb.77.1705597189335; Thu, 18 Jan 2024 08:59:49 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705597189; cv=pass; d=google.com; s=arc-20160816; b=GTiWejKGJKdXOey+JplBb6A2ydvDlphzDLrFpOc1B7aoQS0Lcs5UTjE2x9mnMKPd4o xVMGerXTrBq0OemMoNn+KA4Hl8KVKaJF0e7hYtCKHf6BNK0zbyf15YkkY2M6En9oUGaD 4Y89X2qUvFpZv2V6121HJQl45BnSoHpd7tmsTF9yUoHO3fAsLsHRFOrGzLKKbqNxJyHp KG4qYHlfXlwq9hV4HwNyl48X5yZ9wEu1dRuyTw6BhGV6CdXnZNCDb0XBi6ZfblMlpDcz btSrVQykcdlCoIEbm+gUXzZUGdIhENxrO16tvGt6NnfEYN1+d6ENMVfieu7K8ov3pXa0 9t/w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=ayA3uYVWcLUfKslHi/VGycToGXQXH1vRSMNpkm/LKsQ=; fh=KBIhiGdu1Ygtr3M+FTFcsBcOHAnQgw4Q3/a7frwkCBE=; b=CcftAHtRaIko6f3Qep19RtbRkKqOEELY+o6HTc8Mrr1rjkWum9pFCjChEFQnDHHvHj AjikC+ePZ6a7LQG+PUid0tvqLghxYb5UnXi9TMoPqnoVIX92qyV556YPEOfGrCUve6t1 GIFTqKEClTEWF+HKXmVmFPwizEvLI3r50901Pm5ucsk54iIiL6WQvH1eSoSNfAdvcl6U rQx4/d8jaBc2EB1Gr7q0BCNFD/uSoW9vrxue7M2Rb3V9iU8+GP8vCXJobZGZ3Q3bL+Y8 XwHoOlUb2Tc4ztRze+qSa8QHPLGTazKkdd8Ejvfyx+6zhgvr+4CD1FrALbyUhrHAImWp C9xw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=JSLp7lP+; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-30383-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-30383-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id c7-20020a170906694700b00a2c71349f8csi6613809ejs.88.2024.01.18.08.59.49 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jan 2024 08:59:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-30383-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=JSLp7lP+; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-30383-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-30383-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id F11DB1F222FD for <ouuuleilei@gmail.com>; Thu, 18 Jan 2024 16:59:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B7C302D638; Thu, 18 Jan 2024 16:58:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JSLp7lP+" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F14D62C1BD; Thu, 18 Jan 2024 16:58:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705597106; cv=none; b=XlRCm4wBRQFaeTJgmploynDAHCaIKnlkJSNTdVFo61G9/mrwMmOVugItxpJ7JvznGJVL63nlqeb/3bIN82VZOc62vOtTSq1SmUOqqsacWssT4JzJYtP88Z9O2r5YdaCXP7kMPh4OO0CDv3wwBw1tJPPWPjahk6+EnUrtlcWQrOY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705597106; c=relaxed/simple; bh=j++VE3yyl/3Aq6hN2lI/I5Lv3fNUZ9f2+8EY9q5HghQ=; h=Received:DKIM-Signature:Received:From:To:Cc:Subject:Date: Message-ID:X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=oWnl9dzwyTJwXs371qVreHQvu/pkTEkzHljrms5/af7rDGG6zNR8TRCSF0e87zPFl1++TtwBXtRHyTbza9JjrLSwACTfra/D1VatCQXg8vC3PGh71HIa1OngWW2GGhDiRiuzwSVuyyQRnwm4Rjq+hZjHidrTt+gTpOBrDvwhroY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JSLp7lP+; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9DEFFC433C7; Thu, 18 Jan 2024 16:58:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705597105; bh=j++VE3yyl/3Aq6hN2lI/I5Lv3fNUZ9f2+8EY9q5HghQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JSLp7lP+yt2+TNDtjYwQo3EhajRF3UyEJl8Qt1EyujY64k5U+PZVx5JcOKgBs+35j 6n3xNowULaMqLpw5e66YN3REKKMbwnPoceprkwxWR18V4gXCc8z3+DYZClyIIHNX/9 CejlplkAfn1oKeq2i3MofOS4s4MMM2K9dhViBL7eiziFiW+DbnxgIN/W4SnItWKGzU 1D00ayoUHdNqDpTBxrzzT7o34mt6DRlKEvYW5kzNfpCuVdvss2jiLNZGZcNPlj7Hgj NcuDaBV7sw7h52cu8Zg+kq1ou4oStn41Bh8sbtJqOj1cMENM3ZQwzLAp4aEyaBiPvU 9COmIaQoyDZfw== Received: from johan by xi.lan with local (Exim 4.96.2) (envelope-from <johan+linaro@kernel.org>) id 1rQVir-0003Yy-1q; Thu, 18 Jan 2024 17:58:33 +0100 From: Johan Hovold <johan+linaro@kernel.org> To: Mark Brown <broonie@kernel.org> Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Banajit Goswami <bgoswami@quicinc.com>, Liam Girdwood <lgirdwood@gmail.com>, Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>, alsa-devel@alsa-project.org, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold <johan+linaro@kernel.org>, stable@vger.kernel.org Subject: [PATCH v3 1/5] ASoC: codecs: wsa883x: fix PA volume control Date: Thu, 18 Jan 2024 17:58:07 +0100 Message-ID: <20240118165811.13672-2-johan+linaro@kernel.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20240118165811.13672-1-johan+linaro@kernel.org> References: <20240118165811.13672-1-johan+linaro@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788448278364573054 X-GMAIL-MSGID: 1788448278364573054 |
Series |
ASoC: qcom: volume fixes and codec cleanups
|
|
Commit Message
Johan Hovold
Jan. 18, 2024, 4:58 p.m. UTC
The PA gain can be set in steps of 1.5 dB from -3 dB to 18 dB, that is,
in fifteen levels.
Fix the range of the PA volume control to avoid having the first
sixteen levels all map to -3 dB.
Note that level 0 (-3 dB) does not mute the PA so the mute flag should
also not be set.
Fixes: cdb09e623143 ("ASoC: codecs: wsa883x: add control, dapm widgets and map")
Cc: stable@vger.kernel.org # 6.0
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
sound/soc/codecs/wsa883x.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Comments
On Thu, Jan 18, 2024 at 05:58:07PM +0100, Johan Hovold wrote: > The PA gain can be set in steps of 1.5 dB from -3 dB to 18 dB, that is, > in fifteen levels. > > Fix the range of the PA volume control to avoid having the first > sixteen levels all map to -3 dB. > > Note that level 0 (-3 dB) does not mute the PA so the mute flag should > also not be set. > > Fixes: cdb09e623143 ("ASoC: codecs: wsa883x: add control, dapm widgets and map") > Cc: stable@vger.kernel.org # 6.0 This will mean that any configuration saved with alsactl store will change effect, it might be better to just fix the TLV description and live with the unfortunate UX...
On 18/01/2024 16:58, Johan Hovold wrote: > The PA gain can be set in steps of 1.5 dB from -3 dB to 18 dB, that is, > in fifteen levels. > > Fix the range of the PA volume control to avoid having the first > sixteen levels all map to -3 dB. TBH, we really don't know what unsupported values map to w.r.t dB. > > Note that level 0 (-3 dB) does not mute the PA so the mute flag should > also not be set. > > Fixes: cdb09e623143 ("ASoC: codecs: wsa883x: add control, dapm widgets and map") > Cc: stable@vger.kernel.org # 6.0 > Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > Signed-off-by: Johan Hovold <johan+linaro@kernel.org> > --- > sound/soc/codecs/wsa883x.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/sound/soc/codecs/wsa883x.c b/sound/soc/codecs/wsa883x.c > index cb83c569e18d..32983ca9afba 100644 > --- a/sound/soc/codecs/wsa883x.c > +++ b/sound/soc/codecs/wsa883x.c > @@ -1098,7 +1098,7 @@ static int wsa_dev_mode_put(struct snd_kcontrol *kcontrol, > return 1; > } > > -static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, -300); > +static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, 0); > > static int wsa883x_get_swr_port(struct snd_kcontrol *kcontrol, > struct snd_ctl_elem_value *ucontrol) > @@ -1239,7 +1239,7 @@ static const struct snd_soc_dapm_widget wsa883x_dapm_widgets[] = { > > static const struct snd_kcontrol_new wsa883x_snd_controls[] = { > SOC_SINGLE_RANGE_TLV("PA Volume", WSA883X_DRE_CTL_1, 1, > - 0x0, 0x1f, 1, pa_gain), > + 0x1, 0xf, 1, pa_gain), gain field in register is Bit[5:1], so the max value of 0x1f is correct here. However the range of gains that it can actually support is only 0-15. If we are artificially setting the max value of 0xf here, then somewhere we should ensure that Bit[5] is set to zero while programming the gain. Whatever the mixer control is exposing is clearly reflecting what hardware is supporting. --srini > SOC_ENUM_EXT("WSA MODE", wsa_dev_mode_enum, > wsa_dev_mode_get, wsa_dev_mode_put), > SOC_SINGLE_EXT("COMP Offset", SND_SOC_NOPM, 0, 4, 0,
On Thu, Jan 18, 2024 at 05:24:16PM +0000, Mark Brown wrote: > On Thu, Jan 18, 2024 at 05:58:07PM +0100, Johan Hovold wrote: > > The PA gain can be set in steps of 1.5 dB from -3 dB to 18 dB, that is, > > in fifteen levels. > > > > Fix the range of the PA volume control to avoid having the first > > sixteen levels all map to -3 dB. > > > > Note that level 0 (-3 dB) does not mute the PA so the mute flag should > > also not be set. > > > > Fixes: cdb09e623143 ("ASoC: codecs: wsa883x: add control, dapm widgets and map") > > Cc: stable@vger.kernel.org # 6.0 > > This will mean that any configuration saved with alsactl store will > change effect, it might be better to just fix the TLV description and > live with the unfortunate UX... Indeed, but the machine limit set by this series will make that less of any issue. At least for mainline, all users of this codec use the same machine driver so will also be limited to -3 dB. Johan
On Fri, Jan 19, 2024 at 07:14:03AM +0000, Srinivas Kandagatla wrote: > On 18/01/2024 16:58, Johan Hovold wrote: > > The PA gain can be set in steps of 1.5 dB from -3 dB to 18 dB, that is, > > in fifteen levels. > > > > Fix the range of the PA volume control to avoid having the first > > sixteen levels all map to -3 dB. > TBH, we really don't know what unsupported values map to w.r.t dB. I've verified experimentally that all values in the range 0..16 map to the same lowest setting, and only at level 17 is there a perceivable difference in gain. And the datasheet you have access to describes the range as -3 to 18 dB. > > Note that level 0 (-3 dB) does not mute the PA so the mute flag should > > also not be set. > > > > Fixes: cdb09e623143 ("ASoC: codecs: wsa883x: add control, dapm widgets and map") > > Cc: stable@vger.kernel.org # 6.0 > > Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > > Signed-off-by: Johan Hovold <johan+linaro@kernel.org> > > --- > > sound/soc/codecs/wsa883x.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/sound/soc/codecs/wsa883x.c b/sound/soc/codecs/wsa883x.c > > index cb83c569e18d..32983ca9afba 100644 > > --- a/sound/soc/codecs/wsa883x.c > > +++ b/sound/soc/codecs/wsa883x.c > > @@ -1098,7 +1098,7 @@ static int wsa_dev_mode_put(struct snd_kcontrol *kcontrol, > > return 1; > > } > > > > -static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, -300); > > +static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, 0); > > > > static int wsa883x_get_swr_port(struct snd_kcontrol *kcontrol, > > struct snd_ctl_elem_value *ucontrol) > > @@ -1239,7 +1239,7 @@ static const struct snd_soc_dapm_widget wsa883x_dapm_widgets[] = { > > > > static const struct snd_kcontrol_new wsa883x_snd_controls[] = { > > SOC_SINGLE_RANGE_TLV("PA Volume", WSA883X_DRE_CTL_1, 1, > > - 0x0, 0x1f, 1, pa_gain), > > + 0x1, 0xf, 1, pa_gain), > > gain field in register is Bit[5:1], so the max value of 0x1f is correct > here. However the range of gains that it can actually support is only 0-15. > > If we are artificially setting the max value of 0xf here, then somewhere > we should ensure that Bit[5] is set to zero while programming the gain. Good point, but the reset value for that bit is 0 so we should be good here. I'll also update patch 2/5 so that we explicitly set this register on probe in the unlikely event that something else has left that bit set before Linux boots (and the powerdown at probe isn't sufficient). > Whatever the mixer control is exposing is clearly reflecting what > hardware is supporting. No, not at all. The range exported to user space is all wrong and this breaks volume control in pulseaudio which expects the dB values to reflect the hardware. If changing the range is a concern (as Mark mentioned), we at least have to fix the dB values. And if this is something that may differ between the WSA883x variants currently handled by the driver then that needs to be taken into account too. I only have access to wsa8835 (and no docs, unlike you). Johan
diff --git a/sound/soc/codecs/wsa883x.c b/sound/soc/codecs/wsa883x.c index cb83c569e18d..32983ca9afba 100644 --- a/sound/soc/codecs/wsa883x.c +++ b/sound/soc/codecs/wsa883x.c @@ -1098,7 +1098,7 @@ static int wsa_dev_mode_put(struct snd_kcontrol *kcontrol, return 1; } -static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, -300); +static const DECLARE_TLV_DB_SCALE(pa_gain, -300, 150, 0); static int wsa883x_get_swr_port(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) @@ -1239,7 +1239,7 @@ static const struct snd_soc_dapm_widget wsa883x_dapm_widgets[] = { static const struct snd_kcontrol_new wsa883x_snd_controls[] = { SOC_SINGLE_RANGE_TLV("PA Volume", WSA883X_DRE_CTL_1, 1, - 0x0, 0x1f, 1, pa_gain), + 0x1, 0xf, 1, pa_gain), SOC_ENUM_EXT("WSA MODE", wsa_dev_mode_enum, wsa_dev_mode_get, wsa_dev_mode_put), SOC_SINGLE_EXT("COMP Offset", SND_SOC_NOPM, 0, 4, 0,