Input: h3600_ts_input - fix a leak of the IRQ during init failure
Make sure we are passing the same cookie in all calls to request_irq() and free_irq(). Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
committed by
Dmitry Torokhov
parent
12d0cef701
commit
4296f1ad5a
@@ -396,14 +396,14 @@ static int h3600ts_connect(struct serio *serio, struct serio_driver *drv)
|
|||||||
set_GPIO_IRQ_edge(GPIO_BITSY_NPOWER_BUTTON, GPIO_RISING_EDGE);
|
set_GPIO_IRQ_edge(GPIO_BITSY_NPOWER_BUTTON, GPIO_RISING_EDGE);
|
||||||
|
|
||||||
if (request_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, action_button_handler,
|
if (request_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, action_button_handler,
|
||||||
IRQF_SHARED | IRQF_DISABLED, "h3600_action", &ts->dev)) {
|
IRQF_SHARED | IRQF_DISABLED, "h3600_action", ts->dev)) {
|
||||||
printk(KERN_ERR "h3600ts.c: Could not allocate Action Button IRQ!\n");
|
printk(KERN_ERR "h3600ts.c: Could not allocate Action Button IRQ!\n");
|
||||||
err = -EBUSY;
|
err = -EBUSY;
|
||||||
goto fail1;
|
goto fail1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, npower_button_handler,
|
if (request_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, npower_button_handler,
|
||||||
IRQF_SHARED | IRQF_DISABLED, "h3600_suspend", &ts->dev)) {
|
IRQF_SHARED | IRQF_DISABLED, "h3600_suspend", ts->dev)) {
|
||||||
printk(KERN_ERR "h3600ts.c: Could not allocate Power Button IRQ!\n");
|
printk(KERN_ERR "h3600ts.c: Could not allocate Power Button IRQ!\n");
|
||||||
err = -EBUSY;
|
err = -EBUSY;
|
||||||
goto fail2;
|
goto fail2;
|
||||||
@@ -439,8 +439,8 @@ static void h3600ts_disconnect(struct serio *serio)
|
|||||||
{
|
{
|
||||||
struct h3600_dev *ts = serio_get_drvdata(serio);
|
struct h3600_dev *ts = serio_get_drvdata(serio);
|
||||||
|
|
||||||
free_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, &ts->dev);
|
free_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, ts->dev);
|
||||||
free_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, &ts->dev);
|
free_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, ts->dev);
|
||||||
input_get_device(ts->dev);
|
input_get_device(ts->dev);
|
||||||
input_unregister_device(ts->dev);
|
input_unregister_device(ts->dev);
|
||||||
serio_close(serio);
|
serio_close(serio);
|
||||||
|
Reference in New Issue
Block a user