aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/isa/azt2320.c46
1 files changed, 37 insertions, 9 deletions
diff --git a/sound/isa/azt2320.c b/sound/isa/azt2320.c
index db4e7334a67d..a530691bf4f7 100644
--- a/sound/isa/azt2320.c
+++ b/sound/isa/azt2320.c
@@ -93,6 +93,7 @@ struct snd_card_azt2320 {
93 int dev_no; 93 int dev_no;
94 struct pnp_dev *dev; 94 struct pnp_dev *dev;
95 struct pnp_dev *devmpu; 95 struct pnp_dev *devmpu;
96 struct snd_cs4231 *chip;
96}; 97};
97 98
98static struct pnp_card_device_id snd_azt2320_pnpids[] = { 99static struct pnp_card_device_id snd_azt2320_pnpids[] = {
@@ -329,11 +330,33 @@ static int __devinit snd_azt2320_pnp_detect(struct pnp_card_link *card,
329 330
330static void __devexit snd_azt2320_pnp_remove(struct pnp_card_link * pcard) 331static void __devexit snd_azt2320_pnp_remove(struct pnp_card_link * pcard)
331{ 332{
332 struct snd_card *card = (struct snd_card *) pnp_get_card_drvdata(pcard); 333 snd_card_free(pnp_get_card_drvdata(pcard));
334 pnp_set_card_drvdata(pcard, NULL);
335}
336
337#ifdef CONFIG_PM
338static int snd_azt2320_pnp_suspend(struct pnp_card_link *pcard, pm_message_t state)
339{
340 struct snd_card *card = pnp_get_card_drvdata(pcard);
341 struct snd_card_azt2320 *acard = card->private_data;
342 struct snd_cs4231 *chip = acard->chip;
343
344 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
345 chip->suspend(chip);
346 return 0;
347}
348
349static int snd_azt2320_pnp_resume(struct pnp_card_link *pcard)
350{
351 struct snd_card *card = pnp_get_card_drvdata(pcard);
352 struct snd_card_azt2320 *acard = card->private_data;
353 struct snd_cs4231 *chip = acard->chip;
333 354
334 snd_card_disconnect(card); 355 chip->resume(chip);
335 snd_card_free_in_thread(card); 356 snd_power_change_state(card, SNDRV_CTL_POWER_D0);
357 return 0;
336} 358}
359#endif
337 360
338static struct pnp_card_driver azt2320_pnpc_driver = { 361static struct pnp_card_driver azt2320_pnpc_driver = {
339 .flags = PNP_DRIVER_RES_DISABLE, 362 .flags = PNP_DRIVER_RES_DISABLE,
@@ -341,20 +364,25 @@ static struct pnp_card_driver azt2320_pnpc_driver = {
341 .id_table = snd_azt2320_pnpids, 364 .id_table = snd_azt2320_pnpids,
342 .probe = snd_azt2320_pnp_detect, 365 .probe = snd_azt2320_pnp_detect,
343 .remove = __devexit_p(snd_azt2320_pnp_remove), 366 .remove = __devexit_p(snd_azt2320_pnp_remove),
367#ifdef CONFIG_PM
368 .suspend = snd_azt2320_pnp_suspend,
369 .resume = snd_azt2320_pnp_resume,
370#endif
344}; 371};
345 372
346static int __init alsa_card_azt2320_init(void) 373static int __init alsa_card_azt2320_init(void)
347{ 374{
348 int cards = 0; 375 int cards;
349 376
350 cards += pnp_register_card_driver(&azt2320_pnpc_driver); 377 cards = pnp_register_card_driver(&azt2320_pnpc_driver);
351#ifdef MODULE 378 if (cards <= 0) {
352 if (!cards) {
353 pnp_unregister_card_driver(&azt2320_pnpc_driver); 379 pnp_unregister_card_driver(&azt2320_pnpc_driver);
380#ifdef MODULE
354 snd_printk(KERN_ERR "no AZT2320 based soundcards found\n"); 381 snd_printk(KERN_ERR "no AZT2320 based soundcards found\n");
355 }
356#endif 382#endif
357 return cards ? 0 : -ENODEV; 383 return -ENODEV;
384 }
385 return 0;
358} 386}
359 387
360static void __exit alsa_card_azt2320_exit(void) 388static void __exit alsa_card_azt2320_exit(void)