Message ID | 1315190661-7133-1-git-send-email-chris@cnpbagwell.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sun, Sep 4, 2011 at 7:44 PM, <chris@cnpbagwell.com> wrote: > From: Chris Bagwell <chris@cnpbagwell.com> > > Bamboo's with Product ID's > 0xD4 return values unrelated to pressure > in touch 1 pressure field. They also report touch 2's X/Y values > shifted down 1 byte (where pressure was). This results in jumpy > 1 finger touch and totally invalid 2nd finger data. > > For touch detection, switch to a Touch Present single bit that > all versions of Bamboo support. > > For touch 2 offset, calculate offset based on a bit that is set > different between the two packet layouts. > > Since touch pressure reports were removed from driver, there was > no need to be reading pressure any more. > > Signed-off-by: Chris Bagwell <chris@cnpbagwell.com> > --- > drivers/input/tablet/wacom_wac.c | 15 +++++++++------ > 1 files changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c > index 2d88316..651f109 100644 > --- a/drivers/input/tablet/wacom_wac.c > +++ b/drivers/input/tablet/wacom_wac.c > @@ -800,20 +800,23 @@ static int wacom_bpt_touch(struct wacom_wac *wacom) > int i; > > for (i = 0; i < 2; i++) { > - int p = data[9 * i + 2]; > - bool touch = p && !wacom->shared->stylus_in_proximity; > + int offset = (data[1] & 0x80) ? (8 * i) : (9 * i); > + bool touch = data[offset + 3] & 0x80; Can we add: touch = touch && !wacom->shared->stylus_in_proximity; here so we can keep the old flow? I remember Henrik recommended this approach over the if-statement for my patch. Except that, Reviewed-by: Ping Cheng <pinglinux@gmail.com> Ping > - input_mt_slot(input, i); > - input_mt_report_slot_state(input, MT_TOOL_FINGER, touch); > /* > * Touch events need to be disabled while stylus is > * in proximity because user's hand is resting on touchpad > * and sending unwanted events. User expects tablet buttons > * to continue working though. > */ > + if (wacom->shared->stylus_in_proximity) > + touch = 0; > + > + input_mt_slot(input, i); > + input_mt_report_slot_state(input, MT_TOOL_FINGER, touch); > if (touch) { > - int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff; > - int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff; > + int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff; > + int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff; > if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) { > x <<= 5; > y <<= 5; > -- > 1.7.6 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-input" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
different between the two packet layouts. Since touch pressure reports were removed from driver, there was no need to be reading pressure any more. Signed-off-by: Chris Bagwell <chris@cnpbagwell.com> --- drivers/input/tablet/wacom_wac.c | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c index 2d88316..651f109 100644 --- a/drivers/input/tablet/wacom_wac.c +++ b/drivers/input/tablet/wacom_wac.c @@ -800,20 +800,23 @@ static int wacom_bpt_touch(struct wacom_wac *wacom) int i; for (i = 0; i < 2; i++) { - int p = data[9 * i + 2]; - bool touch = p && !wacom->shared->stylus_in_proximity; + int offset = (data[1] & 0x80) ? (8 * i) : (9 * i); + bool touch = data[offset + 3] & 0x80; - input_mt_slot(input, i); - input_mt_report_slot_state(input, MT_TOOL_FINGER, touch); /* * Touch events need to be disabled while stylus is * in proximity because user's hand is resting on touchpad * and sending unwanted events. User expects tablet buttons * to continue working though. */ + if (wacom->shared->stylus_in_proximity) + touch = 0; + + input_mt_slot(input, i); + input_mt_report_slot_state(input, MT_TOOL_FINGER, touch); if (touch) { - int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff; - int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff; + int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff; + int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff; if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) { x <<= 5; y <<= 5;
From: Chris Bagwell <chris@cnpbagwell.com> Bamboo's with Product ID's > 0xD4 return values unrelated to pressure in touch 1 pressure field. They also report touch 2's X/Y values shifted down 1 byte (where pressure was). This results in jumpy 1 finger touch and totally invalid 2nd finger data. For touch detection, switch to a Touch Present single bit that all versions of Bamboo support. For touch 2 offset, calculate offset based on a bit that is set