| From 18388b5d4f103456263229fdc2e4525ac9e5056e Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Sun, 1 Sep 2013 20:31:16 -0700 |
| Subject: ASoC: rsnd: gen: rsnd_gen_ops cares .probe and .remove |
| |
| Current rsnd_gen_ops didn't care about .probe and .remove |
| functions, but it was not good sense. |
| This patch tidyup it |
| |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 072188b61c9b7aedaa15c46226b537345644beee) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/gen.c | 41 ++++++++++++++++++++++++----------------- |
| 1 file changed, 24 insertions(+), 17 deletions(-) |
| |
| diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c |
| index babb203b43b7..331fc558d796 100644 |
| --- a/sound/soc/sh/rcar/gen.c |
| +++ b/sound/soc/sh/rcar/gen.c |
| @@ -11,6 +11,11 @@ |
| #include "rsnd.h" |
| |
| struct rsnd_gen_ops { |
| + int (*probe)(struct platform_device *pdev, |
| + struct rcar_snd_info *info, |
| + struct rsnd_priv *priv); |
| + void (*remove)(struct platform_device *pdev, |
| + struct rsnd_priv *priv); |
| int (*path_init)(struct rsnd_priv *priv, |
| struct rsnd_dai *rdai, |
| struct rsnd_dai_stream *io); |
| @@ -98,11 +103,6 @@ static int rsnd_gen1_path_exit(struct rsnd_priv *priv, |
| return ret; |
| } |
| |
| -static struct rsnd_gen_ops rsnd_gen1_ops = { |
| - .path_init = rsnd_gen1_path_init, |
| - .path_exit = rsnd_gen1_path_exit, |
| -}; |
| - |
| #define RSND_GEN1_REG_MAP(g, s, i, oi, oa) \ |
| do { \ |
| (g)->reg_map[RSND_REG_##i].index = RSND_GEN1_##s; \ |
| @@ -163,7 +163,6 @@ static int rsnd_gen1_probe(struct platform_device *pdev, |
| IS_ERR(gen->base[RSND_GEN1_SSI])) |
| return -ENODEV; |
| |
| - gen->ops = &rsnd_gen1_ops; |
| rsnd_gen1_reg_map_init(gen); |
| |
| dev_dbg(dev, "Gen1 device probed\n"); |
| @@ -183,6 +182,13 @@ static void rsnd_gen1_remove(struct platform_device *pdev, |
| { |
| } |
| |
| +static struct rsnd_gen_ops rsnd_gen1_ops = { |
| + .probe = rsnd_gen1_probe, |
| + .remove = rsnd_gen1_remove, |
| + .path_init = rsnd_gen1_path_init, |
| + .path_exit = rsnd_gen1_path_exit, |
| +}; |
| + |
| /* |
| * Gen |
| */ |
| @@ -251,6 +257,14 @@ int rsnd_gen_probe(struct platform_device *pdev, |
| return -ENOMEM; |
| } |
| |
| + if (rsnd_is_gen1(priv)) |
| + gen->ops = &rsnd_gen1_ops; |
| + |
| + if (!gen->ops) { |
| + dev_err(dev, "unknown generation R-Car sound device\n"); |
| + return -ENODEV; |
| + } |
| + |
| priv->gen = gen; |
| |
| /* |
| @@ -261,20 +275,13 @@ int rsnd_gen_probe(struct platform_device *pdev, |
| for (i = 0; i < RSND_REG_MAX; i++) |
| gen->reg_map[i].index = -1; |
| |
| - /* |
| - * init each module |
| - */ |
| - if (rsnd_is_gen1(priv)) |
| - return rsnd_gen1_probe(pdev, info, priv); |
| - |
| - dev_err(dev, "unknown generation R-Car sound device\n"); |
| - |
| - return -ENODEV; |
| + return gen->ops->probe(pdev, info, priv); |
| } |
| |
| void rsnd_gen_remove(struct platform_device *pdev, |
| struct rsnd_priv *priv) |
| { |
| - if (rsnd_is_gen1(priv)) |
| - rsnd_gen1_remove(pdev, priv); |
| + struct rsnd_gen *gen = rsnd_priv_to_gen(priv); |
| + |
| + gen->ops->remove(pdev, priv); |
| } |
| -- |
| 1.8.5.rc3 |
| |