+ return -1;
+ }
+
+ return 0;
+}
+
+static int in_evdev_get_config(void *drv_data, int what, int *val)
+{
+ in_evdev_t *dev = drv_data;
+
+ switch (what) {
+ case IN_CFG_ABS_AXIS_COUNT:
+ *val = dev->abs_count;
+ break;
+ default:
+ return -1;
+ }
+
+ return 0;
+}
+
+static int in_evdev_set_config(void *drv_data, int what, int val)
+{
+ in_evdev_t *dev = drv_data;
+ int tmp;
+
+ switch (what) {
+ case IN_CFG_BLOCKING:
+ return in_evdev_set_blocking(dev, val);
+ case IN_CFG_ABS_DEAD_ZONE:
+ if (val < 1 || val > 99 || dev->abs_lzone == 0)
+ return -1;
+ /* XXX: based on X axis only, for now.. */
+ tmp = (dev->abs_max_x - dev->abs_min_x) / 2;
+ dev->abs_lzone = tmp - tmp * val / 100;
+ if (dev->abs_lzone < 1)
+ dev->abs_lzone = 1;
+ else if (dev->abs_lzone >= tmp)
+ dev->abs_lzone = tmp - 1;
+ break;
+ default:
+ return -1;
+ }
+
+ return 0;