git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
drivers
/
input
/
mousedev.c
diff --git
a/drivers/input/mousedev.c
b/drivers/input/mousedev.c
index
bd1a6d9
..
28ffa54
100644
(file)
--- a/
drivers/input/mousedev.c
+++ b/
drivers/input/mousedev.c
@@
-115,20
+115,26
@@
static struct mousedev mousedev_mix;
#define fx(i) (mousedev->old_x[(mousedev->pkt_count - (i)) & 03])
#define fy(i) (mousedev->old_y[(mousedev->pkt_count - (i)) & 03])
#define fx(i) (mousedev->old_x[(mousedev->pkt_count - (i)) & 03])
#define fy(i) (mousedev->old_y[(mousedev->pkt_count - (i)) & 03])
-static void mousedev_touchpad_event(struct mousedev *mousedev, unsigned int code, int value)
+static void mousedev_touchpad_event(struct
input_dev *dev, struct
mousedev *mousedev, unsigned int code, int value)
{
{
+ int size;
+
if (mousedev->touch) {
switch (code) {
case ABS_X:
if (mousedev->touch) {
switch (code) {
case ABS_X:
+ size = dev->absmax[ABS_X] - dev->absmin[ABS_X];
+ if (size == 0) size = xres;
fx(0) = value;
if (mousedev->pkt_count >= 2)
fx(0) = value;
if (mousedev->pkt_count >= 2)
- mousedev->packet.dx = ((fx(0) - fx(1)) / 2 + (fx(1) - fx(2)) / 2)
/ 8
;
+ mousedev->packet.dx = ((fx(0) - fx(1)) / 2 + (fx(1) - fx(2)) / 2)
* xres / (size * 2)
;
break;
case ABS_Y:
break;
case ABS_Y:
+ size = dev->absmax[ABS_Y] - dev->absmin[ABS_Y];
+ if (size == 0) size = yres;
fy(0) = value;
if (mousedev->pkt_count >= 2)
fy(0) = value;
if (mousedev->pkt_count >= 2)
- mousedev->packet.dy = -((fy(0) - fy(1)) / 2 + (fy(1) - fy(2)) / 2)
/ 8
;
+ mousedev->packet.dy = -((fy(0) - fy(1)) / 2 + (fy(1) - fy(2)) / 2)
* yres / (size * 2)
;
break;
}
}
break;
}
}
@@
-279,7
+285,7
@@
static void mousedev_event(struct input_handle *handle, unsigned int type, unsig
return;
if (test_bit(BTN_TOOL_FINGER, handle->dev->keybit))
return;
if (test_bit(BTN_TOOL_FINGER, handle->dev->keybit))
- mousedev_touchpad_event(mousedev, code, value);
+ mousedev_touchpad_event(
handle->dev,
mousedev, code, value);
else
mousedev_abs_event(handle->dev, mousedev, code, value);
else
mousedev_abs_event(handle->dev, mousedev, code, value);
@@
-329,8
+335,6
@@
static int mousedev_fasync(int fd, struct file *file, int on)
static void mousedev_free(struct mousedev *mousedev)
{
static void mousedev_free(struct mousedev *mousedev)
{
- devfs_remove("input/mouse%d", mousedev->minor);
- class_simple_device_remove(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + mousedev->minor));
mousedev_table[mousedev->minor] = NULL;
kfree(mousedev);
}
mousedev_table[mousedev->minor] = NULL;
kfree(mousedev);
}
@@
-463,10
+467,10
@@
static void mousedev_packet(struct mousedev_list *list, signed char *ps2_data)
}
if (!p->dx && !p->dy && !p->dz) {
}
if (!p->dx && !p->dy && !p->dz) {
- if (list->tail != list->head)
- list->tail = (list->tail + 1) % PACKET_QUEUE_LEN;
if (list->tail == list->head)
list->ready = 0;
if (list->tail == list->head)
list->ready = 0;
+ else
+ list->tail = (list->tail + 1) % PACKET_QUEUE_LEN;
}
spin_unlock_irqrestore(&list->packet_lock, flags);
}
spin_unlock_irqrestore(&list->packet_lock, flags);
@@
-640,6
+644,8
@@
static void mousedev_disconnect(struct input_handle *handle)
{
struct mousedev *mousedev = handle->private;
{
struct mousedev *mousedev = handle->private;
+ class_simple_device_remove(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + mousedev->minor));
+ devfs_remove("input/mouse%d", mousedev->minor);
mousedev->exist = 0;
if (mousedev->open) {
mousedev->exist = 0;
if (mousedev->open) {