HDA: Honor WAKEEN bits when deciding to raise an interrupt on codec status

Submitted by François Revol on Nov. 7, 2010, 3:12 p.m.

Details

Message ID C9DB093D-7325-41DF-86F1-453880A5181D@free.fr
State New
Headers show

Commit Message

François Revol Nov. 7, 2010, 3:12 p.m.
From 2e6c61248c76d3f0c511658b9f34660d034703a4 Mon Sep 17 00:00:00 2001

HDA: Honor WAKEEN bits when deciding to raise an interrupt on codec status change.
This prevents an interrupt storm with the Haiku HDA driver which does not handle codec status changes in the irq handler.


Signed-off-by: François Revol <revol@free.fr>
---
 hw/intel-hda.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Comments

malc Nov. 7, 2010, 5:24 p.m.
On Sun, 7 Nov 2010, Fran?ois Revol wrote:

> From 2e6c61248c76d3f0c511658b9f34660d034703a4 Mon Sep 17 00:00:00 2001
> 
> HDA: Honor WAKEEN bits when deciding to raise an interrupt on codec 
> status change. This prevents an interrupt storm with the Haiku HDA 
> driver which does not handle codec status changes in the irq handler.
> 

Talk this over with the author of intel hda.

Patch hide | download patch | download mbox

diff --git a/hw/intel-hda.c b/hw/intel-hda.c
index ccb059d..f1bd203 100644
--- a/hw/intel-hda.c
+++ b/hw/intel-hda.c
@@ -235,7 +235,7 @@  static void intel_hda_update_int_sts(IntelHDAState *d)
     if (d->rirb_sts & ICH6_RBSTS_OVERRUN) {
         sts |= (1 << 30);
     }
-    if (d->state_sts) {
+    if (d->state_sts & d->wake_en) {
         sts |= (1 << 30);
     }
 
@@ -617,6 +617,7 @@  static const struct IntelHDAReg regtab[] = {
     [ ICH6_REG_WAKEEN ] = {
         .name     = "WAKEEN",
         .size     = 2,
+        .wmask    = 0x3fff,
         .offset   = offsetof(IntelHDAState, wake_en),
     },
     [ ICH6_REG_STATESTS ] = {