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:
parent
9894dbafb6
commit
e8be3a5ad3
@ -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 snd_soc_codec *codec = dai->codec;
|
||||||
struct rt5514_priv *rt5514 = snd_soc_codec_get_drvdata(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)
|
if (rx_mask || tx_mask)
|
||||||
val |= RT5514_TDM_MODE;
|
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) {
|
switch (slots) {
|
||||||
case 4:
|
case 4:
|
||||||
val |= RT5514_TDMSLOT_SEL_RX_4CH | RT5514_TDMSLOT_SEL_TX_4CH;
|
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_CH_LEN_RX_MASK | RT5514_CH_LEN_TX_MASK |
|
||||||
RT5514_TDM_MODE2, val);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,6 +164,18 @@
|
|||||||
#define RT5514_I2S_DL_24 (0x2 << 0)
|
#define RT5514_I2S_DL_24 (0x2 << 0)
|
||||||
#define RT5514_I2S_DL_8 (0x3 << 0)
|
#define RT5514_I2S_DL_8 (0x3 << 0)
|
||||||
|
|
||||||
|
/* RT5514_I2S_CTRL2 (0x2014) */
|
||||||
|
#define RT5514_TDM_DOCKING_MODE (0x1 << 31)
|
||||||
|
#define RT5514_TDM_DOCKING_MODE_SFT 31
|
||||||
|
#define RT5514_TDM_DOCKING_VALID_CH_MASK (0x1 << 29)
|
||||||
|
#define RT5514_TDM_DOCKING_VALID_CH_SFT 29
|
||||||
|
#define RT5514_TDM_DOCKING_VALID_CH2 (0x0 << 29)
|
||||||
|
#define RT5514_TDM_DOCKING_VALID_CH4 (0x1 << 29)
|
||||||
|
#define RT5514_TDM_DOCKING_START_MASK (0x1 << 28)
|
||||||
|
#define RT5514_TDM_DOCKING_START_SFT 28
|
||||||
|
#define RT5514_TDM_DOCKING_START_SLOT0 (0x0 << 28)
|
||||||
|
#define RT5514_TDM_DOCKING_START_SLOT4 (0x1 << 28)
|
||||||
|
|
||||||
/* RT5514_DIG_SOURCE_CTRL (0x20a4) */
|
/* RT5514_DIG_SOURCE_CTRL (0x20a4) */
|
||||||
#define RT5514_AD1_DMIC_INPUT_SEL (0x1 << 1)
|
#define RT5514_AD1_DMIC_INPUT_SEL (0x1 << 1)
|
||||||
#define RT5514_AD1_DMIC_INPUT_SEL_SFT 1
|
#define RT5514_AD1_DMIC_INPUT_SEL_SFT 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user