From af540af240d271b183f342f51109c81285f059cd Mon Sep 17 00:00:00 2001 From: Mark Brown Date: Wed, 6 Oct 2010 15:54:28 -0700 Subject: [PATCH] --- yaml --- r: 216616 b: refs/heads/master c: 4c14d78e8ad3bacfe1f70cb49ae17afcd658e368 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/sound/soc.h | 2 +- trunk/sound/soc/soc-jack.c | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index a3d8000e8d50..8a4acb382afb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: de535a5be53a06738409538c471a10a9de357bdd +refs/heads/master: 4c14d78e8ad3bacfe1f70cb49ae17afcd658e368 diff --git a/trunk/include/sound/soc.h b/trunk/include/sound/soc.h index 493b3a4c193a..4fb079e14e16 100644 --- a/trunk/include/sound/soc.h +++ b/trunk/include/sound/soc.h @@ -385,7 +385,7 @@ struct snd_soc_jack_gpio { int invert; int debounce_time; struct snd_soc_jack *jack; - struct work_struct work; + struct delayed_work work; int (*jack_status_check)(void); }; diff --git a/trunk/sound/soc/soc-jack.c b/trunk/sound/soc/soc-jack.c index 8862770aa221..8a0a9205b1e7 100644 --- a/trunk/sound/soc/soc-jack.c +++ b/trunk/sound/soc/soc-jack.c @@ -188,9 +188,6 @@ static void snd_soc_jack_gpio_detect(struct snd_soc_jack_gpio *gpio) int enable; int report; - if (gpio->debounce_time > 0) - mdelay(gpio->debounce_time); - enable = gpio_get_value(gpio->gpio); if (gpio->invert) enable = !enable; @@ -211,7 +208,8 @@ static irqreturn_t gpio_handler(int irq, void *data) { struct snd_soc_jack_gpio *gpio = data; - schedule_work(&gpio->work); + schedule_delayed_work(&gpio->work, + msecs_to_jiffies(gpio->debounce_time)); return IRQ_HANDLED; } @@ -221,7 +219,7 @@ static void gpio_work(struct work_struct *work) { struct snd_soc_jack_gpio *gpio; - gpio = container_of(work, struct snd_soc_jack_gpio, work); + gpio = container_of(work, struct snd_soc_jack_gpio, work.work); snd_soc_jack_gpio_detect(gpio); } @@ -262,7 +260,7 @@ int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count, if (ret) goto err; - INIT_WORK(&gpios[i].work, gpio_work); + INIT_DELAYED_WORK(&gpios[i].work, gpio_work); gpios[i].jack = jack; ret = request_irq(gpio_to_irq(gpios[i].gpio), @@ -312,6 +310,7 @@ void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, gpio_unexport(gpios[i].gpio); #endif free_irq(gpio_to_irq(gpios[i].gpio), &gpios[i]); + cancel_delayed_work_sync(&gpios[i].work); gpio_free(gpios[i].gpio); gpios[i].jack = NULL; }