Skip to content

Commit

Permalink
ALSA: snd-atmel-ac97c: do a proper reset of the external codec
Browse files Browse the repository at this point in the history
This patch will enable the AC97C before resetting the external codec,
leaving the AC97C disabled will result in floating I/O lines that can
affect the reset procedure.

Signed-off-by: Hans-Christian Egtvedt <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
Hans-Christian Egtvedt authored and tiwai committed Apr 6, 2009
1 parent df16358 commit 81baf3a
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions sound/atmel/ac97c.c
Original file line number Diff line number Diff line change
Expand Up @@ -730,17 +730,17 @@ static bool filter(struct dma_chan *chan, void *slave)

static void atmel_ac97c_reset(struct atmel_ac97c *chip)
{
ac97c_writel(chip, MR, AC97C_MR_WRST);
ac97c_writel(chip, MR, 0);
ac97c_writel(chip, MR, AC97C_MR_ENA);
ac97c_writel(chip, CAMR, 0);
ac97c_writel(chip, COMR, 0);

if (gpio_is_valid(chip->reset_pin)) {
gpio_set_value(chip->reset_pin, 0);
/* AC97 v2.2 specifications says minimum 1 us. */
udelay(10);
udelay(2);
gpio_set_value(chip->reset_pin, 1);
}

udelay(1);
ac97c_writel(chip, MR, AC97C_MR_ENA);
}

static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
Expand Down Expand Up @@ -826,6 +826,8 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)

snd_card_set_dev(card, &pdev->dev);

atmel_ac97c_reset(chip);

/* Enable overrun interrupt from codec channel */
ac97c_writel(chip, COMR, AC97C_CSR_OVRUN);
ac97c_writel(chip, IER, ac97c_readl(chip, IMR) | AC97C_SR_COEVT);
Expand All @@ -836,8 +838,6 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
goto err_ac97_bus;
}

atmel_ac97c_reset(chip);

retval = atmel_ac97c_mixer_new(chip);
if (retval) {
dev_dbg(&pdev->dev, "could not register ac97 mixer\n");
Expand Down

0 comments on commit 81baf3a

Please sign in to comment.