Merge branch 'for-2.6.40' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc...
authorTakashi Iwai <tiwai@suse.de>
Tue, 10 May 2011 07:20:19 +0000 (09:20 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 10 May 2011 07:20:19 +0000 (09:20 +0200)
1  2 
sound/soc/codecs/tlv320dac33.c

@@@ -324,10 -324,6 +324,10 @@@ static void dac33_init_chip(struct snd_
        dac33_write(codec, DAC33_OUT_AMP_CTRL,
                    dac33_read_reg_cache(codec, DAC33_OUT_AMP_CTRL));
  
 +      dac33_write(codec, DAC33_LDAC_PWR_CTRL,
 +                  dac33_read_reg_cache(codec, DAC33_LDAC_PWR_CTRL));
 +      dac33_write(codec, DAC33_RDAC_PWR_CTRL,
 +                  dac33_read_reg_cache(codec, DAC33_RDAC_PWR_CTRL));
  }
  
  static inline int dac33_read_id(struct snd_soc_codec *codec)
@@@ -587,6 -583,9 +587,9 @@@ static const struct snd_soc_dapm_widge
        SND_SOC_DAPM_SUPPLY("Right DAC Power",
                            DAC33_RDAC_PWR_CTRL, 2, 0, NULL, 0),
  
+       SND_SOC_DAPM_SUPPLY("Codec Power",
+                           DAC33_PWR_CTRL, 4, 0, NULL, 0),
        SND_SOC_DAPM_PRE("Pre Playback", dac33_playback_event),
        SND_SOC_DAPM_POST("Post Playback", dac33_playback_event),
  };
@@@ -619,6 -618,9 +622,9 @@@ static const struct snd_soc_dapm_route 
        /* output */
        {"LEFT_LO", NULL, "Output Left Amplifier"},
        {"RIGHT_LO", NULL, "Output Right Amplifier"},
+       {"LEFT_LO", NULL, "Codec Power"},
+       {"RIGHT_LO", NULL, "Codec Power"},
  };
  
  static int dac33_add_widgets(struct snd_soc_codec *codec)
  static int dac33_set_bias_level(struct snd_soc_codec *codec,
                                enum snd_soc_bias_level level)
  {
-       struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
        int ret;
  
        switch (level) {
        case SND_SOC_BIAS_ON:
-               if (!dac33->substream)
-                       dac33_soft_power(codec, 1);
                break;
        case SND_SOC_BIAS_PREPARE:
                break;
@@@ -674,7 -673,6 +677,7 @@@ static inline void dac33_prefill_handle
  {
        struct snd_soc_codec *codec = dac33->codec;
        unsigned int delay;
 +      unsigned long flags;
  
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_MODE1:
                        DAC33_THRREG(dac33->nsample));
  
                /* Take the timestamps */
 -              spin_lock_irq(&dac33->lock);
 +              spin_lock_irqsave(&dac33->lock, flags);
                dac33->t_stamp2 = ktime_to_us(ktime_get());
                dac33->t_stamp1 = dac33->t_stamp2;
 -              spin_unlock_irq(&dac33->lock);
 +              spin_unlock_irqrestore(&dac33->lock, flags);
  
                dac33_write16(codec, DAC33_PREFILL_MSB,
                                DAC33_THRREG(dac33->alarm_threshold));
                break;
        case DAC33_FIFO_MODE7:
                /* Take the timestamp */
 -              spin_lock_irq(&dac33->lock);
 +              spin_lock_irqsave(&dac33->lock, flags);
                dac33->t_stamp1 = ktime_to_us(ktime_get());
                /* Move back the timestamp with drain time */
                dac33->t_stamp1 -= dac33->mode7_us_to_lthr;
 -              spin_unlock_irq(&dac33->lock);
 +              spin_unlock_irqrestore(&dac33->lock, flags);
  
                dac33_write16(codec, DAC33_PREFILL_MSB,
                                DAC33_THRREG(DAC33_MODE7_MARGIN));
  static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33)
  {
        struct snd_soc_codec *codec = dac33->codec;
 +      unsigned long flags;
  
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_MODE1:
                /* Take the timestamp */
 -              spin_lock_irq(&dac33->lock);
 +              spin_lock_irqsave(&dac33->lock, flags);
                dac33->t_stamp2 = ktime_to_us(ktime_get());
 -              spin_unlock_irq(&dac33->lock);
 +              spin_unlock_irqrestore(&dac33->lock, flags);
  
                dac33_write16(codec, DAC33_NSAMPLE_MSB,
                                DAC33_THRREG(dac33->nsample));
@@@ -779,11 -776,10 +782,11 @@@ static irqreturn_t dac33_interrupt_hand
  {
        struct snd_soc_codec *codec = dev;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
 +      unsigned long flags;
  
 -      spin_lock(&dac33->lock);
 +      spin_lock_irqsave(&dac33->lock, flags);
        dac33->t_stamp1 = ktime_to_us(ktime_get());
 -      spin_unlock(&dac33->lock);
 +      spin_unlock_irqrestore(&dac33->lock, flags);
  
        /* Do not schedule the workqueue in Mode7 */
        if (dac33->fifo_mode != DAC33_FIFO_MODE7)
@@@ -943,8 -939,8 +946,8 @@@ static int dac33_prepare_chip(struct sn
        /* Write registers 0x08 and 0x09 (MSB, LSB) */
        dac33_write16(codec, DAC33_INT_OSC_FREQ_RAT_A, oscset);
  
-       /* calib time: 128 is a nice number ;) */
-       dac33_write(codec, DAC33_CALIB_TIME, 128);
+       /* OSC calibration time */
+       dac33_write(codec, DAC33_CALIB_TIME, 96);
  
        /* adjustment treshold & step */
        dac33_write(codec, DAC33_INT_OSC_CTRL_B, DAC33_ADJTHRSHLD(2) |
                /*
                 * For FIFO bypass mode:
                 * Enable the FIFO bypass (Disable the FIFO use)
 -               * Set the BCLK as continous
 +               * Set the BCLK as continuous
                 */
                fifoctrl_a |= DAC33_FBYPAS;
                aictrl_b |= DAC33_BCLKON;
@@@ -1180,16 -1176,15 +1183,16 @@@ static snd_pcm_sframes_t dac33_dai_dela
        unsigned int time_delta, uthr;
        int samples_out, samples_in, samples;
        snd_pcm_sframes_t delay = 0;
 +      unsigned long flags;
  
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_BYPASS:
                break;
        case DAC33_FIFO_MODE1:
 -              spin_lock(&dac33->lock);
 +              spin_lock_irqsave(&dac33->lock, flags);
                t0 = dac33->t_stamp1;
                t1 = dac33->t_stamp2;
 -              spin_unlock(&dac33->lock);
 +              spin_unlock_irqrestore(&dac33->lock, flags);
                t_now = ktime_to_us(ktime_get());
  
                /* We have not started to fill the FIFO yet, delay is 0 */
                }
                break;
        case DAC33_FIFO_MODE7:
 -              spin_lock(&dac33->lock);
 +              spin_lock_irqsave(&dac33->lock, flags);
                t0 = dac33->t_stamp1;
                uthr = dac33->uthr;
 -              spin_unlock(&dac33->lock);
 +              spin_unlock_irqrestore(&dac33->lock, flags);
                t_now = ktime_to_us(ktime_get());
  
                /* We have not started to fill the FIFO yet, delay is 0 */