aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2014-07-31 21:08:18 -0400
committerMark Brown <broonie@linaro.org>2014-08-01 02:25:16 -0400
commit1a7889ca8aba333d7c74fad543d692c31bc7f280 (patch)
tree6438a05b4fc37b1749cdd92106bce2d82e59203a
parent7c63f3c02f5a998621758239abed43c5bd454b70 (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.c43
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