From: Richard Fitzgerald <rf@opensource.cirrus.com>
To: <broonie@kernel.org>
Cc: <alsa-devel@alsa-project.org>, <linux-kernel@vger.kernel.org>,
<patches@opensource.cirrus.com>,
Simon Trimmer <simont@opensource.cirrus.com>,
Richard Fitzgerald <rf@opensource.cirrus.com>
Subject: [PATCH 4/5] ASoC: cs35l56: Remove redundant dsp_ready_completion
Date: Fri, 14 Apr 2023 14:37:52 +0100 [thread overview]
Message-ID: <20230414133753.653139-5-rf@opensource.cirrus.com> (raw)
In-Reply-To: <20230414133753.653139-1-rf@opensource.cirrus.com>
From: Simon Trimmer <simont@opensource.cirrus.com>
dsp_ready_completion is redundant and can be replaced by a call
flush_work() to wait for cs35l56_dsp_work() to complete.
As the dsp_work is queued by component_probe() it must run before other
ASoC component callbacks and therefore there is no risk of calling
flush_work() before the dsp_work() has been queued.
Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
sound/soc/codecs/cs35l56.c | 41 +++++++++-----------------------------
sound/soc/codecs/cs35l56.h | 1 -
2 files changed, 9 insertions(+), 33 deletions(-)
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index ab2e663af6c2..5f66a8e20b2d 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -51,21 +51,10 @@ static int cs35l56_mbox_send(struct cs35l56_private *cs35l56, unsigned int comma
return 0;
}
-static int cs35l56_wait_dsp_ready(struct cs35l56_private *cs35l56)
+static void cs35l56_wait_dsp_ready(struct cs35l56_private *cs35l56)
{
- int ret;
-
- if (!cs35l56->fw_patched) {
- /* block until firmware download completes */
- ret = wait_for_completion_timeout(&cs35l56->dsp_ready_completion,
- msecs_to_jiffies(25000));
- if (!ret) {
- dev_err(cs35l56->dev, "dsp_ready_completion timeout\n");
- return -ETIMEDOUT;
- }
- }
-
- return 0;
+ /* Wait for patching to complete */
+ flush_work(&cs35l56->dsp_work);
}
static int cs35l56_dspwait_get_volsw(struct snd_kcontrol *kcontrol,
@@ -73,11 +62,8 @@ static int cs35l56_dspwait_get_volsw(struct snd_kcontrol *kcontrol,
{
struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component);
- int ret = cs35l56_wait_dsp_ready(cs35l56);
-
- if (ret)
- return ret;
+ cs35l56_wait_dsp_ready(cs35l56);
return snd_soc_get_volsw(kcontrol, ucontrol);
}
@@ -86,11 +72,8 @@ static int cs35l56_dspwait_put_volsw(struct snd_kcontrol *kcontrol,
{
struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component);
- int ret = cs35l56_wait_dsp_ready(cs35l56);
-
- if (ret)
- return ret;
+ cs35l56_wait_dsp_ready(cs35l56);
return snd_soc_put_volsw(kcontrol, ucontrol);
}
@@ -876,13 +859,13 @@ static void cs35l56_dsp_work(struct work_struct *work)
int ret = 0;
if (!cs35l56->init_done)
- goto complete;
+ return;
cs35l56->dsp.part = devm_kasprintf(cs35l56->dev, GFP_KERNEL, "cs35l56%s-%02x",
cs35l56->secured ? "s" : "", cs35l56->rev);
if (!cs35l56->dsp.part)
- goto complete;
+ return;
pm_runtime_get_sync(cs35l56->dev);
@@ -961,9 +944,6 @@ static void cs35l56_dsp_work(struct work_struct *work)
sdw_write_no_pm(cs35l56->sdw_peripheral, CS35L56_SDW_GEN_INT_MASK_1,
CS35L56_SDW_INT_MASK_CODEC_IRQ);
}
-
-complete:
- complete_all(&cs35l56->dsp_ready_completion);
}
static int cs35l56_component_probe(struct snd_soc_component *component)
@@ -1002,7 +982,6 @@ static int cs35l56_set_bias_level(struct snd_soc_component *component,
enum snd_soc_bias_level level)
{
struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component);
- int ret = 0;
switch (level) {
case SND_SOC_BIAS_STANDBY:
@@ -1011,14 +990,14 @@ static int cs35l56_set_bias_level(struct snd_soc_component *component,
* BIAS_OFF to BIAS_STANDBY
*/
if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF)
- ret = cs35l56_wait_dsp_ready(cs35l56);
+ cs35l56_wait_dsp_ready(cs35l56);
break;
default:
break;
}
- return ret;
+ return 0;
}
static const struct snd_soc_component_driver soc_component_dev_cs35l56 = {
@@ -1336,7 +1315,6 @@ int cs35l56_system_resume(struct device *dev)
return ret;
cs35l56->fw_patched = false;
- init_completion(&cs35l56->dsp_ready_completion);
queue_work(cs35l56->dsp_wq, &cs35l56->dsp_work);
/*
@@ -1358,7 +1336,6 @@ static int cs35l56_dsp_init(struct cs35l56_private *cs35l56)
return -ENOMEM;
INIT_WORK(&cs35l56->dsp_work, cs35l56_dsp_work);
- init_completion(&cs35l56->dsp_ready_completion);
dsp = &cs35l56->dsp;
dsp->part = "cs35l56";
diff --git a/sound/soc/codecs/cs35l56.h b/sound/soc/codecs/cs35l56.h
index ac2e9237c27d..09762e70ce81 100644
--- a/sound/soc/codecs/cs35l56.h
+++ b/sound/soc/codecs/cs35l56.h
@@ -34,7 +34,6 @@ struct cs35l56_private {
struct wm_adsp dsp; /* must be first member */
struct work_struct dsp_work;
struct workqueue_struct *dsp_wq;
- struct completion dsp_ready_completion;
struct mutex irq_lock;
struct snd_soc_component *component;
struct device *dev;
--
2.30.2
next prev parent reply other threads:[~2023-04-14 13:38 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-14 13:37 [PATCH 0/5] ASoC: cs35l56: Code improvements Richard Fitzgerald
2023-04-14 13:37 ` [PATCH 1/5] ASoC: cs35l56: Rework IRQ allocation Richard Fitzgerald
2023-04-14 13:37 ` [PATCH 2/5] ASoC: cs35l56: Allow a wider range for reset pulse width Richard Fitzgerald
2023-04-14 13:37 ` [PATCH 3/5] ASoC: cs35l56: Wait for init_complete in cs35l56_component_probe() Richard Fitzgerald
2023-04-14 13:37 ` Richard Fitzgerald [this message]
2023-04-14 13:37 ` [PATCH 5/5] ASoC: cs35l56: Don't return a value from cs35l56_remove() Richard Fitzgerald
2023-04-17 20:27 ` [PATCH 0/5] ASoC: cs35l56: Code improvements 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=20230414133753.653139-5-rf@opensource.cirrus.com \
--to=rf@opensource.cirrus.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@opensource.cirrus.com \
--cc=simont@opensource.cirrus.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