ALSA: ice1712: Add suspend support for M-Audio ICE1712-based cards
authorOndrej Zary <linux@rainbow-software.org>
Sun, 30 Mar 2014 21:37:31 +0000 (23:37 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 31 Mar 2014 10:26:57 +0000 (12:26 +0200)
Add suspend support for M-Audio cards based on ICE1712 chip.
Tested with M-Audio Audiophile 24/96. S/PDIF will probably not work.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ice1712/delta.c

index 98e5e955261ef4b6d7db73012ab3e5cb961174c9..ed2144eee38ac872d80e263953733639630169b2 100644 (file)
@@ -576,6 +576,30 @@ static struct snd_ak4xxx_private akm_vx442_priv = {
        .mask_flags = 0,
 };
 
+#ifdef CONFIG_PM_SLEEP
+static int snd_ice1712_delta_resume(struct snd_ice1712 *ice)
+{
+       unsigned char akm_backup[AK4XXX_IMAGE_SIZE];
+       /* init codec and restore registers */
+       if (ice->akm_codecs) {
+               memcpy(akm_backup, ice->akm->images, sizeof(akm_backup));
+               snd_akm4xxx_init(ice->akm);
+               memcpy(ice->akm->images, akm_backup, sizeof(akm_backup));
+               snd_akm4xxx_reset(ice->akm, 0);
+       }
+
+       return 0;
+}
+
+static int snd_ice1712_delta_suspend(struct snd_ice1712 *ice)
+{
+       if (ice->akm_codecs) /* reset & mute codec */
+               snd_akm4xxx_reset(ice->akm, 1);
+
+       return 0;
+}
+#endif
+
 static int snd_ice1712_delta_init(struct snd_ice1712 *ice)
 {
        int err;
@@ -622,7 +646,11 @@ static int snd_ice1712_delta_init(struct snd_ice1712 *ice)
                ice->num_total_adcs = 4;
                break;
        }
-
+#ifdef CONFIG_PM_SLEEP
+       ice->pm_resume = snd_ice1712_delta_resume;
+       ice->pm_suspend = snd_ice1712_delta_suspend;
+       ice->pm_suspend_enabled = 1;
+#endif
        /* initialize the SPI clock to high */
        tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA);
        tmp |= ICE1712_DELTA_AP_CCLK;