|
@@ -1849,6 +1849,19 @@ static int twl4030_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int twl4030_set_tristate(struct snd_soc_dai *dai, int tristate)
|
|
|
+{
|
|
|
+ struct snd_soc_codec *codec = dai->codec;
|
|
|
+ u8 reg = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
|
|
|
+
|
|
|
+ if (tristate)
|
|
|
+ reg |= TWL4030_AIF_TRI_EN;
|
|
|
+ else
|
|
|
+ reg &= ~TWL4030_AIF_TRI_EN;
|
|
|
+
|
|
|
+ return twl4030_write(codec, TWL4030_REG_AUDIO_IF, reg);
|
|
|
+}
|
|
|
+
|
|
|
/* In case of voice mode, the RX1 L(VRX) for downlink and the TX2 L/R
|
|
|
* (VTXL, VTXR) for uplink has to be enabled/disabled. */
|
|
|
static void twl4030_voice_enable(struct snd_soc_codec *codec, int direction,
|
|
@@ -2023,6 +2036,19 @@ static int twl4030_voice_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int twl4030_voice_set_tristate(struct snd_soc_dai *dai, int tristate)
|
|
|
+{
|
|
|
+ struct snd_soc_codec *codec = dai->codec;
|
|
|
+ u8 reg = twl4030_read_reg_cache(codec, TWL4030_REG_VOICE_IF);
|
|
|
+
|
|
|
+ if (tristate)
|
|
|
+ reg |= TWL4030_VIF_TRI_EN;
|
|
|
+ else
|
|
|
+ reg &= ~TWL4030_VIF_TRI_EN;
|
|
|
+
|
|
|
+ return twl4030_write(codec, TWL4030_REG_VOICE_IF, reg);
|
|
|
+}
|
|
|
+
|
|
|
#define TWL4030_RATES (SNDRV_PCM_RATE_8000_48000)
|
|
|
#define TWL4030_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FORMAT_S24_LE)
|
|
|
|
|
@@ -2032,6 +2058,7 @@ static struct snd_soc_dai_ops twl4030_dai_ops = {
|
|
|
.hw_params = twl4030_hw_params,
|
|
|
.set_sysclk = twl4030_set_dai_sysclk,
|
|
|
.set_fmt = twl4030_set_dai_fmt,
|
|
|
+ .set_tristate = twl4030_set_tristate,
|
|
|
};
|
|
|
|
|
|
static struct snd_soc_dai_ops twl4030_dai_voice_ops = {
|
|
@@ -2040,6 +2067,7 @@ static struct snd_soc_dai_ops twl4030_dai_voice_ops = {
|
|
|
.hw_params = twl4030_voice_hw_params,
|
|
|
.set_sysclk = twl4030_voice_set_dai_sysclk,
|
|
|
.set_fmt = twl4030_voice_set_dai_fmt,
|
|
|
+ .set_tristate = twl4030_voice_set_tristate,
|
|
|
};
|
|
|
|
|
|
struct snd_soc_dai twl4030_dai[] = {
|