Update of /cvsroot/alsa/alsa-kernel/pci
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19034/pci

Modified Files:
        atiixp.c cs4281.c es1968.c intel8x0.c intel8x0m.c maestro3.c 
Log Message:
Clean up of power-management codes.

- moved commonly used codes to the core layer.
- using the unified suspend/resume callbacks for PCI and ISA
- added snd_card_set_pm_callbacks() and snd_card_set_isa_pm_callbacks()
  as the registration functions.


Index: atiixp.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/atiixp.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- atiixp.c    7 Apr 2004 17:48:16 -0000       1.3
+++ atiixp.c    8 Apr 2004 16:35:00 -0000       1.4
@@ -1537,7 +1537,7 @@
        if ((err = snd_card_register(card)) < 0)
                goto __error;
 
-       pci_set_drvdata(pci, chip);
+       pci_set_drvdata(pci, card);
        dev++;
        return 0;
 
@@ -1548,9 +1548,7 @@
 
 static void __devexit snd_atiixp_remove(struct pci_dev *pci)
 {
-       atiixp_t *chip = snd_magic_cast(atiixp_t, pci_get_drvdata(pci), return);
-       if (chip)
-               snd_card_free(chip->card);
+       snd_card_free(pci_get_drvdata(pci));
        pci_set_drvdata(pci, NULL);
 }
 

Index: cs4281.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/cs4281.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- cs4281.c    7 Apr 2004 17:48:16 -0000       1.51
+++ cs4281.c    8 Apr 2004 16:35:00 -0000       1.52
@@ -1396,7 +1396,8 @@
 
 static int snd_cs4281_chip_init(cs4281_t *chip); /* defined below */
 #ifdef CONFIG_PM
-static int snd_cs4281_set_power_state(snd_card_t *card, unsigned int power_state);
+static int cs4281_suspend(snd_card_t *card, unsigned int state);
+static int cs4281_resume(snd_card_t *card, unsigned int state);
 #endif
 
 static int __devinit snd_cs4281_create(snd_card_t * card,
@@ -1462,10 +1463,7 @@
 
        snd_cs4281_proc_init(chip);
 
-#ifdef CONFIG_PM
-       card->set_power_state = snd_cs4281_set_power_state;
-       card->power_state_private_data = chip;
-#endif
+       snd_card_set_pm_callback(card, cs4281_suspend, cs4281_resume, chip);
 
        if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
                snd_cs4281_free(chip);
@@ -2004,15 +2002,14 @@
                return err;
        }
 
-       pci_set_drvdata(pci, chip);
+       pci_set_drvdata(pci, card);
        dev++;
        return 0;
 }
 
 static void __devexit snd_cs4281_remove(struct pci_dev *pci)
 {
-       cs4281_t *chip = pci_get_drvdata(pci);
-       snd_card_free(chip->card);
+       snd_card_free(pci_get_drvdata(pci));
        pci_set_drvdata(pci, NULL);
 }
 
@@ -2041,15 +2038,12 @@
 
 #define CLKCR1_CKRA                             0x00010000L
 
-static void cs4281_suspend(cs4281_t *chip)
+static int cs4281_suspend(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       cs4281_t *chip = snd_magic_cast(cs4281_t, card->pm_private_data, return 
-EINVAL);
        u32 ulCLK;
        unsigned int i;
 
-       if (card->power_state == SNDRV_CTL_POWER_D3hot)
-               return;
-
        snd_pcm_suspend_all(chip->pcm);
 
        ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1);
@@ -2081,17 +2075,15 @@
        snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+       return 0;
 }
 
-static void cs4281_resume(cs4281_t *chip)
+static int cs4281_resume(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       cs4281_t *chip = snd_magic_cast(cs4281_t, card->pm_private_data, return 
-EINVAL);
        unsigned int i;
        u32 ulCLK;
 
-       if (card->power_state == SNDRV_CTL_POWER_D0)
-               return;
-
        pci_enable_device(chip->pci);
 
        ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1);
@@ -2115,41 +2107,8 @@
        snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-}
-
-static int snd_cs4281_suspend(struct pci_dev *dev, u32 state)
-{
-       cs4281_t *chip = snd_magic_cast(cs4281_t, pci_get_drvdata(dev), return -ENXIO);
-       cs4281_suspend(chip);
        return 0;
 }
