Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86effd7e authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: ca0106 - Don't override the values at resume



Don't override some values in ca0106_init_chip() at resume.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 44411e07
Loading
Loading
Loading
Loading
+18 −23
Original line number Diff line number Diff line
@@ -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,16 +1399,19 @@ 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 */
		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 */
		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 */
		if (!resume)
			chip->capture_source = 3;
	}

@@ -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);