--- v3
+++ v2
@@ -1,85 +1,77 @@
-The ABS_PRESSURE and ABS_WIDTH have special scales, and were initially
-added solely for thumb and palm recognition in the synaptics driver.
-This never really get used, however, and userspace quickly moved to
-MT solutions instead. This patch drops the unused events.
+Rename touch properties to match established nomenclature, and define
+the maximum number of fingers.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
---
- drivers/input/mouse/bcm5974.c | 26 +++++---------------------
- 1 file changed, 5 insertions(+), 21 deletions(-)
+ drivers/input/mouse/bcm5974.c | 25 +++++++++++++------------
+ 1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
-index 2de974c..e033d3a 100644
+index 8965824..cb9383e 100644
--- a/drivers/input/mouse/bcm5974.c
+++ b/drivers/input/mouse/bcm5974.c
-@@ -417,10 +417,6 @@ static void setup_events_to_report(struct input_dev *input_dev,
+@@ -183,18 +183,19 @@ struct tp_finger {
+ __le16 abs_y; /* absolute y coodinate */
+ __le16 rel_x; /* relative x coodinate */
+ __le16 rel_y; /* relative y coodinate */
+- __le16 size_major; /* finger size, major axis? */
+- __le16 size_minor; /* finger size, minor axis? */
++ __le16 tool_major; /* tool area, major axis */
++ __le16 tool_minor; /* tool area, minor axis */
+ __le16 orientation; /* 16384 when point, else 15 bit angle */
+- __le16 force_major; /* trackpad force, major axis? */
+- __le16 force_minor; /* trackpad force, minor axis? */
++ __le16 touch_major; /* touch area, major axis */
++ __le16 touch_minor; /* touch area, minor axis */
+ __le16 unused[3]; /* zeros */
+ __le16 multi; /* one finger: varies, more fingers: constant */
+ } __attribute__((packed,aligned(2)));
+
+ /* trackpad finger data size, empirically at least ten fingers */
++#define MAX_FINGERS 16
+ #define SIZEOF_FINGER sizeof(struct tp_finger)
+-#define SIZEOF_ALL_FINGERS (16 * SIZEOF_FINGER)
++#define SIZEOF_ALL_FINGERS (MAX_FINGERS * SIZEOF_FINGER)
+ #define MAX_FINGER_ORIENTATION 16384
+
+ /* device-specific parameters */
+@@ -480,13 +481,13 @@ static void report_finger_data(struct input_dev *input,
+ const struct tp_finger *f)
{
- __set_bit(EV_ABS, input_dev->evbit);
-
-- input_set_abs_params(input_dev, ABS_PRESSURE,
-- 0, cfg->p.dim, cfg->p.fuzz, 0);
-- input_set_abs_params(input_dev, ABS_TOOL_WIDTH,
-- 0, cfg->w.dim, cfg->w.fuzz, 0);
- input_set_abs_params(input_dev, ABS_X,
- 0, cfg->x.dim, cfg->x.fuzz, 0);
- input_set_abs_params(input_dev, ABS_Y,
-@@ -504,9 +500,9 @@ static int report_tp_state(struct bcm5974 *dev, int size)
- const struct bcm5974_config *c = &dev->cfg;
- const struct tp_finger *f;
- struct input_dev *input = dev->input;
-- int raw_p, raw_w, raw_x, raw_y, raw_n, i;
-+ int raw_p, raw_x, raw_y, raw_n, i;
- int ptest, origin, ibt = 0, nmin = 0, nmax = 0;
-- int abs_p = 0, abs_w = 0, abs_x = 0, abs_y = 0;
-+ int abs_x = 0, abs_y = 0;
-
- if (size < c->tp_offset || (size - c->tp_offset) % SIZEOF_FINGER != 0)
- return -EIO;
-@@ -523,22 +519,19 @@ static int report_tp_state(struct bcm5974 *dev, int size)
+ input_report_abs(input, ABS_MT_TOUCH_MAJOR,
+- raw2int(f->force_major) << 1);
++ raw2int(f->touch_major) << 1);
+ input_report_abs(input, ABS_MT_TOUCH_MINOR,
+- raw2int(f->force_minor) << 1);
++ raw2int(f->touch_minor) << 1);
+ input_report_abs(input, ABS_MT_WIDTH_MAJOR,
+- raw2int(f->size_major) << 1);
++ raw2int(f->tool_major) << 1);
+ input_report_abs(input, ABS_MT_WIDTH_MINOR,
+- raw2int(f->size_minor) << 1);
++ raw2int(f->tool_minor) << 1);
+ input_report_abs(input, ABS_MT_ORIENTATION,
+ MAX_FINGER_ORIENTATION - raw2int(f->orientation));
+ input_report_abs(input, ABS_MT_POSITION_X, raw2int(f->abs_x));
+@@ -519,8 +520,8 @@ static int report_tp_state(struct bcm5974 *dev, int size)
+ for (i = 0; i < raw_n; i++)
report_finger_data(input, c, &f[i]);
- raw_p = raw2int(f->touch_major);
-- raw_w = raw2int(f->tool_major);
+- raw_p = raw2int(f->force_major);
+- raw_w = raw2int(f->size_major);
++ raw_p = raw2int(f->touch_major);
++ raw_w = raw2int(f->tool_major);
raw_x = raw2int(f->abs_x);
raw_y = raw2int(f->abs_y);
- dprintk(9,
- "bcm5974: "
-- "raw: p: %+05d w: %+05d x: %+05d y: %+05d n: %d\n",
-- raw_p, raw_w, raw_x, raw_y, raw_n);
-+ "raw: p: %+05d x: %+05d y: %+05d n: %d\n",
-+ raw_p, raw_x, raw_y, raw_n);
-
- ptest = int2bound(&c->p, raw_p);
- origin = raw2int(f->origin);
-
- /* while tracking finger still valid, count all fingers */
- if (ptest > PRESSURE_LOW && origin) {
-- abs_p = ptest;
-- abs_w = int2bound(&c->w, raw_w);
- abs_x = int2bound(&c->x, raw_x - c->x.devmin);
+@@ -540,7 +541,7 @@ static int report_tp_state(struct bcm5974 *dev, int size)
abs_y = int2bound(&c->y, c->y.devmax - raw_y);
while (raw_n--) {
-@@ -568,18 +561,9 @@ static int report_tp_state(struct bcm5974 *dev, int size)
- input_report_key(input, BTN_TOOL_TRIPLETAP, dev->fingers == 3);
- input_report_key(input, BTN_TOOL_QUADTAP, dev->fingers > 3);
-
-- input_report_abs(input, ABS_PRESSURE, abs_p);
-- input_report_abs(input, ABS_TOOL_WIDTH, abs_w);
--
-- if (abs_p) {
-+ if (dev->fingers > 0) {
- input_report_abs(input, ABS_X, abs_x);
- input_report_abs(input, ABS_Y, abs_y);
--
-- dprintk(8,
-- "bcm5974: abs: p: %+05d w: %+05d x: %+05d y: %+05d "
-- "nmin: %d nmax: %d n: %d ibt: %d\n", abs_p, abs_w,
-- abs_x, abs_y, nmin, nmax, dev->fingers, ibt);
--
- }
-
- /* type 2 reports button events via ibt only */
+ ptest = int2bound(&c->p,
+- raw2int(f->force_major));
++ raw2int(f->touch_major));
+ if (ptest > PRESSURE_LOW)
+ nmax++;
+ if (ptest > PRESSURE_HIGH)
--
1.7.12
-