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