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

Modified Files:
        es18xx.c opl3sa2.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: es18xx.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/isa/es18xx.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- es18xx.c    7 Apr 2004 17:48:13 -0000       1.45
+++ es18xx.c    8 Apr 2004 16:34:59 -0000       1.46
@@ -124,7 +124,6 @@
        spinlock_t mixer_lock;
        spinlock_t ctrl_lock;
 #ifdef CONFIG_PM
-       struct pm_dev *pm_dev;
        unsigned char pm_reg;
 #endif
 };
@@ -1610,12 +1609,9 @@
 
 /* Power Management support functions */
 #ifdef CONFIG_PM
-static void snd_es18xx_suspend(es18xx_t *chip)
+static int snd_es18xx_suspend(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
-
-       if (card->power_state == SNDRV_CTL_POWER_D3hot)
-               return;
+       es18xx_t *chip = snd_magic_cast(es18xx_t, card->pm_private_data, return 
-EINVAL);
 
        snd_pcm_suspend_all(chip->pcm);
 
@@ -1626,63 +1622,23 @@
        snd_es18xx_write(chip, ES18XX_PM, chip->pm_reg ^= ES18XX_PM_SUS);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+       return 0;
 }
 
-static void snd_es18xx_resume(es18xx_t *chip)
+static int snd_es18xx_resume(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
-
-       if (card->power_state == SNDRV_CTL_POWER_D0)
-               return;
+       es18xx_t *chip = snd_magic_cast(es18xx_t, card->pm_private_data, return 
-EINVAL);
 
        /* restore PM register, we won't wake till (not 0x07) i/o activity though */
        snd_es18xx_write(chip, ES18XX_PM, chip->pm_reg ^= ES18XX_PM_FM);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-}
-
-/* callback for control API */
-static int snd_es18xx_set_power_state(snd_card_t *card, unsigned int power_state)
-{
-       es18xx_t *chip = (es18xx_t *) card->power_state_private_data;
-       switch (power_state) {
-       case SNDRV_CTL_POWER_D0:
-       case SNDRV_CTL_POWER_D1:
-       case SNDRV_CTL_POWER_D2:
-               snd_es18xx_resume(chip);
-               break;
-       case SNDRV_CTL_POWER_D3hot:
-       case SNDRV_CTL_POWER_D3cold:
-               snd_es18xx_suspend(chip);
-               break;
-       default:
-               return -EINVAL;
-       }
-       return 0;
-}
-
-static int snd_es18xx_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data)
-{
-       es18xx_t *chip = snd_magic_cast(es18xx_t, dev->data, return 0);
-
-       switch (rqst) {
-       case PM_SUSPEND:
-               snd_es18xx_suspend(chip);
-               break;
-       case PM_RESUME:
-               snd_es18xx_resume(chip);
-               break;
-       }
        return 0;
 }
 #endif /* CONFIG_PM */
 
 static int snd_es18xx_free(es18xx_t *chip)
 {
-#ifdef CONFIG_PM
-       if (chip->pm_dev)
-               pm_unregister(chip->pm_dev);
-#endif
        if (chip->res_port) {
                release_resource(chip->res_port);
                kfree_nocheck(chip->res_port);
@@ -2150,16 +2106,9 @@
                chip->rmidi = rmidi;
        }
 
-#ifdef CONFIG_PM
        /* Power Management */
-       chip->pm_dev = pm_register(PM_ISA_DEV, 0, snd_es18xx_pm_callback);
-       if (chip->pm_dev) {
-               chip->pm_dev->data = chip;
-               /* set control api callback */
-               card->set_power_state = snd_es18xx_set_power_state;
-               card->power_state_private_data = chip;
-       }
-#endif
+       snd_card_set_isa_pm_callback(card, snd_es18xx_suspend, snd_es18xx_resume, 
chip);
+
        if ((err = snd_card_register(card)) < 0) {
                snd_card_free(card);
                return err;

Index: opl3sa2.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/isa/opl3sa2.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- opl3sa2.c   7 Apr 2004 17:48:13 -0000       1.33
+++ opl3sa2.c   8 Apr 2004 16:34:59 -0000       1.34
@@ -152,7 +152,6 @@
        snd_kcontrol_t *master_switch;
        snd_kcontrol_t *master_volume;
 #ifdef CONFIG_PM
-       struct pm_dev *pm_dev;
        void (*cs4231_suspend)(cs4231_t *);
        void (*cs4231_resume)(cs4231_t *);
 #endif
@@ -548,12 +547,9 @@
 
 /* Power Management support functions */
 #ifdef CONFIG_PM
-static void snd_opl3sa2_suspend(opl3sa2_t *chip)
+static int snd_opl3sa2_suspend(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
-
-       if (card->power_state == SNDRV_CTL_POWER_D3hot)
-               return;
+       opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, card->pm_private_data, return 
-EINVAL);
 
        snd_pcm_suspend_all(chip->cs4231->pcm); /* stop before saving regs */
        chip->cs4231_suspend(chip->cs4231);
@@ -562,16 +558,14 @@
        snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+       return 0;
 }
 
-static void snd_opl3sa2_resume(opl3sa2_t *chip)
+static int snd_opl3sa2_resume(snd_card_t *card, unsigned int state)
 {
-       snd_card_t *card = chip->card;
+       opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, card->pm_private_data, return 
-EINVAL);
        int i;
 
-       if (card->power_state == SNDRV_CTL_POWER_D0)
-               return;
-
        /* power up */
        snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0);
 
