From db288fe4634b11cec105a48b874ef787afe2dde0 Mon Sep 17 00:00:00 2001 From: Glenn Burkhardt Date: Tue, 20 Jan 2004 21:50:34 +0100 Subject: [PATCH] input: Properly recompute initial values upon recalibration in joydev. --- drivers/input/joydev.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 4a0ba13463745..1ca52c925e164 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c @@ -290,7 +290,7 @@ static int joydev_ioctl(struct inode *inode, struct file *file, unsigned int cmd struct joydev_list *list = file->private_data; struct joydev *joydev = list->joydev; struct input_dev *dev = joydev->handle.dev; - int i; + int i, j; if (!joydev->exist) return -ENODEV; @@ -324,8 +324,14 @@ static int joydev_ioctl(struct inode *inode, struct file *file, unsigned int cmd case JSIOCGBUTTONS: return put_user(joydev->nkey, (__u8 *) arg); case JSIOCSCORR: - return copy_from_user(joydev->corr, (struct js_corr *) arg, - sizeof(struct js_corr) * joydev->nabs) ? -EFAULT : 0; + if (copy_from_user(joydev->corr, (struct js_corr *)arg, + sizeof(struct js_corr) * joydev->nabs)) + return -EFAULT; + for (i = 0; i < joydev->nabs; i++) { + j = joydev->abspam[i]; + joydev->abs[i] = joydev_correct(dev->abs[j], joydev->corr + i); + } + return 0; case JSIOCGCORR: return copy_to_user((struct js_corr *) arg, joydev->corr, sizeof(struct js_corr) * joydev->nabs) ? -EFAULT : 0; @@ -426,6 +432,7 @@ static struct input_handle *joydev_connect(struct input_handler *handler, struct j = joydev->abspam[i]; if (dev->absmax[j] == dev->absmin[j]) { joydev->corr[i].type = JS_CORR_NONE; + joydev->abs[i] = dev->abs[j]; continue; } joydev->corr[i].type = JS_CORR_BROKEN; -- 2.53.0