diff options
| -rw-r--r-- | sound/pci/hda/hda_intel.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 14d895bcf3fe..77e22c2a8caa 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
| @@ -1097,6 +1097,7 @@ static irqreturn_t azx_interrupt(int irq, void *dev_id) | |||
| 1097 | struct azx *chip = dev_id; | 1097 | struct azx *chip = dev_id; |
| 1098 | struct azx_dev *azx_dev; | 1098 | struct azx_dev *azx_dev; |
| 1099 | u32 status; | 1099 | u32 status; |
| 1100 | u8 sd_status; | ||
| 1100 | int i, ok; | 1101 | int i, ok; |
| 1101 | 1102 | ||
| 1102 | spin_lock(&chip->reg_lock); | 1103 | spin_lock(&chip->reg_lock); |
| @@ -1110,8 +1111,10 @@ static irqreturn_t azx_interrupt(int irq, void *dev_id) | |||
| 1110 | for (i = 0; i < chip->num_streams; i++) { | 1111 | for (i = 0; i < chip->num_streams; i++) { |
| 1111 | azx_dev = &chip->azx_dev[i]; | 1112 | azx_dev = &chip->azx_dev[i]; |
| 1112 | if (status & azx_dev->sd_int_sta_mask) { | 1113 | if (status & azx_dev->sd_int_sta_mask) { |
| 1114 | sd_status = azx_sd_readb(azx_dev, SD_STS); | ||
| 1113 | azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); | 1115 | azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); |
| 1114 | if (!azx_dev->substream || !azx_dev->running) | 1116 | if (!azx_dev->substream || !azx_dev->running || |
| 1117 | !(sd_status & SD_INT_COMPLETE)) | ||
| 1115 | continue; | 1118 | continue; |
| 1116 | /* check whether this IRQ is really acceptable */ | 1119 | /* check whether this IRQ is really acceptable */ |
| 1117 | ok = azx_position_ok(chip, azx_dev); | 1120 | ok = azx_position_ok(chip, azx_dev); |
