aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-19 15:45:36 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-19 15:45:36 -0400
commitd590c6cdd96c8a254e7935ad12f65e4058c95a1b (patch)
tree75e43b7cd977a89faf6aecfcc38be80113d9fe6a
parentfb378df57d5c0e92e935893b81be168897632374 (diff)
parentc8b00fd2f4c504a564adcad5b8bd6952ab850b02 (diff)
Merge tag 'sound-fix-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
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
-rw-r--r--sound/core/pcm_native.c2
-rw-r--r--sound/firewire/bebob/bebob_terratec.c4
-rw-r--r--sound/pci/emu10k1/emu10k1_callback.c6
-rw-r--r--sound/pci/hda/hda_intel.c4
4 files changed, 9 insertions, 7 deletions
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 85fe1a216225..bfe1cf6b492f 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -818,7 +818,7 @@ static int snd_pcm_action_group(struct action_ops *ops,
818 /* unlock streams */ 818 /* unlock streams */
819 snd_pcm_group_for_each_entry(s1, substream) { 819 snd_pcm_group_for_each_entry(s1, substream) {
820 if (s1 != substream) { 820 if (s1 != substream) {
821 if (s->pcm->nonatomic) 821 if (s1->pcm->nonatomic)
822 mutex_unlock(&s1->self_group.mutex); 822 mutex_unlock(&s1->self_group.mutex);
823 else 823 else
824 spin_unlock(&s1->self_group.lock); 824 spin_unlock(&s1->self_group.lock);
diff --git a/sound/firewire/bebob/bebob_terratec.c b/sound/firewire/bebob/bebob_terratec.c
index eef8ea7d9b97..0e4c0bfc463b 100644
--- a/sound/firewire/bebob/bebob_terratec.c
+++ b/sound/firewire/bebob/bebob_terratec.c
@@ -17,10 +17,10 @@ phase88_rack_clk_src_get(struct snd_bebob *bebob, unsigned int *id)
17 unsigned int enable_ext, enable_word; 17 unsigned int enable_ext, enable_word;
18 int err; 18 int err;
19 19
20 err = avc_audio_get_selector(bebob->unit, 0, 0, &enable_ext); 20 err = avc_audio_get_selector(bebob->unit, 0, 9, &enable_ext);
21 if (err < 0) 21 if (err < 0)
22 goto end; 22 goto end;
23 err = avc_audio_get_selector(bebob->unit, 0, 0, &enable_word); 23 err = avc_audio_get_selector(bebob->unit, 0, 8, &enable_word);
24 if (err < 0) 24 if (err < 0)
25 goto end; 25 goto end;
26 26
diff --git a/sound/pci/emu10k1/emu10k1_callback.c b/sound/pci/emu10k1/emu10k1_callback.c
index 3f3ef38d9b6e..874cd76c7b7f 100644
--- a/sound/pci/emu10k1/emu10k1_callback.c
+++ b/sound/pci/emu10k1/emu10k1_callback.c
@@ -85,6 +85,8 @@ snd_emu10k1_ops_setup(struct snd_emux *emux)
85 * get more voice for pcm 85 * get more voice for pcm
86 * 86 *
87 * terminate most inactive voice and give it as a pcm voice. 87 * terminate most inactive voice and give it as a pcm voice.
88 *
89 * voice_lock is already held.
88 */ 90 */
89int 91int
90snd_emu10k1_synth_get_voice(struct snd_emu10k1 *hw) 92snd_emu10k1_synth_get_voice(struct snd_emu10k1 *hw)
@@ -92,12 +94,10 @@ snd_emu10k1_synth_get_voice(struct snd_emu10k1 *hw)
92 struct snd_emux *emu; 94 struct snd_emux *emu;
93 struct snd_emux_voice *vp; 95 struct snd_emux_voice *vp;
94 struct best_voice best[V_END]; 96 struct best_voice best[V_END];
95 unsigned long flags;
96 int i; 97 int i;
97 98
98 emu = hw->synth; 99 emu = hw->synth;
99 100
100 spin_lock_irqsave(&emu->voice_lock, flags);
101 lookup_voices(emu, hw, best, 1); /* no OFF voices */ 101 lookup_voices(emu, hw, best, 1); /* no OFF voices */
102 for (i = 0; i < V_END; i++) { 102 for (i = 0; i < V_END; i++) {
103 if (best[i].voice >= 0) { 103 if (best[i].voice >= 0) {
@@ -113,11 +113,9 @@ snd_emu10k1_synth_get_voice(struct snd_emu10k1 *hw)
113 vp->emu->num_voices--; 113 vp->emu->num_voices--;
114 vp->ch = -1; 114 vp->ch = -1;
115 vp->state = SNDRV_EMUX_ST_OFF; 115 vp->state = SNDRV_EMUX_ST_OFF;
116 spin_unlock_irqrestore(&emu->voice_lock, flags);
117 return ch; 116 return ch;
118 } 117 }
119 } 118 }
120 spin_unlock_irqrestore(&emu->voice_lock, flags);
121 119
122 /* not found */ 120 /* not found */
123 return -ENOMEM; 121 return -ENOMEM;
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index aa302fb03fc5..cfcca4c30d4d 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -218,6 +218,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
218 "{Intel, LPT}," 218 "{Intel, LPT},"
219 "{Intel, LPT_LP}," 219 "{Intel, LPT_LP},"
220 "{Intel, WPT_LP}," 220 "{Intel, WPT_LP},"
221 "{Intel, SPT},"
221 "{Intel, HPT}," 222 "{Intel, HPT},"
222 "{Intel, PBG}," 223 "{Intel, PBG},"
223 "{Intel, SCH}," 224 "{Intel, SCH},"
@@ -1998,6 +1999,9 @@ static const struct pci_device_id azx_ids[] = {
1998 /* Wildcat Point-LP */ 1999 /* Wildcat Point-LP */
1999 { PCI_DEVICE(0x8086, 0x9ca0), 2000 { PCI_DEVICE(0x8086, 0x9ca0),
2000 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 2001 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
2002 /* Sunrise Point */
2003 { PCI_DEVICE(0x8086, 0xa170),
2004 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
2001 /* Haswell */ 2005 /* Haswell */
2002 { PCI_DEVICE(0x8086, 0x0a0c), 2006 { PCI_DEVICE(0x8086, 0x0a0c),
2003 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, 2007 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },