summarylogtreecommitdiffstats
path: root/0002-ALSA-cs35l41-Poll-for-Power-Up-Down-rather-than-wait.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-ALSA-cs35l41-Poll-for-Power-Up-Down-rather-than-wait.patch')
-rw-r--r--0002-ALSA-cs35l41-Poll-for-Power-Up-Down-rather-than-wait.patch141
1 files changed, 0 insertions, 141 deletions
diff --git a/0002-ALSA-cs35l41-Poll-for-Power-Up-Down-rather-than-wait.patch b/0002-ALSA-cs35l41-Poll-for-Power-Up-Down-rather-than-wait.patch
deleted file mode 100644
index 396384f9a457..000000000000
--- a/0002-ALSA-cs35l41-Poll-for-Power-Up-Down-rather-than-wait.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-From 437f5415c5ac8e49b0675f74132b6e1308b6e5c7 Mon Sep 17 00:00:00 2001
-From: Stefan Binding <sbinding@opensource.cirrus.com>
-Date: Fri, 21 Jul 2023 16:18:07 +0100
-Subject: [PATCH 02/11] ALSA: cs35l41: Poll for Power Up/Down rather than
- waiting a fixed delay
-
-To ensure the chip has correctly powered up or down before continuing,
-the driver will now poll a register, rather than wait a fixed delay.
-
-Acked-by: Mark Brown <broonie@kernel.org>
-Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
----
- sound/soc/codecs/cs35l41-lib.c | 48 +++++++++++++++++++++++++++++++---
- sound/soc/codecs/cs35l41.c | 10 -------
- 2 files changed, 44 insertions(+), 14 deletions(-)
-
-diff --git a/sound/soc/codecs/cs35l41-lib.c b/sound/soc/codecs/cs35l41-lib.c
-index a7556fa33cdd..a9c559a676e7 100644
---- a/sound/soc/codecs/cs35l41-lib.c
-+++ b/sound/soc/codecs/cs35l41-lib.c
-@@ -1196,7 +1196,8 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4
- int enable, struct completion *pll_lock, bool firmware_running)
- {
- int ret;
-- unsigned int gpio1_func, pad_control, pwr_ctrl1, pwr_ctrl3, int_status;
-+ unsigned int gpio1_func, pad_control, pwr_ctrl1, pwr_ctrl3, int_status, pup_pdn_mask;
-+ unsigned int pwr_ctl1_val;
- struct reg_sequence cs35l41_mdsync_down_seq[] = {
- {CS35L41_PWR_CTRL3, 0},
- {CS35L41_GPIO_PAD_CONTROL, 0},
-@@ -1208,6 +1209,12 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4
- {CS35L41_PWR_CTRL1, 0x00000001, 3000},
- };
-
-+ pup_pdn_mask = enable ? CS35L41_PUP_DONE_MASK : CS35L41_PDN_DONE_MASK;
-+
-+ ret = regmap_read(regmap, CS35L41_PWR_CTRL1, &pwr_ctl1_val);
-+ if (ret)
-+ return ret;
-+
- if ((pwr_ctl1_val & CS35L41_GLOBAL_EN_MASK) && enable) {
- dev_dbg(dev, "Cannot set Global Enable - already set.\n");
- return 0;
-@@ -1252,6 +1259,15 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4
- ret = regmap_multi_reg_write(regmap, cs35l41_mdsync_up_seq,
- ARRAY_SIZE(cs35l41_mdsync_up_seq));
- }
-+
-+ ret = regmap_read_poll_timeout(regmap, CS35L41_IRQ1_STATUS1,
-+ int_status, int_status & pup_pdn_mask,
-+ 1000, 100000);
-+ if (ret)
-+ dev_err(dev, "Enable(%d) failed: %d\n", enable, ret);
-+
-+ // Clear PUP/PDN status
-+ regmap_write(regmap, CS35L41_IRQ1_STATUS1, pup_pdn_mask);
- break;
- case CS35L41_INT_BOOST:
- ret = regmap_update_bits(regmap, CS35L41_PWR_CTRL1, CS35L41_GLOBAL_EN_MASK,
-@@ -1260,7 +1276,15 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4
- dev_err(dev, "CS35L41_PWR_CTRL1 set failed: %d\n", ret);
- return ret;
- }
-- usleep_range(3000, 3100);
-+
-+ ret = regmap_read_poll_timeout(regmap, CS35L41_IRQ1_STATUS1,
-+ int_status, int_status & pup_pdn_mask,
-+ 1000, 100000);
-+ if (ret)
-+ dev_err(dev, "Enable(%d) failed: %d\n", enable, ret);
-+
-+ /* Clear PUP/PDN status */
-+ regmap_write(regmap, CS35L41_IRQ1_STATUS1, pup_pdn_mask);
- break;
- case CS35L41_EXT_BOOST:
- case CS35L41_EXT_BOOST_NO_VSPK_SWITCH:
-@@ -1271,7 +1295,15 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4
- if (ret)
- return ret;
-
-- usleep_range(3000, 3100);
-+ ret = regmap_read_poll_timeout(regmap, CS35L41_IRQ1_STATUS1, int_status,
-+ int_status & CS35L41_PUP_DONE_MASK, 1000, 100000);
-+ if (ret) {
-+ dev_err(dev, "Failed waiting for CS35L41_PUP_DONE_MASK: %d\n", ret);
-+ /* Lock the test key, it was unlocked during the multi_reg_write */
-+ cs35l41_test_key_lock(dev, regmap);
-+ return ret;
-+ }
-+ regmap_write(regmap, CS35L41_IRQ1_STATUS1, CS35L41_PUP_DONE_MASK);
-
- if (firmware_running)
- ret = cs35l41_set_cspl_mbox_cmd(dev, regmap,
-@@ -1292,7 +1324,15 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4
- return ret;
- }
-
-- usleep_range(3000, 3100);
-+ ret = regmap_read_poll_timeout(regmap, CS35L41_IRQ1_STATUS1, int_status,
-+ int_status & CS35L41_PDN_DONE_MASK, 1000, 100000);
-+ if (ret) {
-+ dev_err(dev, "Failed waiting for CS35L41_PDN_DONE_MASK: %d\n", ret);
-+ /* Lock the test key, it was unlocked during the multi_reg_write */
-+ cs35l41_test_key_lock(dev, regmap);
-+ return ret;
-+ }
-+ regmap_write(regmap, CS35L41_IRQ1_STATUS1, CS35L41_PDN_DONE_MASK);
-
- /* Test Key is locked here */
- ret = regmap_multi_reg_write(regmap, cs35l41_active_to_safe_end,
-diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c
-index d4e9c9d9b50a..2b3c36f02edb 100644
---- a/sound/soc/codecs/cs35l41.c
-+++ b/sound/soc/codecs/cs35l41.c
-@@ -491,7 +491,6 @@ static int cs35l41_main_amp_event(struct snd_soc_dapm_widget *w,
- {
- struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
- struct cs35l41_private *cs35l41 = snd_soc_component_get_drvdata(component);
-- unsigned int val;
- int ret = 0;
-
- switch (event) {
-@@ -507,15 +506,6 @@ static int cs35l41_main_amp_event(struct snd_soc_dapm_widget *w,
- ret = cs35l41_global_enable(cs35l41->dev, cs35l41->regmap, cs35l41->hw_cfg.bst_type,
- 0, &cs35l41->pll_lock, cs35l41->dsp.cs_dsp.running);
-
-- ret = regmap_read_poll_timeout(cs35l41->regmap, CS35L41_IRQ1_STATUS1,
-- val, val & CS35L41_PDN_DONE_MASK,
-- 1000, 100000);
-- if (ret)
-- dev_warn(cs35l41->dev, "PDN failed: %d\n", ret);
--
-- regmap_write(cs35l41->regmap, CS35L41_IRQ1_STATUS1,
-- CS35L41_PDN_DONE_MASK);
--
- regmap_multi_reg_write_bypassed(cs35l41->regmap,
- cs35l41_pdn_patch,
- ARRAY_SIZE(cs35l41_pdn_patch));
---
-2.41.0
-