]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.drivers/alsa-post-ga-hda-single-cmd-concurrent-access
Imported linux-2.6.27.39 suse/xen patches.
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.drivers / alsa-post-ga-hda-single-cmd-concurrent-access
CommitLineData
2cb7cef9
BS
1From: Takashi Iwai <tiwai@suse.de>
2Subject: ALSA: hda - Allow concurrent RIRB access in single_cmd mode
3Patch-mainline:
4References: bnc#502903
5
6In the single_cmd mode, the current driver code doesn't do any update
7for RIRB just for any safety reason. But, actually the RIRB and
8single_cmd mode don't conflict. Unsolicited events can be delivered
9even while using the single_cmd mode.
10
11This patch allows the handling of unsolicited events with single_cmd
12mode, just always checking RIRB independent from single_cmd flag.
13
14Signed-off-by: Takashi Iwai <tiwai@suse.de>
15
16---
17 sound/pci/hda/hda_intel.c | 13 +++++--------
18 1 file changed, 5 insertions(+), 8 deletions(-)
19
20--- a/sound/pci/hda/hda_intel.c
21+++ b/sound/pci/hda/hda_intel.c
22@@ -868,8 +868,7 @@ static void azx_init_chip(struct azx *ch
23 azx_int_enable(chip);
24
25 /* initialize the codec command I/O */
26- if (!chip->single_cmd)
27- azx_init_cmd_io(chip);
28+ azx_init_cmd_io(chip);
29
30 /* program the position buffer */
31 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
32@@ -989,7 +988,7 @@ static irqreturn_t azx_interrupt(int irq
33 /* clear rirb int */
34 status = azx_readb(chip, RIRBSTS);
35 if (status & RIRB_INT_MASK) {
36- if (!chip->single_cmd && (status & RIRB_INT_RESPONSE))
37+ if (status & RIRB_INT_RESPONSE)
38 azx_update_rirb(chip);
39 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
40 }
41@@ -2272,11 +2271,9 @@ static int __devinit azx_create(struct s
42 goto errout;
43 }
44 /* allocate CORB/RIRB */
45- if (!chip->single_cmd) {
46- err = azx_alloc_cmd_io(chip);
47- if (err < 0)
48- goto errout;
49- }
50+ err = azx_alloc_cmd_io(chip);
51+ if (err < 0)
52+ goto errout;
53
54 /* initialize streams */
55 azx_init_stream(chip);