Skip to content

Commit

Permalink
ALSA: hda: Reset all SIE bits in INTCTL
Browse files Browse the repository at this point in the history
Old code resets SIE for up to 8 streams using byte accessor, but
register is laid out in following way:

31 GIE
30 CIE
29:x Reserved
x-1:0 SIE

If there is more than 8 streams, some of them may and up with enabled
interrupts. To fix this just clear whole INTCTL register when disabling
interrupts.

Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/r/20220706120230.427296-8-cezary.rojewski@intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Amadeusz Sławiński authored and Takashi Iwai committed Jul 9, 2022
1 parent 980b3a8 commit 856282f
Showing 1 changed file with 2 additions and 5 deletions.
7 changes: 2 additions & 5 deletions sound/hda/hdac_controller.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,11 +474,8 @@ static void azx_int_disable(struct hdac_bus *bus)
list_for_each_entry(azx_dev, &bus->stream_list, list)
snd_hdac_stream_updateb(azx_dev, SD_CTL, SD_INT_MASK, 0);

/* disable SIE for all streams */
snd_hdac_chip_writeb(bus, INTCTL, 0);

/* disable controller CIE and GIE */
snd_hdac_chip_updatel(bus, INTCTL, AZX_INT_CTRL_EN | AZX_INT_GLOBAL_EN, 0);
/* disable SIE for all streams & disable controller CIE and GIE */
snd_hdac_chip_writel(bus, INTCTL, 0);
}

/* clear interrupts */
Expand Down

0 comments on commit 856282f

Please sign in to comment.