Inter-revision diff: patch 13

Comparing v3 (message) to v2 (message)

--- 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
-
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help