Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757239AbcCaSRf (ORCPT ); Thu, 31 Mar 2016 14:17:35 -0400 Received: from mail-pa0-f43.google.com ([209.85.220.43]:33180 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753225AbcCaSRd (ORCPT ); Thu, 31 Mar 2016 14:17:33 -0400 Date: Thu, 31 Mar 2016 11:17:30 -0700 From: "'Dmitry Torokhov'" To: DusonLin Cc: Linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "'Charles Mooney'" , "'jeff'" , "'Phoenix'" Subject: Re: [PATCH] Input: Change BTN_TOOL_FINGER falg when HOVER event trigger Message-ID: <20160331181730.GI39098@dtor-ws> References: <002801d18a28$2a12dfe0$7e389fa0$@emc.com.tw> <20160330023106.GA40436@dtor-ws> <014f01d18a69$6d761770$48624650$@emc.com.tw> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <014f01d18a69$6d761770$48624650$@emc.com.tw> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3805 Lines: 101 On Wed, Mar 30, 2016 at 05:49:12PM +0800, DusonLin wrote: > Hello Dmitry, > > Please check my response below, thanks. > > > -----Original Message----- > From: 'Dmitry Torokhov' [mailto:dmitry.torokhov@gmail.com] > Sent: Wednesday, March 30, 2016 10:31 AM > To: DusonLin > Cc: Linux-kernel@vger.kernel.org; linux-input@vger.kernel.org; 'Charles Mooney'; 'jeff'; 'Phoenix' > Subject: Re: [PATCH] Input: Change BTN_TOOL_FINGER falg when HOVER event trigger > > Hi Duson, > > On Wed, Mar 30, 2016 at 10:02:02AM +0800, DusonLin wrote: > > Only ABS_DISTANCE is not enough for upper OS to distiguish hover > > event be triggered from object form faraway to and close touchpad > > surface or from object prepare to leave the touchpad surface. We add > > BNT_TOOL_FINGER to help it. > > > > Object_at_faraway object_at_hover_area object_touch_touchpad > > BTN_TOUCH 0 0 1 > > BTN_TOOL_FINGER 0 1 1 > > ABS_DISTANCE 0 1 0 > > > > Signed-off by: Duson Lin > > --- > > drivers/input/mouse/elan_i2c_core.c | 14 +++++++++----- > > 1 file changed, 9 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/input/mouse/elan_i2c_core.c > > b/drivers/input/mouse/elan_i2c_core.c > > index 2f58985..9392a8c 100644 > > --- a/drivers/input/mouse/elan_i2c_core.c > > +++ b/drivers/input/mouse/elan_i2c_core.c > > @@ -4,7 +4,7 @@ > > * Copyright (c) 2013 ELAN Microelectronics Corp. > > * > > * Author: 林政維 (Duson Lin) > > - * Version: 1.6.0 > > + * Version: 1.6.1 > > * > > * Based on cyapa driver: > > * copyright (c) 2011-2012 Cypress Semiconductor, Inc. > > @@ -845,23 +845,27 @@ static void elan_report_absolute(struct > > elan_tp_data *data, u8 *packet) { > > struct input_dev *input = data->input; > > u8 *finger_data = &packet[ETP_FINGER_DATA_OFFSET]; > > - int i; > > + int i, valid_count = 0; > > This appears all whitespace-damaged. > [duson] will do. > > > u8 tp_info = packet[ETP_TOUCH_INFO_OFFSET]; > > u8 hover_info = packet[ETP_HOVER_INFO_OFFSET]; > > bool contact_valid, hover_event; > > > > - hover_event = hover_info & 0x40; > > + hover_event = (hover_info & 0x40); > > We do not need parentheses here. > [duson] will do. > > > for (i = 0; i < ETP_MAX_FINGERS; i++) { > > contact_valid = tp_info & (1U << (3 + i)); > > elan_report_contact(data, i, contact_valid, > > finger_data); > > > > - if (contact_valid) > > + if (contact_valid) { > > finger_data += ETP_FINGER_DATA_LEN; > > + valid_count++; > > + } > > } > > > > input_report_key(input, BTN_LEFT, tp_info & 0x01); > > + input_report_key(input, BTN_TOOL_FINGER, > > + ((hover_event != 0) | (valid_count > 0))); > > You do not want to use "bitwise or" here. > > > input_report_abs(input, ABS_DISTANCE, hover_event != 0); > > - input_mt_report_pointer_emulation(input, true); > > + input_mt_report_pointer_emulation(input, false); > > I wonder if we should teach input_mt_report_pointer_emulation() to handle hover properly. > [duson] But, it looks like the hover is not standard function and not all of touchpad support this function, > Even though, we still teach inpu_mt_report_pointer_emulation() to handle this function? Yes, something like this: If device supports ABS_DISTANCE and does not support ABS_MT_DISTANCE and ABS_DISTANCE != 0 is reported in current frame and there are no other contacts then report BTN_TOOL_FINGER. Thanks. -- Dmitry