rk2928:acodec: move delay position to avoid kernel schedule error.
authorZheng Yang <zhengyang@rock-chips.com>
Mon, 8 Oct 2012 02:34:33 +0000 (10:34 +0800)
committerZheng Yang <zhengyang@rock-chips.com>
Mon, 8 Oct 2012 02:34:33 +0000 (10:34 +0800)
sound/soc/codecs/rk2928_codec.c

index 7363373053534bff02dd7a5bb3493d29c29a5c97..931e66e817e891dd33b6fbfee4899e3be8caf909 100755 (executable)
@@ -90,6 +90,9 @@ static int rk2928_write(struct snd_soc_codec *codec, unsigned int reg, unsigned
 {
        DBG("%s reg 0x%02x value 0x%02x", __FUNCTION__, reg, value);
        writel(value, rk2928_data.regbase + reg*4);
+       if( (reg == CODEC_REG_POWER) && ( (value & m_PD_DAC) == 0)) {
+               msleep(80);
+       }
        return 0;
 }
 
@@ -154,7 +157,6 @@ static int rk2928_audio_trigger(struct snd_pcm_substream *substream, int cmd,
                                        rk2928_write(codec, CODEC_REG_DAC_MUTE, v_MUTE_DAC(0));
                                rk2928_data.mute = 0;
                                if(rk2928_data.spkctl != INVALID_GPIO) {
-                                       msleep(80);
                                        gpio_direction_output(rk2928_data.spkctl, GPIO_HIGH);
                                }
                        }