Merge branch 'next' into for-linus
[cascardo/linux.git] / drivers / input / mouse / synaptics.c
index fd89249..7e705ee 100644 (file)
@@ -67,6 +67,9 @@
 #define X_MAX_POSITIVE 8176
 #define Y_MAX_POSITIVE 8176
 
+/* maximum ABS_MT_POSITION displacement (in mm) */
+#define DMAX 10
+
 /*****************************************************************************
  *     Stuff we need even when we do not want native Synaptics support
  ****************************************************************************/
@@ -135,14 +138,19 @@ static const struct min_max_quirk min_max_pnpid_table[] = {
                1232, 5710, 1156, 4696
        },
        {
-               (const char * const []){"LEN0034", "LEN0036", "LEN2002",
-                                       "LEN2004", NULL},
+               (const char * const []){"LEN0034", "LEN0036", "LEN0037",
+                                       "LEN0039", "LEN2002", "LEN2004",
+                                       NULL},
                1024, 5112, 2024, 4832
        },
        {
                (const char * const []){"LEN2001", NULL},
                1024, 5022, 2508, 4832
        },
+       {
+               (const char * const []){"LEN2006", NULL},
+               1264, 5675, 1171, 4688
+       },
        { }
 };
 
@@ -161,8 +169,9 @@ static const char * const topbuttonpad_pnp_ids[] = {
        "LEN0034", /* T431s, L440, L540, T540, W540, X1 Carbon 2nd */
        "LEN0035", /* X240 */
        "LEN0036", /* T440 */
-       "LEN0037",
+       "LEN0037", /* X1 Carbon 2nd */
        "LEN0038",
+       "LEN0039", /* T440s */
        "LEN0041",
        "LEN0042", /* Yoga */
        "LEN0045",
@@ -804,7 +813,7 @@ static void synaptics_report_mt_data(struct psmouse *psmouse,
                pos[i].y = synaptics_invert_y(hw[i]->y);
        }
 
-       input_mt_assign_slots(dev, slot, pos, nsemi);
+       input_mt_assign_slots(dev, slot, pos, nsemi, DMAX * priv->x_res);
 
        for (i = 0; i < nsemi; i++) {
                input_mt_slot(dev, slot[i]);
@@ -851,42 +860,6 @@ static void synaptics_image_sensor_process(struct psmouse *psmouse,
        synaptics_report_mt_data(psmouse, sgm, num_fingers);
 }
 
-static void synaptics_profile_sensor_process(struct psmouse *psmouse,
-                                            struct synaptics_hw_state *sgm,
-                                            int num_fingers)
-{
-       struct input_dev *dev = psmouse->dev;
-       struct synaptics_data *priv = psmouse->private;
-       struct synaptics_hw_state *hw[2] = { sgm, &priv->agm };
-       struct input_mt_pos pos[2];
-       int slot[2], nsemi, i;
-
-       nsemi = clamp_val(num_fingers, 0, 2);
-
-       for (i = 0; i < nsemi; i++) {
-               pos[i].x = hw[i]->x;
-               pos[i].y = synaptics_invert_y(hw[i]->y);
-       }
-
-       input_mt_assign_slots(dev, slot, pos, nsemi);
-
-       for (i = 0; i < nsemi; i++) {
-               input_mt_slot(dev, slot[i]);
-               input_mt_report_slot_state(dev, MT_TOOL_FINGER, true);
-               input_report_abs(dev, ABS_MT_POSITION_X, pos[i].x);
-               input_report_abs(dev, ABS_MT_POSITION_Y, pos[i].y);
-               input_report_abs(dev, ABS_MT_PRESSURE, hw[i]->z);
-       }
-
-       input_mt_drop_unused(dev);
-       input_mt_report_pointer_emulation(dev, false);
-       input_mt_report_finger_count(dev, num_fingers);
-
-       synaptics_report_buttons(psmouse, sgm);
-
-       input_sync(dev);
-}
-
 /*
  *  called for each full received packet from the touchpad
  */
@@ -951,7 +924,7 @@ static void synaptics_process_packet(struct psmouse *psmouse)
        }
 
        if (cr48_profile_sensor) {
-               synaptics_profile_sensor_process(psmouse, &hw, num_fingers);
+               synaptics_report_mt_data(psmouse, &hw, num_fingers);
                return;
        }