ASoC: rsnd: don't use rsnd_mod_to_io() on snd_kcontrol
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 15 Jun 2015 06:27:28 +0000 (06:27 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 16 Jun 2015 11:34:04 +0000 (12:34 +0100)
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>
sound/soc/sh/rcar/core.c
sound/soc/sh/rcar/dvc.c
sound/soc/sh/rcar/rsnd.h
sound/soc/sh/rcar/src.c

index daa01e2aebb696a72e095603e1afc9d759576c6f..266b24ae621dbdbd86ca0d8bbbe2a80acabbda04 100644 (file)
@@ -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);
 }
 
 /*
index 3aac790534f0a1d1b4251428a9dd26ac29a18a6c..36fc020cbc1803cbec2a7e1a225ae8690ea84a98 100644 (file)
@@ -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,
index ac03d2008ee828d11283a09247a534258b83c454..fdb443b4f183c6b8a9f8657b60ffaa10393d3cdd 100644 (file)
@@ -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);
 
index bc122ede3254699ac2b5b821d6b2b4203e8a8f7f..67db6968651594b623742b73fa80851c2b601b3b 100644 (file)
@@ -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",