From patchwork Tue Mar 31 07:24:30 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Henrik Rydberg X-Patchwork-Id: 6127871 Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D7113BF4A6 for ; Tue, 31 Mar 2015 07:40:12 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DDF022010B for ; Tue, 31 Mar 2015 07:40:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9948C20107 for ; Tue, 31 Mar 2015 07:40:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751384AbbCaHkJ (ORCPT ); Tue, 31 Mar 2015 03:40:09 -0400 Received: from mailrelay2.public.one.com ([91.198.169.125]:36648 "EHLO mailrelay2.public.one.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752628AbbCaHkI (ORCPT ); Tue, 31 Mar 2015 03:40:08 -0400 X-HalOne-Cookie: e99389bf86a204b5b272ba11f097ef23b8115cd4 X-HalOne-ID: e6b81e58-d776-11e4-8e3f-b82a72d03b9b DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=bitmath.org; s=20140924; h=from:subject:date:message-id:to:cc:mime-version:content-type:in-reply-to: references; bh=YKPR1g0XulrabYmOm+dMxafrD1sjDqeWq8S+6wZiPWY=; b=ooSf1/APj7KxuO5kzKLRbbwGggzhLvKGu/RNFOkHzuJHL/znrwCuLhkDHimQ7tySIH24/x29JeIpl h6cmIQoll3B66eoYCDe6TAKLU5+8VeJzl9Vk4YYPhS7Lb5FPBjBXyPiPJv4HC2NHe/21CTGZE6DjPm 7RXVDygV0l/P7x04= Received: from polaris (unknown [213.113.165.61]) by smtpfilter2.public.one.com (Halon Mail Gateway) with ESMTPA; Tue, 31 Mar 2015 07:23:58 +0000 (GMT) Received: by polaris (sSMTP sendmail emulation); Tue, 31 Mar 2015 09:24:30 +0200 Date: Tue, 31 Mar 2015 09:24:30 +0200 From: Henrik Rydberg To: Benjamin Tissoires Cc: Dmitry Torokhov , Hans de Goede , Peter Hutterer , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3] Input: mt - prevent balanced slot assignment to assign twice the slot Message-ID: <20150331072430.GA25785@polaris.bitmath.org> References: <1427753368-2795-1-git-send-email-benjamin.tissoires@redhat.com> <1427753368-2795-2-git-send-email-benjamin.tissoires@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1427753368-2795-2-git-send-email-benjamin.tissoires@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi Benjamin, > If two touches are under the dmax distance, it looks like they can now > be assigned to the same slot. Add a band aid to prevent such situation > and be able to use the balanced slot assignment. Yes, great find. You patch is correct, but it is not a band aid, but a result stemming from a limitation in how equality constraints (read unique assignments) can be handled in the iterative algorithm. This cannot happen in the original algorithm, because of the extra penalization for overcovers. Here is an alternative version which cleans up the loop logic somewhat, together with a different commit message. I did not have any opportunity to check this in hardware. I you like it and find it working, then please take over the authorship and just add a signed-off from me. Thanks, Henrik --- From e00d63f6cadf20d871bed763b3531428b34d785c Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Tue, 31 Mar 2015 09:10:02 +0200 Subject: [PATCH] Input: MT - make slot assignment work for overcovered solutions The recent inclusion of a deassignment cost in the slot assignment algorithm did not properly account for the corner cases where the solutions are overcovered. This patch makes sure the resulting assignment is unique, allocating new slots when necessary. UNTESTED --- drivers/input/input-mt.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/input/input-mt.c b/drivers/input/input-mt.c index fbe29fc..17e80a6 100644 --- a/drivers/input/input-mt.c +++ b/drivers/input/input-mt.c @@ -363,25 +363,28 @@ static void input_mt_set_slots(struct input_mt *mt, int *slots, int num_pos) { struct input_mt_slot *s; - int *w = mt->red, *p; + int *w = mt->red, j; - for (p = slots; p != slots + num_pos; p++) - *p = -1; + for (j = 0; j != num_pos; j++) + slots[j] = -1; for (s = mt->slots; s != mt->slots + mt->num_slots; s++) { if (!input_mt_is_active(s)) continue; - for (p = slots; p != slots + num_pos; p++) - if (*w++ < 0) - *p = s - mt->slots; + for (j = 0; j != num_pos; j++) + if (w[j] < 0) { + slots[j] = s - mt->slots; + break; + } + w += num_pos; } for (s = mt->slots; s != mt->slots + mt->num_slots; s++) { if (input_mt_is_active(s)) continue; - for (p = slots; p != slots + num_pos; p++) - if (*p < 0) { - *p = s - mt->slots; + for (j = 0; j != num_pos; j++) + if (slots[j] < 0) { + slots[j] = s - mt->slots; break; } }