提交 f1f489a6 编写于 作者: J Jorge Eduardo Candelaria 提交者: Liam Girdwood

ASoC: twl6040: Clear interrupt status at boot time

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: NJorge Eduardo Candelaria <jorge.candelaria@ti.com>
Signed-off-by: NMargarita Olaya Cabrera <magi.olaya@ti.com>
Acked-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: NLiam Girdwood <lrg@slimlogic.co.uk>
上级 99903ea2
......@@ -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) {
......@@ -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 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册