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