From: "Henrik Rydberg" <rydberg@euromail.se>
To: Ping Cheng <pinglinux@gmail.com>
Cc: linux-input@vger.kernel.org, Ping Cheng <pingc@wacom.com>
Subject: Re: [PATCH 2/2] input: wacom - use new input-mt routines
Date: Wed, 5 Dec 2012 21:23:24 +0100 [thread overview]
Message-ID: <20121205202324.GB1367@polaris.bitmath.org> (raw)
In-Reply-To: <1354675454-32465-1-git-send-email-pingc@wacom.com>
Hi Ping,
> This patch brings wacom driver in-sync with input-mt changes
> made in release 3.7.
>
> Signed-off-by: Ping Cheng <pingc@wacom.com>
> Reviewed-by: Henrik Rydberg <rydberg@euromail.se>
> ---
> drivers/input/tablet/wacom_wac.c | 82 ++++++++++----------------------------
> drivers/input/tablet/wacom_wac.h | 1 -
> 2 files changed, 22 insertions(+), 61 deletions(-)
>
> diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
> index 097b559..a318bf4 100644
> --- a/drivers/input/tablet/wacom_wac.c
> +++ b/drivers/input/tablet/wacom_wac.c
> @@ -785,25 +785,6 @@ static int wacom_intuos_irq(struct wacom_wac *wacom)
> return 1;
> }
>
> -static int find_slot_from_contactid(struct wacom_wac *wacom, int contactid)
> -{
> - int touch_max = wacom->features.touch_max;
> - int i;
> -
> - if (!wacom->slots)
> - return -1;
> -
> - for (i = 0; i < touch_max; ++i) {
> - if (wacom->slots[i] == contactid)
> - return i;
> - }
> - for (i = 0; i < touch_max; ++i) {
> - if (wacom->slots[i] == -1)
> - return i;
> - }
> - return -1;
> -}
> -
> static int int_dist(int x1, int y1, int x2, int y2)
> {
> int x = x2 - x1;
> @@ -833,8 +814,7 @@ static int wacom_24hdt_irq(struct wacom_wac *wacom)
> for (i = 0; i < contacts_to_send; i++) {
> int offset = (WACOM_BYTES_PER_24HDT_PACKET * i) + 1;
> bool touch = data[offset] & 0x1 && !wacom->shared->stylus_in_proximity;
> - int id = data[offset + 1];
> - int slot = find_slot_from_contactid(wacom, id);
> + int slot = input_mt_get_slot_by_key(input, data[offset + 1]);
>
> if (slot < 0)
> continue;
> @@ -856,9 +836,7 @@ static int wacom_24hdt_irq(struct wacom_wac *wacom)
> input_report_abs(input, ABS_MT_WIDTH_MINOR, min(w, h));
> input_report_abs(input, ABS_MT_ORIENTATION, w > h);
> }
> - wacom->slots[slot] = touch ? id : -1;
> }
> -
Looks like a stray line removal here.
> input_mt_report_pointer_emulation(input, true);
>
> wacom->num_contacts_left -= contacts_to_send;
> @@ -895,7 +873,7 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
> int offset = (WACOM_BYTES_PER_MT_PACKET + x_offset) * i + 3;
> bool touch = data[offset] & 0x1;
> int id = le16_to_cpup((__le16 *)&data[offset + 1]);
> - int slot = find_slot_from_contactid(wacom, id);
> + int slot = input_mt_get_slot_by_key(input, id);
>
> if (slot < 0)
> continue;
> @@ -908,9 +886,7 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
> input_report_abs(input, ABS_MT_POSITION_X, x);
> input_report_abs(input, ABS_MT_POSITION_Y, y);
> }
> - wacom->slots[slot] = touch ? id : -1;
> }
> -
And here. Intentionally?
> input_mt_report_pointer_emulation(input, true);
>
> wacom->num_contacts_left -= contacts_to_send;
> @@ -942,12 +918,11 @@ static int wacom_tpc_mt_touch(struct wacom_wac *wacom)
> contact_with_no_pen_down_count++;
> }
> }
> + input_mt_report_pointer_emulation(input, true);
>
> /* keep touch state for pen event */
> wacom->shared->touch_down = (contact_with_no_pen_down_count > 0);
>
> - input_mt_report_pointer_emulation(input, true);
> -
> return 1;
> }
>
> @@ -1104,12 +1079,15 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
> static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
> {
> struct input_dev *input = wacom->input;
> - int slot_id = data[0] - 2; /* data[0] is between 2 and 17 */
> bool touch = data[1] & 0x80;
> + int slot = input_mt_get_slot_by_key(input, data[0]);
> +
> + if (slot < 0)
> + return;
>
> touch = touch && !wacom->shared->stylus_in_proximity;
>
> - input_mt_slot(input, slot_id);
> + input_mt_slot(input, slot);
> input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
>
> if (touch) {
> @@ -1162,7 +1140,6 @@ static int wacom_bpt3_touch(struct wacom_wac *wacom)
> wacom_bpt3_button_msg(wacom, data + offset);
>
> }
> -
Ditto.
> input_mt_report_pointer_emulation(input, true);
>
> input_sync(input);
> @@ -1639,17 +1616,11 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
> } else if (features->device_type == BTN_TOOL_FINGER) {
> __clear_bit(ABS_MISC, input_dev->absbit);
>
> - __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
> - __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
> - __set_bit(BTN_TOOL_TRIPLETAP, input_dev->keybit);
> - __set_bit(BTN_TOOL_QUADTAP, input_dev->keybit);
> -
> - input_mt_init_slots(input_dev, features->touch_max, 0);
> -
> input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
> 0, features->x_max, 0, 0);
> input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR,
> 0, features->y_max, 0, 0);
> + input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_POINTER);
> }
> break;
>
> @@ -1680,21 +1651,14 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
>
> case MTSCREEN:
> case MTTPC:
> - if (features->device_type == BTN_TOOL_FINGER) {
> - wacom_wac->slots = kmalloc(features->touch_max *
> - sizeof(int),
> - GFP_KERNEL);
> - if (!wacom_wac->slots)
> - return -ENOMEM;
> -
> - for (i = 0; i < features->touch_max; i++)
> - wacom_wac->slots[i] = -1;
> - }
> - /* fall through */
> -
> case TABLETPC2FG:
> if (features->device_type == BTN_TOOL_FINGER) {
> - input_mt_init_slots(input_dev, features->touch_max, 0);
> + unsigned int flags = INPUT_MT_DIRECT;
> +
> + if (wacom_wac->features.type == TABLETPC2FG)
> + flags = 0;
> +
> + input_mt_init_slots(input_dev, features->touch_max, flags);
> }
> /* fall through */
>
> @@ -1737,28 +1701,26 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
> __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
>
> if (features->device_type == BTN_TOOL_FINGER) {
> + unsigned int flags = INPUT_MT_POINTER;
> +
> __set_bit(BTN_LEFT, input_dev->keybit);
> __set_bit(BTN_FORWARD, input_dev->keybit);
> __set_bit(BTN_BACK, input_dev->keybit);
> __set_bit(BTN_RIGHT, input_dev->keybit);
>
> - __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
> - __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
> - input_mt_init_slots(input_dev, features->touch_max, 0);
> -
> if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) {
> - __set_bit(BTN_TOOL_TRIPLETAP,
> - input_dev->keybit);
> - __set_bit(BTN_TOOL_QUADTAP,
> - input_dev->keybit);
> -
> input_set_abs_params(input_dev,
> ABS_MT_TOUCH_MAJOR,
> 0, features->x_max, 0, 0);
> input_set_abs_params(input_dev,
> ABS_MT_TOUCH_MINOR,
> 0, features->y_max, 0, 0);
> + } else {
> + __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
> + __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit);
> + flags = 0;
> }
> + input_mt_init_slots(input_dev, features->touch_max, flags);
> } else if (features->device_type == BTN_TOOL_PEN) {
> __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
> __set_bit(BTN_TOOL_PEN, input_dev->keybit);
> diff --git a/drivers/input/tablet/wacom_wac.h b/drivers/input/tablet/wacom_wac.h
> index 9396d77..06410fe 100644
> --- a/drivers/input/tablet/wacom_wac.h
> +++ b/drivers/input/tablet/wacom_wac.h
> @@ -135,7 +135,6 @@ struct wacom_wac {
> int pid;
> int battery_capacity;
> int num_contacts_left;
> - int *slots;
> };
>
> #endif
> --
> 1.7.10.4
>
Reviewed-by: Henrik Rydberg <rydberg@euromail.se>
Thanks,
Henrik
next prev parent reply other threads:[~2012-12-05 20:21 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-05 2:44 [PATCH 2/2] input: wacom - use new input-mt routines Ping Cheng
2012-12-05 20:23 ` Henrik Rydberg [this message]
2012-12-05 20:26 ` Ping Cheng
[not found] <1354570717-2274-1-git-send-email-pingc@wacom.com>
2012-12-04 16:13 ` Henrik Rydberg
2012-12-04 18:22 ` Ping Cheng
2012-12-04 19:16 ` Dmitry Torokhov
2012-12-04 19:58 ` Ping Cheng
-- strict thread matches above, loose matches on Subject: below --
2012-12-01 0:20 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=20121205202324.GB1367@polaris.bitmath.org \
--to=rydberg@euromail.se \
--cc=linux-input@vger.kernel.org \
--cc=pingc@wacom.com \
--cc=pinglinux@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).