static int snd_als300_resume(struct device *dev) { struct snd_card *card = dev_get_drvdata(dev); struct snd_als300 *chip = card->private_data; snd_als300_init(chip); snd_ac97_resume(chip->ac97); snd_power_change_state(card, SNDRV_CTL_POWER_D0); return 0; }
static int snd_als300_resume(struct pci_dev *pci) { struct snd_card *card = pci_get_drvdata(pci); struct snd_als300 *chip = card->private_data; pci_set_power_state(pci, PCI_D0); pci_restore_state(pci); if (pci_enable_device(pci) < 0) { printk(KERN_ERR "als300: pci_enable_device failed, " "disabling device\n"); snd_card_disconnect(card); return -EIO; } pci_set_master(pci); snd_als300_init(chip); snd_ac97_resume(chip->ac97); snd_power_change_state(card, SNDRV_CTL_POWER_D0); return 0; }
static int snd_als300_create(struct snd_card *card, struct pci_dev *pci, int chip_type, struct snd_als300 **rchip) { struct snd_als300 *chip; void *irq_handler; int err; static struct snd_device_ops ops = { .dev_free = snd_als300_dev_free, }; *rchip = NULL; if ((err = pci_enable_device(pci)) < 0) return err; if (dma_set_mask(&pci->dev, DMA_BIT_MASK(28)) < 0 || dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(28)) < 0) { dev_err(card->dev, "error setting 28bit DMA mask\n"); pci_disable_device(pci); return -ENXIO; } pci_set_master(pci); chip = kzalloc(sizeof(*chip), GFP_KERNEL); if (chip == NULL) { pci_disable_device(pci); return -ENOMEM; } chip->card = card; chip->pci = pci; chip->irq = -1; chip->chip_type = chip_type; spin_lock_init(&chip->reg_lock); if ((err = pci_request_regions(pci, "ALS300")) < 0) { kfree(chip); pci_disable_device(pci); return err; } chip->port = pci_resource_start(pci, 0); if (chip->chip_type == DEVICE_ALS300_PLUS) irq_handler = snd_als300plus_interrupt; else irq_handler = snd_als300_interrupt; if (request_irq(pci->irq, irq_handler, IRQF_SHARED, KBUILD_MODNAME, chip)) { dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); snd_als300_free(chip); return -EBUSY; } chip->irq = pci->irq; snd_als300_init(chip); err = snd_als300_ac97(chip); if (err < 0) { dev_err(card->dev, "Could not create ac97\n"); snd_als300_free(chip); return err; } if ((err = snd_als300_new_pcm(chip)) < 0) { dev_err(card->dev, "Could not create PCM\n"); snd_als300_free(chip); return err; } if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { snd_als300_free(chip); return err; } *rchip = chip; return 0; }
static int __devinit snd_als300_create(struct snd_card *card, struct pci_dev *pci, int chip_type, struct snd_als300 **rchip) { struct snd_als300 *chip; void *irq_handler; int err; static struct snd_device_ops ops = { .dev_free = snd_als300_dev_free, }; *rchip = NULL; snd_als300_dbgcallenter(); if ((err = pci_enable_device(pci)) < 0) return err; if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 || pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) { ; pci_disable_device(pci); return -ENXIO; } pci_set_master(pci); chip = kzalloc(sizeof(*chip), GFP_KERNEL); if (chip == NULL) { pci_disable_device(pci); return -ENOMEM; } chip->card = card; chip->pci = pci; chip->irq = -1; chip->chip_type = chip_type; spin_lock_init(&chip->reg_lock); if ((err = pci_request_regions(pci, "ALS300")) < 0) { kfree(chip); pci_disable_device(pci); return err; } chip->port = pci_resource_start(pci, 0); if (chip->chip_type == DEVICE_ALS300_PLUS) irq_handler = snd_als300plus_interrupt; else irq_handler = snd_als300_interrupt; if (request_irq(pci->irq, irq_handler, IRQF_SHARED, card->shortname, chip)) { ; snd_als300_free(chip); return -EBUSY; } chip->irq = pci->irq; snd_als300_init(chip); err = snd_als300_ac97(chip); if (err < 0) { ; snd_als300_free(chip); return err; } if ((err = snd_als300_new_pcm(chip)) < 0) { ; snd_als300_free(chip); return err; } if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { snd_als300_free(chip); return err; } snd_card_set_dev(card, &pci->dev); *rchip = chip; snd_als300_dbgcallleave(); return 0; }