diff options
| -rw-r--r-- | sound/pci/hda/hda_intel.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index e340792f6cb3..6517f589d01d 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
| @@ -722,9 +722,10 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus, | |||
| 722 | chip->last_cmd[addr]); | 722 | chip->last_cmd[addr]); |
| 723 | chip->single_cmd = 1; | 723 | chip->single_cmd = 1; |
| 724 | bus->response_reset = 0; | 724 | bus->response_reset = 0; |
| 725 | /* re-initialize CORB/RIRB */ | 725 | /* release CORB/RIRB */ |
| 726 | azx_free_cmd_io(chip); | 726 | azx_free_cmd_io(chip); |
| 727 | azx_init_cmd_io(chip); | 727 | /* disable unsolicited responses */ |
| 728 | azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL); | ||
| 728 | return -1; | 729 | return -1; |
| 729 | } | 730 | } |
| 730 | 731 | ||
| @@ -865,7 +866,9 @@ static int azx_reset(struct azx *chip) | |||
| 865 | } | 866 | } |
| 866 | 867 | ||
| 867 | /* Accept unsolicited responses */ | 868 | /* Accept unsolicited responses */ |
| 868 | azx_writel(chip, GCTL, azx_readl(chip, GCTL) | ICH6_GCTL_UNSOL); | 869 | if (!chip->single_cmd) |
| 870 | azx_writel(chip, GCTL, azx_readl(chip, GCTL) | | ||
| 871 | ICH6_GCTL_UNSOL); | ||
| 869 | 872 | ||
| 870 | /* detect codecs */ | 873 | /* detect codecs */ |
| 871 | if (!chip->codec_mask) { | 874 | if (!chip->codec_mask) { |
| @@ -980,7 +983,8 @@ static void azx_init_chip(struct azx *chip) | |||
| 980 | azx_int_enable(chip); | 983 | azx_int_enable(chip); |
| 981 | 984 | ||
| 982 | /* initialize the codec command I/O */ | 985 | /* initialize the codec command I/O */ |
| 983 | azx_init_cmd_io(chip); | 986 | if (!chip->single_cmd) |
| 987 | azx_init_cmd_io(chip); | ||
| 984 | 988 | ||
| 985 | /* program the position buffer */ | 989 | /* program the position buffer */ |
| 986 | azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr); | 990 | azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr); |
