summaryrefslogtreecommitdiff
path: root/drivers/input/joydev.c
diff options
context:
space:
mode:
authorGlenn Burkhardt <glenn@aoi-industries.com>2004-01-20 21:50:34 +0100
committerVojtech Pavlik <vojtech@ucw.cz>2004-01-20 21:50:34 +0100
commitdb288fe4634b11cec105a48b874ef787afe2dde0 (patch)
treedb7a1a3270ebcb61e705566938d57cdaaaa354aa /drivers/input/joydev.c
parent963be119e0d2afb7cf1909a6036690ad14e2c4cc (diff)
input: Properly recompute initial values upon recalibration in joydev.
Diffstat (limited to 'drivers/input/joydev.c')
-rw-r--r--drivers/input/joydev.c13
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;