diff options
author | Daniel Mack <daniel@caiaq.de> | 2010-08-02 20:15:17 -0700 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-08-02 20:29:56 -0700 |
commit | 987a6c0298260b7aa40702b349282554d6180e4b (patch) | |
tree | 29d0873435221a6d731267efc2412814440e4a28 /drivers/input/mousedev.c | |
parent | 7957e9c4d175cc065f4277211fcb7d784fcee860 (diff) | |
download | op-kernel-dev-987a6c0298260b7aa40702b349282554d6180e4b.zip op-kernel-dev-987a6c0298260b7aa40702b349282554d6180e4b.tar.gz |
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/mousedev.c')
-rw-r--r-- | drivers/input/mousedev.c | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/drivers/input/mousedev.c b/drivers/input/mousedev.c index d8f68f7..83c24cc 100644 --- a/drivers/input/mousedev.c +++ b/drivers/input/mousedev.c @@ -22,6 +22,7 @@ #include <linux/random.h> #include <linux/major.h> #include <linux/device.h> +#include <linux/kernel.h> #ifdef CONFIG_INPUT_MOUSEDEV_PSAUX #include <linux/miscdevice.h> #endif @@ -134,11 +135,14 @@ static void mousedev_touchpad_event(struct input_dev *dev, switch (code) { case ABS_X: + fx(0) = value; if (mousedev->touch && mousedev->pkt_count >= 2) { - size = dev->absmax[ABS_X] - dev->absmin[ABS_X]; + size = input_abs_get_min(dev, ABS_X) - + input_abs_get_max(dev, ABS_X); if (size == 0) size = 256 * 2; + tmp = ((value - fx(2)) * 256 * FRACTION_DENOM) / size; tmp += mousedev->frac_dx; mousedev->packet.dx = tmp / FRACTION_DENOM; @@ -150,10 +154,12 @@ static void mousedev_touchpad_event(struct input_dev *dev, case ABS_Y: fy(0) = value; if (mousedev->touch && mousedev->pkt_count >= 2) { - /* use X size to keep the same scale */ - size = dev->absmax[ABS_X] - dev->absmin[ABS_X]; + /* use X size for ABS_Y to keep the same scale */ + size = input_abs_get_min(dev, ABS_X) - + input_abs_get_max(dev, ABS_X); if (size == 0) size = 256 * 2; + tmp = -((value - fy(2)) * 256 * FRACTION_DENOM) / size; tmp += mousedev->frac_dy; mousedev->packet.dy = tmp / FRACTION_DENOM; @@ -167,33 +173,35 @@ static void mousedev_touchpad_event(struct input_dev *dev, static void mousedev_abs_event(struct input_dev *dev, struct mousedev *mousedev, unsigned int code, int value) { - int size; + int min, max, size; switch (code) { case ABS_X: - size = dev->absmax[ABS_X] - dev->absmin[ABS_X]; + min = input_abs_get_min(dev, ABS_X); + max = input_abs_get_max(dev, ABS_X); + + size = max - min; if (size == 0) size = xres ? : 1; - if (value > dev->absmax[ABS_X]) - value = dev->absmax[ABS_X]; - if (value < dev->absmin[ABS_X]) - value = dev->absmin[ABS_X]; - mousedev->packet.x = - ((value - dev->absmin[ABS_X]) * xres) / size; + + clamp(value, min, max); + + mousedev->packet.x = ((value - min) * xres) / size; mousedev->packet.abs_event = 1; break; case ABS_Y: - size = dev->absmax[ABS_Y] - dev->absmin[ABS_Y]; + min = input_abs_get_min(dev, ABS_Y); + max = input_abs_get_max(dev, ABS_Y); + + size = max - min; if (size == 0) size = yres ? : 1; - if (value > dev->absmax[ABS_Y]) - value = dev->absmax[ABS_Y]; - if (value < dev->absmin[ABS_Y]) - value = dev->absmin[ABS_Y]; - mousedev->packet.y = yres - - ((value - dev->absmin[ABS_Y]) * yres) / size; + + clamp(value, min, max); + + mousedev->packet.y = yres - ((value - min) * yres) / size; mousedev->packet.abs_event = 1; break; } |