diff options
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/input.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index e57d1023d262..e4f8c2067b84 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -1813,24 +1813,26 @@ static int input_uninhibit_device(struct input_dev *dev) if (!dev->inhibited) return 0; + dev->inhibited = false; + if (dev->users) { if (dev->open) { error = dev->open(dev); - if (error) + if (error) { + dev->inhibited = true; return error; + } } scoped_guard(spinlock_irq, &dev->event_lock) dev->ready = true; - - if (dev->poller) - input_dev_poller_start(dev->poller); } - dev->inhibited = false; - scoped_guard(spinlock_irq, &dev->event_lock) input_dev_toggle(dev, true); + if (dev->users && dev->poller) + input_dev_poller_start(dev->poller); + return 0; } |
