diff options
| author | Glenn Burkhardt <glenn@aoi-industries.com> | 2004-01-20 21:50:34 +0100 |
|---|---|---|
| committer | Vojtech Pavlik <vojtech@ucw.cz> | 2004-01-20 21:50:34 +0100 |
| commit | db288fe4634b11cec105a48b874ef787afe2dde0 (patch) | |
| tree | db7a1a3270ebcb61e705566938d57cdaaaa354aa /drivers/input/joydev.c | |
| parent | 963be119e0d2afb7cf1909a6036690ad14e2c4cc (diff) | |
input: Properly recompute initial values upon recalibration in joydev.
Diffstat (limited to 'drivers/input/joydev.c')
| -rw-r--r-- | drivers/input/joydev.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 4a0ba1346374..1ca52c925e16 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; |
