From: Mathias Gottschlag <mgottschlag@gmail.com>
To: Dmitry Tunin <hanipouspilot@gmail.com>, linux-input@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH v8] psmouse - focaltech pass finger width to userspace
Date: Fri, 24 Apr 2015 12:23:09 +0200 [thread overview]
Message-ID: <553A198D.8010103@gmail.com> (raw)
In-Reply-To: <1429830932-4501-1-git-send-email-hanipouspilot@gmail.com>
Hi,
Some comments below. If it is not a problem that width values are
outdated as soon as there are two or more fingers on the touchpad, I
think the change is good.
Regards,
Mathias
Am 24.04.2015 um 01:15 schrieb Dmitry Tunin:
> Focaltech touchpads report finger width in packet[5] of absolute packet.
> Range for width in raw format is 0x10 - 0x70. Second half-byte is always 0.
> 0xff is reported, when a large contact area is detected.
> This can be handled in userspace.
>
> Signed-off-by: Dmitry Tunin <hanipouspilot@gmail.com>
> ---
> drivers/input/mouse/focaltech.c | 16 ++++++++++++++--
> 1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
> index 23d2594..ea53f8b 100644
> --- a/drivers/input/mouse/focaltech.c
> +++ b/drivers/input/mouse/focaltech.c
> @@ -90,6 +90,13 @@ struct focaltech_finger_state {
> */
> unsigned int x;
> unsigned int y;
> +
> + /*
> + * Finger width 0-7 and 15 for 'latching'
You already describe below that 15 is latched - what you write above
should probably rather be something like "15 if a very large contact
area was detected" or something like that.
> + * 15 value stays until the finger is released
> + * Width is reported only in absolute packets
> + */
> + unsigned int width;
> };
>
> /*
> @@ -112,7 +119,7 @@ struct focaltech_data {
> struct focaltech_hw_state state;
> };
>
> -static void focaltech_report_state(struct psmouse *psmouse)
> +static void focaltech_report_state(struct psmouse *psmouse, bool abs)
> {
> struct focaltech_data *priv = psmouse->private;
> struct focaltech_hw_state *state = &priv->state;
> @@ -137,6 +144,7 @@ static void focaltech_report_state(struct psmouse *psmouse)
> input_report_abs(dev, ABS_MT_POSITION_X, clamped_x);
> input_report_abs(dev, ABS_MT_POSITION_Y,
> priv->y_max - clamped_y);
> + if (abs) input_report_abs(dev, ABS_TOOL_WIDTH, state->width);
You are sending width here for *all* fingers, even though only one
finger has an up-to-date width value. Is that intentional? I fail to see
how that is different from always sending width no matter the packet
type, because in any case all but one fingers will have an outdated
width value.
> }
> }
> input_mt_report_pointer_emulation(dev, true);
> @@ -187,6 +195,7 @@ static void focaltech_process_abs_packet(struct psmouse *psmouse,
>
> state->fingers[finger].x = ((packet[1] & 0xf) << 8) | packet[2];
> state->fingers[finger].y = (packet[3] << 8) | packet[4];
> + state->fingers[finger].width = packet[5] >> 4;
> state->fingers[finger].valid = true;
> }
>
> @@ -228,14 +237,17 @@ static void focaltech_process_packet(struct psmouse *psmouse)
> switch (packet[0] & 0xf) {
> case FOC_TOUCH:
> focaltech_process_touch_packet(psmouse, packet);
> + focaltech_report_state(psmouse, false);
> break;
>
> case FOC_ABS:
> focaltech_process_abs_packet(psmouse, packet);
> + focaltech_report_state(psmouse, true);
> break;
>
> case FOC_REL:
> focaltech_process_rel_packet(psmouse, packet);
> + focaltech_report_state(psmouse, false);
> break;
>
> default:
> @@ -243,7 +255,6 @@ static void focaltech_process_packet(struct psmouse *psmouse)
> break;
> }
>
Remove that blank line as well? :)
> - focaltech_report_state(psmouse);
> }
>
> static psmouse_ret_t focaltech_process_byte(struct psmouse *psmouse)
> @@ -331,6 +342,7 @@ static void focaltech_set_input_params(struct psmouse *psmouse)
> __set_bit(EV_ABS, dev->evbit);
> input_set_abs_params(dev, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0);
> input_set_abs_params(dev, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0);
> + input_set_abs_params(dev, ABS_TOOL_WIDTH, 0, 15, 0, 0);
> input_mt_init_slots(dev, 5, INPUT_MT_POINTER);
> __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
> }
next prev parent reply other threads:[~2015-04-24 10:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-23 23:15 [PATCH v8] psmouse - focaltech pass finger width to userspace Dmitry Tunin
2015-04-24 10:23 ` Mathias Gottschlag [this message]
2015-04-24 10:44 ` Dmitry Tunin
2015-04-24 10:57 ` Dmitry Tunin
2015-04-24 10:57 ` Dmitry Tunin
2015-04-24 12:00 ` [PATCH v9] " Dmitry Tunin
2015-04-29 14:56 ` [PATCH v8] " Dmitry Tunin
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=553A198D.8010103@gmail.com \
--to=mgottschlag@gmail.com \
--cc=hanipouspilot@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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.