Input: synaptics - only report width on hardware that supports it
authorChris Bagwell <chris@cnpbagwell.com>
Mon, 19 Jul 2010 16:06:15 +0000 (09:06 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 20 Jul 2010 04:44:33 +0000 (21:44 -0700)
Synaptics devices report fixed value of 5 for finger/palm widths
on devices that do not support capability and driver further
hardcodes to 5.  Stop reporting this fixed value when its not
supported since its not useful.

This will aid applications so they can better auto-enable support
for multi-touch emulation and palm detection logic using finger
width only for devices that support width detection.

I can find no applications that currently require existence on
ABS_TOOL_WIDTH. Since only synaptics and bcm input devices
currently support this tool, it seems they must handle it
gracefully.

Signed-off-by: Chris Bagwell <chris@cnpbagwell.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/mouse/synaptics.c

index 40cea334ad13f8159d0f71057680496e42150791..1b49d7f8ae119cda5f76f1a5cd0984575f26f6d3 100644 (file)
@@ -496,7 +496,9 @@ static void synaptics_process_packet(struct psmouse *psmouse)
        }
        input_report_abs(dev, ABS_PRESSURE, hw.z);
 
-       input_report_abs(dev, ABS_TOOL_WIDTH, finger_width);
+       if (SYN_CAP_PALMDETECT(priv->capabilities))
+               input_report_abs(dev, ABS_TOOL_WIDTH, finger_width);
+
        input_report_key(dev, BTN_TOOL_FINGER, num_fingers == 1);
        input_report_key(dev, BTN_LEFT, hw.left);
        input_report_key(dev, BTN_RIGHT, hw.right);
@@ -596,7 +598,9 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv)
        input_set_abs_params(dev, ABS_Y,
                             YMIN_NOMINAL, priv->y_max ?: YMAX_NOMINAL, 0, 0);
        input_set_abs_params(dev, ABS_PRESSURE, 0, 255, 0, 0);
-       __set_bit(ABS_TOOL_WIDTH, dev->absbit);
+
+       if (SYN_CAP_PALMDETECT(priv->capabilities))
+               __set_bit(ABS_TOOL_WIDTH, dev->absbit);
 
        __set_bit(EV_KEY, dev->evbit);
        __set_bit(BTN_TOUCH, dev->keybit);