--- ../../alsa-kernel/pci/hda/hda_intel.c	2010-03-15 15:54:10.943774798 +0100
+++ hda_intel.c	2010-03-16 07:42:31.311522259 +0100
@@ -1,3 +1,4 @@
+#include "adriver.h"
 /*
  *
  *  hda_intel.c - Implementation of primary alsa driver code base
@@ -2352,6 +2353,10 @@
 	}
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31)
+#define AZX_ENABLE_MSI_DEFAULT
+#endif
+
 /*
  * white/black-list for enable_msi
  */
@@ -2363,6 +2368,14 @@
 	{}
 };
 
+#ifndef AZX_ENABLE_MSI_DEFAULT
+static struct snd_pci_quirk msi_white_list[] __devinitdata = {
+	SND_PCI_QUIRK(0x103c, 0x30f7, "HP Pavilion dv4t-1300", 1),
+	SND_PCI_QUIRK(0x103c, 0x3607, "HP Compa CQ40", 1),
+	{}
+};
+#endif
+
 static void __devinit check_msi(struct azx *chip)
 {
 	const struct snd_pci_quirk *q;
@@ -2371,7 +2384,11 @@
 		chip->msi = !!enable_msi;
 		return;
 	}
+#ifdef AZX_ENABLE_MSI_DEFAULT
 	chip->msi = 1;	/* enable MSI as default */
+#else
+	chip->msi = 0;	/* disable MSI unless we have in the white list */
+#endif
 	q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
 	if (q) {
 		printk(KERN_INFO
@@ -2380,6 +2397,16 @@
 		chip->msi = q->value;
 		return;
 	}
+#ifndef AZX_ENABLE_MSI_DEFAULT
+	q = snd_pci_quirk_lookup(chip->pci, msi_white_list);
+	if (q) {
+		printk(KERN_INFO
+		       "hda_intel: msi for device %04x:%04x set to %d\n",
+		       q->subvendor, q->subdevice, q->value);
+		chip->msi = q->value;
+		return;
+	}
+#endif
 
 	/* NVidia chipsets seem to cause troubles with MSI */
 	if (chip->driver_type == AZX_DRIVER_NVIDIA) {
@@ -2491,7 +2518,7 @@
 					 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
 					 NULL);
 		if (p_smbus) {
-			if (p_smbus->revision < 0x30)
+			if (snd_pci_revision(p_smbus) < 0x30)
 				gcap &= ~ICH6_GCAP_64OK;
 			pci_dev_put(p_smbus);
 		}
