]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branch 'fix/hda' into topic/hda
authorTakashi Iwai <tiwai@suse.de>
Mon, 16 Feb 2009 09:23:35 +0000 (10:23 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 16 Feb 2009 09:23:35 +0000 (10:23 +0100)
1  2 
sound/pci/hda/hda_intel.c

index e853e4a8bde9572b73b4ab58e436bf18c200978b,c8d9178f47e59bf327b17433017d24460620a5e5..c5a5dc5698a2373e26e0de11804683369ed08e3a
@@@ -381,7 -381,6 +381,7 @@@ struct azx 
  
        /* HD codec */
        unsigned short codec_mask;
 +      int  codec_probe_mask; /* copied from probe_mask option */
        struct hda_bus *bus;
  
        /* CORB/RIRB */
@@@ -1229,6 -1228,7 +1229,6 @@@ static unsigned int azx_max_codecs[AZX_
  };
  
  static int __devinit azx_codec_create(struct azx *chip, const char *model,
 -                                    unsigned int codec_probe_mask,
                                      int no_init)
  {
        struct hda_bus_template bus_temp;
  
        /* First try to probe all given codec slots */
        for (c = 0; c < max_slots; c++) {
 -              if ((chip->codec_mask & (1 << c)) & codec_probe_mask) {
 +              if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
                        if (probe_codec(chip, c) < 0) {
                                /* Some BIOSen give you wrong codec addresses
                                 * that don't exist
  
        /* Then create codec instances */
        for (c = 0; c < max_slots; c++) {
 -              if ((chip->codec_mask & (1 << c)) & codec_probe_mask) {
 +              if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
                        struct hda_codec *codec;
                        err = snd_hda_codec_new(chip->bus, c, !no_init, &codec);
                        if (err < 0)
@@@ -1947,16 -1947,13 +1947,13 @@@ static int azx_suspend(struct pci_dev *
        return 0;
  }
  
- static int azx_resume_early(struct pci_dev *pci)
- {
-       return pci_restore_state(pci);
- }
  static int azx_resume(struct pci_dev *pci)
  {
        struct snd_card *card = pci_get_drvdata(pci);
        struct azx *chip = card->private_data;
  
+       pci_set_power_state(pci, PCI_D0);
+       pci_restore_state(pci);
        if (pci_enable_device(pci) < 0) {
                printk(KERN_ERR "hda-intel: pci_enable_device failed, "
                       "disabling device\n");
@@@ -2098,36 -2095,23 +2095,36 @@@ static struct snd_pci_quirk probe_mask_
        SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
        /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
        SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
 +      /* forced codec slots */
 +      SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
        {}
  };
  
 +#define AZX_FORCE_CODEC_MASK  0x100
 +
  static void __devinit check_probe_mask(struct azx *chip, int dev)
  {
        const struct snd_pci_quirk *q;
  
 -      if (probe_mask[dev] == -1) {
 +      chip->codec_probe_mask = probe_mask[dev];
 +      if (chip->codec_probe_mask == -1) {
                q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
                if (q) {
                        printk(KERN_INFO
                               "hda_intel: probe_mask set to 0x%x "
                               "for device %04x:%04x\n",
                               q->value, q->subvendor, q->subdevice);
 -                      probe_mask[dev] = q->value;
 +                      chip->codec_probe_mask = q->value;
                }
        }
 +
 +      /* check forced option */
 +      if (chip->codec_probe_mask != -1 &&
 +          (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
 +              chip->codec_mask = chip->codec_probe_mask & 0xff;
 +              printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n",
 +                     chip->codec_mask);
 +      }
  }
  
  
@@@ -2360,7 -2344,8 +2357,7 @@@ static int __devinit azx_probe(struct p
        card->private_data = chip;
  
        /* create codec instances */
 -      err = azx_codec_create(chip, model[dev], probe_mask[dev],
 -                             probe_only[dev]);
 +      err = azx_codec_create(chip, model[dev], probe_only[dev]);
        if (err < 0)
                goto out_free;
  
@@@ -2480,7 -2465,6 +2477,6 @@@ static struct pci_driver driver = 
        .remove = __devexit_p(azx_remove),
  #ifdef CONFIG_PM
        .suspend = azx_suspend,
-       .resume_early = azx_resume_early,
        .resume = azx_resume,
  #endif
  };