Unverified Commit d94bf16e authored by Derek Fang's avatar Derek Fang Committed by Mark Brown
Browse files

ASoC: rt5682s: Fix the TDM Tx settings



Complete the missing and correct the TDM Tx settings.

Signed-off-by: default avatarDerek Fang <derek.fang@realtek.com>
Link: https://lore.kernel.org/r/20221012031320.6980-1-derek.fang@realtek.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 25e06831
Loading
Loading
Loading
Loading
+13 −2
Original line number Original line Diff line number Diff line
@@ -1981,7 +1981,7 @@ static int rt5682s_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
		unsigned int rx_mask, int slots, int slot_width)
		unsigned int rx_mask, int slots, int slot_width)
{
{
	struct snd_soc_component *component = dai->component;
	struct snd_soc_component *component = dai->component;
	unsigned int cl, val = 0;
	unsigned int cl, val = 0, tx_slotnum;


	if (tx_mask || rx_mask)
	if (tx_mask || rx_mask)
		snd_soc_component_update_bits(component,
		snd_soc_component_update_bits(component,
@@ -1990,6 +1990,16 @@ static int rt5682s_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
		snd_soc_component_update_bits(component,
		snd_soc_component_update_bits(component,
			RT5682S_TDM_ADDA_CTRL_2, RT5682S_TDM_EN, 0);
			RT5682S_TDM_ADDA_CTRL_2, RT5682S_TDM_EN, 0);


	/* Tx slot configuration */
	tx_slotnum = hweight_long(tx_mask);
	if (tx_slotnum) {
		if (tx_slotnum > slots) {
			dev_err(component->dev, "Invalid or oversized Tx slots.\n");
			return -EINVAL;
		}
		val |= (tx_slotnum - 1) << RT5682S_TDM_ADC_DL_SFT;
	}

	switch (slots) {
	switch (slots) {
	case 4:
	case 4:
		val |= RT5682S_TDM_TX_CH_4;
		val |= RT5682S_TDM_TX_CH_4;
@@ -2010,7 +2020,8 @@ static int rt5682s_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
	}
	}


	snd_soc_component_update_bits(component, RT5682S_TDM_CTRL,
	snd_soc_component_update_bits(component, RT5682S_TDM_CTRL,
		RT5682S_TDM_TX_CH_MASK | RT5682S_TDM_RX_CH_MASK, val);
		RT5682S_TDM_TX_CH_MASK | RT5682S_TDM_RX_CH_MASK |
		RT5682S_TDM_ADC_DL_MASK, val);


	switch (slot_width) {
	switch (slot_width) {
	case 8:
	case 8:
+1 −0
Original line number Original line Diff line number Diff line
@@ -899,6 +899,7 @@
#define RT5682S_TDM_RX_CH_8			(0x3 << 8)
#define RT5682S_TDM_RX_CH_8			(0x3 << 8)
#define RT5682S_TDM_ADC_LCA_MASK		(0x7 << 4)
#define RT5682S_TDM_ADC_LCA_MASK		(0x7 << 4)
#define RT5682S_TDM_ADC_LCA_SFT			4
#define RT5682S_TDM_ADC_LCA_SFT			4
#define RT5682S_TDM_ADC_DL_MASK			(0x3 << 0)
#define RT5682S_TDM_ADC_DL_SFT			0
#define RT5682S_TDM_ADC_DL_SFT			0


/* TDM control 2 (0x007a) */
/* TDM control 2 (0x007a) */