| From a455e2985f57e2a71566bb8850094af38b2c932d Mon Sep 17 00:00:00 2001 |
| From: Peter Popovec <popovec@oko.fei.tuke.sk> |
| Date: Fri, 14 Dec 2012 22:57:25 -0800 |
| Subject: Input: walkera0701 - fix crash on startup |
| |
| From: Peter Popovec <popovec@oko.fei.tuke.sk> |
| |
| commit a455e2985f57e2a71566bb8850094af38b2c932d upstream. |
| |
| The driver's timer must be set up before enabling IRQ handler, otherwise |
| bad things may happen. |
| |
| Reported-and-tested-by: Fengguang Wu <fengguang.wu@intel.com> |
| Signed-off-by: Peter Popovec <popovec@fei.tuke.sk> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/input/joystick/walkera0701.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/input/joystick/walkera0701.c |
| +++ b/drivers/input/joystick/walkera0701.c |
| @@ -196,6 +196,7 @@ static void walkera0701_close(struct inp |
| struct walkera_dev *w = input_get_drvdata(dev); |
| |
| parport_disable_irq(w->parport); |
| + hrtimer_cancel(&w->timer); |
| } |
| |
| static int walkera0701_connect(struct walkera_dev *w, int parport) |
| @@ -224,6 +225,9 @@ static int walkera0701_connect(struct wa |
| if (parport_claim(w->pardevice)) |
| goto init_err1; |
| |
| + hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
| + w->timer.function = timer_handler; |
| + |
| w->input_dev = input_allocate_device(); |
| if (!w->input_dev) |
| goto init_err2; |
| @@ -254,8 +258,6 @@ static int walkera0701_connect(struct wa |
| if (err) |
| goto init_err3; |
| |
| - hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
| - w->timer.function = timer_handler; |
| return 0; |
| |
| init_err3: |
| @@ -271,7 +273,6 @@ static int walkera0701_connect(struct wa |
| |
| static void walkera0701_disconnect(struct walkera_dev *w) |
| { |
| - hrtimer_cancel(&w->timer); |
| input_unregister_device(w->input_dev); |
| parport_release(w->pardevice); |
| parport_unregister_device(w->pardevice); |