forked from Minki/linux
ASoC: TWL4030: Enable/disable voice digital filters
Enable TWL4030 VTXL/VTXR and VRX digital filters for uplink and downlink paths, respectively. This patch also corrects voice 8/16kHz mode selection bit (SEL_16K) of CODEC_MODE register. Signed-off-by: Misael Lopez Cruz <x0052729@ti.com> Acked-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
5b740ea975
commit
b7a755a8a1
@ -1629,6 +1629,28 @@ static int twl4030_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 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,
|
||||
int enable)
|
||||
{
|
||||
u8 reg, mask;
|
||||
|
||||
reg = twl4030_read_reg_cache(codec, TWL4030_REG_OPTION);
|
||||
|
||||
if (direction == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
mask = TWL4030_ARXL1_VRX_EN;
|
||||
else
|
||||
mask = TWL4030_ATXL2_VTXL_EN | TWL4030_ATXR2_VTXR_EN;
|
||||
|
||||
if (enable)
|
||||
reg |= mask;
|
||||
else
|
||||
reg &= ~mask;
|
||||
|
||||
twl4030_write(codec, TWL4030_REG_OPTION, reg);
|
||||
}
|
||||
|
||||
static int twl4030_voice_startup(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
@ -1665,6 +1687,17 @@ static int twl4030_voice_startup(struct snd_pcm_substream *substream,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void twl4030_voice_shutdown(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_soc_device *socdev = rtd->socdev;
|
||||
struct snd_soc_codec *codec = socdev->card->codec;
|
||||
|
||||
/* Enable voice digital filters */
|
||||
twl4030_voice_enable(codec, substream->stream, 0);
|
||||
}
|
||||
|
||||
static int twl4030_voice_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
|
||||
{
|
||||
@ -1673,6 +1706,9 @@ static int twl4030_voice_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_codec *codec = socdev->card->codec;
|
||||
u8 old_mode, mode;
|
||||
|
||||
/* Enable voice digital filters */
|
||||
twl4030_voice_enable(codec, substream->stream, 1);
|
||||
|
||||
/* bit rate */
|
||||
old_mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE)
|
||||
& ~(TWL4030_CODECPDZ);
|
||||
@ -1780,6 +1816,7 @@ static struct snd_soc_dai_ops twl4030_dai_ops = {
|
||||
|
||||
static struct snd_soc_dai_ops twl4030_dai_voice_ops = {
|
||||
.startup = twl4030_voice_startup,
|
||||
.shutdown = twl4030_voice_shutdown,
|
||||
.hw_params = twl4030_voice_hw_params,
|
||||
.set_sysclk = twl4030_voice_set_dai_sysclk,
|
||||
.set_fmt = twl4030_voice_set_dai_fmt,
|
||||
|
@ -110,7 +110,7 @@
|
||||
#define TWL4030_APLL_RATE_44100 0x90
|
||||
#define TWL4030_APLL_RATE_48000 0xA0
|
||||
#define TWL4030_APLL_RATE_96000 0xE0
|
||||
#define TWL4030_SEL_16K 0x04
|
||||
#define TWL4030_SEL_16K 0x08
|
||||
#define TWL4030_CODECPDZ 0x02
|
||||
#define TWL4030_OPT_MODE 0x01
|
||||
#define TWL4030_OPTION_1 (1 << 0)
|
||||
|
Loading…
Reference in New Issue
Block a user