| From 2c93de8545b2a79eef277fde52032711cd589781 Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Mon, 15 Jun 2015 06:24:54 +0000 |
| Subject: [PATCH 119/129] ASoC: rsnd: rsnd_mod has rsnd_priv |
| |
| Each Renesas sound mod (= SSI/SRC/DVC) might be called from many paths |
| if it supports MIXer. In such case, mod <-> io is no longer 1:1 |
| relationship. This means we can't use rsnd_mod_to_io() in SSI/SRC/DMA |
| interrupt handler. In such case, we need to check all io in interrupt |
| handler, and then, "priv" is needed. |
| This patch adds rsnd_priv pointer in rsnd_mod for prepare it. |
| |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Tested-by: Keita Kobayashi <keita.kobayashi.ym@renesas.com> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| (cherry picked from commit 2099bc8eb0b257196a8535fba343cb23a8a6807c) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/core.c | 4 +++- |
| sound/soc/sh/rcar/dvc.c | 2 +- |
| sound/soc/sh/rcar/rsnd.h | 6 ++++-- |
| sound/soc/sh/rcar/src.c | 2 +- |
| sound/soc/sh/rcar/ssi.c | 2 +- |
| 5 files changed, 10 insertions(+), 6 deletions(-) |
| |
| diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c |
| index 50ec28c24867..1e8d7e59998c 100644 |
| --- a/sound/soc/sh/rcar/core.c |
| +++ b/sound/soc/sh/rcar/core.c |
| @@ -145,7 +145,8 @@ struct dma_chan *rsnd_mod_dma_req(struct rsnd_mod *mod) |
| return mod->ops->dma_req(mod); |
| } |
| |
| -int rsnd_mod_init(struct rsnd_mod *mod, |
| +int rsnd_mod_init(struct rsnd_priv *priv, |
| + struct rsnd_mod *mod, |
| struct rsnd_mod_ops *ops, |
| struct clk *clk, |
| enum rsnd_mod_type type, |
| @@ -160,6 +161,7 @@ int rsnd_mod_init(struct rsnd_mod *mod, |
| mod->ops = ops; |
| mod->type = type; |
| mod->clk = clk; |
| + mod->priv = priv; |
| |
| return ret; |
| } |
| diff --git a/sound/soc/sh/rcar/dvc.c b/sound/soc/sh/rcar/dvc.c |
| index e5fcb062ad77..2004bd00786b 100644 |
| --- a/sound/soc/sh/rcar/dvc.c |
| +++ b/sound/soc/sh/rcar/dvc.c |
| @@ -366,7 +366,7 @@ int rsnd_dvc_probe(struct platform_device *pdev, |
| |
| dvc->info = &info->dvc_info[i]; |
| |
| - ret = rsnd_mod_init(&dvc->mod, &rsnd_dvc_ops, |
| + ret = rsnd_mod_init(priv, &dvc->mod, &rsnd_dvc_ops, |
| clk, RSND_MOD_DVC, i); |
| if (ret) |
| return ret; |
| diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h |
| index 8a114cb41925..4561b97d8834 100644 |
| --- a/sound/soc/sh/rcar/rsnd.h |
| +++ b/sound/soc/sh/rcar/rsnd.h |
| @@ -253,6 +253,7 @@ struct rsnd_mod { |
| struct rsnd_mod_ops *ops; |
| struct rsnd_dma dma; |
| struct rsnd_dai_stream *io; |
| + struct rsnd_priv *priv; |
| struct clk *clk; |
| u32 status; |
| }; |
| @@ -300,14 +301,15 @@ struct rsnd_mod { |
| #define __rsnd_mod_call_fallback 0 |
| #define __rsnd_mod_call_hw_params 0 |
| |
| -#define rsnd_mod_to_priv(mod) (rsnd_io_to_priv(rsnd_mod_to_io(mod))) |
| +#define rsnd_mod_to_priv(mod) ((mod)->priv) |
| #define rsnd_mod_to_dma(mod) (&(mod)->dma) |
| #define rsnd_mod_to_io(mod) ((mod)->io) |
| #define rsnd_mod_id(mod) ((mod)->id) |
| #define rsnd_mod_hw_start(mod) clk_enable((mod)->clk) |
| #define rsnd_mod_hw_stop(mod) clk_disable((mod)->clk) |
| |
| -int rsnd_mod_init(struct rsnd_mod *mod, |
| +int rsnd_mod_init(struct rsnd_priv *priv, |
| + struct rsnd_mod *mod, |
| struct rsnd_mod_ops *ops, |
| struct clk *clk, |
| enum rsnd_mod_type type, |
| diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c |
| index fbe9166e26d1..316d139b7176 100644 |
| --- a/sound/soc/sh/rcar/src.c |
| +++ b/sound/soc/sh/rcar/src.c |
| @@ -1046,7 +1046,7 @@ int rsnd_src_probe(struct platform_device *pdev, |
| |
| src->info = &info->src_info[i]; |
| |
| - ret = rsnd_mod_init(&src->mod, ops, clk, RSND_MOD_SRC, i); |
| + ret = rsnd_mod_init(priv, &src->mod, ops, clk, RSND_MOD_SRC, i); |
| if (ret) |
| return ret; |
| } |
| diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c |
| index 25483211a349..16ced762aa0c 100644 |
| --- a/sound/soc/sh/rcar/ssi.c |
| +++ b/sound/soc/sh/rcar/ssi.c |
| @@ -782,7 +782,7 @@ int rsnd_ssi_probe(struct platform_device *pdev, |
| else if (rsnd_ssi_pio_available(ssi)) |
| ops = &rsnd_ssi_pio_ops; |
| |
| - ret = rsnd_mod_init(&ssi->mod, ops, clk, RSND_MOD_SSI, i); |
| + ret = rsnd_mod_init(priv, &ssi->mod, ops, clk, RSND_MOD_SSI, i); |
| if (ret) |
| return ret; |
| |
| -- |
| 2.6.2 |
| |