@@ -588,43 +582,8 @@
        chip->cs4231_resume(chip->cs4231);
 
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
-}
-
-/* callback for control API */
-static int snd_opl3sa2_set_power_state(snd_card_t *card, unsigned int power_state)
-{
-       opl3sa2_t *chip = (opl3sa2_t *) card->power_state_private_data;
-       switch (power_state) {
-       case SNDRV_CTL_POWER_D0:
-       case SNDRV_CTL_POWER_D1:
-       case SNDRV_CTL_POWER_D2:
-               snd_opl3sa2_resume(chip);
-               break;
-       case SNDRV_CTL_POWER_D3hot:
-       case SNDRV_CTL_POWER_D3cold:
-               snd_opl3sa2_suspend(chip);
-               break;
-       default:
-               return -EINVAL;
-       }
        return 0;
 }
-
-static int snd_opl3sa2_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data)
-{
-       opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, dev->data, return 0);
-
-       switch (rqst) {
-       case PM_SUSPEND:
-               snd_opl3sa2_suspend(chip);
-               break;
-       case PM_RESUME:
-               snd_opl3sa2_resume(chip);
-               break;
-       }
-       return 0;
-}
-
 #endif /* CONFIG_PM */
 
 #ifdef CONFIG_PNP
@@ -689,10 +648,6 @@
 
 static int snd_opl3sa2_free(opl3sa2_t *chip)
 {
-#ifdef CONFIG_PM
-       if (chip->pm_dev)
-               pm_unregister(chip->pm_dev);
-#endif
        if (chip->irq >= 0)
                free_irq(chip->irq, (void *)chip);
        if (chip->res_port) {
@@ -817,22 +772,12 @@
                        goto __error;
        }
 #ifdef CONFIG_PM
-       /* Power Management */
-       chip->pm_dev = pm_register(PM_ISA_DEV, 0, snd_opl3sa2_pm_callback);
-       if (chip->pm_dev) {
-               chip->pm_dev->data = chip;
-               /* remember callbacks for cs4231 - they are called inside
-                * opl3sa2 pm callback
-                */
-               chip->cs4231_suspend = chip->cs4231->suspend;
-               chip->cs4231_resume = chip->cs4231->resume;
-               /* now clear callbacks for cs4231 */
-               chip->cs4231->suspend = NULL;
-               chip->cs4231->resume = NULL;
-               /* set control api callback */
-               card->set_power_state = snd_opl3sa2_set_power_state;
-               card->power_state_private_data = chip;
-       }
+       chip->cs4231_suspend = chip->cs4231->suspend;
+       chip->cs4231_resume = chip->cs4231->resume;
+       /* now clear callbacks for cs4231 */
+       chip->cs4231->suspend = NULL;
+       chip->cs4231->resume = NULL;
+       snd_card_set_isa_pm_callback(card, snd_opl3sa2_suspend, snd_opl3sa2_resume, 
chip);
 #endif
 
        sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",



-------------------------------------------------------
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