From: Kuninori Morimoto <kuninori.morimoto.gx@gmail.com>
To: Mark Brown <broonie@kernel.org>
Cc: Linux-ALSA <alsa-devel@alsa-project.org>,
Simon <horms@verge.net.au>, Liam Girdwood <lgirdwood@gmail.com>,
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Subject: [PATCH 08/19] ASoC: rsnd: run rsnd_path_init() when probe() timing
Date: Mon, 24 Feb 2014 22:15:40 -0800 (PST) [thread overview]
Message-ID: <871tyr90qe.wl%kuninori.morimoto.gx@gmail.com> (raw)
In-Reply-To: <87d2ib90t9.wl%kuninori.morimoto.gx@gmail.com>
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Current rsnd SSIU/SSI/SCU/SRU path is set
when playback/capture starts up.
But it is meaningless method, since the path is based
on platform and can be set in probe() timing.
This patch sets the path on probe() timing.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/sh/rcar/core.c | 94 ++++++++++++++++++++++++++++++++++++++--------
sound/soc/sh/rcar/gen.c | 56 ---------------------------
sound/soc/sh/rcar/rsnd.h | 9 -----
3 files changed, 78 insertions(+), 81 deletions(-)
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c
index 98771f7..325b8fb 100644
--- a/sound/soc/sh/rcar/core.c
+++ b/sound/soc/sh/rcar/core.c
@@ -317,9 +317,9 @@ void rsnd_dma_quit(struct rsnd_priv *priv,
ret; \
})
-int rsnd_dai_connect(struct rsnd_dai *rdai,
- struct rsnd_mod *mod,
- struct rsnd_dai_stream *io)
+static int rsnd_dai_connect(struct rsnd_dai *rdai,
+ struct rsnd_mod *mod,
+ struct rsnd_dai_stream *io)
{
if (!mod)
return -EIO;
@@ -340,7 +340,7 @@ int rsnd_dai_connect(struct rsnd_dai *rdai,
return 0;
}
-int rsnd_dai_disconnect(struct rsnd_mod *mod)
+static int rsnd_dai_disconnect(struct rsnd_mod *mod)
{
list_del_init(&mod->list);
mod->io = NULL;
@@ -418,10 +418,6 @@ static int rsnd_dai_stream_init(struct rsnd_dai_stream *io,
{
struct snd_pcm_runtime *runtime = substream->runtime;
- if (!list_empty(&io->head))
- return -EIO;
-
- INIT_LIST_HEAD(&io->head);
io->substream = substream;
io->byte_pos = 0;
io->period_pos = 0;
@@ -476,10 +472,6 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
if (ret < 0)
goto dai_trigger_end;
- ret = rsnd_gen_path_init(priv, rdai, io);
- if (ret < 0)
- goto dai_trigger_end;
-
ret = rsnd_dai_call(rdai, io, init);
if (ret < 0)
goto dai_trigger_end;
@@ -497,10 +489,6 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
if (ret < 0)
goto dai_trigger_end;
- ret = rsnd_gen_path_exit(priv, rdai, io);
- if (ret < 0)
- goto dai_trigger_end;
-
ret = rsnd_platform_call(priv, dai, stop, ssi_id);
if (ret < 0)
goto dai_trigger_end;
@@ -584,6 +572,70 @@ static const struct snd_soc_dai_ops rsnd_soc_dai_ops = {
.set_sysclk = rsnd_soc_dai_set_sysclk,
};
+static int rsnd_path_init(struct rsnd_priv *priv,
+ struct rsnd_dai *rdai,
+ struct rsnd_dai_stream *io)
+{
+ struct rsnd_mod *mod;
+ int ret;
+ int id;
+
+ /*
+ * Gen1 is created by SRU/SSI, and this SRU is base module of
+ * Gen2's SCU/SSIU/SSI. (Gen2 SCU/SSIU came from SRU)
+ *
+ * Easy image is..
+ * Gen1 SRU = Gen2 SCU + SSIU + etc
+ *
+ * Gen2 SCU path is very flexible, but, Gen1 SRU (SCU parts) is
+ * using fixed path.
+ *
+ * Then, SSI id = SCU id here
+ */
+ /* get SSI's ID */
+ mod = rsnd_ssi_mod_get_frm_dai(priv,
+ rsnd_dai_id(priv, rdai),
+ rsnd_dai_is_play(rdai, io));
+ if (!mod)
+ return 0;
+ id = rsnd_mod_id(mod);
+ ret = 0;
+
+ /* SCU */
+ mod = rsnd_scu_mod_get(priv, id);
+ if (mod) {
+ ret = rsnd_dai_connect(rdai, mod, io);
+ if (ret < 0)
+ return ret;
+ }
+
+ /* SSI */
+ mod = rsnd_ssi_mod_get(priv, id);
+ if (mod) {
+ ret = rsnd_dai_connect(rdai, mod, io);
+ if (ret < 0)
+ return ret;
+ }
+
+ return ret;
+}
+
+static int rsnd_path_exit(struct rsnd_priv *priv,
+ struct rsnd_dai *rdai,
+ struct rsnd_dai_stream *io)
+{
+ struct rsnd_mod *mod, *n;
+ int ret = 0;
+
+ /*
+ * remove all mod from rdai
+ */
+ for_each_rsnd_mod(mod, n, io)
+ ret |= rsnd_dai_disconnect(mod);
+
+ return ret;
+}
+
static int rsnd_dai_probe(struct platform_device *pdev,
struct rsnd_priv *priv)
{
@@ -642,12 +694,14 @@ static int rsnd_dai_probe(struct platform_device *pdev,
drv[i].playback.formats = RSND_FMTS;
drv[i].playback.channels_min = 2;
drv[i].playback.channels_max = 2;
+ rsnd_path_init(priv, &rdai[i], &rdai[i].playback);
}
if (cmod) {
drv[i].capture.rates = RSND_RATES;
drv[i].capture.formats = RSND_FMTS;
drv[i].capture.channels_min = 2;
drv[i].capture.channels_max = 2;
+ rsnd_path_init(priv, &rdai[i], &rdai[i].capture);
}
dev_dbg(dev, "%s (%s/%s)\n", rdai[i].name,
@@ -661,6 +715,14 @@ static int rsnd_dai_probe(struct platform_device *pdev,
static void rsnd_dai_remove(struct platform_device *pdev,
struct rsnd_priv *priv)
{
+ struct rsnd_dai *rdai;
+ int i;
+
+ for (i = 0; i < rsnd_rdai_nr(priv); i++) {
+ rdai = rsnd_dai_get(priv, i);
+ rsnd_path_exit(priv, rdai, &rdai->playback);
+ rsnd_path_exit(priv, rdai, &rdai->capture);
+ }
}
/*
diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c
index bcb98f4..4f2c1d0 100644
--- a/sound/soc/sh/rcar/gen.c
+++ b/sound/soc/sh/rcar/gen.c
@@ -155,62 +155,6 @@ static int rsnd_gen_regmap_init(struct rsnd_priv *priv,
return 0;
}
-int rsnd_gen_path_init(struct rsnd_priv *priv,
- struct rsnd_dai *rdai,
- struct rsnd_dai_stream *io)
-{
- struct rsnd_mod *mod;
- int ret;
- int id;
-
- /*
- * Gen1 is created by SRU/SSI, and this SRU is base module of
- * Gen2's SCU/SSIU/SSI. (Gen2 SCU/SSIU came from SRU)
- *
- * Easy image is..
- * Gen1 SRU = Gen2 SCU + SSIU + etc
- *
- * Gen2 SCU path is very flexible, but, Gen1 SRU (SCU parts) is
- * using fixed path.
- *
- * Then, SSI id = SCU id here
- */
-
- /* get SSI's ID */
- mod = rsnd_ssi_mod_get_frm_dai(priv,
- rsnd_dai_id(priv, rdai),
- rsnd_dai_is_play(rdai, io));
- id = rsnd_mod_id(mod);
-
- /* SCU */
- mod = rsnd_scu_mod_get(priv, id);
- ret = rsnd_dai_connect(rdai, mod, io);
- if (ret < 0)
- return ret;
-
- /* SSI */
- mod = rsnd_ssi_mod_get(priv, id);
- ret = rsnd_dai_connect(rdai, mod, io);
-
- return ret;
-}
-
-int rsnd_gen_path_exit(struct rsnd_priv *priv,
- struct rsnd_dai *rdai,
- struct rsnd_dai_stream *io)
-{
- struct rsnd_mod *mod, *n;
- int ret = 0;
-
- /*
- * remove all mod from rdai
- */
- for_each_rsnd_mod(mod, n, io)
- ret |= rsnd_dai_disconnect(mod);
-
- return ret;
-}
-
/*
* Gen2
*/
diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
index 3962a50..6a25203 100644
--- a/sound/soc/sh/rcar/rsnd.h
+++ b/sound/soc/sh/rcar/rsnd.h
@@ -210,9 +210,6 @@ struct rsnd_dai {
i++)
struct rsnd_dai *rsnd_dai_get(struct rsnd_priv *priv, int id);
-int rsnd_dai_disconnect(struct rsnd_mod *mod);
-int rsnd_dai_connect(struct rsnd_dai *rdai, struct rsnd_mod *mod,
- struct rsnd_dai_stream *io);
int rsnd_dai_is_play(struct rsnd_dai *rdai, struct rsnd_dai_stream *io);
int rsnd_dai_id(struct rsnd_priv *priv, struct rsnd_dai *rdai);
#define rsnd_dai_get_platform_info(rdai) ((rdai)->info)
@@ -229,12 +226,6 @@ int rsnd_gen_probe(struct platform_device *pdev,
struct rsnd_priv *priv);
void rsnd_gen_remove(struct platform_device *pdev,
struct rsnd_priv *priv);
-int rsnd_gen_path_init(struct rsnd_priv *priv,
- struct rsnd_dai *rdai,
- struct rsnd_dai_stream *io);
-int rsnd_gen_path_exit(struct rsnd_priv *priv,
- struct rsnd_dai *rdai,
- struct rsnd_dai_stream *io);
void __iomem *rsnd_gen_reg_get(struct rsnd_priv *priv,
struct rsnd_mod *mod,
enum rsnd_reg reg);
--
1.7.9.5
next prev parent reply other threads:[~2014-02-25 6:15 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-25 6:13 [PATCH 0/19] ASoC: rsnd: new module path method and DT support Kuninori Morimoto
2014-02-25 6:14 ` [PATCH 01/19] ASoC: rsnd: move priv member settings to upper side Kuninori Morimoto
2014-03-03 1:19 ` Mark Brown
2014-02-25 6:14 ` [PATCH 02/19] ASoC: rsnd: move rsnd_mod_call() macro Kuninori Morimoto
2014-03-03 1:19 ` Mark Brown
2014-02-25 6:15 ` [PATCH 03/19] ASoC: rsnd: remove verbose function parameter Kuninori Morimoto
2014-03-03 1:19 ` Mark Brown
2014-02-25 6:15 ` [PATCH 04/19] ASoC: rsnd: remove verbose debug message from scu/ssi Kuninori Morimoto
2014-03-03 1:20 ` Mark Brown
2014-02-25 6:15 ` [PATCH 05/19] ASoC: rsnd: unify rdai naming Kuninori Morimoto
2014-03-03 1:20 ` Mark Brown
2014-02-25 6:15 ` [PATCH 06/19] ASoC: rsnd: add .set_sysclk on snd_soc_dai_ops Kuninori Morimoto
2014-03-03 1:18 ` Mark Brown
2014-03-03 2:08 ` Kuninori Morimoto
2014-03-03 2:12 ` Kuninori Morimoto
2014-03-03 7:45 ` Kuninori Morimoto
2014-02-25 6:15 ` [PATCH 07/19] ASoC: rsnd: tidyup RSND_SSI_xxx flags Kuninori Morimoto
2014-03-03 1:21 ` Mark Brown
2014-02-25 6:15 ` Kuninori Morimoto [this message]
2014-03-03 1:22 ` [PATCH 08/19] ASoC: rsnd: run rsnd_path_init() when probe() timing Mark Brown
2014-02-25 6:15 ` [PATCH 09/19] ASoC: rsnd: use mod array instead of list on rdai Kuninori Morimoto
2014-02-25 6:15 ` [PATCH 10/19] ASoC: rsnd: get ssi/scu from rsnd_dai_stream Kuninori Morimoto
2014-02-25 6:16 ` [PATCH 11/19] ASoC: rsnd: add struct rsnd_dai_platform_info Kuninori Morimoto
2014-02-25 6:16 ` [PATCH 12/19] ASoC: rsnd: use function pointer for each probe Kuninori Morimoto
2014-02-25 6:16 ` [PATCH 13/19] ASoC: rsnd: Get correct SCU ID Kuninori Morimoto
2014-02-25 6:16 ` [PATCH 14/19] ASoC: rsnd: add rsnd_scu_enable_ssi_irq() Kuninori Morimoto
2014-02-25 6:16 ` [PATCH 15/19] ASoC: rsnd: call rsnd_scu_ssi_mode_init() from SSI Kuninori Morimoto
2014-02-25 6:16 ` [PATCH 16/19] ASoC: rsnd: add probe/remove callback on rsnd_mod_ops Kuninori Morimoto
2014-02-25 6:16 ` [PATCH 17/19] ASoC: rsnd: use mod probe method on SCU Kuninori Morimoto
2014-02-25 6:17 ` [PATCH 18/19] ASoC: rsnd: use mod probe method on SSI Kuninori Morimoto
2014-02-25 6:17 ` [PATCH 19/19] ASoC: rsnd: add DeviceTree support Kuninori Morimoto
2014-02-27 5:08 ` [PATCH 0/19] ASoC: rsnd: new module path method and DT support Mark Brown
2014-02-27 10:18 ` Kuninori Morimoto
2014-02-27 11:47 ` Mark Brown
2014-03-03 1:29 ` Mark Brown
2014-03-03 7:42 ` Kuninori Morimoto
2014-03-03 7:42 ` [PATCH 1/8] ASoC: rsnd: run rsnd_path_init() when probe() timing Kuninori Morimoto
2014-03-04 4:13 ` Mark Brown
2014-03-03 7:42 ` [PATCH 2/8] ASoC: rsnd: use mod array instead of list on rdai Kuninori Morimoto
2014-03-03 7:43 ` [PATCH 3/8] ASoC: rsnd: get ssi/scu from rsnd_dai_stream Kuninori Morimoto
2014-03-03 7:43 ` [PATCH 4/8] ASoC: rsnd: use devm_clk_get() instead of clk_get() Kuninori Morimoto
2014-03-03 7:43 ` [PATCH 5/8] ASoC: rsnd: use function pointer for each probe Kuninori Morimoto
2014-03-03 7:43 ` [PATCH 6/8] ASoC: rsnd: remove unused SSI_CONTROL Kuninori Morimoto
2014-03-03 7:43 ` [PATCH 7/8] ASoC: rsnd: modify rsnd_adg_ssi_ws_timing_gen2() parameter Kuninori Morimoto
2014-03-03 7:43 ` [PATCH 8/8] ASoC: rsnd: share reg_field and reduce memory Kuninori Morimoto
2014-03-04 4:49 ` [PATCH 0/19] ASoC: rsnd: new module path method and DT support Kuninori Morimoto
2014-03-04 4:49 ` [PATCH 01/11] ASoC: rsnd: add struct rsnd_dai_platform_info Kuninori Morimoto
2014-03-04 4:50 ` [PATCH 02/11] ASoC: rsnd: Get correct SCU ID Kuninori Morimoto
2014-03-04 4:50 ` [PATCH 03/11] ASoC: rsnd: add rsnd_scu_enable_ssi_irq() Kuninori Morimoto
2014-03-04 4:50 ` [PATCH 04/11] ASoC: rsnd: call rsnd_scu_ssi_mode_init() from SSI Kuninori Morimoto
2014-03-04 4:50 ` [PATCH 05/11] ASoC: rsnd: add probe/remove callback on rsnd_mod_ops Kuninori Morimoto
2014-03-04 4:50 ` [PATCH 06/11] ASoC: rsnd: use mod probe method on SCU Kuninori Morimoto
2014-03-04 4:50 ` [PATCH 07/11] ASoC: rsnd: use mod probe method on SSI Kuninori Morimoto
2014-03-04 4:51 ` [PATCH 08/11] ASoC: rsnd: nothing to do on rsnd_dai_remove() Kuninori Morimoto
2014-03-04 4:51 ` [PATCH 09/11] ASoC: rsnd: remove all rsnd_xxx_remove() Kuninori Morimoto
2014-03-04 4:51 ` [PATCH 10/11] ASoC: rsnd: rename scu to src Kuninori Morimoto
2014-03-05 6:08 ` Mark Brown
2014-03-04 4:51 ` [PATCH 11/11] ASoC: rsnd: add DeviceTree support Kuninori Morimoto
2014-03-05 6:39 ` Forward: " Kuninori Morimoto
2014-03-10 14:52 ` Ben Dooks
[not found] ` <20140310145254.GJ4400-SMNkleLxa3Z6Wcw2j4pizdi2O/JbrIOy@public.gmane.org>
2014-03-14 0:34 ` [alsa-devel] " Kuninori Morimoto
[not found] ` <87fvmlpqi1.wl%kuninori.morimoto.gx-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-03-18 2:29 ` [PATCH v2] " Kuninori Morimoto
[not found] ` <87ob14jl2d.wl%kuninori.morimoto.gx-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-03-21 18:18 ` Mark Brown
[not found] ` <20140321181813.GP552-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-03-24 0:07 ` Kuninori Morimoto
2014-03-24 3:29 ` [PATCH] ASoC: rcar: subnode tidyup for renesas,rsnd.txt Kuninori Morimoto
[not found] ` <87fvm8i8ah.wl%kuninori.morimoto.gx-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-03-25 13:04 ` Mark Brown
2014-03-10 16:28 ` [PATCH 0/19] ASoC: rsnd: new module path method and DT support Ben Dooks
2014-03-11 0:00 ` Kuninori Morimoto
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=871tyr90qe.wl%kuninori.morimoto.gx@gmail.com \
--to=kuninori.morimoto.gx@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=horms@verge.net.au \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=lgirdwood@gmail.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