--- v2
+++ v4
@@ -1,5 +1,3 @@
-From: Daniel Kurtz <djkurtz@chromium.org>
-
Synaptics image sensor touchpads track up to 5 fingers, but only report 2.
They use a special "TYPE=2" (AGM-CONTACT) packet type that reports
the number of tracked fingers and which finger is reported in the SGM
@@ -9,16 +7,17 @@
fingers are touching.
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
+Acked-by: Chase Douglas <chase.douglas@canonical.com>
---
- drivers/input/mouse/synaptics.c | 44 ++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 43 insertions(+), 1 deletions(-)
+ drivers/input/mouse/synaptics.c | 45 ++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 44 insertions(+), 1 deletions(-)
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
-index 893e567..2a1e05f 100644
+index 3840cc7..4e9bc4a 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
-@@ -729,6 +729,10 @@ static void synaptics_image_sensor_1f(struct synaptics_data *priv,
- synaptics_mt_state_set(mt_state, 0, -1, -1);
+@@ -739,6 +739,10 @@ static void synaptics_image_sensor_1f(struct synaptics_data *priv,
+ synaptics_mt_state_set(mt_state, 1, -1, -1);
priv->mt_state_lost = true;
break;
+ case 4:
@@ -28,8 +27,8 @@
}
}
-@@ -775,6 +779,10 @@ static void synaptics_image_sensor_2f(struct synaptics_data *priv,
- synaptics_mt_state_set(mt_state, 0, -1, -1);
+@@ -793,6 +797,10 @@ static void synaptics_image_sensor_2f(struct synaptics_data *priv,
+ synaptics_mt_state_set(mt_state, 2, -1, -1);
priv->mt_state_lost = true;
break;
+ case 4:
@@ -39,7 +38,7 @@
}
}
-@@ -803,6 +811,22 @@ static void synaptics_image_sensor_3f(struct synaptics_data *priv,
+@@ -821,6 +829,22 @@ static void synaptics_image_sensor_3f(struct synaptics_data *priv,
break;
case 2:
/*
@@ -60,9 +59,9 @@
+
+ /*
* After some 3->1 and all 3->2 transitions, we lose track
- * of which slot is reported by sgm and agm.
+ * of which slot is reported by SGM and AGM.
*
-@@ -836,9 +860,22 @@ static void synaptics_image_sensor_3f(struct synaptics_data *priv,
+@@ -860,9 +884,22 @@ static void synaptics_image_sensor_3f(struct synaptics_data *priv,
* received AGM-CONTACT packet.
*/
break;
@@ -85,7 +84,7 @@
static void synaptics_image_sensor_process(struct psmouse *psmouse,
struct synaptics_hw_state *sgm)
{
-@@ -858,8 +895,10 @@ static void synaptics_image_sensor_process(struct psmouse *psmouse,
+@@ -882,8 +919,10 @@ static void synaptics_image_sensor_process(struct psmouse *psmouse,
synaptics_image_sensor_1f(priv, &mt_state);
else if (sgm->w == 0)
synaptics_image_sensor_2f(priv, &mt_state);
@@ -96,11 +95,12 @@
+ synaptics_image_sensor_45f(priv, &mt_state);
/* Send resulting input events to user space */
- synaptics_report_mt(psmouse, &mt_state, sgm);
-@@ -1078,6 +1117,9 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv)
+ synaptics_report_mt_data(psmouse, &mt_state, sgm);
+@@ -1100,6 +1139,10 @@ static void set_input_params(struct input_dev *dev, struct synaptics_data *priv)
+ ABS_MT_POSITION_Y);
+ /* Image sensors can report per-contact pressure */
input_set_abs_params(dev, ABS_MT_PRESSURE, 0, 255, 0, 0);
- /* Image sensors can sometimes report per-contact width */
- input_set_abs_params(dev, ABS_MT_TOUCH_MAJOR, 4, 15, 0, 0);
++
+ /* Image sensors can signal 4 and 5 finger clicks */
+ __set_bit(BTN_TOOL_QUADTAP, dev->keybit);
+ __set_bit(BTN_TOOL_QUINTTAP, dev->keybit);