lkml.org 
[lkml]   [2003]   [Sep]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 8/8] Add BTN_TOUCH to Synaptics driver. Update mousedev.
    Date
    From
    You can pull this changeset from:
    bk://kernel.bkbits.net/vojtech/input

    ===================================================================

    ChangeSet@1.1348, 2003-09-25 18:32:35+02:00, vojtech@mail.parknet.co.jp
    input: Add BTN_TOUCH to Synaptics pad driver. This fixes the joydev
    grabbing of the pads, as well as simplifies the mousedev driver.


    mouse/synaptics.c | 4 ++
    mousedev.c | 77 ++++++++++++++++++++++--------------------------------
    2 files changed, 36 insertions(+), 45 deletions(-)

    ===================================================================

    diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
    --- a/drivers/input/mouse/synaptics.c Thu Sep 25 18:36:58 2003
    +++ b/drivers/input/mouse/synaptics.c Thu Sep 25 18:36:58 2003
    @@ -333,6 +333,7 @@
    set_bit(ABS_TOOL_WIDTH, dev->absbit);

    set_bit(EV_KEY, dev->evbit);
    + set_bit(BTN_TOUCH, dev->keybit);
    set_bit(BTN_TOOL_FINGER, dev->keybit);
    set_bit(BTN_TOOL_DOUBLETAP, dev->keybit);
    set_bit(BTN_TOOL_TRIPLETAP, dev->keybit);
    @@ -531,6 +532,9 @@
    input_report_abs(dev, ABS_Y, YMAX_NOMINAL + YMIN_NOMINAL - hw.y);
    }
    input_report_abs(dev, ABS_PRESSURE, hw.z);
    +
    + if (hw.z > 30) input_report_key(dev, BTN_TOUCH, 1);
    + if (hw.z < 25) input_report_key(dev, BTN_TOUCH, 0);

    input_report_abs(dev, ABS_TOOL_WIDTH, finger_width);
    input_report_key(dev, BTN_TOOL_FINGER, num_fingers == 1);
    diff -Nru a/drivers/input/mousedev.c b/drivers/input/mousedev.c
    --- a/drivers/input/mousedev.c Thu Sep 25 18:36:58 2003
    +++ b/drivers/input/mousedev.c Thu Sep 25 18:36:58 2003
    @@ -83,59 +83,40 @@
    return;

    /* Handle touchpad data */
    - if (test_bit(BTN_TOOL_FINGER, handle->dev->keybit) &&
    - test_bit(ABS_PRESSURE, handle->dev->absbit) &&
    - test_bit(ABS_TOOL_WIDTH, handle->dev->absbit)) {
    + if (test_bit(BTN_TOOL_FINGER, handle->dev->keybit)) {
    +
    + if (list->finger && list->finger < 3)
    + list->finger++;
    +
    switch (code) {
    - case ABS_PRESSURE:
    - if (!list->finger) {
    - if (value > 30)
    - list->finger = 1;
    - } else {
    - if (value < 25)
    - list->finger = 0;
    - else if (list->finger < 3)
    - list->finger++;
    - }
    - break;
    - case ABS_X:
    - if (list->finger >= 3) {
    - list->dx += (value - list->oldx) / 8;
    - }
    - list->oldx = value;
    - break;
    - case ABS_Y:
    - if (list->finger >= 3) {
    - list->dy -= (value - list->oldy) / 8;
    - }
    - list->oldy = value;
    - break;
    + case ABS_X:
    + if (list->finger == 3)
    + list->dx += (value - list->oldx) / 8;
    + list->oldx = value;
    + return;
    + case ABS_Y:
    + if (list->finger == 3)
    + list->dy -= (value - list->oldy) / 8;
    + list->oldy = value;
    + return;
    }
    return;
    }

    - /* Handle tablet like devices */
    + /* Handle tablet data */
    switch (code) {
    - case ABS_X:
    - size = handle->dev->absmax[ABS_X] - handle->dev->absmin[ABS_X];
    - if (size != 0) {
    + case ABS_X:
    + size = handle->dev->absmax[ABS_X] - handle->dev->absmin[ABS_X];
    + if (size == 0) size = xres;
    list->dx += (value * xres - list->oldx) / size;
    list->oldx += list->dx * size;
    - } else {
    - list->dx += value - list->oldx;
    - list->oldx += list->dx;
    - }
    - break;
    - case ABS_Y:
    - size = handle->dev->absmax[ABS_Y] - handle->dev->absmin[ABS_Y];
    - if (size != 0) {
    + return;
    + case ABS_Y:
    + size = handle->dev->absmax[ABS_Y] - handle->dev->absmin[ABS_Y];
    + if (size == 0) size = yres;
    list->dy -= (value * yres - list->oldy) / size;
    list->oldy -= list->dy * size;
    - } else {
    - list->dy -= value - list->oldy;
    - list->oldy -= list->dy;
    - }
    - break;
    + return;
    }
    }

    @@ -166,8 +147,13 @@

    case EV_KEY:
    switch (code) {
    + case BTN_TOUCH: /* Handle touchpad data */
    + if (test_bit(BTN_TOOL_FINGER, handle->dev->keybit)) {
    + list->finger = value;
    + return;
    + }
    case BTN_0:
    - case BTN_TOUCH:
    + case BTN_FORWARD:
    case BTN_LEFT: index = 0; break;
    case BTN_4:
    case BTN_EXTRA: if (list->mode == 2) { index = 4; break; }
    @@ -175,6 +161,7 @@
    case BTN_1:
    case BTN_RIGHT: index = 1; break;
    case BTN_3:
    + case BTN_BACK:
    case BTN_SIDE: if (list->mode == 2) { index = 3; break; }
    case BTN_2:
    case BTN_STYLUS2:
    @@ -333,7 +320,7 @@
    {
    struct mousedev_list *list = file->private_data;
    unsigned char c;
    - int i;
    + unsigned int i;

    for (i = 0; i < count; i++) {

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:48    [W:4.379 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site