-static int snd_cs4281_resume(struct pci_dev *dev)
-{
-       cs4281_t *chip = snd_magic_cast(cs4281_t, pci_get_drvdata(dev), return -ENXIO);
-       cs4281_resume(chip);
-       return 0;
-}
-
-/* callback */
-static int snd_cs4281_set_power_state(snd_card_t *card, unsigned int power_state)
-{
-       cs4281_t *chip = snd_magic_cast(cs4281_t, card->power_state_private_data, 
return -ENXIO);
-       switch (power_state) {
-       case SNDRV_CTL_POWER_D0:
-       case SNDRV_CTL_POWER_D1:
-       case SNDRV_CTL_POWER_D2:
-               cs4281_resume(chip);
-               break;
-       case SNDRV_CTL_POWER_D3hot:
-       case SNDRV_CTL_POWER_D3cold:
-               cs4281_suspend(chip);
-               break;
-       default:
-               return -EINVAL;
-       }
-       return 0;
-}
-
 #endif /* CONFIG_PM */
 
 static struct pci_driver driver = {
@@ -2157,10 +2116,7 @@
        .id_table = snd_cs4281_ids,
        .probe = snd_cs4281_probe,
        .remove = __devexit_p(snd_cs4281_remove),
-#ifdef CONFIG_PM
-       .suspend = snd_cs4281_suspend,
-       .resume = snd_cs4281_resume,
-#endif
+       SND_PCI_PM_CALLBACKS
 };
        
 static int __init alsa_card_cs4281_init(void)

Index: es1968.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/es1968.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- es1968.c    7 Apr 2004 17:48:16 -0000       1.62
+++ es1968.c    8 Apr 2004 16:35:00 -0000       1.63
@@ -2416,30 +2416,25 @@
 /*
  * PM support
  */
-static void es1968_suspend(es1968_t *chip)
+static int es1968_suspend(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       es1968_t *chip = snd_magic_cast(es1968_t, card->pm_private_data, return 
-EINVAL);
 
        if (! chip->do_pm)
-               return;
-
-       if (card->power_state == SNDRV_CTL_POWER_D3hot)
-               return;
+               return 0;
 
        snd_pcm_suspend_all(chip->pcm);
        snd_es1968_bob_stop(chip);
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+       return 0;
 }
 
-static void es1968_resume(es1968_t *chip)
+static int es1968_resume(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       es1968_t *chip = snd_magic_cast(es1968_t, card->pm_private_data, return 
-EINVAL);
 
        if (! chip->do_pm)
-               return;
-
-       if (card->power_state == SNDRV_CTL_POWER_D0)
-               return;
+               return 0;
 
        /* restore all our config */
        pci_enable_device(chip->pci);
@@ -2461,41 +2456,8 @@
                snd_es1968_bob_start(chip);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-}
-
-static int snd_es1968_suspend(struct pci_dev *dev, u32 state)
-{
-       es1968_t *chip = snd_magic_cast(es1968_t, pci_get_drvdata(dev), return -ENXIO);
-       es1968_suspend(chip);
-       return 0;
-}
-static int snd_es1968_resume(struct pci_dev *dev)
-{
-       es1968_t *chip = snd_magic_cast(es1968_t, pci_get_drvdata(dev), return -ENXIO);
-       es1968_resume(chip);
-       return 0;
-}
-
-/* callback */
-static int snd_es1968_set_power_state(snd_card_t *card, unsigned int power_state)
-{
-       es1968_t *chip = snd_magic_cast(es1968_t, card->power_state_private_data, 
return -ENXIO);
-       switch (power_state) {
-       case SNDRV_CTL_POWER_D0:
-       case SNDRV_CTL_POWER_D1:
-       case SNDRV_CTL_POWER_D2:
-               es1968_resume(chip);
-               break;
-       case SNDRV_CTL_POWER_D3hot:
-       case SNDRV_CTL_POWER_D3cold:
-               es1968_suspend(chip);
-               break;
-       default:
-               return -EINVAL;
-       }
        return 0;
 }
-
 #endif /* CONFIG_PM */
 
 static int snd_es1968_free(es1968_t *chip)
@@ -2637,12 +2599,8 @@
 
        snd_es1968_chip_init(chip);
 
-#ifdef CONFIG_PM
-       if (chip->do_pm) {
-               card->set_power_state = snd_es1968_set_power_state;
-               card->power_state_private_data = chip;
-       }
-#endif
+       if (chip->do_pm)
+               snd_card_set_pm_callback(card, es1968_suspend, es1968_resume, chip);
 
        if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
                snd_es1968_free(chip);
@@ -2764,16 +2722,14 @@
                snd_card_free(card);
                return err;
        }
