ASoC: Implement BCLK rate selection for WM8580
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 13 Aug 2010 18:36:56 +0000 (19:36 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 15 Aug 2010 13:52:29 +0000 (14:52 +0100)
Drive a minimal supported number of clocks required for the current
bit format in master mode. In slave mode this setting has no effect.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
sound/soc/codecs/wm8580.c

index 7942f917d31e648fbf9ba0baa0a6a6459ced331d..b6b2d6f8cba98a423c8e707ba78fd4bcb8505429 100644 (file)
@@ -486,14 +486,18 @@ static int wm8580_paif_hw_params(struct snd_pcm_substream *substream,
        /* bit size */
        switch (params_format(params)) {
        case SNDRV_PCM_FORMAT_S16_LE:
+               paifa |= 0x8;
                break;
        case SNDRV_PCM_FORMAT_S20_3LE:
+               paifa |= 0x10;
                paifb |= WM8580_AIF_LENGTH_20;
                break;
        case SNDRV_PCM_FORMAT_S24_LE:
+               paifa |= 0x10;
                paifb |= WM8580_AIF_LENGTH_24;
                break;
        case SNDRV_PCM_FORMAT_S32_LE:
+               paifa |= 0x10;
                paifb |= WM8580_AIF_LENGTH_24;
                break;
        default:
@@ -515,7 +519,8 @@ static int wm8580_paif_hw_params(struct snd_pcm_substream *substream,
                wm8580_sysclk_ratios[i], wm8580->sysclk[dai->driver->id]);
 
        snd_soc_update_bits(codec, WM8580_PAIF1 + dai->driver->id,
-                           WM8580_AIF_RATE_MASK, paifa);
+                           WM8580_AIF_RATE_MASK | WM8580_AIF_BCLKSEL_MASK,
+                           paifa);
        snd_soc_update_bits(codec, WM8580_PAIF3 + dai->driver->id,
                            WM8580_AIF_LENGTH_MASK, paifb);
        return 0;