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;
|