| From e076b76193833601a9517556a9ac4c7806e0394b Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Mon, 15 Jun 2015 06:27:28 +0000 |
| Subject: [PATCH 126/129] ASoC: rsnd: don't use rsnd_mod_to_io() on |
| snd_kcontrol |
| |
| 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 patch removes rsnd_mod_to_io() from snd_kcontrol |
| and related function. |
| |
| 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 b65a7cccb58ce5acfed579e1ca10f8a4d3d0dd04) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/core.c | 25 +++++++++++++++++-------- |
| sound/soc/sh/rcar/dvc.c | 15 ++++++++------- |
| sound/soc/sh/rcar/rsnd.h | 15 +++++++++++---- |
| sound/soc/sh/rcar/src.c | 8 ++++---- |
| 4 files changed, 40 insertions(+), 23 deletions(-) |
| |
| diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c |
| index daa01e2aebb6..266b24ae621d 100644 |
| --- a/sound/soc/sh/rcar/core.c |
| +++ b/sound/soc/sh/rcar/core.c |
| @@ -880,16 +880,18 @@ static int rsnd_kctrl_put(struct snd_kcontrol *kctrl, |
| } |
| |
| if (change) |
| - cfg->update(mod); |
| + cfg->update(cfg->io, mod); |
| |
| return change; |
| } |
| |
| static int __rsnd_kctrl_new(struct rsnd_mod *mod, |
| + struct rsnd_dai_stream *io, |
| struct snd_soc_pcm_runtime *rtd, |
| const unsigned char *name, |
| struct rsnd_kctrl_cfg *cfg, |
| - void (*update)(struct rsnd_mod *mod)) |
| + void (*update)(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod)) |
| { |
| struct snd_soc_card *soc_card = rtd->card; |
| struct snd_card *card = rtd->card->snd_card; |
| @@ -918,6 +920,7 @@ static int __rsnd_kctrl_new(struct rsnd_mod *mod, |
| cfg->update = update; |
| cfg->card = card; |
| cfg->kctrl = kctrl; |
| + cfg->io = io; |
| |
| return 0; |
| } |
| @@ -928,36 +931,42 @@ void _rsnd_kctrl_remove(struct rsnd_kctrl_cfg *cfg) |
| } |
| |
| int rsnd_kctrl_new_m(struct rsnd_mod *mod, |
| + struct rsnd_dai_stream *io, |
| struct snd_soc_pcm_runtime *rtd, |
| const unsigned char *name, |
| - void (*update)(struct rsnd_mod *mod), |
| + void (*update)(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod), |
| struct rsnd_kctrl_cfg_m *_cfg, |
| u32 max) |
| { |
| _cfg->cfg.max = max; |
| _cfg->cfg.size = RSND_DVC_CHANNELS; |
| _cfg->cfg.val = _cfg->val; |
| - return __rsnd_kctrl_new(mod, rtd, name, &_cfg->cfg, update); |
| + return __rsnd_kctrl_new(mod, io, rtd, name, &_cfg->cfg, update); |
| } |
| |
| int rsnd_kctrl_new_s(struct rsnd_mod *mod, |
| + struct rsnd_dai_stream *io, |
| struct snd_soc_pcm_runtime *rtd, |
| const unsigned char *name, |
| - void (*update)(struct rsnd_mod *mod), |
| + void (*update)(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod), |
| struct rsnd_kctrl_cfg_s *_cfg, |
| u32 max) |
| { |
| _cfg->cfg.max = max; |
| _cfg->cfg.size = 1; |
| _cfg->cfg.val = &_cfg->val; |
| - return __rsnd_kctrl_new(mod, rtd, name, &_cfg->cfg, update); |
| + return __rsnd_kctrl_new(mod, io, rtd, name, &_cfg->cfg, update); |
| } |
| |
| int rsnd_kctrl_new_e(struct rsnd_mod *mod, |
| + struct rsnd_dai_stream *io, |
| struct snd_soc_pcm_runtime *rtd, |
| const unsigned char *name, |
| struct rsnd_kctrl_cfg_s *_cfg, |
| - void (*update)(struct rsnd_mod *mod), |
| + void (*update)(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod), |
| const char * const *texts, |
| u32 max) |
| { |
| @@ -965,7 +974,7 @@ int rsnd_kctrl_new_e(struct rsnd_mod *mod, |
| _cfg->cfg.size = 1; |
| _cfg->cfg.val = &_cfg->val; |
| _cfg->cfg.texts = texts; |
| - return __rsnd_kctrl_new(mod, rtd, name, &_cfg->cfg, update); |
| + return __rsnd_kctrl_new(mod, io, rtd, name, &_cfg->cfg, update); |
| } |
| |
| /* |
| diff --git a/sound/soc/sh/rcar/dvc.c b/sound/soc/sh/rcar/dvc.c |
| index 3aac790534f0..36fc020cbc18 100644 |
| --- a/sound/soc/sh/rcar/dvc.c |
| +++ b/sound/soc/sh/rcar/dvc.c |
| @@ -63,7 +63,8 @@ static const char * const dvc_ramp_rate[] = { |
| "0.125 dB/8192 steps", /* 10111 */ |
| }; |
| |
| -static void rsnd_dvc_volume_update(struct rsnd_mod *mod) |
| +static void rsnd_dvc_volume_update(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod) |
| { |
| struct rsnd_dvc *dvc = rsnd_mod_to_dvc(mod); |
| u32 val[RSND_DVC_CHANNELS]; |
| @@ -172,7 +173,7 @@ static int rsnd_dvc_init(struct rsnd_mod *dvc_mod, |
| rsnd_mod_write(dvc_mod, DVC_ADINR, rsnd_get_adinr(dvc_mod, io)); |
| |
| /* ch0/ch1 Volume */ |
| - rsnd_dvc_volume_update(dvc_mod); |
| + rsnd_dvc_volume_update(io, dvc_mod); |
| |
| rsnd_mod_write(dvc_mod, DVC_DVUIR, 0); |
| |
| @@ -217,7 +218,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod, |
| int ret; |
| |
| /* Volume */ |
| - ret = rsnd_kctrl_new_m(mod, rtd, |
| + ret = rsnd_kctrl_new_m(mod, io, rtd, |
| is_play ? |
| "DVC Out Playback Volume" : "DVC In Capture Volume", |
| rsnd_dvc_volume_update, |
| @@ -226,7 +227,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod, |
| return ret; |
| |
| /* Mute */ |
| - ret = rsnd_kctrl_new_m(mod, rtd, |
| + ret = rsnd_kctrl_new_m(mod, io, rtd, |
| is_play ? |
| "DVC Out Mute Switch" : "DVC In Mute Switch", |
| rsnd_dvc_volume_update, |
| @@ -235,7 +236,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod, |
| return ret; |
| |
| /* Ramp */ |
| - ret = rsnd_kctrl_new_s(mod, rtd, |
| + ret = rsnd_kctrl_new_s(mod, io, rtd, |
| is_play ? |
| "DVC Out Ramp Switch" : "DVC In Ramp Switch", |
| rsnd_dvc_volume_update, |
| @@ -243,7 +244,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod, |
| if (ret < 0) |
| return ret; |
| |
| - ret = rsnd_kctrl_new_e(mod, rtd, |
| + ret = rsnd_kctrl_new_e(mod, io, rtd, |
| is_play ? |
| "DVC Out Ramp Up Rate" : "DVC In Ramp Up Rate", |
| &dvc->rup, |
| @@ -252,7 +253,7 @@ static int rsnd_dvc_pcm_new(struct rsnd_mod *mod, |
| if (ret < 0) |
| return ret; |
| |
| - ret = rsnd_kctrl_new_e(mod, rtd, |
| + ret = rsnd_kctrl_new_e(mod, io, rtd, |
| is_play ? |
| "DVC Out Ramp Down Rate" : "DVC In Ramp Down Rate", |
| &dvc->rdown, |
| diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h |
| index ac03d2008ee8..fdb443b4f183 100644 |
| --- a/sound/soc/sh/rcar/rsnd.h |
| +++ b/sound/soc/sh/rcar/rsnd.h |
| @@ -487,7 +487,8 @@ struct rsnd_kctrl_cfg { |
| unsigned int size; |
| u32 *val; |
| const char * const *texts; |
| - void (*update)(struct rsnd_mod *mod); |
| + void (*update)(struct rsnd_dai_stream *io, struct rsnd_mod *mod); |
| + struct rsnd_dai_stream *io; |
| struct snd_card *card; |
| struct snd_kcontrol *kctrl; |
| }; |
| @@ -507,22 +508,28 @@ void _rsnd_kctrl_remove(struct rsnd_kctrl_cfg *cfg); |
| #define rsnd_kctrl_remove(_cfg) _rsnd_kctrl_remove(&((_cfg).cfg)) |
| |
| int rsnd_kctrl_new_m(struct rsnd_mod *mod, |
| + struct rsnd_dai_stream *io, |
| struct snd_soc_pcm_runtime *rtd, |
| const unsigned char *name, |
| - void (*update)(struct rsnd_mod *mod), |
| + void (*update)(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod), |
| struct rsnd_kctrl_cfg_m *_cfg, |
| u32 max); |
| int rsnd_kctrl_new_s(struct rsnd_mod *mod, |
| + struct rsnd_dai_stream *io, |
| struct snd_soc_pcm_runtime *rtd, |
| const unsigned char *name, |
| - void (*update)(struct rsnd_mod *mod), |
| + void (*update)(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod), |
| struct rsnd_kctrl_cfg_s *_cfg, |
| u32 max); |
| int rsnd_kctrl_new_e(struct rsnd_mod *mod, |
| + struct rsnd_dai_stream *io, |
| struct snd_soc_pcm_runtime *rtd, |
| const unsigned char *name, |
| struct rsnd_kctrl_cfg_s *_cfg, |
| - void (*update)(struct rsnd_mod *mod), |
| + void (*update)(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod), |
| const char * const *texts, |
| u32 max); |
| |
| diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c |
| index bc122ede3254..67db69686515 100644 |
| --- a/sound/soc/sh/rcar/src.c |
| +++ b/sound/soc/sh/rcar/src.c |
| @@ -876,9 +876,9 @@ static int rsnd_src_stop_gen2(struct rsnd_mod *mod, |
| return ret; |
| } |
| |
| -static void rsnd_src_reconvert_update(struct rsnd_mod *mod) |
| +static void rsnd_src_reconvert_update(struct rsnd_dai_stream *io, |
| + struct rsnd_mod *mod) |
| { |
| - struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); |
| struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); |
| struct rsnd_src *src = rsnd_mod_to_src(mod); |
| u32 convert_rate = rsnd_src_convert_rate(io, src); |
| @@ -931,7 +931,7 @@ static int rsnd_src_pcm_new(struct rsnd_mod *mod, |
| /* |
| * enable sync convert |
| */ |
| - ret = rsnd_kctrl_new_s(mod, rtd, |
| + ret = rsnd_kctrl_new_s(mod, io, rtd, |
| rsnd_io_is_play(io) ? |
| "SRC Out Rate Switch" : |
| "SRC In Rate Switch", |
| @@ -940,7 +940,7 @@ static int rsnd_src_pcm_new(struct rsnd_mod *mod, |
| if (ret < 0) |
| return ret; |
| |
| - ret = rsnd_kctrl_new_s(mod, rtd, |
| + ret = rsnd_kctrl_new_s(mod, io, rtd, |
| rsnd_io_is_play(io) ? |
| "SRC Out Rate" : |
| "SRC In Rate", |
| -- |
| 2.6.2 |
| |