X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=linux%2Fin_evdev.c;h=c61506125322bc150671cab4629fc32e5f1f4fe6;hb=705bdf63669b4703c79b10342b21acc97a14107c;hp=7dd631e43e832157af5eb09a965be879f7f64b7e;hpb=f342bededbe5d51afd1632e689f5105e50d4f63e;p=libpicofe.git diff --git a/linux/in_evdev.c b/linux/in_evdev.c index 7dd631e..c615061 100644 --- a/linux/in_evdev.c +++ b/linux/in_evdev.c @@ -37,8 +37,8 @@ typedef struct { int kc_first; int kc_last; unsigned int abs_count; - /* 16.16 multiplier to IN_ABS_RANGE */ - unsigned int abs_mult[MAX_ABS_DEVS]; + int abs_mult[MAX_ABS_DEVS]; /* 16.16 multiplier to IN_ABS_RANGE */ + int abs_adj[MAX_ABS_DEVS]; /* adjust for centering */ unsigned int abs_to_digital:1; } in_evdev_t; @@ -246,6 +246,7 @@ static void in_evdev_probe(void) dist = ainfo.maximum - ainfo.minimum; if (dist != 0) dev->abs_mult[u] = IN_ABS_RANGE * 2 * 65536 / dist; + dev->abs_adj[u] = -(ainfo.maximum + ainfo.minimum + 1) / 2; have_abs = 1; } dev->abs_count = u; @@ -371,7 +372,8 @@ static int in_evdev_update_analog(void *drv_data, int axis_id, int *result) if (ret != 0) return ret; - *result = (int)(ainfo.value * dev->abs_mult[axis_id]) >> 16; + *result = (ainfo.value + dev->abs_adj[axis_id]) * dev->abs_mult[axis_id]; + *result >>= 16; return 0; } @@ -584,18 +586,6 @@ static int in_evdev_menu_translate(void *drv_data, int keycode) return 0; } -static void in_evdev_get_def_binds(int *binds) -{ - int i; - - for (i = 0; ; i++) { - if (in_evdev_defbinds[i].bit == 0 && in_evdev_defbinds[i].code == 0) - break; - binds[IN_BIND_OFFS(in_evdev_defbinds[i].code, in_evdev_defbinds[i].btype)] = - 1 << in_evdev_defbinds[i].bit; - } -} - /* remove binds of missing keys, count remaining ones */ static int in_evdev_clean_binds(void *drv_data, int *binds, int *def_binds) { @@ -635,7 +625,6 @@ static const in_drv_t in_evdev_drv = { .probe = in_evdev_probe, .free = in_evdev_free, .get_key_names = in_evdev_get_key_names, - .get_def_binds = in_evdev_get_def_binds, .clean_binds = in_evdev_clean_binds, .get_config = in_evdev_get_config, .set_config = in_evdev_set_config, @@ -645,8 +634,8 @@ static const in_drv_t in_evdev_drv = { .menu_translate = in_evdev_menu_translate, }; -void in_evdev_init(void) +void in_evdev_init(const struct in_default_bind *defbinds) { - in_register_driver(&in_evdev_drv); + in_register_driver(&in_evdev_drv, defbinds); }