summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorSumit Bhattacharya <sumitb@nvidia.com>2011-11-05 03:24:10 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:49:53 -0800
commit94857c6cc0d0c702d3505491ea9825e924bce801 (patch)
tree221446f07554ba26758747b7690efe53d8d1eb97 /sound
parent3500dc25c7eef0e45fd75b49d910c0240e536001 (diff)
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 <sumitb@nvidia.com> Change-Id: Ib612702a300c454d262a8d69ab59f1ac0e64c79f Reviewed-on: http://git-master/r/62513 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com> Rebase-Id: R1d74ddf730b97c881e37747e86b9c25c0a13e74a
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/tegra/tegra_wm8753.c21
1 files changed, 12 insertions, 9 deletions
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;