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>
This commit is contained in:
parent
5451ea443b
commit
2099bc8eb0
5 changed files with 10 additions and 6 deletions
|
@ -145,7 +145,8 @@ struct dma_chan *rsnd_mod_dma_req(struct rsnd_mod *mod)
|
||||||
return mod->ops->dma_req(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 rsnd_mod_ops *ops,
|
||||||
struct clk *clk,
|
struct clk *clk,
|
||||||
enum rsnd_mod_type type,
|
enum rsnd_mod_type type,
|
||||||
|
@ -160,6 +161,7 @@ int rsnd_mod_init(struct rsnd_mod *mod,
|
||||||
mod->ops = ops;
|
mod->ops = ops;
|
||||||
mod->type = type;
|
mod->type = type;
|
||||||
mod->clk = clk;
|
mod->clk = clk;
|
||||||
|
mod->priv = priv;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,7 +366,7 @@ int rsnd_dvc_probe(struct platform_device *pdev,
|
||||||
|
|
||||||
dvc->info = &info->dvc_info[i];
|
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);
|
clk, RSND_MOD_DVC, i);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -253,6 +253,7 @@ struct rsnd_mod {
|
||||||
struct rsnd_mod_ops *ops;
|
struct rsnd_mod_ops *ops;
|
||||||
struct rsnd_dma dma;
|
struct rsnd_dma dma;
|
||||||
struct rsnd_dai_stream *io;
|
struct rsnd_dai_stream *io;
|
||||||
|
struct rsnd_priv *priv;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
u32 status;
|
u32 status;
|
||||||
};
|
};
|
||||||
|
@ -300,14 +301,15 @@ struct rsnd_mod {
|
||||||
#define __rsnd_mod_call_fallback 0
|
#define __rsnd_mod_call_fallback 0
|
||||||
#define __rsnd_mod_call_hw_params 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_dma(mod) (&(mod)->dma)
|
||||||
#define rsnd_mod_to_io(mod) ((mod)->io)
|
#define rsnd_mod_to_io(mod) ((mod)->io)
|
||||||
#define rsnd_mod_id(mod) ((mod)->id)
|
#define rsnd_mod_id(mod) ((mod)->id)
|
||||||
#define rsnd_mod_hw_start(mod) clk_enable((mod)->clk)
|
#define rsnd_mod_hw_start(mod) clk_enable((mod)->clk)
|
||||||
#define rsnd_mod_hw_stop(mod) clk_disable((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 rsnd_mod_ops *ops,
|
||||||
struct clk *clk,
|
struct clk *clk,
|
||||||
enum rsnd_mod_type type,
|
enum rsnd_mod_type type,
|
||||||
|
|
|
@ -1046,7 +1046,7 @@ int rsnd_src_probe(struct platform_device *pdev,
|
||||||
|
|
||||||
src->info = &info->src_info[i];
|
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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -782,7 +782,7 @@ int rsnd_ssi_probe(struct platform_device *pdev,
|
||||||
else if (rsnd_ssi_pio_available(ssi))
|
else if (rsnd_ssi_pio_available(ssi))
|
||||||
ops = &rsnd_ssi_pio_ops;
|
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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue