ASoC: TWL4030: Vibra motor stop fix when it is driven with audio
authorJari Vanhala <ext-jari.vanhala@nokia.com>
Thu, 29 Oct 2009 09:58:09 +0000 (11:58 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 29 Oct 2009 12:58:21 +0000 (12:58 +0000)
This patch fixes vibrator playing incoherently, when driven
with audio. There is something wrong in switch 3 at
H-bridge and VIBRA_SET still affects PWM generator.
Slowest value fixes things.

Signed-off-by: Jari Vanhala <ext-jari.vanhala@nokia.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/twl4030.c

index 9163713..ccaeb36 100644 (file)
@@ -613,6 +613,13 @@ static int handsfreerpga_event(struct snd_soc_dapm_widget *w,
        return 0;
 }
 
+static int vibramux_event(struct snd_soc_dapm_widget *w,
+               struct snd_kcontrol *kcontrol, int event)
+{
+       twl4030_write(w->codec, TWL4030_REG_VIBRA_SET, 0xff);
+       return 0;
+}
+
 static void headset_ramp(struct snd_soc_codec *codec, int ramp)
 {
        struct snd_soc_device *socdev = codec->socdev;
@@ -1243,8 +1250,9 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
                        0, 0, NULL, 0, handsfreerpga_event,
                        SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
        /* Vibra */
-       SND_SOC_DAPM_MUX("Vibra Mux", TWL4030_REG_VIBRA_CTL, 0, 0,
-               &twl4030_dapm_vibra_control),
+       SND_SOC_DAPM_MUX_E("Vibra Mux", TWL4030_REG_VIBRA_CTL, 0, 0,
+                          &twl4030_dapm_vibra_control, vibramux_event,
+                          SND_SOC_DAPM_PRE_PMU),
        SND_SOC_DAPM_MUX("Vibra Route", SND_SOC_NOPM, 0, 0,
                &twl4030_dapm_vibrapath_control),