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