On Thursday 09 April 2009 16:54:37 ext Joonyoung Shim wrote:
Add Voice DAI to support the PCM voice interface of the twl4030 codec.
The PCM voice interface can be used with 8-kHz(voice narrowband) or 16-kHz (voice wideband) sampling rates, and 16bits, and mono RX and mono TX or stereo TX.
If the system master clock is not 26MHz, the voice PCM interface is not available.
The PCM voice interface has two modes
- PCM mode1 : This uses the rising edge of the clock signal
- PCM mode2 : This uses the falling edge of the clock signal
PCM mode1 and mode2 have a look of DSP_A and DSP_B, so we used DSP_A and DSP_B.
Both of the PCM mode1 and mode2 is actually DSP_A, but the FS polarity is inverted and also the data is shifted/sampled on the opposite edge of the bitclock.
+static int twl4030_voice_startup(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;
- u8 infreq;
- /* If the system master clock is not 26MHz, the voice PCM interface is
* not avilable.
*/
- infreq = twl4030_read_reg_cache(codec, TWL4030_REG_APLL_CTL)
& TWL4030_APLL_INFREQ;
- if (infreq != TWL4030_APLL_INFREQ_26000KHZ)
return -EPERM;
Would it be feasible to add a check here against the CODEC_MODE:OPT_MODE and if the codec is not in Option2 mode, than return with error?