* [PATCH AUTOSEL 5.12 05/33] ASoC: rt5659: Fix the lost powers for the HDA header
[not found] <20210615154824.62044-1-sashal@kernel.org>
@ 2021-06-15 15:47 ` Sasha Levin
2021-06-15 15:47 ` [PATCH AUTOSEL 5.12 07/33] ASoC: fsl-asoc-card: Set .owner attribute when registering card Sasha Levin
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2021-06-15 15:47 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Oder Chiou, Jack Yu, alsa-devel, Mark Brown, Sasha Levin
From: Jack Yu <jack.yu@realtek.com>
[ Upstream commit 6308c44ed6eeadf65c0a7ba68d609773ed860fbb ]
The power of "LDO2", "MICBIAS1" and "Mic Det Power" were powered off after
the DAPM widgets were added, and these powers were set by the JD settings
"RT5659_JD_HDA_HEADER" in the probe function. In the codec probe function,
these powers were ignored to prevent them controlled by DAPM.
Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
Signed-off-by: Jack Yu <jack.yu@realtek.com>
Message-Id: <15fced51977b458798ca4eebf03dafb9@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/codecs/rt5659.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/sound/soc/codecs/rt5659.c b/sound/soc/codecs/rt5659.c
index 91a4ef7f620c..a9b079d56fd6 100644
--- a/sound/soc/codecs/rt5659.c
+++ b/sound/soc/codecs/rt5659.c
@@ -2433,13 +2433,18 @@ static int set_dmic_power(struct snd_soc_dapm_widget *w,
return 0;
}
-static const struct snd_soc_dapm_widget rt5659_dapm_widgets[] = {
+static const struct snd_soc_dapm_widget rt5659_particular_dapm_widgets[] = {
SND_SOC_DAPM_SUPPLY("LDO2", RT5659_PWR_ANLG_3, RT5659_PWR_LDO2_BIT, 0,
NULL, 0),
- SND_SOC_DAPM_SUPPLY("PLL", RT5659_PWR_ANLG_3, RT5659_PWR_PLL_BIT, 0,
- NULL, 0),
+ SND_SOC_DAPM_SUPPLY("MICBIAS1", RT5659_PWR_ANLG_2, RT5659_PWR_MB1_BIT,
+ 0, NULL, 0),
SND_SOC_DAPM_SUPPLY("Mic Det Power", RT5659_PWR_VOL,
RT5659_PWR_MIC_DET_BIT, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_widget rt5659_dapm_widgets[] = {
+ SND_SOC_DAPM_SUPPLY("PLL", RT5659_PWR_ANLG_3, RT5659_PWR_PLL_BIT, 0,
+ NULL, 0),
SND_SOC_DAPM_SUPPLY("Mono Vref", RT5659_PWR_ANLG_1,
RT5659_PWR_VREF3_BIT, 0, NULL, 0),
@@ -2464,8 +2469,6 @@ static const struct snd_soc_dapm_widget rt5659_dapm_widgets[] = {
RT5659_ADC_MONO_R_ASRC_SFT, 0, NULL, 0),
/* Input Side */
- SND_SOC_DAPM_SUPPLY("MICBIAS1", RT5659_PWR_ANLG_2, RT5659_PWR_MB1_BIT,
- 0, NULL, 0),
SND_SOC_DAPM_SUPPLY("MICBIAS2", RT5659_PWR_ANLG_2, RT5659_PWR_MB2_BIT,
0, NULL, 0),
SND_SOC_DAPM_SUPPLY("MICBIAS3", RT5659_PWR_ANLG_2, RT5659_PWR_MB3_BIT,
@@ -3660,10 +3663,23 @@ static int rt5659_set_bias_level(struct snd_soc_component *component,
static int rt5659_probe(struct snd_soc_component *component)
{
+ struct snd_soc_dapm_context *dapm =
+ snd_soc_component_get_dapm(component);
struct rt5659_priv *rt5659 = snd_soc_component_get_drvdata(component);
rt5659->component = component;
+ switch (rt5659->pdata.jd_src) {
+ case RT5659_JD_HDA_HEADER:
+ break;
+
+ default:
+ snd_soc_dapm_new_controls(dapm,
+ rt5659_particular_dapm_widgets,
+ ARRAY_SIZE(rt5659_particular_dapm_widgets));
+ break;
+ }
+
return 0;
}
--
2.30.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH AUTOSEL 5.12 07/33] ASoC: fsl-asoc-card: Set .owner attribute when registering card.
[not found] <20210615154824.62044-1-sashal@kernel.org>
2021-06-15 15:47 ` [PATCH AUTOSEL 5.12 05/33] ASoC: rt5659: Fix the lost powers for the HDA header Sasha Levin
@ 2021-06-15 15:47 ` Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 11/33] ASoC: AMD Renoir - add DMI entry for Lenovo 2020 AMD platforms Sasha Levin
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2021-06-15 15:47 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Sasha Levin, alsa-devel, Nicolas Cavallari, Shengjiu Wang,
Mark Brown, linuxppc-dev
From: Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
[ Upstream commit a8437f05384cb472518ec21bf4fffbe8f0a47378 ]
Otherwise, when compiled as module, a WARN_ON is triggered:
WARNING: CPU: 0 PID: 5 at sound/core/init.c:208 snd_card_new+0x310/0x39c [snd]
[...]
CPU: 0 PID: 5 Comm: kworker/0:0 Not tainted 5.10.39 #1
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
Workqueue: events deferred_probe_work_func
[<c0111988>] (unwind_backtrace) from [<c010c8ac>] (show_stack+0x10/0x14)
[<c010c8ac>] (show_stack) from [<c092784c>] (dump_stack+0xdc/0x104)
[<c092784c>] (dump_stack) from [<c0129710>] (__warn+0xd8/0x114)
[<c0129710>] (__warn) from [<c0922a48>] (warn_slowpath_fmt+0x5c/0xc4)
[<c0922a48>] (warn_slowpath_fmt) from [<bf0496f8>] (snd_card_new+0x310/0x39c [snd])
[<bf0496f8>] (snd_card_new [snd]) from [<bf1d7df8>] (snd_soc_bind_card+0x334/0x9c4 [snd_soc_core])
[<bf1d7df8>] (snd_soc_bind_card [snd_soc_core]) from [<bf1e9cd8>] (devm_snd_soc_register_card+0x30/0x6c [snd_soc_core])
[<bf1e9cd8>] (devm_snd_soc_register_card [snd_soc_core]) from [<bf22d964>] (fsl_asoc_card_probe+0x550/0xcc8 [snd_soc_fsl_asoc_card])
[<bf22d964>] (fsl_asoc_card_probe [snd_soc_fsl_asoc_card]) from [<c060c930>] (platform_drv_probe+0x48/0x98)
[...]
Signed-off-by: Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
Acked-by: Shengjiu Wang <shengjiu.wang@gmail.com>
Link: https://lore.kernel.org/r/20210527163409.22049-1-nicolas.cavallari@green-communications.fr
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/fsl/fsl-asoc-card.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c
index f62f81ceab0d..9dcbe5d5a428 100644
--- a/sound/soc/fsl/fsl-asoc-card.c
+++ b/sound/soc/fsl/fsl-asoc-card.c
@@ -732,6 +732,7 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
/* Initialize sound card */
priv->pdev = pdev;
priv->card.dev = &pdev->dev;
+ priv->card.owner = THIS_MODULE;
ret = snd_soc_of_parse_card_name(&priv->card, "model");
if (ret) {
snprintf(priv->name, sizeof(priv->name), "%s-audio",
--
2.30.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH AUTOSEL 5.12 11/33] ASoC: AMD Renoir - add DMI entry for Lenovo 2020 AMD platforms
[not found] <20210615154824.62044-1-sashal@kernel.org>
2021-06-15 15:47 ` [PATCH AUTOSEL 5.12 05/33] ASoC: rt5659: Fix the lost powers for the HDA header Sasha Levin
2021-06-15 15:47 ` [PATCH AUTOSEL 5.12 07/33] ASoC: fsl-asoc-card: Set .owner attribute when registering card Sasha Levin
@ 2021-06-15 15:48 ` Sasha Levin
2021-06-15 15:56 ` Mark Brown
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 14/33] ASoC: AMD Renoir: Remove fix for DMI entry on Lenovo 2020 platforms Sasha Levin
` (3 subsequent siblings)
6 siblings, 1 reply; 9+ messages in thread
From: Sasha Levin @ 2021-06-15 15:48 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Sasha Levin, Mark Pearson, alsa-devel, Mark Brown,
Gabriel Craciunescu
From: Mark Pearson <markpearson@lenovo.com>
[ Upstream commit 19a0aa9b04c5ab9a063b6ceaf7211ee7d9a9d24d ]
More laptops identified where the AMD ACP bridge needs to be blocked
or the microphone will not work when connected to HDMI.
Use DMI to block the microphone PCM device for these platforms.
Suggested-by: Gabriel Craciunescu <nix.or.die@gmail.com>
Signed-off-by: Mark Pearson <markpearson@lenovo.com>
Link: https://lore.kernel.org/r/20210531145502.6079-1-markpearson@lenovo.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/amd/renoir/rn-pci-acp3x.c | 35 +++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/sound/soc/amd/renoir/rn-pci-acp3x.c b/sound/soc/amd/renoir/rn-pci-acp3x.c
index 050a61fe9693..47a4dfd81a46 100644
--- a/sound/soc/amd/renoir/rn-pci-acp3x.c
+++ b/sound/soc/amd/renoir/rn-pci-acp3x.c
@@ -199,6 +199,41 @@ static const struct dmi_system_id rn_acp_quirk_table[] = {
DMI_EXACT_MATCH(DMI_BOARD_NAME, "20NLCTO1WW"),
}
},
+ {
+ /* Lenovo ThinkPad P14s Gen 1 (20Y1) */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_BOARD_NAME, "20Y1"),
+ }
+ },
+ {
+ /* Lenovo ThinkPad T14s Gen1 */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_BOARD_NAME, "20UH"),
+ }
+ },
+ {
+ /* Lenovo ThinkPad T14s Gen1 Campus */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_BOARD_NAME, "20UJ"),
+ }
+ },
+ {
+ /* Lenovo ThinkPad T14 Gen 1*/
+ .matches = {
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_BOARD_NAME, "20UD"),
+ }
+ },
+ {
+ /* Lenovo ThinkPad X13 Gen 1*/
+ .matches = {
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_BOARD_NAME, "20UF"),
+ }
+ },
{}
};
--
2.30.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH AUTOSEL 5.12 14/33] ASoC: AMD Renoir: Remove fix for DMI entry on Lenovo 2020 platforms
[not found] <20210615154824.62044-1-sashal@kernel.org>
` (2 preceding siblings ...)
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 11/33] ASoC: AMD Renoir - add DMI entry for Lenovo 2020 AMD platforms Sasha Levin
@ 2021-06-15 15:48 ` Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 15/33] ASoC: tas2562: Fix TDM_CFG0_SAMPRATE values Sasha Levin
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2021-06-15 15:48 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Sasha Levin, Mark Pearson, alsa-devel, Mark Brown,
Gabriel Craciunescu
From: Mark Pearson <markpearson@lenovo.com>
[ Upstream commit 320232caf1d8febea17312dab4b2dfe02e033520 ]
Unfortunately the previous patch to fix issues using the AMD ACP bridge
has the side effect of breaking the dmic in other cases and needs to be
reverted.
Removing the changes while we revisit the fix and find something better.
Apologies for the churn.
Suggested-by: Gabriel Craciunescu <unix.or.die@gmail.com>
Signed-off-by: Mark Pearson <markpearson@lenovo.com>
Link: https://lore.kernel.org/r/20210602171251.3243-1-markpearson@lenovo.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/amd/renoir/rn-pci-acp3x.c | 35 -----------------------------
1 file changed, 35 deletions(-)
diff --git a/sound/soc/amd/renoir/rn-pci-acp3x.c b/sound/soc/amd/renoir/rn-pci-acp3x.c
index 47a4dfd81a46..050a61fe9693 100644
--- a/sound/soc/amd/renoir/rn-pci-acp3x.c
+++ b/sound/soc/amd/renoir/rn-pci-acp3x.c
@@ -199,41 +199,6 @@ static const struct dmi_system_id rn_acp_quirk_table[] = {
DMI_EXACT_MATCH(DMI_BOARD_NAME, "20NLCTO1WW"),
}
},
- {
- /* Lenovo ThinkPad P14s Gen 1 (20Y1) */
- .matches = {
- DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
- DMI_MATCH(DMI_BOARD_NAME, "20Y1"),
- }
- },
- {
- /* Lenovo ThinkPad T14s Gen1 */
- .matches = {
- DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
- DMI_MATCH(DMI_BOARD_NAME, "20UH"),
- }
- },
- {
- /* Lenovo ThinkPad T14s Gen1 Campus */
- .matches = {
- DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
- DMI_MATCH(DMI_BOARD_NAME, "20UJ"),
- }
- },
- {
- /* Lenovo ThinkPad T14 Gen 1*/
- .matches = {
- DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
- DMI_MATCH(DMI_BOARD_NAME, "20UD"),
- }
- },
- {
- /* Lenovo ThinkPad X13 Gen 1*/
- .matches = {
- DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
- DMI_MATCH(DMI_BOARD_NAME, "20UF"),
- }
- },
{}
};
--
2.30.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH AUTOSEL 5.12 15/33] ASoC: tas2562: Fix TDM_CFG0_SAMPRATE values
[not found] <20210615154824.62044-1-sashal@kernel.org>
` (3 preceding siblings ...)
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 14/33] ASoC: AMD Renoir: Remove fix for DMI entry on Lenovo 2020 platforms Sasha Levin
@ 2021-06-15 15:48 ` Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 20/33] ASoC: rt5682: Fix the fast discharge for headset unplugging in soundwire mode Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 23/33] ASoC: qcom: lpass-cpu: Fix pop noise during audio capture begin Sasha Levin
6 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2021-06-15 15:48 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Sasha Levin, Richard Weinberger, alsa-devel, Mark Brown
From: Richard Weinberger <richard@nod.at>
[ Upstream commit 8bef925e37bdc9b6554b85eda16ced9a8e3c135f ]
TAS2562_TDM_CFG0_SAMPRATE_MASK starts at bit 1, not 0.
So all values need to be left shifted by 1.
Signed-off-by: Richard Weinberger <richard@nod.at>
Link: https://lore.kernel.org/r/20210530203446.19022-1-richard@nod.at
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/codecs/tas2562.h | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/sound/soc/codecs/tas2562.h b/sound/soc/codecs/tas2562.h
index 81866aeb3fbf..55b2a1f52ca3 100644
--- a/sound/soc/codecs/tas2562.h
+++ b/sound/soc/codecs/tas2562.h
@@ -57,13 +57,13 @@
#define TAS2562_TDM_CFG0_RAMPRATE_MASK BIT(5)
#define TAS2562_TDM_CFG0_RAMPRATE_44_1 BIT(5)
#define TAS2562_TDM_CFG0_SAMPRATE_MASK GENMASK(3, 1)
-#define TAS2562_TDM_CFG0_SAMPRATE_7305_8KHZ 0x0
-#define TAS2562_TDM_CFG0_SAMPRATE_14_7_16KHZ 0x1
-#define TAS2562_TDM_CFG0_SAMPRATE_22_05_24KHZ 0x2
-#define TAS2562_TDM_CFG0_SAMPRATE_29_4_32KHZ 0x3
-#define TAS2562_TDM_CFG0_SAMPRATE_44_1_48KHZ 0x4
-#define TAS2562_TDM_CFG0_SAMPRATE_88_2_96KHZ 0x5
-#define TAS2562_TDM_CFG0_SAMPRATE_176_4_192KHZ 0x6
+#define TAS2562_TDM_CFG0_SAMPRATE_7305_8KHZ (0x0 << 1)
+#define TAS2562_TDM_CFG0_SAMPRATE_14_7_16KHZ (0x1 << 1)
+#define TAS2562_TDM_CFG0_SAMPRATE_22_05_24KHZ (0x2 << 1)
+#define TAS2562_TDM_CFG0_SAMPRATE_29_4_32KHZ (0x3 << 1)
+#define TAS2562_TDM_CFG0_SAMPRATE_44_1_48KHZ (0x4 << 1)
+#define TAS2562_TDM_CFG0_SAMPRATE_88_2_96KHZ (0x5 << 1)
+#define TAS2562_TDM_CFG0_SAMPRATE_176_4_192KHZ (0x6 << 1)
#define TAS2562_TDM_CFG2_RIGHT_JUSTIFY BIT(6)
--
2.30.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH AUTOSEL 5.12 20/33] ASoC: rt5682: Fix the fast discharge for headset unplugging in soundwire mode
[not found] <20210615154824.62044-1-sashal@kernel.org>
` (4 preceding siblings ...)
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 15/33] ASoC: tas2562: Fix TDM_CFG0_SAMPRATE values Sasha Levin
@ 2021-06-15 15:48 ` Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 23/33] ASoC: qcom: lpass-cpu: Fix pop noise during audio capture begin Sasha Levin
6 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2021-06-15 15:48 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: Oder Chiou, Sasha Levin, alsa-devel, Mark Brown
From: Oder Chiou <oder_chiou@realtek.com>
[ Upstream commit 49783c6f4a4f49836b5a109ae0daf2f90b0d7713 ]
Based on ("5a15cd7fce20b1fd4aece6a0240e2b58cd6a225d"), the setting also
should be set in soundwire mode.
Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
Link: https://lore.kernel.org/r/20210604063150.29925-1-oder_chiou@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/codecs/rt5682-sdw.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/rt5682-sdw.c b/sound/soc/codecs/rt5682-sdw.c
index b49f1e16125d..d1dd7f720ba4 100644
--- a/sound/soc/codecs/rt5682-sdw.c
+++ b/sound/soc/codecs/rt5682-sdw.c
@@ -462,7 +462,8 @@ static int rt5682_io_init(struct device *dev, struct sdw_slave *slave)
regmap_update_bits(rt5682->regmap, RT5682_CBJ_CTRL_2,
RT5682_EXT_JD_SRC, RT5682_EXT_JD_SRC_MANUAL);
- regmap_write(rt5682->regmap, RT5682_CBJ_CTRL_1, 0xd042);
+ regmap_write(rt5682->regmap, RT5682_CBJ_CTRL_1, 0xd142);
+ regmap_update_bits(rt5682->regmap, RT5682_CBJ_CTRL_5, 0x0700, 0x0600);
regmap_update_bits(rt5682->regmap, RT5682_CBJ_CTRL_3,
RT5682_CBJ_IN_BUF_EN, RT5682_CBJ_IN_BUF_EN);
regmap_update_bits(rt5682->regmap, RT5682_SAR_IL_CMD_1,
--
2.30.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH AUTOSEL 5.12 23/33] ASoC: qcom: lpass-cpu: Fix pop noise during audio capture begin
[not found] <20210615154824.62044-1-sashal@kernel.org>
` (5 preceding siblings ...)
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 20/33] ASoC: rt5682: Fix the fast discharge for headset unplugging in soundwire mode Sasha Levin
@ 2021-06-15 15:48 ` Sasha Levin
6 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2021-06-15 15:48 UTC (permalink / raw)
To: linux-kernel, stable
Cc: Sasha Levin, alsa-devel, Srinivasa Rao Mandadapu, Mark Brown,
Judy Hsiao
From: Srinivasa Rao Mandadapu <srivasam@codeaurora.org>
[ Upstream commit c8a4556d98510ca05bad8d02265a4918b03a8c0b ]
This patch fixes PoP noise of around 15ms observed during audio
capture begin.
Enables BCLK and LRCLK in snd_soc_dai_ops prepare call for
introducing some delay before capture start.
(am from https://patchwork.kernel.org/patch/12276369/)
(also found at https://lore.kernel.org/r/20210524142114.18676-1-srivasam@codeaurora.org)
Co-developed-by: Judy Hsiao <judyhsiao@chromium.org>
Signed-off-by: Judy Hsiao <judyhsiao@chromium.org>
Signed-off-by: Srinivasa Rao Mandadapu <srivasam@codeaurora.org>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20210604154545.1198337-1-judyhsiao@chromium.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/qcom/lpass-cpu.c | 79 ++++++++++++++++++++++++++++++++++++++
sound/soc/qcom/lpass.h | 4 ++
2 files changed, 83 insertions(+)
diff --git a/sound/soc/qcom/lpass-cpu.c b/sound/soc/qcom/lpass-cpu.c
index 936384a94f25..74d3d8c58608 100644
--- a/sound/soc/qcom/lpass-cpu.c
+++ b/sound/soc/qcom/lpass-cpu.c
@@ -93,8 +93,30 @@ static void lpass_cpu_daiops_shutdown(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai)
{
struct lpass_data *drvdata = snd_soc_dai_get_drvdata(dai);
+ struct lpaif_i2sctl *i2sctl = drvdata->i2sctl;
+ unsigned int id = dai->driver->id;
clk_disable_unprepare(drvdata->mi2s_osr_clk[dai->driver->id]);
+ /*
+ * Ensure LRCLK is disabled even in device node validation.
+ * Will not impact if disabled in lpass_cpu_daiops_trigger()
+ * suspend.
+ */
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ regmap_fields_write(i2sctl->spken, id, LPAIF_I2SCTL_SPKEN_DISABLE);
+ else
+ regmap_fields_write(i2sctl->micen, id, LPAIF_I2SCTL_MICEN_DISABLE);
+
+ /*
+ * BCLK may not be enabled if lpass_cpu_daiops_prepare is called before
+ * lpass_cpu_daiops_shutdown. It's paired with the clk_enable in
+ * lpass_cpu_daiops_prepare.
+ */
+ if (drvdata->mi2s_was_prepared[dai->driver->id]) {
+ drvdata->mi2s_was_prepared[dai->driver->id] = false;
+ clk_disable(drvdata->mi2s_bit_clk[dai->driver->id]);
+ }
+
clk_unprepare(drvdata->mi2s_bit_clk[dai->driver->id]);
}
@@ -275,6 +297,18 @@ static int lpass_cpu_daiops_trigger(struct snd_pcm_substream *substream,
case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_RESUME:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+ /*
+ * Ensure lpass BCLK/LRCLK is enabled during
+ * device resume as lpass_cpu_daiops_prepare() is not called
+ * after the device resumes. We don't check mi2s_was_prepared before
+ * enable/disable BCLK in trigger events because:
+ * 1. These trigger events are paired, so the BCLK
+ * enable_count is balanced.
+ * 2. the BCLK can be shared (ex: headset and headset mic),
+ * we need to increase the enable_count so that we don't
+ * turn off the shared BCLK while other devices are using
+ * it.
+ */
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
ret = regmap_fields_write(i2sctl->spken, id,
LPAIF_I2SCTL_SPKEN_ENABLE);
@@ -296,6 +330,10 @@ static int lpass_cpu_daiops_trigger(struct snd_pcm_substream *substream,
case SNDRV_PCM_TRIGGER_STOP:
case SNDRV_PCM_TRIGGER_SUSPEND:
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+ /*
+ * To ensure lpass BCLK/LRCLK is disabled during
+ * device suspend.
+ */
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
ret = regmap_fields_write(i2sctl->spken, id,
LPAIF_I2SCTL_SPKEN_DISABLE);
@@ -315,12 +353,53 @@ static int lpass_cpu_daiops_trigger(struct snd_pcm_substream *substream,
return ret;
}
+static int lpass_cpu_daiops_prepare(struct snd_pcm_substream *substream,
+ struct snd_soc_dai *dai)
+{
+ struct lpass_data *drvdata = snd_soc_dai_get_drvdata(dai);
+ struct lpaif_i2sctl *i2sctl = drvdata->i2sctl;
+ unsigned int id = dai->driver->id;
+ int ret;
+
+ /*
+ * Ensure lpass BCLK/LRCLK is enabled bit before playback/capture
+ * data flow starts. This allows other codec to have some delay before
+ * the data flow.
+ * (ex: to drop start up pop noise before capture starts).
+ */
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ ret = regmap_fields_write(i2sctl->spken, id, LPAIF_I2SCTL_SPKEN_ENABLE);
+ else
+ ret = regmap_fields_write(i2sctl->micen, id, LPAIF_I2SCTL_MICEN_ENABLE);
+
+ if (ret) {
+ dev_err(dai->dev, "error writing to i2sctl reg: %d\n", ret);
+ return ret;
+ }
+
+ /*
+ * Check mi2s_was_prepared before enabling BCLK as lpass_cpu_daiops_prepare can
+ * be called multiple times. It's paired with the clk_disable in
+ * lpass_cpu_daiops_shutdown.
+ */
+ if (!drvdata->mi2s_was_prepared[dai->driver->id]) {
+ ret = clk_enable(drvdata->mi2s_bit_clk[id]);
+ if (ret) {
+ dev_err(dai->dev, "error in enabling mi2s bit clk: %d\n", ret);
+ return ret;
+ }
+ drvdata->mi2s_was_prepared[dai->driver->id] = true;
+ }
+ return 0;
+}
+
const struct snd_soc_dai_ops asoc_qcom_lpass_cpu_dai_ops = {
.set_sysclk = lpass_cpu_daiops_set_sysclk,
.startup = lpass_cpu_daiops_startup,
.shutdown = lpass_cpu_daiops_shutdown,
.hw_params = lpass_cpu_daiops_hw_params,
.trigger = lpass_cpu_daiops_trigger,
+ .prepare = lpass_cpu_daiops_prepare,
};
EXPORT_SYMBOL_GPL(asoc_qcom_lpass_cpu_dai_ops);
diff --git a/sound/soc/qcom/lpass.h b/sound/soc/qcom/lpass.h
index 83b2e08ade06..7f72214404ba 100644
--- a/sound/soc/qcom/lpass.h
+++ b/sound/soc/qcom/lpass.h
@@ -67,6 +67,10 @@ struct lpass_data {
/* MI2S SD lines to use for playback/capture */
unsigned int mi2s_playback_sd_mode[LPASS_MAX_MI2S_PORTS];
unsigned int mi2s_capture_sd_mode[LPASS_MAX_MI2S_PORTS];
+
+ /* The state of MI2S prepare dai_ops was called */
+ bool mi2s_was_prepared[LPASS_MAX_MI2S_PORTS];
+
int hdmi_port_enable;
/* low-power audio interface (LPAIF) registers */
--
2.30.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH AUTOSEL 5.12 11/33] ASoC: AMD Renoir - add DMI entry for Lenovo 2020 AMD platforms
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 11/33] ASoC: AMD Renoir - add DMI entry for Lenovo 2020 AMD platforms Sasha Levin
@ 2021-06-15 15:56 ` Mark Brown
2021-06-20 12:56 ` Sasha Levin
0 siblings, 1 reply; 9+ messages in thread
From: Mark Brown @ 2021-06-15 15:56 UTC (permalink / raw)
To: Sasha Levin
Cc: Mark Pearson, alsa-devel, linux-kernel, stable,
Gabriel Craciunescu
[-- Attachment #1: Type: text/plain, Size: 550 bytes --]
On Tue, Jun 15, 2021 at 11:48:02AM -0400, Sasha Levin wrote:
> From: Mark Pearson <markpearson@lenovo.com>
>
> [ Upstream commit 19a0aa9b04c5ab9a063b6ceaf7211ee7d9a9d24d ]
>
> More laptops identified where the AMD ACP bridge needs to be blocked
> or the microphone will not work when connected to HDMI.
>
> Use DMI to block the microphone PCM device for these platforms.
You've backported the fix that reverts this a couple of patches later in
the series but might be as well to just not backport either, the end
result is the same.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH AUTOSEL 5.12 11/33] ASoC: AMD Renoir - add DMI entry for Lenovo 2020 AMD platforms
2021-06-15 15:56 ` Mark Brown
@ 2021-06-20 12:56 ` Sasha Levin
0 siblings, 0 replies; 9+ messages in thread
From: Sasha Levin @ 2021-06-20 12:56 UTC (permalink / raw)
To: Mark Brown
Cc: Mark Pearson, alsa-devel, linux-kernel, stable,
Gabriel Craciunescu
On Tue, Jun 15, 2021 at 04:56:07PM +0100, Mark Brown wrote:
>On Tue, Jun 15, 2021 at 11:48:02AM -0400, Sasha Levin wrote:
>> From: Mark Pearson <markpearson@lenovo.com>
>>
>> [ Upstream commit 19a0aa9b04c5ab9a063b6ceaf7211ee7d9a9d24d ]
>>
>> More laptops identified where the AMD ACP bridge needs to be blocked
>> or the microphone will not work when connected to HDMI.
>>
>> Use DMI to block the microphone PCM device for these platforms.
>
>You've backported the fix that reverts this a couple of patches later in
>the series but might be as well to just not backport either, the end
>result is the same.
Good point, I'll drop it.
--
Thanks,
Sasha
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-06-20 12:57 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20210615154824.62044-1-sashal@kernel.org>
2021-06-15 15:47 ` [PATCH AUTOSEL 5.12 05/33] ASoC: rt5659: Fix the lost powers for the HDA header Sasha Levin
2021-06-15 15:47 ` [PATCH AUTOSEL 5.12 07/33] ASoC: fsl-asoc-card: Set .owner attribute when registering card Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 11/33] ASoC: AMD Renoir - add DMI entry for Lenovo 2020 AMD platforms Sasha Levin
2021-06-15 15:56 ` Mark Brown
2021-06-20 12:56 ` Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 14/33] ASoC: AMD Renoir: Remove fix for DMI entry on Lenovo 2020 platforms Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 15/33] ASoC: tas2562: Fix TDM_CFG0_SAMPRATE values Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 20/33] ASoC: rt5682: Fix the fast discharge for headset unplugging in soundwire mode Sasha Levin
2021-06-15 15:48 ` [PATCH AUTOSEL 5.12 23/33] ASoC: qcom: lpass-cpu: Fix pop noise during audio capture begin Sasha Levin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox