diff options
| -rw-r--r-- | sound/pci/intel8x0.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index ff65e049114b..7cf2dcb9d8d4 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c | |||
| @@ -725,10 +725,11 @@ static void fill_nocache(void *buf, int size, int nocache) | |||
| 725 | static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ichdev) | 725 | static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ichdev) |
| 726 | { | 726 | { |
| 727 | unsigned long port = ichdev->reg_offset; | 727 | unsigned long port = ichdev->reg_offset; |
| 728 | unsigned long flags; | ||
| 728 | int status, civ, i, step; | 729 | int status, civ, i, step; |
| 729 | int ack = 0; | 730 | int ack = 0; |
| 730 | 731 | ||
| 731 | spin_lock(&chip->reg_lock); | 732 | spin_lock_irqsave(&chip->reg_lock, flags); |
| 732 | status = igetbyte(chip, port + ichdev->roff_sr); | 733 | status = igetbyte(chip, port + ichdev->roff_sr); |
| 733 | civ = igetbyte(chip, port + ICH_REG_OFF_CIV); | 734 | civ = igetbyte(chip, port + ICH_REG_OFF_CIV); |
| 734 | if (!(status & ICH_BCIS)) { | 735 | if (!(status & ICH_BCIS)) { |
| @@ -768,7 +769,7 @@ static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ich | |||
| 768 | ack = 1; | 769 | ack = 1; |
| 769 | } | 770 | } |
| 770 | } | 771 | } |
| 771 | spin_unlock(&chip->reg_lock); | 772 | spin_unlock_irqrestore(&chip->reg_lock, flags); |
| 772 | if (ack && ichdev->substream) { | 773 | if (ack && ichdev->substream) { |
| 773 | snd_pcm_period_elapsed(ichdev->substream); | 774 | snd_pcm_period_elapsed(ichdev->substream); |
| 774 | } | 775 | } |
