From: Lucas Tanure <tanureal@opensource.cirrus.com>
To: Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>,
"Rob Herring" <robh+dt@kernel.org>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>
Cc: <alsa-devel@alsa-project.org>, <patches@opensource.cirrus.com>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
Lucas Tanure <tanureal@opensource.cirrus.com>
Subject: [PATCH 17/20] hda: cs35l41: Handle all external boost setups the same way
Date: Thu, 3 Mar 2022 17:30:56 +0000 [thread overview]
Message-ID: <20220303173059.269657-18-tanureal@opensource.cirrus.com> (raw)
In-Reply-To: <20220303173059.269657-1-tanureal@opensource.cirrus.com>
Regmap sequences for external boost with or without the GPIO1
as VSPK switch are almost the same.
Unify them and use the GPIO1 VSPK switch to handle the difference.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
---
sound/pci/hda/cs35l41_hda.c | 60 +++++++++++++++----------------------
1 file changed, 24 insertions(+), 36 deletions(-)
diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c
index e61bab8db68d..155510616566 100644
--- a/sound/pci/hda/cs35l41_hda.c
+++ b/sound/pci/hda/cs35l41_hda.c
@@ -32,33 +32,9 @@ static const struct reg_sequence cs35l41_hda_mute[] = {
{ CS35L41_AMP_DIG_VOL_CTRL, 0x0000A678 }, // AMP_VOL_PCM Mute
};
-// only on amps where GPIO1 is used to control ext. VSPK switch
-static const struct reg_sequence cs35l41_start_ext_vspk[] = {
+static const struct reg_sequence cs35l41_safe_to_reset[] = {
{ 0x00000040, 0x00000055 },
{ 0x00000040, 0x000000AA },
- { 0x00007438, 0x00585941 },
- { 0x00007414, 0x08C82222 },
- { 0x0000742C, 0x00000009 },
- { 0x00011008, 0x00008001 },
- { 0x0000742C, 0x0000000F },
- { 0x0000742C, 0x00000079 },
- { 0x00007438, 0x00585941 },
- { CS35L41_PWR_CTRL1, 0x00000001, 3000}, // set GLOBAL_EN = 1
- { 0x0000742C, 0x000000F9 },
- { 0x00007438, 0x00580941 },
- { 0x00000040, 0x000000CC },
- { 0x00000040, 0x00000033 },
-};
-
-//only on amps where GPIO1 is used to control ext. VSPK switch
-static const struct reg_sequence cs35l41_stop_ext_vspk[] = {
- { 0x00000040, 0x00000055 },
- { 0x00000040, 0x000000AA },
- { 0x00007438, 0x00585941 },
- { 0x00002014, 0x00000000, 3000}, // set GLOBAL_EN = 0
- { 0x0000742C, 0x00000009 },
- { 0x00007438, 0x00580941 },
- { 0x00011008, 0x00000001 },
{ 0x0000393C, 0x000000C0, 6000},
{ 0x0000393C, 0x00000000 },
{ 0x00007414, 0x00C82222 },
@@ -73,7 +49,7 @@ static const struct reg_sequence cs35l41_safe_to_active[] = {
{ 0x0000742C, 0x0000000F },
{ 0x0000742C, 0x00000079 },
{ 0x00007438, 0x00585941 },
- { CS35L41_PWR_CTRL1, 0x00000001, 2000 }, // GLOBAL_EN = 1
+ { CS35L41_PWR_CTRL1, 0x00000001, 3000 }, // GLOBAL_EN = 1
{ 0x0000742C, 0x000000F9 },
{ 0x00007438, 0x00580941 },
{ 0x00000040, 0x000000CC },
@@ -85,7 +61,7 @@ static const struct reg_sequence cs35l41_active_to_safe[] = {
{ 0x00000040, 0x000000AA },
{ 0x00007438, 0x00585941 },
{ CS35L41_PWR_CTRL1, 0x00000000 },
- { 0x0000742C, 0x00000009, 2000 },
+ { 0x0000742C, 0x00000009, 3000 },
{ 0x00007438, 0x00580941 },
{ 0x00000040, 0x000000CC },
{ 0x00000040, 0x00000033 },
@@ -101,6 +77,21 @@ static const struct reg_sequence cs35l41_reset_to_safe[] = {
{ 0x00000040, 0x00000033 },
};
+static bool cs35l41_hda_safe_reset(struct cs35l41_hda *cs35l41)
+{
+ switch (cs35l41->hw_cfg.bst_type) {
+ case CS35L41_EXT_BOOST:
+ regmap_write(cs35l41->regmap, CS35L41_GPIO1_CTRL1, 0x00000001);
+ regmap_multi_reg_write(cs35l41->regmap, cs35l41_safe_to_reset,
+ ARRAY_SIZE(cs35l41_safe_to_reset));
+ return true;
+ case CS35L41_EXT_BOOST_NO_VSPK_SWITCH:
+ return false;
+ default:
+ return true;
+ }
+};
+
static void cs35l41_hda_global_enable(struct cs35l41_hda *cs35l41, int enable)
{
switch (cs35l41->hw_cfg.bst_type) {
@@ -110,13 +101,6 @@ static void cs35l41_hda_global_enable(struct cs35l41_hda *cs35l41, int enable)
usleep_range(3000, 3100);
break;
case CS35L41_EXT_BOOST:
- if (enable)
- regmap_multi_reg_write(cs35l41->regmap, cs35l41_start_ext_vspk,
- ARRAY_SIZE(cs35l41_start_ext_vspk));
- else
- regmap_multi_reg_write(cs35l41->regmap, cs35l41_stop_ext_vspk,
- ARRAY_SIZE(cs35l41_stop_ext_vspk));
- break;
case CS35L41_EXT_BOOST_NO_VSPK_SWITCH:
if (enable)
regmap_multi_reg_write(cs35l41->regmap, cs35l41_safe_to_active,
@@ -140,6 +124,8 @@ static void cs35l41_hda_playback_hook(struct device *dev, int action)
regmap_multi_reg_write(reg, cs35l41_hda_config, ARRAY_SIZE(cs35l41_hda_config));
regmap_update_bits(reg, CS35L41_PWR_CTRL2,
CS35L41_AMP_EN_MASK, 1 << CS35L41_AMP_EN_SHIFT);
+ if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST)
+ regmap_write(reg, CS35L41_GPIO1_CTRL1, 0x00008001);
break;
case HDA_GEN_PCM_ACT_PREPARE:
cs35l41_hda_global_enable(cs35l41, 1);
@@ -151,6 +137,8 @@ static void cs35l41_hda_playback_hook(struct device *dev, int action)
case HDA_GEN_PCM_ACT_CLOSE:
regmap_update_bits(reg, CS35L41_PWR_CTRL2,
CS35L41_AMP_EN_MASK, 0 << CS35L41_AMP_EN_SHIFT);
+ if (cs35l41->hw_cfg.bst_type == CS35L41_EXT_BOOST)
+ regmap_write(reg, CS35L41_GPIO1_CTRL1, 0x00000001);
break;
default:
break;
@@ -504,7 +492,7 @@ int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int i
return 0;
err:
- if (cs35l41->hw_cfg.bst_type != CS35L41_EXT_BOOST_NO_VSPK_SWITCH)
+ if (cs35l41_hda_safe_reset(cs35l41))
gpiod_set_value_cansleep(cs35l41->reset_gpio, 0);
gpiod_put(cs35l41->reset_gpio);
@@ -518,7 +506,7 @@ void cs35l41_hda_remove(struct device *dev)
component_del(cs35l41->dev, &cs35l41_hda_comp_ops);
- if (cs35l41->hw_cfg.bst_type != CS35L41_EXT_BOOST_NO_VSPK_SWITCH)
+ if (cs35l41_hda_safe_reset(cs35l41))
gpiod_set_value_cansleep(cs35l41->reset_gpio, 0);
gpiod_put(cs35l41->reset_gpio);
}
--
2.35.1
next prev parent reply other threads:[~2022-03-03 17:32 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-03 17:30 [PATCH 00/20] Support external boost at CS35l41 ASoC driver Lucas Tanure
2022-03-03 17:30 ` [PATCH 01/20] ASoC: cs35l41: Fix GPIO2 configuration Lucas Tanure
2022-03-04 10:01 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 02/20] ASoC: cs35l41: Fix max number of TX channels Lucas Tanure
2022-03-04 10:02 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 03/20] ASoC: cs35l41: Fix DSP mbox start command and global enable order Lucas Tanure
2022-03-04 10:02 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 04/20] ASoC: cs35l41: Remove unnecessary param Lucas Tanure
2022-03-04 10:02 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 05/20] sound: cs35l41: Unify hardware configuration Lucas Tanure
2022-03-04 10:15 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 06/20] sound: cs35l41: Check hw_config before using it Lucas Tanure
2022-03-04 10:17 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 07/20] sound: cs35l41: Move cs35l41_gpio_config to shared lib Lucas Tanure
2022-03-04 10:18 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 08/20] hda: cs35l41: Fix I2S params comments Lucas Tanure
2022-03-03 17:30 ` [PATCH 09/20] hda: cs35l41: Always configure the DAI Lucas Tanure
2022-03-03 17:30 ` [PATCH 10/20] hda: cs35l41: Add Boost type flag Lucas Tanure
2022-03-03 17:30 ` [PATCH 11/20] hda: cs35l41: Put the device into safe mode for external boost Lucas Tanure
2022-03-03 17:30 ` [PATCH 12/20] hda: cs35l41: Mute the device before shutdown Lucas Tanure
2022-03-03 17:30 ` [PATCH 13/20] sound: cs35l41: Enable Internal Boost in shared lib Lucas Tanure
2022-03-04 10:19 ` Charles Keepax
2022-03-03 17:30 ` [PATCH 14/20] hda: cs35l41: Move boost config to initialization code Lucas Tanure
2022-03-03 17:30 ` [PATCH 15/20] hda: cs35l41: Remove unnecessary log Lucas Tanure
2022-03-03 17:50 ` Mark Brown
2022-03-04 15:05 ` Lucas tanure
2022-03-03 17:30 ` [PATCH 16/20] hda: cs35l41: Remove cs35l41_hda_reg_sequence struct Lucas Tanure
2022-03-03 17:30 ` Lucas Tanure [this message]
2022-03-03 17:30 ` [PATCH 18/20] hda: cs35l41: Move external boost handling to lib for ASoC use Lucas Tanure
2022-03-03 17:30 ` [PATCH 19/20] ASoC: cs35l41: Support external boost Lucas Tanure
2022-03-03 17:30 ` [PATCH 20/20] Documentation: devicetree: CS35l41 External Boost Lucas Tanure
2022-03-03 18:24 ` Mark Brown
2022-03-03 19:00 ` Rob Herring
2022-03-07 20:38 ` (subset) [PATCH 00/20] Support external boost at CS35l41 ASoC driver Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220303173059.269657-18-tanureal@opensource.cirrus.com \
--to=tanureal@opensource.cirrus.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@opensource.cirrus.com \
--cc=perex@perex.cz \
--cc=robh+dt@kernel.org \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).