ASoC: rt5514: Support the TDM docking mode

The TDM docking mode can share the bus to other devices simultaneously.

Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
oder_chiou@realtek.com
2017-07-20 12:05:34 +08:00
committed by Mark Brown
parent 9894dbafb6
commit e8be3a5ad3
2 changed files with 44 additions and 1 deletions

View File

@@ -871,11 +871,38 @@ static int rt5514_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
{
struct snd_soc_codec *codec = dai->codec;
struct rt5514_priv *rt5514 = snd_soc_codec_get_drvdata(codec);
unsigned int val = 0;
unsigned int val = 0, val2 = 0;
if (rx_mask || tx_mask)
val |= RT5514_TDM_MODE;
switch (tx_mask) {
case 0x3:
val2 |= RT5514_TDM_DOCKING_MODE | RT5514_TDM_DOCKING_VALID_CH2 |
RT5514_TDM_DOCKING_START_SLOT0;
break;
case 0x30:
val2 |= RT5514_TDM_DOCKING_MODE | RT5514_TDM_DOCKING_VALID_CH2 |
RT5514_TDM_DOCKING_START_SLOT4;
break;
case 0xf:
val2 |= RT5514_TDM_DOCKING_MODE | RT5514_TDM_DOCKING_VALID_CH4 |
RT5514_TDM_DOCKING_START_SLOT0;
break;
case 0xf0:
val2 |= RT5514_TDM_DOCKING_MODE | RT5514_TDM_DOCKING_VALID_CH4 |
RT5514_TDM_DOCKING_START_SLOT4;
break;
default:
break;
}
switch (slots) {
case 4:
val |= RT5514_TDMSLOT_SEL_RX_4CH | RT5514_TDMSLOT_SEL_TX_4CH;
@@ -921,6 +948,10 @@ static int rt5514_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
RT5514_CH_LEN_RX_MASK | RT5514_CH_LEN_TX_MASK |
RT5514_TDM_MODE2, val);
regmap_update_bits(rt5514->regmap, RT5514_I2S_CTRL2,
RT5514_TDM_DOCKING_MODE | RT5514_TDM_DOCKING_VALID_CH_MASK |
RT5514_TDM_DOCKING_START_MASK, val2);
return 0;
}