On Wed, Mar 14, 2012 at 11:39 PM, Mark Brown broonie@opensource.wolfsonmicro.com wrote:
On Fri, Mar 09, 2012 at 03:37:06PM +0900, Tomoya MORINAGA wrote:
- /* SAI configuration */
- if (priv->channels == 1) {
- ml26124_update_bits(codec, ML26124_SAI_TRANS_CTL, mask,
- ML26124_SAI_NO_DELAY | ML26124_SAI_FRAME_SYNC);
- ml26124_update_bits(codec, ML26124_SAI_RCV_CTL, mask,
- ML26124_SAI_NO_DELAY | ML26124_SAI_FRAME_SYNC);
- } else {
- ml26124_update_bits(codec, ML26124_SAI_TRANS_CTL, mask,
- ML26124_SAI_NO_DELAY);
- ml26124_update_bits(codec, ML26124_SAI_RCV_CTL, mask,
- ML26124_SAI_NO_DELAY);
- }
What happens if the system switches between 1 channel mode and multi-channel mode at runtime? It looks like _SYNC will never be cleared.
Sorry, 'priv->channels == 1' means for telephone codec. However, we don't support this function. So, I'll delete these lines.
+static int ml26124_set_dai_sysclk(struct snd_soc_dai *codec_dai,
- int clk_id, unsigned int freq, int dir)
+{
- struct snd_soc_codec *codec = codec_dai->codec;
- struct ml26124_priv *priv = snd_soc_codec_get_drvdata(codec);
- switch (clk_id) {
- case ML26124_USE_PLL:
- ml26124_update_bits(codec, ML26124_CLK_CTL,
- BIT(0) | BIT(1), 0);
- break;
- case ML26124_USE_MCLKI_256FS:
- ml26124_update_bits(codec, ML26124_CLK_CTL,
- BIT(0) | BIT(1), 1);
- break;
- case ML26124_USE_MCLKI_512FS:
- ml26124_update_bits(codec, ML26124_CLK_CTL,
- BIT(0) | BIT(1), 2);
- break;
- case ML26124_USE_MCLKI_1024FS:
- ml26124_update_bits(codec, ML26124_CLK_CTL,
- BIT(0) | BIT(1), 3);
- break;
Why not just specify the MCLK rate and then calculate the division based on the sample rate?
OK, I'll do like your saying.
- case SND_SOC_BIAS_STANDBY:
- /* VMID ON */
- ml26124_update_bits(codec, ML26124_PW_REF_PW_MNG,
- ML26124_VMID, ML26124_VMID);
- msleep(500);
This will sleep for 500ms when powering down which probably isn't what's desired...
I'll Move into "if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)" condition.
thanks.