summaryrefslogtreecommitdiff
blob: e2f143635c772a8a8ff9a6921703bab2f78addbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
diff -ru alsa-driver-0.9.0rc6/alsa-kernel/pci/ice1712/ice1712.c alsa-driver-0.9.0rc6.new/alsa-kernel/pci/ice1712/ice1712.c
--- alsa-driver-0.9.0rc6/alsa-kernel/pci/ice1712/ice1712.c	Thu Nov 14 05:52:31 2002
+++ alsa-driver-0.9.0rc6.new/alsa-kernel/pci/ice1712/ice1712.c	Sat Dec 21 02:04:06 2002
@@ -1787,13 +1787,18 @@
 	oval = inb(ICEMT(ice, RATE));
 	if (ucontrol->value.enumerated.item[0] == 13) {
 		outb(oval | ICE1712_SPDIF_MASTER, ICEMT(ice, RATE));
+		spin_unlock_irq(&ice->reg_lock);
 	} else {
 		PRO_RATE_DEFAULT = xrate[ucontrol->value.integer.value[0] % 13];
+		spin_unlock_irq(&ice->reg_lock);
 		snd_ice1712_set_pro_rate(ice, PRO_RATE_DEFAULT, 1);
 	}
+	spin_lock_irq(&ice->reg_lock);
 	change = inb(ICEMT(ice, RATE)) != oval;
 
 	if ((oval & ICE1712_SPDIF_MASTER) != (inb(ICEMT(ice, RATE)) & ICE1712_SPDIF_MASTER)) {
+		spin_unlock_irq(&ice->reg_lock);
+
 		/* change CS8427 clock source too */
 		if (ice->cs8427) {
 			snd_ice1712_cs8427_set_input_clock(ice, is_spdif_master(ice));
@@ -1801,6 +1806,8 @@
 		/* notify ak4524 chip as well */
 		if (is_spdif_master(ice) && ice->ak4524.ops.set_rate_val)
 			ice->ak4524.ops.set_rate_val(ice, 0);
+	} else {
+		spin_unlock_irq(&ice->reg_lock);
 	}
 
 	return change;