From 2d2272207f1e8c6d4c995ec5d2b5204877bf87fc Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Thu, 17 Nov 2005 17:04:12 +0100 Subject: [PATCH] --- yaml --- r: 16082 b: refs/heads/master c: b6cc25cae365bada36c9f006e314b998eb2c5e7c h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/sound/isa/azt2320.c | 46 +++++++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 906c7d5512e1..1de0728da3c5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 480615f33fa48e1a4db33e40b21d4009250f5b23 +refs/heads/master: b6cc25cae365bada36c9f006e314b998eb2c5e7c diff --git a/trunk/sound/isa/azt2320.c b/trunk/sound/isa/azt2320.c index db4e7334a67d..a530691bf4f7 100644 --- a/trunk/sound/isa/azt2320.c +++ b/trunk/sound/isa/azt2320.c @@ -93,6 +93,7 @@ struct snd_card_azt2320 { int dev_no; struct pnp_dev *dev; struct pnp_dev *devmpu; + struct snd_cs4231 *chip; }; static struct pnp_card_device_id snd_azt2320_pnpids[] = { @@ -329,11 +330,33 @@ static int __devinit snd_azt2320_pnp_detect(struct pnp_card_link *card, static void __devexit snd_azt2320_pnp_remove(struct pnp_card_link * pcard) { - struct snd_card *card = (struct snd_card *) pnp_get_card_drvdata(pcard); + snd_card_free(pnp_get_card_drvdata(pcard)); + pnp_set_card_drvdata(pcard, NULL); +} + +#ifdef CONFIG_PM +static int snd_azt2320_pnp_suspend(struct pnp_card_link *pcard, pm_message_t state) +{ + struct snd_card *card = pnp_get_card_drvdata(pcard); + struct snd_card_azt2320 *acard = card->private_data; + struct snd_cs4231 *chip = acard->chip; + + snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); + chip->suspend(chip); + return 0; +} + +static int snd_azt2320_pnp_resume(struct pnp_card_link *pcard) +{ + struct snd_card *card = pnp_get_card_drvdata(pcard); + struct snd_card_azt2320 *acard = card->private_data; + struct snd_cs4231 *chip = acard->chip; - snd_card_disconnect(card); - snd_card_free_in_thread(card); + chip->resume(chip); + snd_power_change_state(card, SNDRV_CTL_POWER_D0); + return 0; } +#endif static struct pnp_card_driver azt2320_pnpc_driver = { .flags = PNP_DRIVER_RES_DISABLE, @@ -341,20 +364,25 @@ static struct pnp_card_driver azt2320_pnpc_driver = { .id_table = snd_azt2320_pnpids, .probe = snd_azt2320_pnp_detect, .remove = __devexit_p(snd_azt2320_pnp_remove), +#ifdef CONFIG_PM + .suspend = snd_azt2320_pnp_suspend, + .resume = snd_azt2320_pnp_resume, +#endif }; static int __init alsa_card_azt2320_init(void) { - int cards = 0; + int cards; - cards += pnp_register_card_driver(&azt2320_pnpc_driver); -#ifdef MODULE - if (!cards) { + cards = pnp_register_card_driver(&azt2320_pnpc_driver); + if (cards <= 0) { pnp_unregister_card_driver(&azt2320_pnpc_driver); +#ifdef MODULE snd_printk(KERN_ERR "no AZT2320 based soundcards found\n"); - } #endif - return cards ? 0 : -ENODEV; + return -ENODEV; + } + return 0; } static void __exit alsa_card_azt2320_exit(void)