]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ALSA: ca0106 - Don't override the values at resume
authorTakashi Iwai <tiwai@suse.de>
Fri, 19 Dec 2008 11:04:06 +0000 (12:04 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 19 Dec 2008 11:04:06 +0000 (12:04 +0100)
Don't override some values in ca0106_init_chip() at resume.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ca0106/ca0106_main.c

index c13aa41a35b497c10a75f3d0611e69c2adfcf82d..2c71f9b896cd1c7d860789ac579dec3ef58d8814 100644 (file)
@@ -1303,9 +1303,10 @@ static unsigned int i2c_adc_init[][2] = {
        { 0x15, ADC_MUX_LINEIN },  /* ADC Mixer control */
 };
 
-static void ca0106_init_chip(struct snd_ca0106 *chip)
+static void ca0106_init_chip(struct snd_ca0106 *chip, int resume)
 {
        int ch;
+       unsigned int def_bits;
 
        outl(0, chip->port + INTE);
 
@@ -1323,30 +1324,21 @@ static void ca0106_init_chip(struct snd_ca0106 *chip)
         *  AN                = 0     (Audio data)
         *  P                 = 0     (Consumer)
         */
-       chip->spdif_bits[0] =
+       def_bits =
                SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
                SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
                SPCS_GENERATIONSTATUS | 0x00001200 |
                0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
-       snd_ca0106_ptr_write(chip, SPCS0, 0, chip->spdif_bits[0]);
+       if (!resume) {
+               chip->spdif_bits[0] = def_bits;
+               chip->spdif_bits[1] = def_bits;
+               chip->spdif_bits[2] = def_bits;
+               chip->spdif_bits[3] = def_bits;
+       }
        /* Only SPCS1 has been tested */
-       chip->spdif_bits[1] =
-               SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
-               SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
-               SPCS_GENERATIONSTATUS | 0x00001200 |
-               0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
        snd_ca0106_ptr_write(chip, SPCS1, 0, chip->spdif_bits[1]);
-       chip->spdif_bits[2] =
-               SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
-               SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
-               SPCS_GENERATIONSTATUS | 0x00001200 |
-               0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
+       snd_ca0106_ptr_write(chip, SPCS0, 0, chip->spdif_bits[0]);
        snd_ca0106_ptr_write(chip, SPCS2, 0, chip->spdif_bits[2]);
-       chip->spdif_bits[3] =
-               SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
-               SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
-               SPCS_GENERATIONSTATUS | 0x00001200 |
-               0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
        snd_ca0106_ptr_write(chip, SPCS3, 0, chip->spdif_bits[3]);
 
         snd_ca0106_ptr_write(chip, PLAYBACK_MUTE, 0, 0x00fc0000);
@@ -1407,17 +1399,20 @@ static void ca0106_init_chip(struct snd_ca0106 *chip)
                /* Select MIC, Line in, TAD in, AUX in */
                snd_ca0106_ptr_write(chip, CAPTURE_SOURCE, 0x0, 0x333300e4);
                /* Default to CAPTURE_SOURCE to i2s in */
-               chip->capture_source = 3;
+               if (!resume)
+                       chip->capture_source = 3;
        } else if (chip->details->ac97 == 1) {
                /* Default to AC97 in */
                snd_ca0106_ptr_write(chip, CAPTURE_SOURCE, 0x0, 0x444400e4);
                /* Default to CAPTURE_SOURCE to AC97 in */
-               chip->capture_source = 4;
+               if (!resume)
+                       chip->capture_source = 4;
        } else {
                /* Select MIC, Line in, TAD in, AUX in */
                snd_ca0106_ptr_write(chip, CAPTURE_SOURCE, 0x0, 0x333300e4);
                /* Default to Set CAPTURE_SOURCE to i2s in */
-               chip->capture_source = 3;
+               if (!resume)
+                       chip->capture_source = 3;
        }
 
        if (chip->details->gpio_type == 2) {
@@ -1583,7 +1578,7 @@ static int __devinit snd_ca0106_create(int dev, struct snd_card *card,
        sprintf(card->longname, "%s at 0x%lx irq %i",
                c->name, chip->port, chip->irq);
 
-       ca0106_init_chip(chip);
+       ca0106_init_chip(chip, 0);
 
        err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
        if (err < 0) {
@@ -1784,7 +1779,7 @@ static int snd_ca0106_resume(struct pci_dev *pci)
 
        pci_set_master(pci);
 
-       ca0106_init_chip(chip);
+       ca0106_init_chip(chip, 1);
 
        snd_ac97_resume(chip->ac97);
        snd_ca0106_mixer_resume(chip);