On Friday 23 April 2010 01:56:25 pm Randy Dunlap wrote: > On Thu, 22 Apr 2010 18:08:57 -0700 Arve Hjønnevåg wrote: > > Add an ioctl, EVIOCSSUSPENDBLOCK, to enable a suspend_blocker that will > > block suspend while the event queue is not empty. This allows userspace > > code to process input events while the device appears to be asleep. > > All new ioctls need to be added to Documentation/ioctl/ioctl-number.txt, > please. I do not see the reason for it to be in the kernel still. Have a process that listens to all input devices (or subset of them), once events stop coming initiate suspend. > > > Signed-off-by: Arve Hjønnevåg <arve@xxxxxxxxxxx> > > --- > > > > drivers/input/evdev.c | 22 ++++++++++++++++++++++ > > include/linux/input.h | 3 +++ > > 2 files changed, 25 insertions(+), 0 deletions(-) > > > > diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c > > index 2ee6c7a..66e0d16 100644 > > --- a/drivers/input/evdev.c > > +++ b/drivers/input/evdev.c > > @@ -585,6 +594,19 @@ static long evdev_do_ioctl(struct file *file, > > unsigned int cmd, > > > > else > > > > return evdev_ungrab(evdev, client); > > > > + case EVIOCGSUSPENDBLOCK: > > + return put_user(client->use_suspend_blocker, ip); > > + > > + case EVIOCSSUSPENDBLOCK: > > + spin_lock_irq(&client->buffer_lock); > > + if (!client->use_suspend_blocker && p) > > + suspend_blocker_init(&client->suspend_blocker, "evdev"); > > + else if (client->use_suspend_blocker && !p) > > + suspend_blocker_destroy(&client->suspend_blocker); > > + client->use_suspend_blocker = !!p; > > + spin_unlock_irq(&client->buffer_lock); > > + return 0; > > + > > > > default: > > if (_IOC_TYPE(cmd) != 'E') > > > > diff --git a/include/linux/input.h b/include/linux/input.h > > index 7ed2251..b2d93b4 100644 > > --- a/include/linux/input.h > > +++ b/include/linux/input.h > > @@ -82,6 +82,9 @@ struct input_absinfo { > > > > #define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ > > > > +#define EVIOCGSUSPENDBLOCK _IOR('E', 0x91, int) /* get suspend block > > enable */ +#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int) /* set > > suspend block enable */ + > > > > /* > > > > * Event types > > */ > > thanks, > --- > ~Randy > *** Remember to use Documentation/SubmitChecklist when testing your code > *** -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html