From 65e1b3004c692c9cc6188ad6788b72165c63f8d7 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Tue, 25 May 2010 09:03:40 +0200 Subject: [PATCH] --- yaml --- r: 198645 b: refs/heads/master c: 9ef04066b3e7c51ed7edc6010ac039f18f9f3617 h: refs/heads/master i: 198643: a81649d4fdf27fd7a748566013438846faf09bc9 v: v3 --- [refs] | 2 +- trunk/sound/pci/hda/hda_intel.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 9896b9257af7..8e4b3b5fe603 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 66668b6fb6861fad7f6bfef6646ac84693474c9a +refs/heads/master: 9ef04066b3e7c51ed7edc6010ac039f18f9f3617 diff --git a/trunk/sound/pci/hda/hda_intel.c b/trunk/sound/pci/hda/hda_intel.c index 14d895bcf3fe..77e22c2a8caa 100644 --- a/trunk/sound/pci/hda/hda_intel.c +++ b/trunk/sound/pci/hda/hda_intel.c @@ -1097,6 +1097,7 @@ static irqreturn_t azx_interrupt(int irq, void *dev_id) struct azx *chip = dev_id; struct azx_dev *azx_dev; u32 status; + u8 sd_status; int i, ok; spin_lock(&chip->reg_lock); @@ -1110,8 +1111,10 @@ static irqreturn_t azx_interrupt(int irq, void *dev_id) for (i = 0; i < chip->num_streams; i++) { azx_dev = &chip->azx_dev[i]; if (status & azx_dev->sd_int_sta_mask) { + sd_status = azx_sd_readb(azx_dev, SD_STS); azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); - if (!azx_dev->substream || !azx_dev->running) + if (!azx_dev->substream || !azx_dev->running || + !(sd_status & SD_INT_COMPLETE)) continue; /* check whether this IRQ is really acceptable */ ok = azx_position_ok(chip, azx_dev);