All of lore.kernel.org
 help / color / mirror / Atom feed
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)


             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.