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:
parent
55f42d2e28
commit
ec2212c4af
|
@ -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);
|
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) {
|
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||||
case SND_SOC_DAIFMT_RIGHT_J:
|
case SND_SOC_DAIFMT_RIGHT_J:
|
||||||
val = I2S_TXCR_IBM_RSJM;
|
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:
|
case SND_SOC_DAIFMT_I2S:
|
||||||
val = I2S_TXCR_IBM_NORMAL;
|
val = I2S_TXCR_IBM_NORMAL;
|
||||||
break;
|
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:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
regmap_update_bits(i2s->regmap, I2S_TXCR, mask, val);
|
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) {
|
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||||
case SND_SOC_DAIFMT_RIGHT_J:
|
case SND_SOC_DAIFMT_RIGHT_J:
|
||||||
val = I2S_RXCR_IBM_RSJM;
|
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:
|
case SND_SOC_DAIFMT_I2S:
|
||||||
val = I2S_RXCR_IBM_NORMAL;
|
val = I2S_RXCR_IBM_NORMAL;
|
||||||
break;
|
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:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#define I2S_TXCR_TFS_SHIFT 5
|
#define I2S_TXCR_TFS_SHIFT 5
|
||||||
#define I2S_TXCR_TFS_I2S (0 << I2S_TXCR_TFS_SHIFT)
|
#define I2S_TXCR_TFS_I2S (0 << I2S_TXCR_TFS_SHIFT)
|
||||||
#define I2S_TXCR_TFS_PCM (1 << I2S_TXCR_TFS_SHIFT)
|
#define I2S_TXCR_TFS_PCM (1 << I2S_TXCR_TFS_SHIFT)
|
||||||
|
#define I2S_TXCR_TFS_MASK (1 << I2S_TXCR_TFS_SHIFT)
|
||||||
#define I2S_TXCR_VDW_SHIFT 0
|
#define I2S_TXCR_VDW_SHIFT 0
|
||||||
#define I2S_TXCR_VDW(x) ((x - 1) << I2S_TXCR_VDW_SHIFT)
|
#define I2S_TXCR_VDW(x) ((x - 1) << I2S_TXCR_VDW_SHIFT)
|
||||||
#define I2S_TXCR_VDW_MASK (0x1f << I2S_TXCR_VDW_SHIFT)
|
#define I2S_TXCR_VDW_MASK (0x1f << I2S_TXCR_VDW_SHIFT)
|
||||||
|
@ -70,6 +71,7 @@
|
||||||
#define I2S_RXCR_TFS_SHIFT 5
|
#define I2S_RXCR_TFS_SHIFT 5
|
||||||
#define I2S_RXCR_TFS_I2S (0 << I2S_RXCR_TFS_SHIFT)
|
#define I2S_RXCR_TFS_I2S (0 << I2S_RXCR_TFS_SHIFT)
|
||||||
#define I2S_RXCR_TFS_PCM (1 << I2S_RXCR_TFS_SHIFT)
|
#define I2S_RXCR_TFS_PCM (1 << I2S_RXCR_TFS_SHIFT)
|
||||||
|
#define I2S_RXCR_TFS_MASK (1 << I2S_RXCR_TFS_SHIFT)
|
||||||
#define I2S_RXCR_VDW_SHIFT 0
|
#define I2S_RXCR_VDW_SHIFT 0
|
||||||
#define I2S_RXCR_VDW(x) ((x - 1) << I2S_RXCR_VDW_SHIFT)
|
#define I2S_RXCR_VDW(x) ((x - 1) << I2S_RXCR_VDW_SHIFT)
|
||||||
#define I2S_RXCR_VDW_MASK (0x1f << I2S_RXCR_VDW_SHIFT)
|
#define I2S_RXCR_VDW_MASK (0x1f << I2S_RXCR_VDW_SHIFT)
|
||||||
|
@ -91,6 +93,7 @@
|
||||||
#define I2S_CKR_CKP_SHIFT 26
|
#define I2S_CKR_CKP_SHIFT 26
|
||||||
#define I2S_CKR_CKP_NEG (0 << I2S_CKR_CKP_SHIFT)
|
#define I2S_CKR_CKP_NEG (0 << I2S_CKR_CKP_SHIFT)
|
||||||
#define I2S_CKR_CKP_POS (1 << I2S_CKR_CKP_SHIFT)
|
#define I2S_CKR_CKP_POS (1 << I2S_CKR_CKP_SHIFT)
|
||||||
|
#define I2S_CKR_CKP_MASK (1 << I2S_CKR_CKP_SHIFT)
|
||||||
#define I2S_CKR_RLP_SHIFT 25
|
#define I2S_CKR_RLP_SHIFT 25
|
||||||
#define I2S_CKR_RLP_NORMAL (0 << I2S_CKR_RLP_SHIFT)
|
#define I2S_CKR_RLP_NORMAL (0 << I2S_CKR_RLP_SHIFT)
|
||||||
#define I2S_CKR_RLP_OPPSITE (1 << I2S_CKR_RLP_SHIFT)
|
#define I2S_CKR_RLP_OPPSITE (1 << I2S_CKR_RLP_SHIFT)
|
||||||
|
|
Loading…
Reference in New Issue