Loading sound/soc/codecs/rt5514.c +32 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading sound/soc/codecs/rt5514.h +12 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,18 @@ #define RT5514_I2S_DL_24 (0x2 << 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) */ #define RT5514_AD1_DMIC_INPUT_SEL (0x1 << 1) #define RT5514_AD1_DMIC_INPUT_SEL_SFT 1 Loading Loading
sound/soc/codecs/rt5514.c +32 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading
sound/soc/codecs/rt5514.h +12 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,18 @@ #define RT5514_I2S_DL_24 (0x2 << 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) */ #define RT5514_AD1_DMIC_INPUT_SEL (0x1 << 1) #define RT5514_AD1_DMIC_INPUT_SEL_SFT 1 Loading