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;
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;
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;