-/**
- * snd_card_set_pm_callback - set the PCI power-management callbacks
- * @card: soundcard structure
- * @suspend: suspend callback function
- * @resume: resume callback function
- * @private_data: private data to pass to the callback functions
- *
- * Sets the power-management callback functions of the card.
- * These callbacks are called from ALSA's common PCI suspend/resume
- * handler and from the control API.
- */
-int snd_card_set_pm_callback(snd_card_t *card,
- int (*suspend)(snd_card_t *, pm_message_t),
- int (*resume)(snd_card_t *),
- void *private_data)
-{
- card->pm_suspend = suspend;
- card->pm_resume = resume;
- card->pm_private_data = private_data;
- return 0;
-}
-
-#ifdef CONFIG_SND_GENERIC_DRIVER
-/* suspend/resume callbacks for snd_generic platform device */
-static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level)
-{
- snd_card_t *card;
-
- if (level != SUSPEND_DISABLE)
- return 0;
-
- card = get_snd_generic_card(dev);
- if (card->power_state == SNDRV_CTL_POWER_D3hot)
- return 0;
- card->pm_suspend(card, PMSG_SUSPEND);
- snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
- return 0;
-}
-
-static int snd_generic_resume(struct device *dev, u32 level)
-{
- snd_card_t *card;
-
- if (level != RESUME_ENABLE)
- return 0;
-
- card = get_snd_generic_card(dev);
- if (card->power_state == SNDRV_CTL_POWER_D0)
- return 0;
- card->pm_resume(card);
- snd_power_change_state(card, SNDRV_CTL_POWER_D0);
- return 0;
-}
-
-/**
- * snd_card_set_generic_pm_callback - set the generic power-management callbacks
- * @card: soundcard structure
- * @suspend: suspend callback function
- * @resume: resume callback function
- * @private_data: private data to pass to the callback functions
- *
- * Registers the power-management and sets the lowlevel callbacks for
- * the given card. These callbacks are called from the ALSA's common
- * PM handler and from the control API.
- */
-int snd_card_set_generic_pm_callback(snd_card_t *card,
- int (*suspend)(snd_card_t *, pm_message_t),
- int (*resume)(snd_card_t *),
- void *private_data)
-{
- int err;
- if ((err = snd_generic_device_register(card)) < 0)
- return err;
- return snd_card_set_pm_callback(card, suspend, resume, private_data);
-}
-#endif /* CONFIG_SND_GENERIC_DRIVER */
-
-#ifdef CONFIG_PCI
-int snd_card_pci_suspend(struct pci_dev *dev, pm_message_t state)
-{
- snd_card_t *card = pci_get_drvdata(dev);
- int err;
- if (! card || ! card->pm_suspend)
- return 0;
- if (card->power_state == SNDRV_CTL_POWER_D3hot)
- return 0;
- err = card->pm_suspend(card, PMSG_SUSPEND);
- pci_save_state(dev);
- snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
- return err;
-}
-
-int snd_card_pci_resume(struct pci_dev *dev)
-{
- snd_card_t *card = pci_get_drvdata(dev);
- if (! card || ! card->pm_resume)
- return 0;
- if (card->power_state == SNDRV_CTL_POWER_D0)
- return 0;
- /* restore the PCI config space */
- pci_restore_state(dev);
- card->pm_resume(card);
- snd_power_change_state(card, SNDRV_CTL_POWER_D0);
- return 0;
-}
-#endif
-