+static int in_evdev_update_analog(void *drv_data, int axis_id, int *result)
+{
+ struct input_absinfo ainfo;
+ in_evdev_t *dev = drv_data;
+ int ret;
+
+ if ((unsigned int)axis_id >= MAX_ABS_DEVS)
+ return -1;
+
+ ret = ioctl(dev->fd, EVIOCGABS(axis_id), &ainfo);
+ if (ret != 0)
+ return ret;
+
+ *result = (ainfo.value + dev->abs_adj[axis_id]) * dev->abs_mult[axis_id];
+ *result >>= 16;
+ return 0;
+}
+