[alsa-devel] [PATCH 1/1] ASoC: TWL4030: Add support Voice DAI
Joonyoung Shim
jy0922.shim at samsung.com
Fri Apr 10 04:03:42 CEST 2009
On 4/9/2009 11:06 PM, Mark Brown wrote:
> On Thu, Apr 09, 2009 at 10:54:37PM +0900, Joonyoung Shim wrote:
>
>> 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.
>
> That sounds wrong - the difference between modes A and B is an extra
> cycle on BCLK after LRP, not the polarity of the signal. I'd expect
> that it should be one or the other of these modes with the option to
> invert BCLK.
Oh, i see. I will use "DAI hardware signal inversions" defines.
>
>> +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;
>> +
>> + return 0;
>> +}
>
> It's probably worth a comment here telling users that they'll need to
> call set_sysclk() in their init() function rather than hw_params() -
> otherwise this might get called before the clock is set up.
It seems better that i remove startup function and add set_sysclk function,
and inform supporting only 26MHz system master clock through comment.
i think it is not important where set_sysclk() is called, the voice PCM
interface needs just 26MHz system master clock.
>
>> + /* change rate and set CODECPDZ */
>> + twl4030_codec_enable(codec, 0);
>> + twl4030_write(codec, TWL4030_REG_CODEC_MODE, mode);
>> + twl4030_codec_enable(codec, 1);
>
> Hrm. This codec_enable() call looks fishy - what's the effect if the
> other DAI is running when the voice DAI is configured? Though there may
> be no way round this...
Frankly, i don't know whether this codec_enable() is called. The existing
the HIFI DAI calls this codec_enable().
If this call is unnecessary i think it seems better to remove it.
>
>> +struct snd_soc_dai twl4030_dai[] = {
>> +{ .name = "twl4030",
>
> The { should ideally be on a line by itself (for both DAIs).
Ok, i will fix it.
Thanks for you review.
More information about the Alsa-devel
mailing list