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>
This commit is contained in:
Родитель
7c63f3c02f
Коммит
1a7889ca8a
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче