#include <linux/input.h>
#include <linux/major.h>
#include <linux/device.h>
-#include <linux/wakelock.h>
#include "input-compat.h"
struct evdev {
int head;
int tail;
spinlock_t buffer_lock; /* protects access to buffer, head and tail */
- struct wake_lock wake_lock;
- char name[28];
struct fasync_struct *fasync;
struct evdev *evdev;
struct list_head node;
* "empty" by having client->head == client->tail.
*/
spin_lock(&client->buffer_lock);
- wake_lock_timeout(&client->wake_lock, 5 * HZ);
do {
client->buffer[client->head++] = *event;
client->head &= client->bufsize - 1;
struct evdev *evdev = handle->private;
struct evdev_client *client;
struct input_event event;
- struct timespec ts;
- ktime_get_ts(&ts);
- event.time.tv_sec = ts.tv_sec;
- event.time.tv_usec = ts.tv_nsec / NSEC_PER_USEC;
+ do_gettimeofday(&event.time);
event.type = type;
event.code = code;
event.value = value;
mutex_unlock(&evdev->mutex);
evdev_detach_client(evdev, client);
- wake_lock_destroy(&client->wake_lock);
kfree(client);
evdev_close_device(evdev);
client->bufsize = bufsize;
spin_lock_init(&client->buffer_lock);
- snprintf(client->name, sizeof(client->name), "%s-%d",
- dev_name(&evdev->dev), task_tgid_vnr(current));
- wake_lock_init(&client->wake_lock, WAKE_LOCK_SUSPEND, client->name);
client->evdev = evdev;
evdev_attach_client(evdev, client);
err_free_client:
evdev_detach_client(evdev, client);
- wake_lock_destroy(&client->wake_lock);
kfree(client);
err_put_evdev:
put_device(&evdev->dev);
if (have_event) {
*event = client->buffer[client->tail++];
client->tail &= client->bufsize - 1;
- if (client->head == client->tail)
- wake_unlock(&client->wake_lock);
}
spin_unlock_irq(&client->buffer_lock);