From 94857c6cc0d0c702d3505491ea9825e924bce801 Mon Sep 17 00:00:00 2001 From: Sumit Bhattacharya Date: Sat, 5 Nov 2011 03:24:10 +0530 Subject: ASoC: Tegra wm8753 machine: Use DSP mode for mono on Tegra20 Use DSP mode for playback and capture on Tegra20 platforms. Bug 872652 Signed-off-by: Sumit Bhattacharya Change-Id: Ib612702a300c454d262a8d69ab59f1ac0e64c79f Reviewed-on: http://git-master/r/62513 Reviewed-by: Varun Colbert Tested-by: Varun Colbert Rebase-Id: R1d74ddf730b97c881e37747e86b9c25c0a13e74a --- sound/soc/tegra/tegra_wm8753.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'sound') diff --git a/sound/soc/tegra/tegra_wm8753.c b/sound/soc/tegra/tegra_wm8753.c index 1946d7978ae9..b53690322e46 100644 --- a/sound/soc/tegra/tegra_wm8753.c +++ b/sound/soc/tegra/tegra_wm8753.c @@ -72,7 +72,7 @@ static int tegra_wm8753_hw_params(struct snd_pcm_substream *substream, struct snd_soc_codec *codec = rtd->codec; struct snd_soc_card *card = codec->card; struct tegra_wm8753 *machine = snd_soc_card_get_drvdata(card); - int srate, mclk; + int srate, mclk, i2s_daifmt; int err; srate = params_rate(params); @@ -103,19 +103,22 @@ static int tegra_wm8753_hw_params(struct snd_pcm_substream *substream, return err; } - err = snd_soc_dai_set_fmt(codec_dai, - SND_SOC_DAIFMT_I2S | - SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBS_CFS); + i2s_daifmt = SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBS_CFS; + + /* Use DSP mode for mono on Tegra20 */ + if ((params_channels(params) != 2) && machine_is_whistler()) + i2s_daifmt |= SND_SOC_DAIFMT_DSP_A; + else + i2s_daifmt |= SND_SOC_DAIFMT_I2S; + + err = snd_soc_dai_set_fmt(codec_dai, i2s_daifmt); if (err < 0) { dev_err(card->dev, "codec_dai fmt not set\n"); return err; } - err = snd_soc_dai_set_fmt(cpu_dai, - SND_SOC_DAIFMT_I2S | - SND_SOC_DAIFMT_NB_NF | - SND_SOC_DAIFMT_CBS_CFS); + err = snd_soc_dai_set_fmt(cpu_dai, i2s_daifmt); if (err < 0) { dev_err(card->dev, "cpu_dai fmt not set\n"); return err; -- cgit v1.2.3