From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: aris@cathedrallabs.org, linux-input@vger.kernel.org
Subject: [PATCH] uinput: allow events per packet to be specified
Date: Tue, 01 Mar 2011 15:47:23 +0000 [thread overview]
Message-ID: <20110301154722.32433.45006.stgit@bob.linux.org.uk> (raw)
From: Alan Cox <alan@linux.intel.com>
Implement an events per packet interface configuration. We do this by
adding a new ioctl that must be called before creation and follows the
pattern of the existing API.
The behaviour is:
Not set: input default or value computed by the uinput driver
Set: value used in preference if larger than computed
value
Signed-off-by: Alan Cox <alan@linux.intel.com>
---
drivers/input/misc/uinput.c | 25 +++++++++++++++++++++++--
include/linux/uinput.h | 3 +++
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
index b941078..2d36ad8 100644
--- a/drivers/input/misc/uinput.c
+++ b/drivers/input/misc/uinput.c
@@ -349,6 +349,7 @@ static int uinput_setup_device(struct uinput_device *udev, const char __user *bu
char *name;
int i, size;
int retval;
+ int epp = 0;
if (count != sizeof(struct uinput_user_dev))
return -EINVAL;
@@ -407,11 +408,19 @@ static int uinput_setup_device(struct uinput_device *udev, const char __user *bu
if (test_bit(ABS_MT_SLOT, dev->absbit)) {
int nslot = input_abs_get_max(dev, ABS_MT_SLOT) + 1;
input_mt_create_slots(dev, nslot);
- input_set_events_per_packet(dev, 6 * nslot);
+ epp = 6 * nslot;
} else if (test_bit(ABS_MT_POSITION_X, dev->absbit)) {
- input_set_events_per_packet(dev, 60);
+ epp = 60;
}
}
+ /* if the user forced the event information then honour their
+ * request providing it is bigger than the value we have ascertained
+ * is required */
+ if (udev->events_per_packet > epp)
+ epp = udev->events_per_packet;
+
+ if (epp)
+ input_set_events_per_packet(dev, epp);
udev->state = UIST_SETUP_COMPLETE;
retval = count;
@@ -705,6 +714,18 @@ static long uinput_ioctl_handler(struct file *file, unsigned int cmd,
phys[length - 1] = '\0';
break;
+ case UI_SET_EPP:
+ if (udev->state == UIST_CREATED) {
+ retval = -EINVAL;
+ goto out;
+ }
+ if (arg < 1) {
+ retval = -EINVAL;
+ goto out;
+ }
+ udev->events_per_packet = arg;
+ break;
+
case UI_BEGIN_FF_UPLOAD:
retval = uinput_ff_upload_from_user(p, &ff_up);
if (retval)
diff --git a/include/linux/uinput.h b/include/linux/uinput.h
index 05f7fed2..85c8b17 100644
--- a/include/linux/uinput.h
+++ b/include/linux/uinput.h
@@ -73,6 +73,8 @@ struct uinput_device {
struct uinput_request *requests[UINPUT_NUM_REQUESTS];
wait_queue_head_t requests_waitq;
spinlock_t requests_lock;
+
+ int events_per_packet;
};
#endif /* __KERNEL__ */
@@ -104,6 +106,7 @@ struct uinput_ff_erase {
#define UI_SET_FFBIT _IOW(UINPUT_IOCTL_BASE, 107, int)
#define UI_SET_PHYS _IOW(UINPUT_IOCTL_BASE, 108, char*)
#define UI_SET_SWBIT _IOW(UINPUT_IOCTL_BASE, 109, int)
+#define UI_SET_EPP _IOW(UINPUT_IOCTL_BASE, 110, int)
#define UI_BEGIN_FF_UPLOAD _IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload)
#define UI_END_FF_UPLOAD _IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload)
next reply other threads:[~2011-03-01 16:09 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-01 15:47 Alan Cox [this message]
2011-03-01 16:35 ` [PATCH] uinput: allow events per packet to be specified Aristeu Rozanski
2011-03-02 14:13 ` Henrik Rydberg
2011-03-02 16:06 ` Alan Cox
2011-03-02 17:13 ` Henrik Rydberg
2011-03-03 8:06 ` Dmitry Torokhov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110301154722.32433.45006.stgit@bob.linux.org.uk \
--to=alan@lxorguk.ukuu.org.uk \
--cc=aris@cathedrallabs.org \
--cc=linux-input@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.