snd-opti9xx: Implement suspend/resume
PATCH 1/1 snd-opti9xx: Implement suspend/resume
Implement suspend/resume support for Opti 92x and 93x chips. Tested with Opti 929A+AD1848 and Opti 931.
sound/isa/opti9xx/opti92x-ad1848.c +63 -4
@@ -136,8 +136,8 @@ struct snd_opti9xx {#ifdef OPTi93Xunsigned long mc_indir_index;struct resource *res_mc_indir; -struct snd_wss *codec;#endif /* OPTi93X */ +struct snd_wss *codec;unsigned long pwd_reg;spinlock_t lock;
@@ -870,9 +870,7 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card) &codec);if (error <0 )return error; -#ifdef OPTi93X chip->codec = codec; -#endif error =snd_wss_pcm (codec,0 , &pcm);if (error <0 )return error;
@@ -1053,11 +1051,55 @@ static int __devexit snd_opti9xx_isa_remove(struct device *devptr,return 0 ; } +#ifdef CONFIG_PM +static int snd_opti9xx_suspend (struct snd_card *card) +{ +struct snd_opti9xx *chip = card->private_data; + +snd_power_change_state (card, SNDRV_CTL_POWER_D3hot); + chip->codec->suspend (chip->codec); +return 0 ; +} + +static int snd_opti9xx_resume (struct snd_card *card) +{ +struct snd_opti9xx *chip = card->private_data; +int error, xdma2; +#if defined(CS4231 ) || defined(OPTi93X) + xdma2 = dma2; +#else + xdma2 =-1 ; +#endif + + error =snd_opti9xx_configure (chip, port, irq, dma1, xdma2, + mpu_port, mpu_irq); +if (error) +return error; + chip->codec->resume (chip->codec); +snd_power_change_state (card,SNDRV_CTL_POWER_D0 ); +return 0 ; +} + +static int snd_opti9xx_isa_suspend (struct device *dev,unsigned int n, +pm_message_t state) +{ +return snd_opti9xx_suspend (dev_get_drvdata (dev)); +} + +static int snd_opti9xx_isa_resume (struct device *dev,unsigned int n) +{ +return snd_opti9xx_resume (dev_get_drvdata (dev)); +} +#endif +static struct isa_driver snd_opti9xx_driver = { .match = snd_opti9xx_isa_match, .probe = snd_opti9xx_isa_probe, .remove =__devexit_p (snd_opti9xx_isa_remove), -/* FIXME: suspend/resume */ +#ifdef CONFIG_PM + .suspend = snd_opti9xx_isa_suspend, + .resume = snd_opti9xx_isa_resume, +#endif .driver = { .name =DEV_NAME },
@@ -1123,12 +1165,29 @@ static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) snd_opti9xx_pnp_is_probed =0 ; } +#ifdef CONFIG_PM +static int snd_opti9xx_pnp_suspend (struct pnp_card_link *pcard, +pm_message_t state) +{ +return snd_opti9xx_suspend (pnp_get_card_drvdata (pcard)); +} + +static int snd_opti9xx_pnp_resume (struct pnp_card_link *pcard) +{ +return snd_opti9xx_resume (pnp_get_card_drvdata (pcard)); +} +#endif +static struct pnp_card_driver opti9xx_pnpc_driver = { .flags =PNP_DRIVER_RES_DISABLE , .name ="opti9xx" , .id_table = snd_opti9xx_pnpids, .probe = snd_opti9xx_pnp_probe, .remove =__devexit_p (snd_opti9xx_pnp_remove), +#ifdef CONFIG_PM + .suspend = snd_opti9xx_pnp_suspend, + .resume = snd_opti9xx_pnp_resume, +#endif };#endif
Signature · 1 line
Ondrej Zary
Hello Ondrej,
Quoted 5 lines · Ondrej Zary
Implement suspend/resume support for Opti 92x and 93x chips. Tested with Opti 929A+AD1848 and Opti 931.
Signed-off-by Ondrej Zary<[email protected]>
<snip...>
Quoted 12 lines
sound/isa/opti9xx/opti92x-ad1848.c +12
-0+#ifdef CONFIG_PM +static int snd_opti9xx_suspend (struct snd_card *card) +{ +struct snd_opti9xx *chip = card->private_data; + +snd_power_change_state (card, SNDRV_CTL_POWER_D3hot); + chip->codec->suspend (chip->codec); +return 0 ; +} + +static int snd_opti9xx_resume (struct snd_card *card) +{
sound/isa/opti9xx/opti92x-ad1848.c static int __devexit snd_opti9xx_isa_remove(struct device *devptr, · line 1075
Quoted 10 lines
sound/isa/opti9xx/opti92x-ad1848.c +10
-0+struct snd_opti9xx *chip = card->private_data; +int error, xdma2; +#if defined(CS4231 ) || defined(OPTi93X) + xdma2 = dma2; +#else + xdma2 =-1 ; +#endif + + error =snd_opti9xx_configure (chip, port, irq, dma1, xdma2, + mpu_port, mpu_irq);
dma1??
sound/isa/opti9xx/opti92x-ad1848.c static int __devexit snd_opti9xx_isa_remove(struct device *devptr, · line 1077
Quoted 2 lines
sound/isa/opti9xx/opti92x-ad1848.c +2
-0+if (error) +return error;
Variable name is not convincing. You are assuming that the function is returning error.
sound/isa/opti9xx/opti92x-ad1848.c static int __devexit snd_opti9xx_isa_remove(struct device *devptr, · line 1079
Quoted 2 lines
sound/isa/opti9xx/opti92x-ad1848.c +2
-0+ chip->codec->resume (chip->codec); +snd_power_change_state (card,SNDRV_CTL_POWER_D0 );
blank line required.
Quoted 37 lines
sound/isa/opti9xx/opti92x-ad1848.c +25
-1+return 0 ; +} + +static int snd_opti9xx_isa_suspend (struct device *dev,unsigned int n, +pm_message_t state) +{ +return snd_opti9xx_suspend (dev_get_drvdata (dev)); +} + +static int snd_opti9xx_isa_resume (struct device *dev,unsigned int n) +{ +return snd_opti9xx_resume (dev_get_drvdata (dev)); +} +#endif +static struct isa_driver snd_opti9xx_driver = { .match = snd_opti9xx_isa_match, .probe = snd_opti9xx_isa_probe, .remove =__devexit_p (snd_opti9xx_isa_remove), -/* FIXME: suspend/resume */ +#ifdef CONFIG_PM + .suspend = snd_opti9xx_isa_suspend, + .resume = snd_opti9xx_isa_resume, +#endif .driver = { .name =DEV_NAME },@@ -1123,12 +1165,29 @@ static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) snd_opti9xx_pnp_is_probed =0 ; } +#ifdef CONFIG_PM +static int snd_opti9xx_pnp_suspend (struct pnp_card_link *pcard, +pm_message_t state) +{ +return snd_opti9xx_suspend (pnp_get_card_drvdata (pcard)); +}
sound/isa/opti9xx/opti92x-ad1848.c static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) · line 1183
Quoted 10 lines
sound/isa/opti9xx/opti92x-ad1848.c +7
-0+ +static int snd_opti9xx_pnp_resume (struct pnp_card_link *pcard) +{ +return snd_opti9xx_resume (pnp_get_card_drvdata (pcard)); +} +#endif +static struct pnp_card_driver opti9xx_pnpc_driver = { .flags =PNP_DRIVER_RES_DISABLE , .name ="opti9xx" ,
Why this is opti why not OPTi
~Rajeev
Quoted 11 lines
sound/isa/opti9xx/opti92x-ad1848.c +4
-0.id_table = snd_opti9xx_pnpids, .probe = snd_opti9xx_pnp_probe, .remove = __devexit_p(snd_opti9xx_pnp_remove), +#ifdef CONFIG_PM + .suspend = snd_opti9xx_pnp_suspend, + .resume = snd_opti9xx_pnp_resume, +#endif };#endif
Quoted 26 lines · Rajeev kumar
Hello Ondrej,
Quoted 4 lines · Ondrej Zary
Implement suspend/resume support for Opti 92x and 93x chips. Tested with Opti 929A+AD1848 and Opti 931.
Signed-off-by Ondrej Zary<[email protected]><snip...>
Quoted 16 lines
sound/isa/opti9xx/opti92x-ad1848.c +16
-0+#ifdef CONFIG_PM +static int snd_opti9xx_suspend (struct snd_card *card) +{ +struct snd_opti9xx *chip = card->private_data; + +snd_power_change_state (card, SNDRV_CTL_POWER_D3hot); + chip->codec->suspend (chip->codec); +return 0 ; +} + +static int snd_opti9xx_resume (struct snd_card *card) +{ +struct snd_opti9xx *chip = card->private_data; +int error, xdma2; +#if defined(CS4231 ) || defined(OPTi93X) + xdma2 = dma2;
Quoted 8 lines
sound/isa/opti9xx/opti92x-ad1848.c static int __devexit snd_opti9xx_isa_remove(struct device *devptr, · line 1075
Quoted 6 lines
sound/isa/opti9xx/opti92x-ad1848.c +6
-0+#else + xdma2 =-1 ; +#endif + + error =snd_opti9xx_configure (chip, port, irq, dma1, xdma2, + mpu_port, mpu_irq);dma1??
What's wrong with that? It's a global variable. The driver is old and only supports one card.
Quoted 5 lines
sound/isa/opti9xx/opti92x-ad1848.c static int __devexit snd_opti9xx_isa_remove(struct device *devptr, · line 1077
Quoted 2 lines
sound/isa/opti9xx/opti92x-ad1848.c +2
-0+if (error) +return error;Variable name is not convincing. You are assuming that the function is returning error.
This is consistent with other code in the driver.
Quoted 5 lines
sound/isa/opti9xx/opti92x-ad1848.c static int __devexit snd_opti9xx_isa_remove(struct device *devptr, · line 1079
Quoted 3 lines
sound/isa/opti9xx/opti92x-ad1848.c +2
-0+ chip->codec->resume (chip->codec); +snd_power_change_state (card,SNDRV_CTL_POWER_D0 );blank line required.
This is consistent with other code in the driver.
Quoted 42 lines
Quoted 42 lines
sound/isa/opti9xx/opti92x-ad1848.c +29
-1+return 0 ; +} + +static int snd_opti9xx_isa_suspend (struct device *dev,unsigned int n, +pm_message_t state) +{ +return snd_opti9xx_suspend (dev_get_drvdata (dev)); +} + +static int snd_opti9xx_isa_resume (struct device *dev,unsigned int n) +{ +return snd_opti9xx_resume (dev_get_drvdata (dev)); +} +#endif +static struct isa_driver snd_opti9xx_driver = { .match = snd_opti9xx_isa_match, .probe = snd_opti9xx_isa_probe, .remove =__devexit_p (snd_opti9xx_isa_remove), -/* FIXME: suspend/resume */ +#ifdef CONFIG_PM + .suspend = snd_opti9xx_isa_suspend, + .resume = snd_opti9xx_isa_resume, +#endif .driver = { .name =DEV_NAME },@@ -1123,12 +1165,29 @@ static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) snd_opti9xx_pnp_is_probed =0 ; } +#ifdef CONFIG_PM +static int snd_opti9xx_pnp_suspend (struct pnp_card_link *pcard, +pm_message_t state) +{ +return snd_opti9xx_suspend (pnp_get_card_drvdata (pcard)); +} + +static int snd_opti9xx_pnp_resume (struct pnp_card_link *pcard) +{ +return snd_opti9xx_resume (pnp_get_card_drvdata (pcard));
Quoted 8 lines
sound/isa/opti9xx/opti92x-ad1848.c static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) · line 1183
Quoted 6 lines
sound/isa/opti9xx/opti92x-ad1848.c +3
-0+} +#endif +static struct pnp_card_driver opti9xx_pnpc_driver = { .flags =PNP_DRIVER_RES_DISABLE , .name ="opti9xx" ,Why this is opti why not OPTi
It's not my code. This patch is just adding suspend/resume and not changing anything else.
Quoted 11 lines
~Rajeev
Quoted 9 lines
sound/isa/opti9xx/opti92x-ad1848.c +4
-0.id_table = snd_opti9xx_pnpids, .probe = snd_opti9xx_pnp_probe, .remove = __devexit_p(snd_opti9xx_pnp_remove), +#ifdef CONFIG_PM + .suspend = snd_opti9xx_pnp_suspend, + .resume = snd_opti9xx_pnp_resume, +#endif };#endif
Signature · 1 line
Ondrej Zary
Quoted 8 lines · Ondrej Zary
Quoted 5 lines
Quoted 5 lines
static struct
pnp_card_driveropti9xx_pnpc_driver= {Quoted 2 lines
Quoted 2 lines
.flags =
PNP_DRIVER_RES_DISABLE,
.name = "opti9xx",Why this is opti why not OPTi
It's not my code. This patch is just adding suspend/resume and not changing anything else.
Oops, sorry for this comment. I thought this line is changed by you.
~Rajeev
At Tue, 17 Jul 2012 09:16:44 +0200,
Quoted 5 lines · Ondrej Zary
Implement suspend/resume support for Opti 92x and 93x chips. Tested with Opti 929A+AD1848 and Opti 931.
Signed-off-by Ondrej Zary <[email protected]>
Applied now. Thanks.
Takashi
Quoted 118 lines
sound/isa/opti9xx/opti92x-ad1848.c +63
-4@@ -136,8 +136,8 @@ struct snd_opti9xx {#ifdef OPTi93Xunsigned long mc_indir_index;struct resource *res_mc_indir; -struct snd_wss *codec;#endif /* OPTi93X */ +struct snd_wss *codec;unsigned long pwd_reg;spinlock_t lock;@@ -870,9 +870,7 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card) &codec);if (error <0 )return error; -#ifdef OPTi93X chip->codec = codec; -#endif error =snd_wss_pcm (codec,0 , &pcm);if (error <0 )return error;@@ -1053,11 +1051,55 @@ static int __devexit snd_opti9xx_isa_remove(struct device *devptr,return 0 ; } +#ifdef CONFIG_PM +static int snd_opti9xx_suspend (struct snd_card *card) +{ +struct snd_opti9xx *chip = card->private_data; + +snd_power_change_state (card, SNDRV_CTL_POWER_D3hot); + chip->codec->suspend (chip->codec); +return 0 ; +} + +static int snd_opti9xx_resume (struct snd_card *card) +{ +struct snd_opti9xx *chip = card->private_data; +int error, xdma2; +#if defined(CS4231 ) || defined(OPTi93X) + xdma2 = dma2; +#else + xdma2 =-1 ; +#endif + + error =snd_opti9xx_configure (chip, port, irq, dma1, xdma2, + mpu_port, mpu_irq); +if (error) +return error; + chip->codec->resume (chip->codec); +snd_power_change_state (card,SNDRV_CTL_POWER_D0 ); +return 0 ; +} + +static int snd_opti9xx_isa_suspend (struct device *dev,unsigned int n, +pm_message_t state) +{ +return snd_opti9xx_suspend (dev_get_drvdata (dev)); +} + +static int snd_opti9xx_isa_resume (struct device *dev,unsigned int n) +{ +return snd_opti9xx_resume (dev_get_drvdata (dev)); +} +#endif +static struct isa_driver snd_opti9xx_driver = { .match = snd_opti9xx_isa_match, .probe = snd_opti9xx_isa_probe, .remove =__devexit_p (snd_opti9xx_isa_remove), -/* FIXME: suspend/resume */ +#ifdef CONFIG_PM + .suspend = snd_opti9xx_isa_suspend, + .resume = snd_opti9xx_isa_resume, +#endif .driver = { .name =DEV_NAME },@@ -1123,12 +1165,29 @@ static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) snd_opti9xx_pnp_is_probed =0 ; } +#ifdef CONFIG_PM +static int snd_opti9xx_pnp_suspend (struct pnp_card_link *pcard, +pm_message_t state) +{ +return snd_opti9xx_suspend (pnp_get_card_drvdata (pcard)); +} + +static int snd_opti9xx_pnp_resume (struct pnp_card_link *pcard) +{ +return snd_opti9xx_resume (pnp_get_card_drvdata (pcard)); +} +#endif +static struct pnp_card_driver opti9xx_pnpc_driver = { .flags =PNP_DRIVER_RES_DISABLE , .name ="opti9xx" , .id_table = snd_opti9xx_pnpids, .probe = snd_opti9xx_pnp_probe, .remove =__devexit_p (snd_opti9xx_pnp_remove), +#ifdef CONFIG_PM + .suspend = snd_opti9xx_pnp_suspend, + .resume = snd_opti9xx_pnp_resume, +#endif };#endif Signature · 6 lines
-- Ondrej Zary _______________________________________________ Alsa-devel mailing list [email protected] http://mailman.alsa-project.org/mailman/listinfo/alsa-devel