-       pci_set_drvdata(pci, chip);
+       pci_set_drvdata(pci, card);
        dev++;
        return 0;
 }
 
 static void __devexit snd_es1968_remove(struct pci_dev *pci)
 {
-       es1968_t *chip = snd_magic_cast(es1968_t, pci_get_drvdata(pci), return);
-       if (chip)
-               snd_card_free(chip->card);
+       snd_card_free(pci_get_drvdata(pci));
        pci_set_drvdata(pci, NULL);
 }
 
@@ -2782,10 +2738,7 @@
        .id_table = snd_es1968_ids,
        .probe = snd_es1968_probe,
        .remove = __devexit_p(snd_es1968_remove),
-#ifdef CONFIG_PM
-       .suspend = snd_es1968_suspend,
-       .resume = snd_es1968_resume,
-#endif
+       SND_PCI_PM_CALLBACKS
 };
 
 static int __init alsa_card_es1968_init(void)

Index: intel8x0.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/intel8x0.c,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -r1.131 -r1.132
--- intel8x0.c  7 Apr 2004 17:48:16 -0000       1.131
+++ intel8x0.c  8 Apr 2004 16:35:00 -0000       1.132
@@ -444,10 +444,6 @@
        struct snd_dma_buffer bdbars;
        u32 int_sta_reg;                /* interrupt status register */
        u32 int_sta_mask;               /* interrupt status mask */
-       
-#ifdef CONFIG_PM
-       int in_suspend;
-#endif
 };
 
 static struct pci_device_id snd_intel8x0_ids[] = {
@@ -2200,30 +2196,22 @@
 /*
  * power management
  */
-static void intel8x0_suspend(intel8x0_t *chip)
+static int intel8x0_suspend(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return 
-EINVAL);
        int i;
 
-       if (chip->in_suspend ||
-           card->power_state == SNDRV_CTL_POWER_D3hot)
-               return;
-
-       chip->in_suspend = 1;
        for (i = 0; i < chip->pcm_devs; i++)
                snd_pcm_suspend_all(chip->pcm[i]);
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+       return 0;
 }
 
-static void intel8x0_resume(intel8x0_t *chip)
+static int intel8x0_resume(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return 
-EINVAL);
        int i;
 
-       if (! chip->in_suspend ||
-           card->power_state == SNDRV_CTL_POWER_D0)
-               return;
-
        pci_enable_device(chip->pci);
        pci_set_master(chip->pci);
        snd_intel8x0_chip_init(chip, 0);
@@ -2231,43 +2219,9 @@
                if (chip->ac97[i])
                        snd_ac97_resume(chip->ac97[i]);
 
-       chip->in_suspend = 0;
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-}
-
-static int snd_intel8x0_suspend(struct pci_dev *dev, u32 state)
-{
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return 
-ENXIO);
-       intel8x0_suspend(chip);
-       return 0;
-}
-static int snd_intel8x0_resume(struct pci_dev *dev)
-{
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return 
-ENXIO);
-       intel8x0_resume(chip);
        return 0;
 }
-
-/* callback */
-static int snd_intel8x0_set_power_state(snd_card_t *card, unsigned int power_state)
-{
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->power_state_private_data, 
return -ENXIO);
-       switch (power_state) {
-       case SNDRV_CTL_POWER_D0:
-       case SNDRV_CTL_POWER_D1:
-       case SNDRV_CTL_POWER_D2:
-               intel8x0_resume(chip);
-               break;
-       case SNDRV_CTL_POWER_D3hot:
-       case SNDRV_CTL_POWER_D3cold:
-               intel8x0_suspend(chip);
-               break;
-       default:
-               return -EINVAL;
-       }
-       return 0;
-}
-
 #endif /* CONFIG_PM */
 
 #define INTEL8X0_TESTBUF_SIZE  32768   /* enough large for one shot */
@@ -2597,10 +2551,7 @@
                return err;
        }
 
-#ifdef CONFIG_PM
-       card->set_power_state = snd_intel8x0_set_power_state;
-       card->power_state_private_data = chip;
-#endif
+       snd_card_set_pm_callback(card, intel8x0_suspend, intel8x0_resume, chip);
 
        if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
                snd_intel8x0_free(chip);
@@ -2708,16 +2659,14 @@
                snd_card_free(card);
                return err;
        }
-       pci_set_drvdata(pci, chip);
+       pci_set_drvdata(pci, card);
        dev++;
        return 0;
 }
 
 static void __devexit snd_intel8x0_remove(struct pci_dev *pci)
 {
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(pci), return);
-       if (chip)
-               snd_card_free(chip->card);
+       snd_card_free(pci_get_drvdata(pci));
        pci_set_drvdata(pci, NULL);
 }
 
