mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
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:
parent
7c63f3c02f
commit
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user