| From 45a398dcadf51ee28cfe4dae8890d0fac70dc597 Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Thu, 31 Jul 2014 18:08:18 -0700 |
| Subject: 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> |
| (cherry picked from commit 1a7889ca8aba333d7c74fad543d692c31bc7f280) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/sh/rcar/core.c | 43 ++++++++++++++++++++++--------------------- |
| 1 file 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) |
| return -EINVAL; |
| } |
| |
| - /* set clock inversion */ |
| - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { |
| - case SND_SOC_DAIFMT_NB_IF: |
| - rdai->bit_clk_inv = 0; |
| - rdai->frm_clk_inv = 1; |
| - break; |
| - case SND_SOC_DAIFMT_IB_NF: |
| - rdai->bit_clk_inv = 1; |
| - rdai->frm_clk_inv = 0; |
| - break; |
| - case SND_SOC_DAIFMT_IB_IF: |
| - rdai->bit_clk_inv = 1; |
| - rdai->frm_clk_inv = 1; |
| - break; |
| - case SND_SOC_DAIFMT_NB_NF: |
| - default: |
| - rdai->bit_clk_inv = 0; |
| - rdai->frm_clk_inv = 0; |
| - break; |
| - } |
| - |
| /* set format */ |
| switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
| case SND_SOC_DAIFMT_I2S: |
| rdai->sys_delay = 0; |
| rdai->data_alignment = 0; |
| + rdai->frm_clk_inv = 0; |
| break; |
| case SND_SOC_DAIFMT_LEFT_J: |
| rdai->sys_delay = 1; |
| rdai->data_alignment = 0; |
| + rdai->frm_clk_inv = 1; |
| break; |
| case SND_SOC_DAIFMT_RIGHT_J: |
| rdai->sys_delay = 1; |
| rdai->data_alignment = 1; |
| + rdai->frm_clk_inv = 1; |
| + break; |
| + } |
| + |
| + /* set clock inversion */ |
| + switch (fmt & SND_SOC_DAIFMT_INV_MASK) { |
| + case SND_SOC_DAIFMT_NB_IF: |
| + rdai->bit_clk_inv = rdai->bit_clk_inv; |
| + rdai->frm_clk_inv = !rdai->frm_clk_inv; |
| + break; |
| + case SND_SOC_DAIFMT_IB_NF: |
| + rdai->bit_clk_inv = !rdai->bit_clk_inv; |
| + rdai->frm_clk_inv = rdai->frm_clk_inv; |
| + break; |
| + case SND_SOC_DAIFMT_IB_IF: |
| + rdai->bit_clk_inv = !rdai->bit_clk_inv; |
| + rdai->frm_clk_inv = !rdai->frm_clk_inv; |
| + break; |
| + case SND_SOC_DAIFMT_NB_NF: |
| + default: |
| break; |
| } |
| |
| -- |
| 2.1.2 |
| |