blob: 73356bd78ee39b21e0673112e40ca351c49402af [file] [log] [blame]
From 488036d1719f640f437ee19850688a695d3702d8 Mon Sep 17 00:00:00 2001
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date: Mon, 3 Mar 2014 20:50:41 -0800
Subject: ASoC: rsnd: use mod probe method on SCU
Now, it can use .probe
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 76c6fb5c49790da44d553f655182b426ade2c599)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
---
sound/soc/sh/rcar/scu.c | 64 ++++++++++++++++++++++++++++++-------------------
1 file changed, 39 insertions(+), 25 deletions(-)
diff --git a/sound/soc/sh/rcar/scu.c b/sound/soc/sh/rcar/scu.c
index 63e6aeb8c42d..40250acf608d 100644
--- a/sound/soc/sh/rcar/scu.c
+++ b/sound/soc/sh/rcar/scu.c
@@ -525,6 +525,42 @@ static int rsnd_scu_set_convert_timing_gen2(struct rsnd_mod *mod,
return ret;
}
+static int rsnd_scu_probe_gen2(struct rsnd_mod *mod,
+ struct rsnd_dai *rdai,
+ struct rsnd_dai_stream *io)
+{
+ struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
+ struct rcar_snd_info *info = rsnd_priv_to_info(priv);
+ struct rsnd_scu *scu = rsnd_mod_to_scu(mod);
+ struct rsnd_mod *ssi = rsnd_ssi_mod_get(priv, rsnd_mod_id(mod));
+ struct device *dev = rsnd_priv_to_dev(priv);
+ int ret;
+ int is_play;
+
+ if (info->dai_info)
+ is_play = rsnd_info_is_playback(priv, scu);
+ else
+ is_play = rsnd_ssi_is_play(ssi);
+
+ ret = rsnd_dma_init(priv,
+ rsnd_mod_to_dma(mod),
+ is_play,
+ scu->info->dma_id);
+ if (ret < 0)
+ dev_err(dev, "SCU DMA failed\n");
+
+ return ret;
+}
+
+static int rsnd_scu_remove_gen2(struct rsnd_mod *mod,
+ struct rsnd_dai *rdai,
+ struct rsnd_dai_stream *io)
+{
+ rsnd_dma_quit(rsnd_mod_to_priv(mod), rsnd_mod_to_dma(mod));
+
+ return 0;
+}
+
static int rsnd_scu_init_gen2(struct rsnd_mod *mod,
struct rsnd_dai *rdai,
struct rsnd_dai_stream *io)
@@ -576,6 +612,8 @@ static int rsnd_scu_stop_gen2(struct rsnd_mod *mod,
static struct rsnd_mod_ops rsnd_scu_gen2_ops = {
.name = "scu (gen2)",
+ .probe = rsnd_scu_probe_gen2,
+ .remove = rsnd_scu_remove_gen2,
.init = rsnd_scu_init_gen2,
.quit = rsnd_scu_quit,
.start = rsnd_scu_start_gen2,
@@ -631,25 +669,8 @@ int rsnd_scu_probe(struct platform_device *pdev,
if (rsnd_scu_hpbif_is_enable(scu)) {
if (rsnd_is_gen1(priv))
ops = &rsnd_scu_gen1_ops;
- if (rsnd_is_gen2(priv)) {
- int ret;
- int is_play;
-
- if (info->dai_info) {
- is_play = rsnd_info_is_playback(priv, scu);
- } else {
- struct rsnd_mod *ssi = rsnd_ssi_mod_get(priv, i);
- is_play = rsnd_ssi_is_play(ssi);
- }
- ret = rsnd_dma_init(priv,
- rsnd_mod_to_dma(&scu->mod),
- is_play,
- scu->info->dma_id);
- if (ret < 0)
- return ret;
-
+ if (rsnd_is_gen2(priv))
ops = &rsnd_scu_gen2_ops;
- }
}
rsnd_mod_init(priv, &scu->mod, ops, RSND_MOD_SCU, i);
@@ -663,11 +684,4 @@ int rsnd_scu_probe(struct platform_device *pdev,
void rsnd_scu_remove(struct platform_device *pdev,
struct rsnd_priv *priv)
{
- struct rsnd_scu *scu;
- int i;
-
- for_each_rsnd_scu(scu, priv, i) {
- if (rsnd_scu_dma_available(scu))
- rsnd_dma_quit(priv, rsnd_mod_to_dma(&scu->mod));
- }
}
--
2.1.2