vserver 2.0 rc7
[linux-2.6.git] / sound / pci / intel8x0.c
index aeaf165..8b33b12 100644 (file)
@@ -55,6 +55,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel,82801AA-ICH},"
                "{Intel,ICH6},"
                "{Intel,ICH7},"
                "{Intel,6300ESB},"
+               "{Intel,ESB2},"
                "{Intel,MX440},"
                "{SiS,SI7012},"
                "{NVidia,nForce Audio},"
@@ -118,12 +119,15 @@ MODULE_PARM_DESC(xbox, "Set to 1 for Xbox, if you have problems with the AC'97 c
 #ifndef PCI_DEVICE_ID_INTEL_ESB_5
 #define PCI_DEVICE_ID_INTEL_ESB_5      0x25a6
 #endif
-#ifndef PCI_DEVICE_ID_INTEL_ICH6_3
-#define PCI_DEVICE_ID_INTEL_ICH6_    0x266e
+#ifndef PCI_DEVICE_ID_INTEL_ICH6_18
+#define PCI_DEVICE_ID_INTEL_ICH6_18    0x266e
 #endif
 #ifndef PCI_DEVICE_ID_INTEL_ICH7_20
 #define PCI_DEVICE_ID_INTEL_ICH7_20    0x27de
 #endif
+#ifndef PCI_DEVICE_ID_INTEL_ESB2_14
+#define PCI_DEVICE_ID_INTEL_ESB2_14    0x2698
+#endif
 #ifndef PCI_DEVICE_ID_SI_7012
 #define PCI_DEVICE_ID_SI_7012          0x7012
 #endif
@@ -443,6 +447,7 @@ static struct pci_device_id snd_intel8x0_ids[] = {
        { 0x8086, 0x25a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL_ICH4 }, /* ESB */
        { 0x8086, 0x266e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL_ICH4 }, /* ICH6 */
        { 0x8086, 0x27de, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL_ICH4 }, /* ICH7 */
+       { 0x8086, 0x2698, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL_ICH4 }, /* ESB2 */
        { 0x8086, 0x7195, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL }, /* 440MX */
        { 0x1039, 0x7012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_SIS },   /* SI7012 */
        { 0x10de, 0x01b1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },        /* NFORCE */
@@ -1059,7 +1064,7 @@ static snd_pcm_uframes_t snd_intel8x0_pcm_pointer(snd_pcm_substream_t * substrea
        intel8x0_t *chip = snd_pcm_substream_chip(substream);
        ichdev_t *ichdev = get_ichdev(substream);
        size_t ptr1, ptr;
-       int civ, timeout = 10;
+       int civ, timeout = 100;
        unsigned int position;
 
        spin_lock(&chip->reg_lock);
@@ -1067,8 +1072,10 @@ static snd_pcm_uframes_t snd_intel8x0_pcm_pointer(snd_pcm_substream_t * substrea
                civ = igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV);
                ptr1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb);
                position = ichdev->position;
-               if (ptr1 == 0)
-                       udelay(1);
+               if (ptr1 == 0) {
+                       udelay(10);
+                       continue;
+               }
                if (civ == igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV) &&
                    ptr1 == igetword(chip, ichdev->reg_offset + ichdev->roff_picb))
                        break;
@@ -1759,6 +1766,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
                .name = "Dell Optiplex GX260",  /* AD1981A */
                .type = AC97_TUNE_HP_ONLY
        },
+       {
+               .vendor = 0x1028,
+               .device = 0x012c,
+               .name = "Dell Precision 650",   /* AD1981A */
+               .type = AC97_TUNE_HP_ONLY
+       },
        {
                .vendor = 0x1028,
                .device = 0x012d,
@@ -1771,6 +1784,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
                .name = "Dell", /* which model?  AD1981B*/
                .type = AC97_TUNE_HP_ONLY
        },
+       {
+               .vendor = 0x1028,
+               .device = 0x0163,
+               .name = "Dell Unknown", /* STAC9750/51 */
+               .type = AC97_TUNE_HP_ONLY
+       },
        {
                .vendor = 0x103c,
                .device = 0x006d,
@@ -1837,6 +1856,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = {
                .name = "Fujitsu-Siemens E4010",
                .type = AC97_TUNE_HP_ONLY
        },
+       {
+               .vendor = 0x10cf,
+               .device = 0x1253,
+               .name = "Fujitsu S6210",        /* STAC9750/51 */
+               .type = AC97_TUNE_HP_ONLY
+       },
        {
                .vendor = 0x10f1,
                .device = 0x2665,
@@ -2012,7 +2037,8 @@ static int __devinit snd_intel8x0_mixer(intel8x0_t *chip, int ac97_clock, const
        /* FIXME: my test board doesn't work well with VRA... */
        if (chip->device_type == DEVICE_ALI)
                pbus->no_vra = 1;
-       pbus->dra = 1;
+       else
+               pbus->dra = 1;
        chip->ac97_bus = pbus;
 
        ac97.pci = chip->pci;
@@ -2320,7 +2346,7 @@ static int snd_intel8x0_free(intel8x0_t *chip)
 /*
  * power management
  */
-static int intel8x0_suspend(snd_card_t *card, unsigned int state)
+static int intel8x0_suspend(snd_card_t *card, pm_message_t state)
 {
        intel8x0_t *chip = card->pm_private_data;
        int i;
@@ -2345,7 +2371,7 @@ static int intel8x0_suspend(snd_card_t *card, unsigned int state)
        return 0;
 }
 
-static int intel8x0_resume(snd_card_t *card, unsigned int state)
+static int intel8x0_resume(snd_card_t *card)
 {
        intel8x0_t *chip = card->pm_private_data;
        int i;
@@ -2713,8 +2739,9 @@ static struct shortname_table {
        { PCI_DEVICE_ID_INTEL_ICH4, "Intel 82801DB-ICH4" },
        { PCI_DEVICE_ID_INTEL_ICH5, "Intel ICH5" },
        { PCI_DEVICE_ID_INTEL_ESB_5, "Intel 6300ESB" },
-       { PCI_DEVICE_ID_INTEL_ICH6_3, "Intel ICH6" },
+       { PCI_DEVICE_ID_INTEL_ICH6_18, "Intel ICH6" },
        { PCI_DEVICE_ID_INTEL_ICH7_20, "Intel ICH7" },
+       { PCI_DEVICE_ID_INTEL_ESB2_14, "Intel ESB2" },
        { PCI_DEVICE_ID_SI_7012, "SiS SI7012" },
        { PCI_DEVICE_ID_NVIDIA_MCP_AUDIO, "NVidia nForce" },
        { PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO, "NVidia nForce2" },