Skip to content

Commit

Permalink
ASoC: rt5677: Add the TDM function
Browse files Browse the repository at this point in the history
The patch adds the TDM function.

Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Oder Chiou authored and Mark Brown committed Sep 17, 2014
1 parent 44caf76 commit 48561af
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions sound/soc/codecs/rt5677.c
Original file line number Diff line number Diff line change
Expand Up @@ -3107,6 +3107,59 @@ static int rt5677_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source,
return 0;
}

static int rt5677_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
unsigned int rx_mask, int slots, int slot_width)
{
struct snd_soc_codec *codec = dai->codec;
unsigned int val = 0;

if (rx_mask || tx_mask)
val |= (1 << 12);

switch (slots) {
case 4:
val |= (1 << 10);
break;
case 6:
val |= (2 << 10);
break;
case 8:
val |= (3 << 10);
break;
case 2:
default:
break;
}

switch (slot_width) {
case 20:
val |= (1 << 8);
break;
case 24:
val |= (2 << 8);
break;
case 32:
val |= (3 << 8);
break;
case 16:
default:
break;
}

switch (dai->id) {
case RT5677_AIF1:
snd_soc_update_bits(codec, RT5677_TDM1_CTRL1, 0x1f00, val);
break;
case RT5677_AIF2:
snd_soc_update_bits(codec, RT5677_TDM2_CTRL1, 0x1f00, val);
break;
default:
break;
}

return 0;
}

static int rt5677_set_bias_level(struct snd_soc_codec *codec,
enum snd_soc_bias_level level)
{
Expand Down Expand Up @@ -3357,6 +3410,7 @@ static struct snd_soc_dai_ops rt5677_aif_dai_ops = {
.set_fmt = rt5677_set_dai_fmt,
.set_sysclk = rt5677_set_dai_sysclk,
.set_pll = rt5677_set_dai_pll,
.set_tdm_slot = rt5677_set_tdm_slot,
};

static struct snd_soc_dai_driver rt5677_dai[] = {
Expand Down

0 comments on commit 48561af

Please sign in to comment.