@@ -2726,10 +2675,7 @@
        .id_table = snd_intel8x0_ids,
        .probe = snd_intel8x0_probe,
        .remove = __devexit_p(snd_intel8x0_remove),
-#ifdef CONFIG_PM
-       .suspend = snd_intel8x0_suspend,
-       .resume = snd_intel8x0_resume,
-#endif
+       SND_PCI_PM_CALLBACKS
 };
 
 

Index: intel8x0m.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/intel8x0m.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- intel8x0m.c 7 Apr 2004 17:48:17 -0000       1.2
+++ intel8x0m.c 8 Apr 2004 16:35:00 -0000       1.3
@@ -267,10 +267,6 @@
        u32 int_sta_reg;                /* interrupt status register */
        u32 int_sta_mask;               /* interrupt status mask */
        unsigned int pcm_pos_shift;
-       
-#ifdef CONFIG_PM
-       int in_suspend;
-#endif
 };
 
 static struct pci_device_id snd_intel8x0m_ids[] = {
@@ -1082,72 +1078,29 @@
 /*
  * power management
  */
-static void intel8x0_suspend(intel8x0_t *chip)
+static int intel8x0m_suspend(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return 
-EINVAL);
        int i;
 
-       if (chip->in_suspend ||
-           card->power_state == SNDRV_CTL_POWER_D3hot)
-               return;
-
-       chip->in_suspend = 1;
        for (i = 0; i < chip->pcm_devs; i++)
                snd_pcm_suspend_all(chip->pcm[i]);
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+       return 0;
 }
 
-static void intel8x0_resume(intel8x0_t *chip)
+static int intel8x0m_resume(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
-
-       if (! chip->in_suspend ||
-           card->power_state == SNDRV_CTL_POWER_D0)
-               return;
-
+       intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return 
-EINVAL);
        pci_enable_device(chip->pci);
        pci_set_master(chip->pci);
        snd_intel8x0_chip_init(chip, 0);
        if (chip->ac97)
                snd_ac97_resume(chip->ac97);
 
-       chip->in_suspend = 0;
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-}
-
-static int snd_intel8x0m_suspend(struct pci_dev *dev, u32 state)
-{
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return 
-ENXIO);
-       intel8x0_suspend(chip);
-       return 0;
-}
-static int snd_intel8x0m_resume(struct pci_dev *dev)
-{
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(dev), return 
-ENXIO);
-       intel8x0_resume(chip);
        return 0;
 }
-
-/* callback */
-static int snd_intel8x0_set_power_state(snd_card_t *card, unsigned int power_state)
-{
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->power_state_private_data, 
return -ENXIO);
-       switch (power_state) {
-       case SNDRV_CTL_POWER_D0:
-       case SNDRV_CTL_POWER_D1:
-       case SNDRV_CTL_POWER_D2:
-               intel8x0_resume(chip);
-               break;
-       case SNDRV_CTL_POWER_D3hot:
-       case SNDRV_CTL_POWER_D3cold:
-               intel8x0_suspend(chip);
-               break;
-       default:
-               return -EINVAL;
-       }
-       return 0;
-}
-
 #endif /* CONFIG_PM */
 
 static void snd_intel8x0m_proc_read(snd_info_entry_t * entry,
@@ -1339,10 +1292,7 @@
                return err;
        }
 
-#ifdef CONFIG_PM
-       card->set_power_state = snd_intel8x0_set_power_state;
-       card->power_state_private_data = chip;
-#endif
+       snd_card_set_pm_callback(card, intel8x0m_suspend, intel8x0m_resume, chip);
 
        if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
                snd_intel8x0_free(chip);
@@ -1437,16 +1387,14 @@
                snd_card_free(card);
                return err;
        }
-       pci_set_drvdata(pci, chip);
+       pci_set_drvdata(pci, card);
        dev++;
        return 0;
 }
 
 static void __devexit snd_intel8x0m_remove(struct pci_dev *pci)
 {
-       intel8x0_t *chip = snd_magic_cast(intel8x0_t, pci_get_drvdata(pci), return);
-       if (chip)
-               snd_card_free(chip->card);
+       snd_card_free(pci_get_drvdata(pci));
        pci_set_drvdata(pci, NULL);
 }
 
@@ -1455,10 +1403,7 @@
        .id_table = snd_intel8x0m_ids,
        .probe = snd_intel8x0m_probe,
        .remove = __devexit_p(snd_intel8x0m_remove),
-#ifdef CONFIG_PM
-       .suspend = snd_intel8x0m_suspend,
-       .resume = snd_intel8x0m_resume,
-#endif
+       SND_PCI_PM_CALLBACKS
 };
 
 

