ASoC: Prevent system suspend while debouncing wakeup capable GPIO jacks
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 14 Nov 2010 19:25:09 +0000 (19:25 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 15 Nov 2010 11:44:43 +0000 (11:44 +0000)
If the device associated with a GPIO jack is wakeup capable then disable
suspend while we're debouncing the jack so that we skip suspends that race
with the jack.

Note that currently the GPIO based jack has a CODEC associated with it
which we're using right now. These jacks should be reparented against the
card itself and this code adjusted.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
sound/soc/soc-jack.c

index 4d95abb40288d3b89e24c5131243ca89c311bebf..619061d689a319ce1364101cfed72c4438967052 100644 (file)
@@ -209,6 +209,10 @@ static void snd_soc_jack_gpio_detect(struct snd_soc_jack_gpio *gpio)
 static irqreturn_t gpio_handler(int irq, void *data)
 {
        struct snd_soc_jack_gpio *gpio = data;
+       struct device *dev = gpio->jack->codec->card->dev;
+
+       if (device_may_wakeup(dev))
+               pm_wakeup_event(dev, gpio->debounce_time + 50);
 
        schedule_delayed_work(&gpio->work,
                              msecs_to_jiffies(gpio->debounce_time));