Merge tag 'sound-fix-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Oct 2014 19:45:36 +0000 (12:45 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Oct 2014 19:45:36 +0000 (12:45 -0700)
Pull sound fixes from Takashi Iwai:
 "Here are a collection of small fixes after 3.18 merge.

  The urgent one is the fix for kernel panics with linked PCM substream
  triggered by the recent nonatomic PCM ops support.  Other two fixes
  (emu10k1 and bebob) are stable fixes, and one easy PCI ID addition for
  a new Intel HD-audio controller"

* tag 'sound-fix-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: hda_intel: Add Device IDs for Intel Sunrise Point PCH
  ALSA: emu10k1: Fix deadlock in synth voice lookup
  ALSA: pcm: Fix referred substream in snd_pcm_action_group() unlock loop
  ALSA: bebob: Fix failure to detect source of clock for Terratec Phase 88

sound/core/pcm_native.c
sound/firewire/bebob/bebob_terratec.c
sound/pci/emu10k1/emu10k1_callback.c
sound/pci/hda/hda_intel.c

index 85fe1a216225cdd14165b3c947d1bf184d23ecd8..bfe1cf6b492f08489a2f7a5dd7bc9e54ae61a4cc 100644 (file)
@@ -818,7 +818,7 @@ static int snd_pcm_action_group(struct action_ops *ops,
                /* unlock streams */
                snd_pcm_group_for_each_entry(s1, substream) {
                        if (s1 != substream) {
-                               if (s->pcm->nonatomic)
+                               if (s1->pcm->nonatomic)
                                        mutex_unlock(&s1->self_group.mutex);
                                else
                                        spin_unlock(&s1->self_group.lock);
index eef8ea7d9b978bf36bfde09bb8e98c47cc13c9cc..0e4c0bfc463bbbb3222d92a54f269c3ecff283ee 100644 (file)
@@ -17,10 +17,10 @@ phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
        unsigned int enable_ext, enable_word;
        int err;
 
-       err = avc_audio_get_selector(bebob->unit, 0, 0, &enable_ext);
+       err = avc_audio_get_selector(bebob->unit, 0, 9, &enable_ext);
        if (err < 0)
                goto end;
-       err = avc_audio_get_selector(bebob->unit, 0, 0, &enable_word);
+       err = avc_audio_get_selector(bebob->unit, 0, 8, &enable_word);
        if (err < 0)
                goto end;
 
index 3f3ef38d9b6e5f9facddfbddb0d1b2ebfaa8c7d9..874cd76c7b7fb09b5c6c3cc722173914280b45ce 100644 (file)
@@ -85,6 +85,8 @@ snd_emu10k1_ops_setup(struct snd_emux *emux)
  * get more voice for pcm
  *
  * terminate most inactive voice and give it as a pcm voice.
+ *
+ * voice_lock is already held.
  */
 int
 snd_emu10k1_synth_get_voice(struct snd_emu10k1 *hw)
@@ -92,12 +94,10 @@ snd_emu10k1_synth_get_voice(struct snd_emu10k1 *hw)
        struct snd_emux *emu;
        struct snd_emux_voice *vp;
        struct best_voice best[V_END];
-       unsigned long flags;
        int i;
 
        emu = hw->synth;
 
-       spin_lock_irqsave(&emu->voice_lock, flags);
        lookup_voices(emu, hw, best, 1); /* no OFF voices */
        for (i = 0; i < V_END; i++) {
                if (best[i].voice >= 0) {
@@ -113,11 +113,9 @@ snd_emu10k1_synth_get_voice(struct snd_emu10k1 *hw)
                        vp->emu->num_voices--;
                        vp->ch = -1;
                        vp->state = SNDRV_EMUX_ST_OFF;
-                       spin_unlock_irqrestore(&emu->voice_lock, flags);
                        return ch;
                }
        }
-       spin_unlock_irqrestore(&emu->voice_lock, flags);
 
        /* not found */
        return -ENOMEM;
index aa302fb03fc5bfe582b2f27dd3616a5b4ef039aa..cfcca4c30d4da5f2be82ae40a32b709d9279f97b 100644 (file)
@@ -218,6 +218,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
                         "{Intel, LPT},"
                         "{Intel, LPT_LP},"
                         "{Intel, WPT_LP},"
+                        "{Intel, SPT},"
                         "{Intel, HPT},"
                         "{Intel, PBG},"
                         "{Intel, SCH},"
@@ -1998,6 +1999,9 @@ static const struct pci_device_id azx_ids[] = {
        /* Wildcat Point-LP */
        { PCI_DEVICE(0x8086, 0x9ca0),
          .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
+       /* Sunrise Point */
+       { PCI_DEVICE(0x8086, 0xa170),
+         .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
        /* Haswell */
        { PCI_DEVICE(0x8086, 0x0a0c),
          .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },