Merge branch 'fix/hda' into topic/hda
authorTakashi Iwai <tiwai@suse.de>
Tue, 9 Feb 2010 20:34:18 +0000 (21:34 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 9 Feb 2010 20:34:18 +0000 (21:34 +0100)
1  2 
sound/pci/hda/hda_intel.c

@@@ -125,7 -125,6 +125,7 @@@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}
                         "{Intel, ICH9},"
                         "{Intel, ICH10},"
                         "{Intel, PCH},"
 +                       "{Intel, CPT},"
                         "{Intel, SCH},"
                         "{ATI, SB450},"
                         "{ATI, SB600},"
@@@ -260,6 -259,8 +260,6 @@@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SD
  #define AZX_MAX_FRAG          32
  /* max buffer size - no h/w limit, you can increase as you like */
  #define AZX_MAX_BUF_SIZE      (1024*1024*1024)
 -/* max number of PCM devics per card */
 -#define AZX_MAX_PCMS          8
  
  /* RIRB int mask: overrun[2], response[0] */
  #define RIRB_INT_RESPONSE     0x01
@@@ -407,7 -408,7 +407,7 @@@ struct azx 
        struct azx_dev *azx_dev;
  
        /* PCM */
 -      struct snd_pcm *pcm[AZX_MAX_PCMS];
 +      struct snd_pcm *pcm[HDA_MAX_PCMS];
  
        /* HD codec */
        unsigned short codec_mask;
@@@ -967,8 -968,8 +967,8 @@@ static void azx_stream_start(struct az
        azx_dev->insufficient = 1;
  
        /* enable SIE */
 -      azx_writeb(chip, INTCTL,
 -                 azx_readb(chip, INTCTL) | (1 << azx_dev->index));
 +      azx_writel(chip, INTCTL,
 +                 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
        /* set DMA start and interrupt mask */
        azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
                      SD_CTL_DMA_START | SD_INT_MASK);
@@@ -987,8 -988,8 +987,8 @@@ static void azx_stream_stop(struct azx 
  {
        azx_stream_clear(chip, azx_dev);
        /* disable SIE */
 -      azx_writeb(chip, INTCTL,
 -                 azx_readb(chip, INTCTL) & ~(1 << azx_dev->index));
 +      azx_writel(chip, INTCTL,
 +                 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
  }
  
  
@@@ -1349,7 -1350,7 +1349,7 @@@ static void azx_bus_reset(struct hda_bu
        if (chip->initialized) {
                int i;
  
 -              for (i = 0; i < AZX_MAX_PCMS; i++)
 +              for (i = 0; i < HDA_MAX_PCMS; i++)
                        snd_pcm_suspend_all(chip->pcm[i]);
                snd_hda_suspend(chip->bus);
                snd_hda_resume(chip->bus);
@@@ -1892,6 -1893,12 +1892,12 @@@ static int azx_position_ok(struct azx *
  
        if (!bdl_pos_adj[chip->dev_index])
                return 1; /* no delayed ack */
+       if (azx_dev->period_bytes == 0) {
+               printk(KERN_WARNING
+                      "hda-intel: Divide by zero was avoided "
+                      "in azx_dev->period_bytes.\n");
+               return 0;
+       }
        if (pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
                return 0; /* NG - it's below the period boundary */
        return 1; /* OK, it's fine */
@@@ -1979,7 -1986,7 +1985,7 @@@ azx_attach_pcm_stream(struct hda_bus *b
        int pcm_dev = cpcm->device;
        int s, err;
  
 -      if (pcm_dev >= AZX_MAX_PCMS) {
 +      if (pcm_dev >= HDA_MAX_PCMS) {
                snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n",
                           pcm_dev);
                return -EINVAL;
@@@ -2135,7 -2142,7 +2141,7 @@@ static int azx_suspend(struct pci_dev *
  
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
        azx_clear_irq_pending(chip);
 -      for (i = 0; i < AZX_MAX_PCMS; i++)
 +      for (i = 0; i < HDA_MAX_PCMS; i++)
                snd_pcm_suspend_all(chip->pcm[i]);
        if (chip->initialized)
                snd_hda_suspend(chip->bus);
@@@ -2692,8 -2699,6 +2698,8 @@@ static struct pci_device_id azx_ids[] 
        { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH },
        /* PCH */
        { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH },
 +      /* CPT */
 +      { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_ICH },
        /* SCH */
        { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH },
        /* ATI SB 450/600 */
        /* ULI M5461 */
        { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
        /* NVIDIA MCP */
 -      { PCI_DEVICE(0x10de, 0x026c), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0371), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x03e4), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x03f0), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x044a), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x044b), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x055c), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x055d), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0590), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0774), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0775), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0776), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0777), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x07fc), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x07fd), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0ac0), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0ac1), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0ac2), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0ac3), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0be2), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0be3), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0be4), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0d94), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0d95), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0d96), .driver_data = AZX_DRIVER_NVIDIA },
 -      { PCI_DEVICE(0x10de, 0x0d97), .driver_data = AZX_DRIVER_NVIDIA },
 +      { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
 +        .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
 +        .class_mask = 0xffffff,
 +        .driver_data = AZX_DRIVER_NVIDIA },
        /* Teradici */
        { PCI_DEVICE(0x6549, 0x1200), .driver_data = AZX_DRIVER_TERA },
        /* Creative X-Fi (CA0110-IBG) */