|
@@ -41,23 +41,33 @@ static int omap3beagle_hw_params(struct snd_pcm_substream *substream,
|
|
|
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
|
|
struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
|
|
|
struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
|
|
|
+ unsigned int fmt;
|
|
|
int ret;
|
|
|
|
|
|
+ switch (params_channels(params)) {
|
|
|
+ case 2: /* Stereo I2S mode */
|
|
|
+ fmt = SND_SOC_DAIFMT_I2S |
|
|
|
+ SND_SOC_DAIFMT_NB_NF |
|
|
|
+ SND_SOC_DAIFMT_CBM_CFM;
|
|
|
+ break;
|
|
|
+ case 4: /* Four channel TDM mode */
|
|
|
+ fmt = SND_SOC_DAIFMT_DSP_A |
|
|
|
+ SND_SOC_DAIFMT_IB_NF |
|
|
|
+ SND_SOC_DAIFMT_CBM_CFM;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
/* Set codec DAI configuration */
|
|
|
- ret = snd_soc_dai_set_fmt(codec_dai,
|
|
|
- SND_SOC_DAIFMT_I2S |
|
|
|
- SND_SOC_DAIFMT_NB_NF |
|
|
|
- SND_SOC_DAIFMT_CBM_CFM);
|
|
|
+ ret = snd_soc_dai_set_fmt(codec_dai, fmt);
|
|
|
if (ret < 0) {
|
|
|
printk(KERN_ERR "can't set codec DAI configuration\n");
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
/* Set cpu DAI configuration */
|
|
|
- ret = snd_soc_dai_set_fmt(cpu_dai,
|
|
|
- SND_SOC_DAIFMT_I2S |
|
|
|
- SND_SOC_DAIFMT_NB_NF |
|
|
|
- SND_SOC_DAIFMT_CBM_CFM);
|
|
|
+ ret = snd_soc_dai_set_fmt(cpu_dai, fmt);
|
|
|
if (ret < 0) {
|
|
|
printk(KERN_ERR "can't set cpu DAI configuration\n");
|
|
|
return ret;
|