ASoC: rockchip: i2s: add other configurable formats
simple-audio-card,bitclock-inversion = <1> : bclk falling edge taken simple-audio-card,format = "dsp_a" : pcm no delay mode simple-audio-card,format = "dsp_b" : pcm late 1 mode Signed-off-by: zhangjun <zhangjun@rock-chips.com> Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
@@ -204,7 +204,21 @@ static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
|
||||
|
||||
regmap_update_bits(i2s->regmap, I2S_CKR, mask, val);
|
||||
|
||||
mask = I2S_TXCR_IBM_MASK;
|
||||
mask = I2S_CKR_CKP_MASK;
|
||||
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
|
||||
case SND_SOC_DAIFMT_NB_NF:
|
||||
val = I2S_CKR_CKP_NEG;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_IB_NF:
|
||||
val = I2S_CKR_CKP_POS;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
regmap_update_bits(i2s->regmap, I2S_CKR, mask, val);
|
||||
|
||||
mask = I2S_TXCR_IBM_MASK | I2S_TXCR_TFS_MASK | I2S_TXCR_PBM_MASK;
|
||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
case SND_SOC_DAIFMT_RIGHT_J:
|
||||
val = I2S_TXCR_IBM_RSJM;
|
||||
@@ -215,13 +229,19 @@ static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
|
||||
case SND_SOC_DAIFMT_I2S:
|
||||
val = I2S_TXCR_IBM_NORMAL;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_A: /* PCM no delay mode */
|
||||
val = I2S_TXCR_TFS_PCM;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_B: /* PCM delay 1 mode */
|
||||
val = I2S_TXCR_TFS_PCM | I2S_TXCR_PBM_MODE(1);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
regmap_update_bits(i2s->regmap, I2S_TXCR, mask, val);
|
||||
|
||||
mask = I2S_RXCR_IBM_MASK;
|
||||
mask = I2S_RXCR_IBM_MASK | I2S_RXCR_TFS_MASK | I2S_RXCR_PBM_MASK;
|
||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
case SND_SOC_DAIFMT_RIGHT_J:
|
||||
val = I2S_RXCR_IBM_RSJM;
|
||||
@@ -232,6 +252,12 @@ static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
|
||||
case SND_SOC_DAIFMT_I2S:
|
||||
val = I2S_RXCR_IBM_NORMAL;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_A: /* PCM no delay mode */
|
||||
val = I2S_RXCR_TFS_PCM;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_B: /* PCM delay 1 mode */
|
||||
val = I2S_RXCR_TFS_PCM | I2S_RXCR_PBM_MODE(1);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user