|
@@ -473,8 +473,15 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse,
|
|
input_report_key(dev, BTN_TOOL_FINGER, fingers == 1);
|
|
input_report_key(dev, BTN_TOOL_FINGER, fingers == 1);
|
|
input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2);
|
|
input_report_key(dev, BTN_TOOL_DOUBLETAP, fingers == 2);
|
|
input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3);
|
|
input_report_key(dev, BTN_TOOL_TRIPLETAP, fingers == 3);
|
|
- input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
|
|
|
|
- input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
|
|
|
|
|
|
+
|
|
|
|
+ /* For clickpads map both buttons to BTN_LEFT */
|
|
|
|
+ if (etd->fw_version & 0x001000) {
|
|
|
|
+ input_report_key(dev, BTN_LEFT, packet[0] & 0x03);
|
|
|
|
+ } else {
|
|
|
|
+ input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
|
|
|
|
+ input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
|
|
|
|
+ }
|
|
|
|
+
|
|
input_report_abs(dev, ABS_PRESSURE, pres);
|
|
input_report_abs(dev, ABS_PRESSURE, pres);
|
|
input_report_abs(dev, ABS_TOOL_WIDTH, width);
|
|
input_report_abs(dev, ABS_TOOL_WIDTH, width);
|
|
|
|
|
|
@@ -484,10 +491,17 @@ static void elantech_report_absolute_v3(struct psmouse *psmouse,
|
|
static void elantech_input_sync_v4(struct psmouse *psmouse)
|
|
static void elantech_input_sync_v4(struct psmouse *psmouse)
|
|
{
|
|
{
|
|
struct input_dev *dev = psmouse->dev;
|
|
struct input_dev *dev = psmouse->dev;
|
|
|
|
+ struct elantech_data *etd = psmouse->private;
|
|
unsigned char *packet = psmouse->packet;
|
|
unsigned char *packet = psmouse->packet;
|
|
|
|
|
|
- input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
|
|
|
|
- input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
|
|
|
|
|
|
+ /* For clickpads map both buttons to BTN_LEFT */
|
|
|
|
+ if (etd->fw_version & 0x001000) {
|
|
|
|
+ input_report_key(dev, BTN_LEFT, packet[0] & 0x03);
|
|
|
|
+ } else {
|
|
|
|
+ input_report_key(dev, BTN_LEFT, packet[0] & 0x01);
|
|
|
|
+ input_report_key(dev, BTN_RIGHT, packet[0] & 0x02);
|
|
|
|
+ }
|
|
|
|
+
|
|
input_mt_report_pointer_emulation(dev, true);
|
|
input_mt_report_pointer_emulation(dev, true);
|
|
input_sync(dev);
|
|
input_sync(dev);
|
|
}
|
|
}
|