|
@@ -187,6 +187,17 @@ static void joydev_detach_client(struct joydev *joydev,
|
|
|
synchronize_rcu();
|
|
|
}
|
|
|
|
|
|
+static void joydev_refresh_state(struct joydev *joydev)
|
|
|
+{
|
|
|
+ struct input_dev *dev = joydev->handle.dev;
|
|
|
+ int i, val;
|
|
|
+
|
|
|
+ for (i = 0; i < joydev->nabs; i++) {
|
|
|
+ val = input_abs_get_val(dev, joydev->abspam[i]);
|
|
|
+ joydev->abs[i] = joydev_correct(val, &joydev->corr[i]);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int joydev_open_device(struct joydev *joydev)
|
|
|
{
|
|
|
int retval;
|
|
@@ -201,6 +212,8 @@ static int joydev_open_device(struct joydev *joydev)
|
|
|
retval = input_open_device(&joydev->handle);
|
|
|
if (retval)
|
|
|
joydev->open--;
|
|
|
+ else
|
|
|
+ joydev_refresh_state(joydev);
|
|
|
}
|
|
|
|
|
|
mutex_unlock(&joydev->mutex);
|
|
@@ -872,7 +885,6 @@ static int joydev_connect(struct input_handler *handler, struct input_dev *dev,
|
|
|
j = joydev->abspam[i];
|
|
|
if (input_abs_get_max(dev, j) == input_abs_get_min(dev, j)) {
|
|
|
joydev->corr[i].type = JS_CORR_NONE;
|
|
|
- joydev->abs[i] = input_abs_get_val(dev, j);
|
|
|
continue;
|
|
|
}
|
|
|
joydev->corr[i].type = JS_CORR_BROKEN;
|
|
@@ -887,10 +899,6 @@ static int joydev_connect(struct input_handler *handler, struct input_dev *dev,
|
|
|
if (t) {
|
|
|
joydev->corr[i].coef[2] = (1 << 29) / t;
|
|
|
joydev->corr[i].coef[3] = (1 << 29) / t;
|
|
|
-
|
|
|
- joydev->abs[i] =
|
|
|
- joydev_correct(input_abs_get_val(dev, j),
|
|
|
- joydev->corr + i);
|
|
|
}
|
|
|
}
|
|
|
|