diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2014-07-31 21:08:18 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-08-01 02:25:16 -0400 |
commit | 1a7889ca8aba333d7c74fad543d692c31bc7f280 (patch) | |
tree | 6438a05b4fc37b1749cdd92106bce2d82e59203a | |
parent | 7c63f3c02f5a998621758239abed43c5bd454b70 (diff) |
ASoC: rsnd: fixup SND_SOC_DAIFMT_xB_xF behavior
In current R-Car rsnd driver,
the SND_SOC_DAIFMT_xB_xF flags are used to HW default behavior,
but, it should be used to specific format.
The waveforms of LEFT_J/RIGHT_J format with
SND_SOC_DAIFMT_NB_NF flag will be
started from "falling edge" without this patch.
But, it should be started from "rising edge".
Reported-by: Jun Watanabe <jun.watanabe.ue@renesas.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r-- | sound/soc/sh/rcar/core.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c index d7c669790dd4..19f78963e8b9 100644 --- a/sound/soc/sh/rcar/core.c +++ b/sound/soc/sh/rcar/core.c | |||
@@ -624,40 +624,41 @@ static int rsnd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) | |||
624 | return -EINVAL; | 624 | return -EINVAL; |
625 | } | 625 | } |
626 | 626 | ||
627 | /* set clock inversion */ | ||
628 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { | ||
629 | case SND_SOC_DAIFMT_NB_IF: | ||
630 | rdai->bit_clk_inv = 0; | ||
631 | rdai->frm_clk_inv = 1; | ||
632 | break; | ||
633 | case SND_SOC_DAIFMT_IB_NF: | ||
634 | rdai->bit_clk_inv = 1; | ||
635 | rdai->frm_clk_inv = 0; | ||
636 | break; | ||
637 | case SND_SOC_DAIFMT_IB_IF: | ||
638 | rdai->bit_clk_inv = 1; | ||
639 | rdai->frm_clk_inv = 1; | ||
640 | break; | ||
641 | case SND_SOC_DAIFMT_NB_NF: | ||
642 | default: | ||
643 | rdai->bit_clk_inv = 0; | ||
644 | rdai->frm_clk_inv = 0; | ||
645 | break; | ||
646 | } | ||
647 | |||
648 | /* set format */ | 627 | /* set format */ |
649 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | 628 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
650 | case SND_SOC_DAIFMT_I2S: | 629 | case SND_SOC_DAIFMT_I2S: |
651 | rdai->sys_delay = 0; | 630 | rdai->sys_delay = 0; |
652 | rdai->data_alignment = 0; | 631 | rdai->data_alignment = 0; |
632 | rdai->frm_clk_inv = 0; | ||
653 | break; | 633 | break; |
654 | case SND_SOC_DAIFMT_LEFT_J: | 634 | case SND_SOC_DAIFMT_LEFT_J: |
655 | rdai->sys_delay = 1; | 635 | rdai->sys_delay = 1; |
656 | rdai->data_alignment = 0; | 636 | rdai->data_alignment = 0; |
637 | rdai->frm_clk_inv = 1; | ||
657 | break; | 638 | break; |
658 | case SND_SOC_DAIFMT_RIGHT_J: | 639 | case SND_SOC_DAIFMT_RIGHT_J: |
659 | rdai->sys_delay = 1; | 640 | rdai->sys_delay = 1; |
660 | rdai->data_alignment = 1; | 641 | rdai->data_alignment = 1; |
642 | rdai->frm_clk_inv = 1; | ||
643 | break; | ||
644 | } | ||
645 | |||
646 | /* set clock inversion */ | ||
647 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { | ||
648 | case SND_SOC_DAIFMT_NB_IF: | ||
649 | rdai->bit_clk_inv = rdai->bit_clk_inv; | ||
650 | rdai->frm_clk_inv = !rdai->frm_clk_inv; | ||
651 | break; | ||
652 | case SND_SOC_DAIFMT_IB_NF: | ||
653 | rdai->bit_clk_inv = !rdai->bit_clk_inv; | ||
654 | rdai->frm_clk_inv = rdai->frm_clk_inv; | ||
655 | break; | ||
656 | case SND_SOC_DAIFMT_IB_IF: | ||
657 | rdai->bit_clk_inv = !rdai->bit_clk_inv; | ||
658 | rdai->frm_clk_inv = !rdai->frm_clk_inv; | ||
659 | break; | ||
660 | case SND_SOC_DAIFMT_NB_NF: | ||
661 | default: | ||
661 | break; | 662 | break; |
662 | } | 663 | } |
663 | 664 | ||