diff options
author | Ming Lei <ming.lei@canonical.com> | 2016-05-02 14:15:01 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2016-05-04 19:01:42 -0400 |
commit | d144cf42eee0eabdb2e76ea67a9b0437c5070751 (patch) | |
tree | 05200f2fb10f3f151651d84c7c15e04f314e1dd2 | |
parent | c90a0f08fedc57e2b8ff871cc036cdbdde683de4 (diff) |
Input: cm109 - spin_lock in complete() cleanup
Complete() will be run with interrupt enabled, so change to
spin_lock_irqsave().
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r-- | drivers/input/misc/cm109.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/input/misc/cm109.c b/drivers/input/misc/cm109.c index ee1bedd7c54c..9cc6d057c302 100644 --- a/drivers/input/misc/cm109.c +++ b/drivers/input/misc/cm109.c | |||
@@ -366,6 +366,7 @@ static void cm109_urb_irq_callback(struct urb *urb) | |||
366 | struct cm109_dev *dev = urb->context; | 366 | struct cm109_dev *dev = urb->context; |
367 | const int status = urb->status; | 367 | const int status = urb->status; |
368 | int error; | 368 | int error; |
369 | unsigned long flags; | ||
369 | 370 | ||
370 | dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n", | 371 | dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n", |
371 | dev->irq_data->byte[0], | 372 | dev->irq_data->byte[0], |
@@ -404,7 +405,7 @@ static void cm109_urb_irq_callback(struct urb *urb) | |||
404 | 405 | ||
405 | out: | 406 | out: |
406 | 407 | ||
407 | spin_lock(&dev->ctl_submit_lock); | 408 | spin_lock_irqsave(&dev->ctl_submit_lock, flags); |
408 | 409 | ||
409 | dev->irq_urb_pending = 0; | 410 | dev->irq_urb_pending = 0; |
410 | 411 | ||
@@ -428,7 +429,7 @@ static void cm109_urb_irq_callback(struct urb *urb) | |||
428 | __func__, error); | 429 | __func__, error); |
429 | } | 430 | } |
430 | 431 | ||
431 | spin_unlock(&dev->ctl_submit_lock); | 432 | spin_unlock_irqrestore(&dev->ctl_submit_lock, flags); |
432 | } | 433 | } |
433 | 434 | ||
434 | static void cm109_urb_ctl_callback(struct urb *urb) | 435 | static void cm109_urb_ctl_callback(struct urb *urb) |
@@ -436,6 +437,7 @@ static void cm109_urb_ctl_callback(struct urb *urb) | |||
436 | struct cm109_dev *dev = urb->context; | 437 | struct cm109_dev *dev = urb->context; |
437 | const int status = urb->status; | 438 | const int status = urb->status; |
438 | int error; | 439 | int error; |
440 | unsigned long flags; | ||
439 | 441 | ||
440 | dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n", | 442 | dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n", |
441 | dev->ctl_data->byte[0], | 443 | dev->ctl_data->byte[0], |
@@ -450,7 +452,7 @@ static void cm109_urb_ctl_callback(struct urb *urb) | |||
450 | __func__, status); | 452 | __func__, status); |
451 | } | 453 | } |
452 | 454 | ||
453 | spin_lock(&dev->ctl_submit_lock); | 455 | spin_lock_irqsave(&dev->ctl_submit_lock, flags); |
454 | 456 | ||
455 | dev->ctl_urb_pending = 0; | 457 | dev->ctl_urb_pending = 0; |
456 | 458 | ||
@@ -471,7 +473,7 @@ static void cm109_urb_ctl_callback(struct urb *urb) | |||
471 | } | 473 | } |
472 | } | 474 | } |
473 | 475 | ||
474 | spin_unlock(&dev->ctl_submit_lock); | 476 | spin_unlock_irqrestore(&dev->ctl_submit_lock, flags); |
475 | } | 477 | } |
476 | 478 | ||
477 | static void cm109_toggle_buzzer_async(struct cm109_dev *dev) | 479 | static void cm109_toggle_buzzer_async(struct cm109_dev *dev) |