Index: maestro3.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/maestro3.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- maestro3.c  7 Apr 2004 17:48:17 -0000       1.49
+++ maestro3.c  8 Apr 2004 16:35:00 -0000       1.50
@@ -2411,16 +2411,13 @@
  * APM support
  */
 #ifdef CONFIG_PM
-
-static void m3_suspend(m3_t *chip)
+static int m3_suspend(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       m3_t *chip = snd_magic_cast(m3_t, card->pm_private_data, return -EINVAL);
        int i, index;
 
        if (chip->suspend_mem == NULL)
-               return;
-       if (card->power_state == SNDRV_CTL_POWER_D3hot)
-               return;
+               return 0;
 
        snd_pcm_suspend_all(chip->pcm);
 
@@ -2441,17 +2438,16 @@
        snd_m3_outw(chip, 0xffff, 0x54);
        snd_m3_outw(chip, 0xffff, 0x56);
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+       return 0;
 }
 
-static void m3_resume(m3_t *chip)
+static int m3_resume(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       m3_t *chip = snd_magic_cast(m3_t, card->pm_private_data, return -EINVAL);
        int i, index;
 
        if (chip->suspend_mem == NULL)
-               return;
-       if (card->power_state == SNDRV_CTL_POWER_D0)
-               return;
+               return 0;
 
        /* first lets just bring everything back. .*/
        snd_m3_outw(chip, 0, 0x54);
@@ -2482,41 +2478,8 @@
        snd_m3_amp_enable(chip, 1);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-}
-
-static int snd_m3_suspend(struct pci_dev *pci, u32 state)
-{
-       m3_t *chip = snd_magic_cast(m3_t, pci_get_drvdata(pci), return -ENXIO);
-       m3_suspend(chip);
-       return 0;
-}
-static int snd_m3_resume(struct pci_dev *pci)
-{
-       m3_t *chip = snd_magic_cast(m3_t, pci_get_drvdata(pci), return -ENXIO);
-       m3_resume(chip);
-       return 0;
-}
-
-/* callback */
-static int snd_m3_set_power_state(snd_card_t *card, unsigned int power_state)
-{
-       m3_t *chip = snd_magic_cast(m3_t, card->power_state_private_data, return 
-ENXIO);
-       switch (power_state) {
-       case SNDRV_CTL_POWER_D0:
-       case SNDRV_CTL_POWER_D1:
-       case SNDRV_CTL_POWER_D2:
-               m3_resume(chip);
-               break;
-       case SNDRV_CTL_POWER_D3hot:
-       case SNDRV_CTL_POWER_D3cold:
-               m3_suspend(chip);
-               break;
-       default:
-               return -EINVAL;
-       }
        return 0;
 }
-
 #endif /* CONFIG_PM */
 
 
@@ -2652,11 +2615,9 @@
 #ifdef CONFIG_PM
        chip->suspend_mem = vmalloc(sizeof(u16) * (REV_B_CODE_MEMORY_LENGTH + 
REV_B_DATA_MEMORY_LENGTH));
        if (chip->suspend_mem == NULL)
-               snd_printk("can't allocate apm buffer\n");
-       else {
-               card->set_power_state = snd_m3_set_power_state;
-               card->power_state_private_data = chip;
-       }
+               snd_printk(KERN_WARNING "can't allocate apm buffer\n");
+       else
+               snd_card_set_pm_callback(card, m3_suspend, m3_resume, chip);
 #endif
 
        if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
@@ -2739,16 +2700,14 @@
                printk(KERN_WARNING "maestro3: no midi support.\n");
 #endif
 
-       pci_set_drvdata(pci, chip);
+       pci_set_drvdata(pci, card);
        dev++;
        return 0;
 }
 
 static void __devexit snd_m3_remove(struct pci_dev *pci)
 {
-       m3_t *chip = snd_magic_cast(m3_t, pci_get_drvdata(pci), return);
-       if (chip)
-               snd_card_free(chip->card);
+       snd_card_free(pci_get_drvdata(pci));
        pci_set_drvdata(pci, NULL);
 }
 
@@ -2757,10 +2716,7 @@
        .id_table = snd_m3_ids,
        .probe = snd_m3_probe,
        .remove = __devexit_p(snd_m3_remove),
-#ifdef CONFIG_PM
-       .suspend = snd_m3_suspend,
-       .resume = snd_m3_resume,
-#endif
+       SND_PCI_PM_CALLBACKS
 };
        
 static int __init alsa_card_m3_init(void)



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to