aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/sh
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2015-11-04 03:44:32 -0500
committerMark Brown <broonie@kernel.org>2015-11-16 05:09:29 -0500
commit13e0d17d08d1d651aa119c286f74cf366caf09dd (patch)
tree96df9ce9c4a666904149808a31209845a010ab5f /sound/soc/sh
parentca16cc61592377ebd48d5f22fd823b592c80038e (diff)
ASoC: rsnd: MIX settings matches to datasheet
Current MIX settings order was rough. This patch makes it match to datasheet. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sh')
-rw-r--r--sound/soc/sh/rcar/mix.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/sound/soc/sh/rcar/mix.c b/sound/soc/sh/rcar/mix.c
index bcbd821981a9..2baa2d79bfc0 100644
--- a/sound/soc/sh/rcar/mix.c
+++ b/sound/soc/sh/rcar/mix.c
@@ -31,24 +31,41 @@ static void rsnd_mix_soft_reset(struct rsnd_mod *mod)
31 rsnd_mod_write(mod, MIX_SWRSR, 1); 31 rsnd_mod_write(mod, MIX_SWRSR, 1);
32} 32}
33 33
34#define rsnd_mix_initialize_lock(mod) __rsnd_mix_initialize_lock(mod, 1) 34static void rsnd_mix_volume_parameter(struct rsnd_dai_stream *io,
35#define rsnd_mix_initialize_unlock(mod) __rsnd_mix_initialize_lock(mod, 0) 35 struct rsnd_mod *mod)
36static void __rsnd_mix_initialize_lock(struct rsnd_mod *mod, u32 enable)
37{ 36{
38 rsnd_mod_write(mod, MIX_MIXIR, enable); 37 rsnd_mod_write(mod, MIX_MDBAR, 0);
38 rsnd_mod_write(mod, MIX_MDBBR, 0);
39 rsnd_mod_write(mod, MIX_MDBCR, 0);
40 rsnd_mod_write(mod, MIX_MDBDR, 0);
41}
42
43static void rsnd_mix_volume_init(struct rsnd_dai_stream *io,
44 struct rsnd_mod *mod)
45{
46 rsnd_mod_write(mod, MIX_MIXIR, 1);
47
48 /* General Information */
49 rsnd_mod_write(mod, MIX_ADINR, rsnd_get_adinr_chan(mod, io));
50
51 /* volume step */
52 rsnd_mod_write(mod, MIX_MIXMR, 0);
53 rsnd_mod_write(mod, MIX_MVPDR, 0);
54
55 /* common volume parameter */
56 rsnd_mix_volume_parameter(io, mod);
57
58 rsnd_mod_write(mod, MIX_MIXIR, 0);
39} 59}
40 60
41static void rsnd_mix_volume_update(struct rsnd_dai_stream *io, 61static void rsnd_mix_volume_update(struct rsnd_dai_stream *io,
42 struct rsnd_mod *mod) 62 struct rsnd_mod *mod)
43{ 63{
44
45 /* Disable MIX dB setting */ 64 /* Disable MIX dB setting */
46 rsnd_mod_write(mod, MIX_MDBER, 0); 65 rsnd_mod_write(mod, MIX_MDBER, 0);
47 66
48 rsnd_mod_write(mod, MIX_MDBAR, 0); 67 /* common volume parameter */
49 rsnd_mod_write(mod, MIX_MDBBR, 0); 68 rsnd_mix_volume_parameter(io, mod);
50 rsnd_mod_write(mod, MIX_MDBCR, 0);
51 rsnd_mod_write(mod, MIX_MDBDR, 0);
52 69
53 /* Enable MIX dB setting */ 70 /* Enable MIX dB setting */
54 rsnd_mod_write(mod, MIX_MDBER, 1); 71 rsnd_mod_write(mod, MIX_MDBER, 1);
@@ -69,18 +86,10 @@ static int rsnd_mix_init(struct rsnd_mod *mod,
69 86
70 rsnd_mix_soft_reset(mod); 87 rsnd_mix_soft_reset(mod);
71 88
72 rsnd_mix_initialize_lock(mod); 89 rsnd_mix_volume_init(io, mod);
73
74 rsnd_mod_write(mod, MIX_ADINR, rsnd_get_adinr_chan(mod, io));
75
76 /* volume step */
77 rsnd_mod_write(mod, MIX_MIXMR, 0);
78 rsnd_mod_write(mod, MIX_MVPDR, 0);
79 90
80 rsnd_mix_volume_update(io, mod); 91 rsnd_mix_volume_update(io, mod);
81 92
82 rsnd_mix_initialize_unlock(mod);
83
84 return 0; 93 return 0;
85} 94}
86 95