aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMing Lei <ming.lei@canonical.com>2016-05-02 14:15:01 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2016-05-04 19:01:42 -0400
commitd144cf42eee0eabdb2e76ea67a9b0437c5070751 (patch)
tree05200f2fb10f3f151651d84c7c15e04f314e1dd2
parentc90a0f08fedc57e2b8ff871cc036cdbdde683de4 (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.c10
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
434static void cm109_urb_ctl_callback(struct urb *urb) 435static 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
477static void cm109_toggle_buzzer_async(struct cm109_dev *dev) 479static void cm109_toggle_buzzer_async(struct cm109_dev *dev)