Skip to content

Commit

Permalink
ASoC: twl6040: Clear interrupt status at boot time
Browse files Browse the repository at this point in the history
On Phoenix 1.1, the INTID register default value is an invalid
one, causing the interrupt handler to think the phoenix power on
sequence is ready before it actually finishes.

This causes some i2c errors when trying to configure twl.

Signed-off-by: Jorge Eduardo Candelaria <jorge.candelaria@ti.com>
Signed-off-by: Margarita Olaya Cabrera <magi.olaya@ti.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
  • Loading branch information
Jorge Eduardo Candelaria authored and Liam Girdwood committed Dec 14, 2010
1 parent 99903ea commit f1f489a
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions sound/soc/codecs/twl6040.c
Original file line number Diff line number Diff line change
Expand Up @@ -1152,6 +1152,17 @@ static int twl6040_probe(struct snd_soc_codec *codec)
goto gpio2_err;

priv->codec_powered = 0;

/* enable only codec ready interrupt */
twl6040_write(codec, TWL6040_REG_INTMR,
~TWL6040_READYMSK & TWL6040_ALLINT_MSK);

/* reset interrupt status to allow correct power up sequence */
twl6040_read_reg_volatile(codec, TWL6040_REG_INTID);
} else {
/* no interrupts at all */
twl6040_write_reg_cache(codec, TWL6040_REG_INTMR,
TWL6040_ALLINT_MSK);
}

if (naudint) {
Expand All @@ -1162,16 +1173,6 @@ static int twl6040_probe(struct snd_soc_codec *codec)
"twl6040_codec", codec);
if (ret)
goto gpio2_err;
} else {
if (gpio_is_valid(audpwron)) {
/* enable only codec ready interrupt */
twl6040_write_reg_cache(codec, TWL6040_REG_INTMR,
~TWL6040_READYMSK & TWL6040_ALLINT_MSK);
} else {
/* no interrupts at all */
twl6040_write_reg_cache(codec, TWL6040_REG_INTMR,
TWL6040_ALLINT_MSK);
}
}

/* init vio registers */
Expand Down

0 comments on commit f1f489a

Please sign in to comment.