diff options
author | Daniel Mack <daniel@caiaq.de> | 2010-08-02 23:15:17 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-08-02 23:29:56 -0400 |
commit | 987a6c0298260b7aa40702b349282554d6180e4b (patch) | |
tree | 29d0873435221a6d731267efc2412814440e4a28 /drivers/input | |
parent | 7957e9c4d175cc065f4277211fcb7d784fcee860 (diff) |
Input: switch to input_abs_*() access functions
Change all call sites in drivers/input to not access the ABS axis
information directly anymore. Make them use the access helpers instead.
Also use input_set_abs_params() when possible.
Did some code refactoring as I was on it.
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/evdev.c | 26 | ||||
-rw-r--r-- | drivers/input/input.c | 4 | ||||
-rw-r--r-- | drivers/input/joydev.c | 31 | ||||
-rw-r--r-- | drivers/input/joystick/a3d.c | 3 | ||||
-rw-r--r-- | drivers/input/joystick/adi.c | 2 | ||||
-rw-r--r-- | drivers/input/joystick/amijoy.c | 4 | ||||
-rw-r--r-- | drivers/input/joystick/gf2k.c | 20 | ||||
-rw-r--r-- | drivers/input/joystick/interact.c | 14 | ||||
-rw-r--r-- | drivers/input/joystick/sidewinder.c | 18 | ||||
-rw-r--r-- | drivers/input/keyboard/hil_kbd.c | 21 | ||||
-rw-r--r-- | drivers/input/misc/uinput.c | 29 | ||||
-rw-r--r-- | drivers/input/mouse/pc110pad.c | 4 | ||||
-rw-r--r-- | drivers/input/mouse/synaptics.c | 4 | ||||
-rw-r--r-- | drivers/input/mousedev.c | 44 | ||||
-rw-r--r-- | drivers/input/tablet/aiptek.c | 15 | ||||
-rw-r--r-- | drivers/input/tablet/wacom_wac.c | 4 |
16 files changed, 129 insertions, 114 deletions
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 054edf346e0b..9807c8ff6a84 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c | |||
@@ -650,12 +650,12 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, | |||
650 | 650 | ||
651 | t = _IOC_NR(cmd) & ABS_MAX; | 651 | t = _IOC_NR(cmd) & ABS_MAX; |
652 | 652 | ||
653 | abs.value = dev->abs[t]; | 653 | abs.value = input_abs_get_val(dev, t); |
654 | abs.minimum = dev->absmin[t]; | 654 | abs.minimum = input_abs_get_min(dev, t); |
655 | abs.maximum = dev->absmax[t]; | 655 | abs.maximum = input_abs_get_max(dev, t); |
656 | abs.fuzz = dev->absfuzz[t]; | 656 | abs.fuzz = input_abs_get_fuzz(dev, t); |
657 | abs.flat = dev->absflat[t]; | 657 | abs.flat = input_abs_get_flat(dev, t); |
658 | abs.resolution = dev->absres[t]; | 658 | abs.resolution = input_abs_get_res(dev, t); |
659 | 659 | ||
660 | if (copy_to_user(p, &abs, min_t(size_t, | 660 | if (copy_to_user(p, &abs, min_t(size_t, |
661 | _IOC_SIZE(cmd), | 661 | _IOC_SIZE(cmd), |
@@ -702,13 +702,13 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, | |||
702 | */ | 702 | */ |
703 | spin_lock_irq(&dev->event_lock); | 703 | spin_lock_irq(&dev->event_lock); |
704 | 704 | ||
705 | dev->abs[t] = abs.value; | 705 | input_abs_set_val(dev, t, abs.value); |
706 | dev->absmin[t] = abs.minimum; | 706 | input_abs_set_min(dev, t, abs.minimum); |
707 | dev->absmax[t] = abs.maximum; | 707 | input_abs_set_max(dev, t, abs.maximum); |
708 | dev->absfuzz[t] = abs.fuzz; | 708 | input_abs_set_fuzz(dev, t, abs.fuzz); |
709 | dev->absflat[t] = abs.flat; | 709 | input_abs_set_flat(dev, t, abs.flat); |
710 | dev->absres[t] = _IOC_SIZE(cmd) < sizeof(struct input_absinfo) ? | 710 | input_abs_set_res(dev, t, _IOC_SIZE(cmd) < sizeof(struct input_absinfo) ? |
711 | 0 : abs.resolution; | 711 | 0 : abs.resolution); |
712 | 712 | ||
713 | spin_unlock_irq(&dev->event_lock); | 713 | spin_unlock_irq(&dev->event_lock); |
714 | 714 | ||
diff --git a/drivers/input/input.c b/drivers/input/input.c index e1243b4b32a5..7259adb8619d 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
@@ -204,8 +204,8 @@ static int input_handle_abs_event(struct input_dev *dev, | |||
204 | } | 204 | } |
205 | 205 | ||
206 | /* Flush pending "slot" event */ | 206 | /* Flush pending "slot" event */ |
207 | if (is_mt_event && dev->slot != dev->abs[ABS_MT_SLOT]) { | 207 | if (is_mt_event && dev->slot != input_abs_get_val(dev, ABS_MT_SLOT)) { |
208 | dev->abs[ABS_MT_SLOT] = dev->slot; | 208 | input_abs_set_val(dev, ABS_MT_SLOT, dev->slot); |
209 | input_pass_event(dev, EV_ABS, ABS_MT_SLOT, dev->slot); | 209 | input_pass_event(dev, EV_ABS, ABS_MT_SLOT, dev->slot); |
210 | } | 210 | } |
211 | 211 | ||
diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 63834585c283..d85bd8a7967d 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c | |||
@@ -530,7 +530,7 @@ static int joydev_ioctl_common(struct joydev *joydev, | |||
530 | { | 530 | { |
531 | struct input_dev *dev = joydev->handle.dev; | 531 | struct input_dev *dev = joydev->handle.dev; |
532 | size_t len; | 532 | size_t len; |
533 | int i, j; | 533 | int i; |
534 | const char *name; | 534 | const char *name; |
535 | 535 | ||
536 | /* Process fixed-sized commands. */ | 536 | /* Process fixed-sized commands. */ |
@@ -562,12 +562,11 @@ static int joydev_ioctl_common(struct joydev *joydev, | |||
562 | case JSIOCSCORR: | 562 | case JSIOCSCORR: |
563 | if (copy_from_user(joydev->corr, argp, | 563 | if (copy_from_user(joydev->corr, argp, |
564 | sizeof(joydev->corr[0]) * joydev->nabs)) | 564 | sizeof(joydev->corr[0]) * joydev->nabs)) |
565 | return -EFAULT; | 565 | return -EFAULT; |
566 | 566 | ||
567 | for (i = 0; i < joydev->nabs; i++) { | 567 | for (i = 0; i < joydev->nabs; i++) { |
568 | j = joydev->abspam[i]; | 568 | int val = input_abs_get_val(dev, joydev->abspam[i]); |
569 | joydev->abs[i] = joydev_correct(dev->abs[j], | 569 | joydev->abs[i] = joydev_correct(val, &joydev->corr[i]); |
570 | &joydev->corr[i]); | ||
571 | } | 570 | } |
572 | return 0; | 571 | return 0; |
573 | 572 | ||
@@ -848,25 +847,27 @@ static int joydev_connect(struct input_handler *handler, struct input_dev *dev, | |||
848 | 847 | ||
849 | for (i = 0; i < joydev->nabs; i++) { | 848 | for (i = 0; i < joydev->nabs; i++) { |
850 | j = joydev->abspam[i]; | 849 | j = joydev->abspam[i]; |
851 | if (dev->absmax[j] == dev->absmin[j]) { | 850 | if (input_abs_get_max(dev, j) == input_abs_get_min(dev, j)) { |
852 | joydev->corr[i].type = JS_CORR_NONE; | 851 | joydev->corr[i].type = JS_CORR_NONE; |
853 | joydev->abs[i] = dev->abs[j]; | 852 | joydev->abs[i] = input_abs_get_val(dev, j); |
854 | continue; | 853 | continue; |
855 | } | 854 | } |
856 | joydev->corr[i].type = JS_CORR_BROKEN; | 855 | joydev->corr[i].type = JS_CORR_BROKEN; |
857 | joydev->corr[i].prec = dev->absfuzz[j]; | 856 | joydev->corr[i].prec = input_abs_get_fuzz(dev, j); |
858 | joydev->corr[i].coef[0] = | 857 | |
859 | (dev->absmax[j] + dev->absmin[j]) / 2 - dev->absflat[j]; | 858 | t = (input_abs_get_max(dev, j) + input_abs_get_min(dev, j)) / 2; |
860 | joydev->corr[i].coef[1] = | 859 | joydev->corr[i].coef[0] = t - input_abs_get_flat(dev, j); |
861 | (dev->absmax[j] + dev->absmin[j]) / 2 + dev->absflat[j]; | 860 | joydev->corr[i].coef[1] = t + input_abs_get_flat(dev, j); |
862 | 861 | ||
863 | t = (dev->absmax[j] - dev->absmin[j]) / 2 - 2 * dev->absflat[j]; | 862 | t = (input_abs_get_max(dev, j) - input_abs_get_min(dev, j)) / 2 |
863 | - 2 * input_abs_get_flat(dev, j); | ||
864 | if (t) { | 864 | if (t) { |
865 | joydev->corr[i].coef[2] = (1 << 29) / t; | 865 | joydev->corr[i].coef[2] = (1 << 29) / t; |
866 | joydev->corr[i].coef[3] = (1 << 29) / t; | 866 | joydev->corr[i].coef[3] = (1 << 29) / t; |
867 | 867 | ||
868 | joydev->abs[i] = joydev_correct(dev->abs[j], | 868 | joydev->abs[i] = |
869 | joydev->corr + i); | 869 | joydev_correct(input_abs_get_val(dev, j), |
870 | joydev->corr + i); | ||
870 | } | 871 | } |
871 | } | 872 | } |
872 | 873 | ||
diff --git a/drivers/input/joystick/a3d.c b/drivers/input/joystick/a3d.c index 6489f4010c4f..d259b41354b8 100644 --- a/drivers/input/joystick/a3d.c +++ b/drivers/input/joystick/a3d.c | |||
@@ -342,7 +342,8 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
342 | 342 | ||
343 | for (i = 0; i < 4; i++) { | 343 | for (i = 0; i < 4; i++) { |
344 | if (i < 2) | 344 | if (i < 2) |
345 | input_set_abs_params(input_dev, axes[i], 48, input_dev->abs[axes[i]] * 2 - 48, 0, 8); | 345 | input_set_abs_params(input_dev, axes[i], |
346 | 48, input_abs_get_val(input_dev, axes[i]) * 2 - 48, 0, 8); | ||
346 | else | 347 | else |
347 | input_set_abs_params(input_dev, axes[i], 2, 253, 0, 0); | 348 | input_set_abs_params(input_dev, axes[i], 2, 253, 0, 0); |
348 | input_set_abs_params(input_dev, ABS_HAT0X + i, -1, 1, 0, 0); | 349 | input_set_abs_params(input_dev, ABS_HAT0X + i, -1, 1, 0, 0); |
diff --git a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c index 89c4c084d4ad..b992fbf91f2f 100644 --- a/drivers/input/joystick/adi.c +++ b/drivers/input/joystick/adi.c | |||
@@ -452,7 +452,7 @@ static void adi_init_center(struct adi *adi) | |||
452 | for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad != -1)) * 2; i++) { | 452 | for (i = 0; i < adi->axes10 + adi->axes8 + (adi->hats + (adi->pad != -1)) * 2; i++) { |
453 | 453 | ||
454 | t = adi->abs[i]; | 454 | t = adi->abs[i]; |
455 | x = adi->dev->abs[t]; | 455 | x = input_abs_get_val(adi->dev, t); |
456 | 456 | ||
457 | if (t == ABS_THROTTLE || t == ABS_RUDDER || adi->id == ADI_ID_WGPE) | 457 | if (t == ABS_THROTTLE || t == ABS_RUDDER || adi->id == ADI_ID_WGPE) |
458 | x = i < adi->axes10 ? 512 : 128; | 458 | x = i < adi->axes10 ? 512 : 128; |
diff --git a/drivers/input/joystick/amijoy.c b/drivers/input/joystick/amijoy.c index 05022f07ec77..e90694fe0d5c 100644 --- a/drivers/input/joystick/amijoy.c +++ b/drivers/input/joystick/amijoy.c | |||
@@ -139,8 +139,8 @@ static int __init amijoy_init(void) | |||
139 | amijoy_dev[i]->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | | 139 | amijoy_dev[i]->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | |
140 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); | 140 | BIT_MASK(BTN_MIDDLE) | BIT_MASK(BTN_RIGHT); |
141 | for (j = 0; j < 2; j++) { | 141 | for (j = 0; j < 2; j++) { |
142 | amijoy_dev[i]->absmin[ABS_X + j] = -1; | 142 | XXinput_set_abs_params(amijoy_dev[i], ABS_X + j, |
143 | amijoy_dev[i]->absmax[ABS_X + j] = 1; | 143 | -1, 1, 0, 0); |
144 | } | 144 | } |
145 | 145 | ||
146 | err = input_register_device(amijoy_dev[i]); | 146 | err = input_register_device(amijoy_dev[i]); |
diff --git a/drivers/input/joystick/gf2k.c b/drivers/input/joystick/gf2k.c index 45ac70eae0aa..0536b1b2f018 100644 --- a/drivers/input/joystick/gf2k.c +++ b/drivers/input/joystick/gf2k.c | |||
@@ -318,11 +318,8 @@ static int gf2k_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
318 | for (i = 0; i < gf2k_axes[gf2k->id]; i++) | 318 | for (i = 0; i < gf2k_axes[gf2k->id]; i++) |
319 | set_bit(gf2k_abs[i], input_dev->absbit); | 319 | set_bit(gf2k_abs[i], input_dev->absbit); |
320 | 320 | ||
321 | for (i = 0; i < gf2k_hats[gf2k->id]; i++) { | 321 | for (i = 0; i < gf2k_hats[gf2k->id]; i++) |
322 | set_bit(ABS_HAT0X + i, input_dev->absbit); | 322 | input_set_abs_params(input_dev, ABS_HAT0X + i, -1, 1, 0, 0); |
323 | input_dev->absmin[ABS_HAT0X + i] = -1; | ||
324 | input_dev->absmax[ABS_HAT0X + i] = 1; | ||
325 | } | ||
326 | 323 | ||
327 | for (i = 0; i < gf2k_joys[gf2k->id]; i++) | 324 | for (i = 0; i < gf2k_joys[gf2k->id]; i++) |
328 | set_bit(gf2k_btn_joy[i], input_dev->keybit); | 325 | set_bit(gf2k_btn_joy[i], input_dev->keybit); |
@@ -334,11 +331,14 @@ static int gf2k_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
334 | gf2k_read(gf2k, data); | 331 | gf2k_read(gf2k, data); |
335 | 332 | ||
336 | for (i = 0; i < gf2k_axes[gf2k->id]; i++) { | 333 | for (i = 0; i < gf2k_axes[gf2k->id]; i++) { |
337 | input_dev->absmax[gf2k_abs[i]] = (i < 2) ? input_dev->abs[gf2k_abs[i]] * 2 - 32 : | 334 | int max = i < 2 ? |
338 | input_dev->abs[gf2k_abs[0]] + input_dev->abs[gf2k_abs[1]] - 32; | 335 | input_abs_get_val(input_dev, gf2k_abs[i]) * 2 : |
339 | input_dev->absmin[gf2k_abs[i]] = 32; | 336 | input_abs_get_val(input_dev, gf2k_abs[0]) + |
340 | input_dev->absfuzz[gf2k_abs[i]] = 8; | 337 | input_abs_get_val(input_dev, gf2k_abs[1]); |
341 | input_dev->absflat[gf2k_abs[i]] = (i < 2) ? 24 : 0; | 338 | int flat = i < 2 ? 24 : 0; |
339 | |||
340 | input_set_abs_params(input_dev, gf2k_abs[i], | ||
341 | 32, max - 32, 8, flat); | ||
342 | } | 342 | } |
343 | 343 | ||
344 | err = input_register_device(gf2k->dev); | 344 | err = input_register_device(gf2k->dev); |
diff --git a/drivers/input/joystick/interact.c b/drivers/input/joystick/interact.c index 2478289aeeea..16fb19d1ca25 100644 --- a/drivers/input/joystick/interact.c +++ b/drivers/input/joystick/interact.c | |||
@@ -270,18 +270,14 @@ static int interact_connect(struct gameport *gameport, struct gameport_driver *d | |||
270 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); | 270 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
271 | 271 | ||
272 | for (i = 0; (t = interact_type[interact->type].abs[i]) >= 0; i++) { | 272 | for (i = 0; (t = interact_type[interact->type].abs[i]) >= 0; i++) { |
273 | set_bit(t, input_dev->absbit); | 273 | if (i < interact_type[interact->type].b8) |
274 | if (i < interact_type[interact->type].b8) { | 274 | input_set_abs_params(input_dev, t, 0, 255, 0, 0); |
275 | input_dev->absmin[t] = 0; | 275 | else |
276 | input_dev->absmax[t] = 255; | 276 | input_set_abs_params(input_dev, t, -1, 1, 0, 0); |
277 | } else { | ||
278 | input_dev->absmin[t] = -1; | ||
279 | input_dev->absmax[t] = 1; | ||
280 | } | ||
281 | } | 277 | } |
282 | 278 | ||
283 | for (i = 0; (t = interact_type[interact->type].btn[i]) >= 0; i++) | 279 | for (i = 0; (t = interact_type[interact->type].btn[i]) >= 0; i++) |
284 | set_bit(t, input_dev->keybit); | 280 | __set_bit(t, input_dev->keybit); |
285 | 281 | ||
286 | err = input_register_device(interact->dev); | 282 | err = input_register_device(interact->dev); |
287 | if (err) | 283 | if (err) |
diff --git a/drivers/input/joystick/sidewinder.c b/drivers/input/joystick/sidewinder.c index ca13a6bec33e..b8d86115644b 100644 --- a/drivers/input/joystick/sidewinder.c +++ b/drivers/input/joystick/sidewinder.c | |||
@@ -761,17 +761,21 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
761 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); | 761 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
762 | 762 | ||
763 | for (j = 0; (bits = sw_bit[sw->type][j]); j++) { | 763 | for (j = 0; (bits = sw_bit[sw->type][j]); j++) { |
764 | int min, max, fuzz, flat; | ||
765 | |||
764 | code = sw_abs[sw->type][j]; | 766 | code = sw_abs[sw->type][j]; |
765 | set_bit(code, input_dev->absbit); | 767 | min = bits == 1 ? -1 : 0; |
766 | input_dev->absmax[code] = (1 << bits) - 1; | 768 | max = (1 << bits) - 1; |
767 | input_dev->absmin[code] = (bits == 1) ? -1 : 0; | 769 | fuzz = (bits >> 1) >= 2 ? 1 << ((bits >> 1) - 2) : 0; |
768 | input_dev->absfuzz[code] = ((bits >> 1) >= 2) ? (1 << ((bits >> 1) - 2)) : 0; | 770 | flat = code == ABS_THROTTLE || bits < 5 ? |
769 | if (code != ABS_THROTTLE) | 771 | 0 : 1 << (bits - 5); |
770 | input_dev->absflat[code] = (bits >= 5) ? (1 << (bits - 5)) : 0; | 772 | |
773 | input_set_abs_params(input_dev, code, | ||
774 | min, max, fuzz, flat); | ||
771 | } | 775 | } |
772 | 776 | ||
773 | for (j = 0; (code = sw_btn[sw->type][j]); j++) | 777 | for (j = 0; (code = sw_btn[sw->type][j]); j++) |
774 | set_bit(code, input_dev->keybit); | 778 | __set_bit(code, input_dev->keybit); |
775 | 779 | ||
776 | dbg("%s%s [%d-bit id %d data %d]\n", sw->name, comment, m, l, k); | 780 | dbg("%s%s [%d-bit id %d data %d]\n", sw->name, comment, m, l, k); |
777 | 781 | ||
diff --git a/drivers/input/keyboard/hil_kbd.c b/drivers/input/keyboard/hil_kbd.c index c83f4b2ec7d3..ddd5afd301d4 100644 --- a/drivers/input/keyboard/hil_kbd.c +++ b/drivers/input/keyboard/hil_kbd.c | |||
@@ -232,15 +232,16 @@ static void hil_dev_handle_ptr_events(struct hil_dev *ptr) | |||
232 | if (absdev) { | 232 | if (absdev) { |
233 | val = lo + (hi << 8); | 233 | val = lo + (hi << 8); |
234 | #ifdef TABLET_AUTOADJUST | 234 | #ifdef TABLET_AUTOADJUST |
235 | if (val < dev->absmin[ABS_X + i]) | 235 | if (val < input_abs_min(dev, ABS_X + i)) |
236 | dev->absmin[ABS_X + i] = val; | 236 | input_abs_set_min(dev, ABS_X + i, val); |
237 | if (val > dev->absmax[ABS_X + i]) | 237 | if (val > input_abs_max(dev, ABS_X + i)) |
238 | dev->absmax[ABS_X + i] = val; | 238 | XXinput_abs_set_max(dev, ABS_X + i, val); |
239 | #endif | 239 | #endif |
240 | if (i%3) val = dev->absmax[ABS_X + i] - val; | 240 | if (i % 3) |
241 | val = input_abs_max(dev, ABS_X + i) - val; | ||
241 | input_report_abs(dev, ABS_X + i, val); | 242 | input_report_abs(dev, ABS_X + i, val); |
242 | } else { | 243 | } else { |
243 | val = (int) (((int8_t)lo) | ((int8_t)hi << 8)); | 244 | val = (int) (((int8_t) lo) | ((int8_t) hi << 8)); |
244 | if (i % 3) | 245 | if (i % 3) |
245 | val *= -1; | 246 | val *= -1; |
246 | input_report_rel(dev, REL_X + i, val); | 247 | input_report_rel(dev, REL_X + i, val); |
@@ -387,9 +388,11 @@ static void hil_dev_pointer_setup(struct hil_dev *ptr) | |||
387 | 388 | ||
388 | #ifdef TABLET_AUTOADJUST | 389 | #ifdef TABLET_AUTOADJUST |
389 | for (i = 0; i < ABS_MAX; i++) { | 390 | for (i = 0; i < ABS_MAX; i++) { |
390 | int diff = input_dev->absmax[ABS_X + i] / 10; | 391 | int diff = input_abs_max(input_dev, ABS_X + i) / 10; |
391 | input_dev->absmin[ABS_X + i] += diff; | 392 | input_abs_set_min(input_dev, ABS_X + i, |
392 | input_dev->absmax[ABS_X + i] -= diff; | 393 | input_abs_min(input_dev, ABS_X + i) + diff) |
394 | XXinput_abs_set_max(input_dev, ABS_X + i, | ||
395 | input_abs_max(input_dev, ABS_X + i) - diff) | ||
393 | } | 396 | } |
394 | #endif | 397 | #endif |
395 | 398 | ||
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c index b71eb55f2dbc..bb53fd33cd1c 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c | |||
@@ -304,21 +304,25 @@ static int uinput_validate_absbits(struct input_dev *dev) | |||
304 | if (!test_bit(cnt, dev->absbit)) | 304 | if (!test_bit(cnt, dev->absbit)) |
305 | continue; | 305 | continue; |
306 | 306 | ||
307 | if ((dev->absmax[cnt] <= dev->absmin[cnt])) { | 307 | if (input_abs_get_max(dev, cnt) <= input_abs_get_min(dev, cnt)) { |
308 | printk(KERN_DEBUG | 308 | printk(KERN_DEBUG |
309 | "%s: invalid abs[%02x] min:%d max:%d\n", | 309 | "%s: invalid abs[%02x] min:%d max:%d\n", |
310 | UINPUT_NAME, cnt, | 310 | UINPUT_NAME, cnt, |
311 | dev->absmin[cnt], dev->absmax[cnt]); | 311 | input_abs_get_min(dev, cnt), |
312 | input_abs_get_max(dev, cnt)); | ||
312 | retval = -EINVAL; | 313 | retval = -EINVAL; |
313 | break; | 314 | break; |
314 | } | 315 | } |
315 | 316 | ||
316 | if (dev->absflat[cnt] > (dev->absmax[cnt] - dev->absmin[cnt])) { | 317 | if (input_abs_get_flat(dev, cnt) > |
318 | input_abs_get_max(dev, cnt) - input_abs_get_min(dev, cnt)) { | ||
317 | printk(KERN_DEBUG | 319 | printk(KERN_DEBUG |
318 | "%s: absflat[%02x] out of range: %d " | 320 | "%s: abs_flat #%02x out of range: %d " |
319 | "(min:%d/max:%d)\n", | 321 | "(min:%d/max:%d)\n", |
320 | UINPUT_NAME, cnt, dev->absflat[cnt], | 322 | UINPUT_NAME, cnt, |
321 | dev->absmin[cnt], dev->absmax[cnt]); | 323 | input_abs_get_flat(dev, cnt), |
324 | input_abs_get_min(dev, cnt), | ||
325 | input_abs_get_max(dev, cnt)); | ||
322 | retval = -EINVAL; | 326 | retval = -EINVAL; |
323 | break; | 327 | break; |
324 | } | 328 | } |
@@ -343,7 +347,7 @@ static int uinput_setup_device(struct uinput_device *udev, const char __user *bu | |||
343 | struct uinput_user_dev *user_dev; | 347 | struct uinput_user_dev *user_dev; |
344 | struct input_dev *dev; | 348 | struct input_dev *dev; |
345 | char *name; | 349 | char *name; |
346 | int size; | 350 | int i, size; |
347 | int retval; | 351 | int retval; |
348 | 352 | ||
349 | if (count != sizeof(struct uinput_user_dev)) | 353 | if (count != sizeof(struct uinput_user_dev)) |
@@ -387,11 +391,12 @@ static int uinput_setup_device(struct uinput_device *udev, const char __user *bu | |||
387 | dev->id.product = user_dev->id.product; | 391 | dev->id.product = user_dev->id.product; |
388 | dev->id.version = user_dev->id.version; | 392 | dev->id.version = user_dev->id.version; |
389 | 393 | ||
390 | size = sizeof(int) * ABS_CNT; | 394 | for (i = 0; i < ABS_CNT; i++) { |
391 | memcpy(dev->absmax, user_dev->absmax, size); | 395 | input_abs_set_max(dev, i, user_dev->absmax[i]); |
392 | memcpy(dev->absmin, user_dev->absmin, size); | 396 | input_abs_set_min(dev, i, user_dev->absmin[i]); |
393 | memcpy(dev->absfuzz, user_dev->absfuzz, size); | 397 | input_abs_set_fuzz(dev, i, user_dev->absfuzz[i]); |
394 | memcpy(dev->absflat, user_dev->absflat, size); | 398 | input_abs_set_flat(dev, i, user_dev->absflat[i]); |
399 | } | ||
395 | 400 | ||
396 | /* check if absmin/absmax/absfuzz/absflat are filled as | 401 | /* check if absmin/absmax/absfuzz/absflat are filled as |
397 | * told in Documentation/input/input-programming.txt */ | 402 | * told in Documentation/input/input-programming.txt */ |
diff --git a/drivers/input/mouse/pc110pad.c b/drivers/input/mouse/pc110pad.c index 3941f97cfa60..7b02b652e267 100644 --- a/drivers/input/mouse/pc110pad.c +++ b/drivers/input/mouse/pc110pad.c | |||
@@ -145,8 +145,8 @@ static int __init pc110pad_init(void) | |||
145 | pc110pad_dev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y); | 145 | pc110pad_dev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y); |
146 | pc110pad_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); | 146 | pc110pad_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
147 | 147 | ||
148 | pc110pad_dev->absmax[ABS_X] = 0x1ff; | 148 | input_abs_set_max(pc110pad_dev, ABS_X, 0x1ff); |
149 | pc110pad_dev->absmax[ABS_Y] = 0x0ff; | 149 | input_abs_set_max(pc110pad_dev, ABS_Y, 0x0ff); |
150 | 150 | ||
151 | pc110pad_dev->open = pc110pad_open; | 151 | pc110pad_dev->open = pc110pad_open; |
152 | pc110pad_dev->close = pc110pad_close; | 152 | pc110pad_dev->close = pc110pad_close; |
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 85a1e1460996..2bf93432b8c0 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c | |||
@@ -629,8 +629,8 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv) | |||
629 | __clear_bit(REL_X, dev->relbit); | 629 | __clear_bit(REL_X, dev->relbit); |
630 | __clear_bit(REL_Y, dev->relbit); | 630 | __clear_bit(REL_Y, dev->relbit); |
631 | 631 | ||
632 | dev->absres[ABS_X] = priv->x_res; | 632 | input_abs_set_res(dev, ABS_X, priv->x_res); |
633 | dev->absres[ABS_Y] = priv->y_res; | 633 | input_abs_set_res(dev, ABS_Y, priv->y_res); |
634 | 634 | ||
635 | if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) { | 635 | if (SYN_CAP_CLICKPAD(priv->ext_cap_0c)) { |
636 | /* Clickpads report only left button */ | 636 | /* Clickpads report only left button */ |
diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c index d8f68f77007b..83c24cca234a 100644 --- a/drivers/input/mousedev.c +++ b/drivers/input/mousedev.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/random.h> | 22 | #include <linux/random.h> |
23 | #include <linux/major.h> | 23 | #include <linux/major.h> |
24 | #include <linux/device.h> | 24 | #include <linux/device.h> |
25 | #include <linux/kernel.h> | ||
25 | #ifdef CONFIG_INPUT_MOUSEDEV_PSAUX | 26 | #ifdef CONFIG_INPUT_MOUSEDEV_PSAUX |
26 | #include <linux/miscdevice.h> | 27 | #include <linux/miscdevice.h> |
27 | #endif | 28 | #endif |
@@ -134,11 +135,14 @@ static void mousedev_touchpad_event(struct input_dev *dev, | |||
134 | switch (code) { | 135 | switch (code) { |
135 | 136 | ||
136 | case ABS_X: | 137 | case ABS_X: |
138 | |||
137 | fx(0) = value; | 139 | fx(0) = value; |
138 | if (mousedev->touch && mousedev->pkt_count >= 2) { | 140 | if (mousedev->touch && mousedev->pkt_count >= 2) { |
139 | size = dev->absmax[ABS_X] - dev->absmin[ABS_X]; | 141 | size = input_abs_get_min(dev, ABS_X) - |
142 | input_abs_get_max(dev, ABS_X); | ||
140 | if (size == 0) | 143 | if (size == 0) |
141 | size = 256 * 2; | 144 | size = 256 * 2; |
145 | |||
142 | tmp = ((value - fx(2)) * 256 * FRACTION_DENOM) / size; | 146 | tmp = ((value - fx(2)) * 256 * FRACTION_DENOM) / size; |
143 | tmp += mousedev->frac_dx; | 147 | tmp += mousedev->frac_dx; |
144 | mousedev->packet.dx = tmp / FRACTION_DENOM; | 148 | mousedev->packet.dx = tmp / FRACTION_DENOM; |
@@ -150,10 +154,12 @@ static void mousedev_touchpad_event(struct input_dev *dev, | |||
150 | case ABS_Y: | 154 | case ABS_Y: |
151 | fy(0) = value; | 155 | fy(0) = value; |
152 | if (mousedev->touch && mousedev->pkt_count >= 2) { | 156 | if (mousedev->touch && mousedev->pkt_count >= 2) { |
153 | /* use X size to keep the same scale */ | 157 | /* use X size for ABS_Y to keep the same scale */ |
154 | size = dev->absmax[ABS_X] - dev->absmin[ABS_X]; | 158 | size = input_abs_get_min(dev, ABS_X) - |
159 | input_abs_get_max(dev, ABS_X); | ||
155 | if (size == 0) | 160 | if (size == 0) |
156 | size = 256 * 2; | 161 | size = 256 * 2; |
162 | |||
157 | tmp = -((value - fy(2)) * 256 * FRACTION_DENOM) / size; | 163 | tmp = -((value - fy(2)) * 256 * FRACTION_DENOM) / size; |
158 | tmp += mousedev->frac_dy; | 164 | tmp += mousedev->frac_dy; |
159 | mousedev->packet.dy = tmp / FRACTION_DENOM; | 165 | mousedev->packet.dy = tmp / FRACTION_DENOM; |
@@ -167,33 +173,35 @@ static void mousedev_touchpad_event(struct input_dev *dev, | |||
167 | static void mousedev_abs_event(struct input_dev *dev, struct mousedev *mousedev, | 173 | static void mousedev_abs_event(struct input_dev *dev, struct mousedev *mousedev, |
168 | unsigned int code, int value) | 174 | unsigned int code, int value) |
169 | { | 175 | { |
170 | int size; | 176 | int min, max, size; |
171 | 177 | ||
172 | switch (code) { | 178 | switch (code) { |
173 | 179 | ||
174 | case ABS_X: | 180 | case ABS_X: |
175 | size = dev->absmax[ABS_X] - dev->absmin[ABS_X]; | 181 | min = input_abs_get_min(dev, ABS_X); |
182 | max = input_abs_get_max(dev, ABS_X); | ||
183 | |||
184 | size = max - min; | ||
176 | if (size == 0) | 185 | if (size == 0) |
177 | size = xres ? : 1; | 186 | size = xres ? : 1; |
178 | if (value > dev->absmax[ABS_X]) | 187 | |
179 | value = dev->absmax[ABS_X]; | 188 | clamp(value, min, max); |
180 | if (value < dev->absmin[ABS_X]) | 189 | |
181 | value = dev->absmin[ABS_X]; | 190 | mousedev->packet.x = ((value - min) * xres) / size; |
182 | mousedev->packet.x = | ||
183 | ((value - dev->absmin[ABS_X]) * xres) / size; | ||
184 | mousedev->packet.abs_event = 1; | 191 | mousedev->packet.abs_event = 1; |
185 | break; | 192 | break; |
186 | 193 | ||
187 | case ABS_Y: | 194 | case ABS_Y: |
188 | size = dev->absmax[ABS_Y] - dev->absmin[ABS_Y]; | 195 | min = input_abs_get_min(dev, ABS_Y); |
196 | max = input_abs_get_max(dev, ABS_Y); | ||
197 | |||
198 | size = max - min; | ||
189 | if (size == 0) | 199 | if (size == 0) |
190 | size = yres ? : 1; | 200 | size = yres ? : 1; |
191 | if (value > dev->absmax[ABS_Y]) | 201 | |
192 | value = dev->absmax[ABS_Y]; | 202 | clamp(value, min, max); |
193 | if (value < dev->absmin[ABS_Y]) | 203 | |
194 | value = dev->absmin[ABS_Y]; | 204 | mousedev->packet.y = yres - ((value - min) * yres) / size; |
195 | mousedev->packet.y = yres - | ||
196 | ((value - dev->absmin[ABS_Y]) * yres) / size; | ||
197 | mousedev->packet.abs_event = 1; | 205 | mousedev->packet.abs_event = 1; |
198 | break; | 206 | break; |
199 | } | 207 | } |
diff --git a/drivers/input/tablet/aiptek.c b/drivers/input/tablet/aiptek.c index 51b80b08d467..57b25b84d1fc 100644 --- a/drivers/input/tablet/aiptek.c +++ b/drivers/input/tablet/aiptek.c | |||
@@ -987,20 +987,17 @@ static int aiptek_program_tablet(struct aiptek *aiptek) | |||
987 | /* Query getXextension */ | 987 | /* Query getXextension */ |
988 | if ((ret = aiptek_query(aiptek, 0x01, 0x00)) < 0) | 988 | if ((ret = aiptek_query(aiptek, 0x01, 0x00)) < 0) |
989 | return ret; | 989 | return ret; |
990 | aiptek->inputdev->absmin[ABS_X] = 0; | 990 | input_set_abs_params(aiptek->inputdev, ABS_X, 0, ret - 1, 0, 0); |
991 | aiptek->inputdev->absmax[ABS_X] = ret - 1; | ||
992 | 991 | ||
993 | /* Query getYextension */ | 992 | /* Query getYextension */ |
994 | if ((ret = aiptek_query(aiptek, 0x01, 0x01)) < 0) | 993 | if ((ret = aiptek_query(aiptek, 0x01, 0x01)) < 0) |
995 | return ret; | 994 | return ret; |
996 | aiptek->inputdev->absmin[ABS_Y] = 0; | 995 | input_set_abs_params(aiptek->inputdev, ABS_Y, 0, ret - 1, 0, 0); |
997 | aiptek->inputdev->absmax[ABS_Y] = ret - 1; | ||
998 | 996 | ||
999 | /* Query getPressureLevels */ | 997 | /* Query getPressureLevels */ |
1000 | if ((ret = aiptek_query(aiptek, 0x08, 0x00)) < 0) | 998 | if ((ret = aiptek_query(aiptek, 0x08, 0x00)) < 0) |
1001 | return ret; | 999 | return ret; |
1002 | aiptek->inputdev->absmin[ABS_PRESSURE] = 0; | 1000 | input_set_abs_params(aiptek->inputdev, ABS_PRESSURE, 0, ret - 1, 0, 0); |
1003 | aiptek->inputdev->absmax[ABS_PRESSURE] = ret - 1; | ||
1004 | 1001 | ||
1005 | /* Depending on whether we are in absolute or relative mode, we will | 1002 | /* Depending on whether we are in absolute or relative mode, we will |
1006 | * do a switchToTablet(absolute) or switchToMouse(relative) command. | 1003 | * do a switchToTablet(absolute) or switchToMouse(relative) command. |
@@ -1054,8 +1051,8 @@ static ssize_t show_tabletSize(struct device *dev, struct device_attribute *attr | |||
1054 | struct aiptek *aiptek = dev_get_drvdata(dev); | 1051 | struct aiptek *aiptek = dev_get_drvdata(dev); |
1055 | 1052 | ||
1056 | return snprintf(buf, PAGE_SIZE, "%dx%d\n", | 1053 | return snprintf(buf, PAGE_SIZE, "%dx%d\n", |
1057 | aiptek->inputdev->absmax[ABS_X] + 1, | 1054 | input_abs_get_max(aiptek->inputdev, ABS_X) + 1, |
1058 | aiptek->inputdev->absmax[ABS_Y] + 1); | 1055 | input_abs_get_max(aiptek->inputdev, ABS_Y) + 1); |
1059 | } | 1056 | } |
1060 | 1057 | ||
1061 | /* These structs define the sysfs files, param #1 is the name of the | 1058 | /* These structs define the sysfs files, param #1 is the name of the |
@@ -1843,7 +1840,7 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
1843 | for (i = 0; i < ARRAY_SIZE(speeds); ++i) { | 1840 | for (i = 0; i < ARRAY_SIZE(speeds); ++i) { |
1844 | aiptek->curSetting.programmableDelay = speeds[i]; | 1841 | aiptek->curSetting.programmableDelay = speeds[i]; |
1845 | (void)aiptek_program_tablet(aiptek); | 1842 | (void)aiptek_program_tablet(aiptek); |
1846 | if (aiptek->inputdev->absmax[ABS_X] > 0) { | 1843 | if (input_abs_get_max(aiptek->inputdev, ABS_X) > 0) { |
1847 | dev_info(&intf->dev, | 1844 | dev_info(&intf->dev, |
1848 | "Aiptek using %d ms programming speed\n", | 1845 | "Aiptek using %d ms programming speed\n", |
1849 | aiptek->curSetting.programmableDelay); | 1846 | aiptek->curSetting.programmableDelay); |
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index 555ef26e206d..87427d02e761 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c | |||
@@ -686,10 +686,10 @@ static void wacom_tpc_finger_in(struct wacom_wac *wacom, char *data, int idx) | |||
686 | * protocol. | 686 | * protocol. |
687 | */ | 687 | */ |
688 | if (wacom->last_finger != finger) { | 688 | if (wacom->last_finger != finger) { |
689 | if (x == input->abs[ABS_X]) | 689 | if (x == input_abs_get_val(input, ABS_X)) |
690 | x++; | 690 | x++; |
691 | 691 | ||
692 | if (y == input->abs[ABS_Y]) | 692 | if (y == input_abs_get_val(input, ABS_Y)) |
693 | y++; | 693 | y++; |
694 | } | 694 | } |
695 | 695 | ||