From: Ping Cheng <pinglinux@gmail.com>
To: linux-input@vger.kernel.org
Cc: dmitry.torokhov@gmail.com, rydberg@euromail.se,
Ping Cheng <pinglinux@gmail.com>, Ping Cheng <pingc@wacom.com>
Subject: [PATCH] input : wacom - report resolution for ABS_MT events
Date: Thu, 27 Jan 2011 17:47:25 -0800 [thread overview]
Message-ID: <1296179245-14614-1-git-send-email-pinglinux@gmail.com> (raw)
This is mainly required by the serial pen and touch devices since
both pen and touch are on the same port. Updated the USB ones to
keep MT event definition consistent among serial and USB devices.
Signed-off-by: Ping Cheng <pingc@wacom.com>
---
drivers/input/tablet/wacom_wac.c | 6 ++++++
drivers/input/touchscreen/wacom_w8001.c | 23 ++++++++++++++++++++++-
2 files changed, 28 insertions(+), 1 deletions(-)
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
index 367fa82..f129440 100644
--- a/drivers/input/tablet/wacom_wac.c
+++ b/drivers/input/tablet/wacom_wac.c
@@ -1283,6 +1283,12 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
input_set_abs_params(input_dev, ABS_MT_PRESSURE,
0, features->pressure_max,
features->pressure_fuzz, 0);
+ input_abs_set_res(input_dev, ABS_MT_POSITION_X,
+ wacom_calculate_touch_res(features->x_max,
+ features->x_phy));
+ input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
+ wacom_calculate_touch_res(features->y_max,
+ features->y_phy));
input_abs_set_res(input_dev, ABS_X,
wacom_calculate_touch_res(features->x_max,
features->x_phy));
diff --git a/drivers/input/touchscreen/wacom_w8001.c b/drivers/input/touchscreen/wacom_w8001.c
index 5cb8449..f54da5c 100644
--- a/drivers/input/touchscreen/wacom_w8001.c
+++ b/drivers/input/touchscreen/wacom_w8001.c
@@ -51,6 +51,11 @@ MODULE_LICENSE("GPL");
#define W8001_PKTLEN_TPCCTL 11 /* control packet */
#define W8001_PKTLEN_TOUCH2FG 13
+/* resolution in points/mm */
+#define W8001_PEN_RESOLUTION 100
+#define W8001_TOUCH_RESOLUTION 10
+
+
struct w8001_coord {
u8 rdy;
u8 tsw;
@@ -92,6 +97,8 @@ struct w8001 {
u16 max_touch_y;
u16 max_pen_x;
u16 max_pen_y;
+ u16 touch_res_x;
+ u16 touch_res_y;
char name[64];
};
@@ -198,7 +205,7 @@ static void parse_touchquery(u8 *data, struct w8001_touch_query *query)
query->y = 1024;
if (query->panel_res)
query->x = query->y = (1 << query->panel_res);
- query->panel_res = 10;
+ query->panel_res = W8001_TOUCH_RESOLUTION;
}
}
@@ -394,6 +401,8 @@ static int w8001_setup(struct w8001 *w8001)
input_set_abs_params(dev, ABS_X, 0, coord.x, 0, 0);
input_set_abs_params(dev, ABS_Y, 0, coord.y, 0, 0);
+ input_abs_set_res(dev, ABS_X, W8001_PEN_RESOLUTION);
+ input_abs_set_res(dev, ABS_Y, W8001_PEN_RESOLUTION);
input_set_abs_params(dev, ABS_PRESSURE, 0, coord.pen_pressure, 0, 0);
if (coord.tilt_x && coord.tilt_y) {
input_set_abs_params(dev, ABS_TILT_X, 0, coord.tilt_x, 0, 0);
@@ -411,6 +420,9 @@ static int w8001_setup(struct w8001 *w8001)
* second byte is empty, which indicates touch is not supported.
*/
if (!error && w8001->response[1]) {
+ u16 touch_res_x = touch.panel_res;
+ u16 touch_res_y = touch.panel_res;
+
__set_bit(BTN_TOUCH, dev->keybit);
__set_bit(BTN_TOOL_FINGER, dev->keybit);
@@ -422,10 +434,17 @@ static int w8001_setup(struct w8001 *w8001)
if (w8001->max_pen_x && w8001->max_pen_y) {
touch.x = w8001->max_pen_x;
touch.y = w8001->max_pen_y;
+
+ /* scale resolution as well */
+ touch_res_x *= w8001->max_pen_x / w8001->max_touch_x;
+ touch_res_y *= w8001->max_pen_y / w8001->max_touch_y;
}
input_set_abs_params(dev, ABS_X, 0, touch.x, 0, 0);
input_set_abs_params(dev, ABS_Y, 0, touch.y, 0, 0);
+ /* don't report touch resolution for ST since pen resolution
+ * is more important
+ */
switch (touch.sensor_id) {
case 0:
@@ -453,6 +472,8 @@ static int w8001_setup(struct w8001 *w8001)
0, touch.y, 0, 0);
input_set_abs_params(dev, ABS_MT_TOOL_TYPE,
0, MT_TOOL_MAX, 0, 0);
+ input_abs_set_res(dev, ABS_MT_POSITION_X, touch_res_x);
+ input_abs_set_res(dev, ABS_MT_POSITION_Y, touch_res_y);
strlcat(w8001->name, " 2FG", sizeof(w8001->name));
if (w8001->max_pen_x && w8001->max_pen_y)
--
1.7.3.5
next reply other threads:[~2011-01-28 1:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-28 1:47 Ping Cheng [this message]
2011-01-28 17:30 ` [PATCH] input : wacom - report resolution for ABS_MT events Henrik Rydberg
2011-01-28 18:23 ` Ping Cheng
2011-01-28 18:46 ` Dmitry Torokhov
2011-01-28 19:01 ` Ping Cheng
2011-01-28 19:37 ` Dmitry Torokhov
2011-01-28 20:08 ` Ping Cheng
2011-01-28 20:54 ` Dmitry Torokhov
2011-01-28 21:57 ` Ping Cheng
2011-01-29 0:05 ` Dmitry Torokhov
2011-01-29 6:19 ` Ping Cheng
2011-01-28 19:12 ` Henrik Rydberg
2011-01-28 20:08 ` Ping Cheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1296179245-14614-1-git-send-email-pinglinux@gmail.com \
--to=pinglinux@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=pingc@wacom.com \
--cc=rydberg@euromail.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.