From patchwork Fri Dec 8 23:07:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Darren Hart X-Patchwork-Id: 10103419 X-Patchwork-Delegate: dvhart@infradead.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0DD5060360 for ; Fri, 8 Dec 2017 23:07:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EA34328F2D for ; Fri, 8 Dec 2017 23:07:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DDEC128F35; Fri, 8 Dec 2017 23:07:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 564EB28F2D for ; Fri, 8 Dec 2017 23:07:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752843AbdLHXHK (ORCPT ); Fri, 8 Dec 2017 18:07:10 -0500 Received: from bombadil.infradead.org ([65.50.211.133]:58898 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752631AbdLHXHK (ORCPT ); Fri, 8 Dec 2017 18:07:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=Avwm8vzkAU7iUfwvjSi7nbnZOmqukiGov+726v/WvUE=; b=I5omZB8bLY1acY67Sl4VwNxn3 Y6eahWek8E6WElcOw5Ou6EEnndZ3jmq/v77jmFEi+XNMH4XEpO6pDjgHkyMHfoR6utPc2EiHe7aKy khunAlTdpV+LNO/O4/wNI7Dfby/8lIpoZDRMhMZxlMAKo4xq+YXx9lG+5gNDkH63l40DUlop9rkLf PGfIyv6f6QwlwmQgHzwhmM4FHJ8FCrqdtnoNb+DTcKpi+L9Ju/UsYBmD6S9dpKJeIdSl7xG/jTbNX 3oxRnTLWy/NZfvltyHu3Akbcpruux9yskQ6eegxKhtohpYC/ur6OLi/1OVzRe5k0OSjhMJR36qIHW asB6DT96Q==; Received: from dvhart by bombadil.infradead.org with local (Exim 4.87 #1 (Red Hat Linux)) id 1eNRjZ-0008Kc-RE; Fri, 08 Dec 2017 23:07:09 +0000 Date: Fri, 8 Dec 2017 15:07:08 -0800 From: "Darren Hart (VMware)" To: platform-driver-x86@vger.kernel.org Cc: LKML , Stefan =?iso-8859-1?Q?Br=FCns?= , AceLan Kao , Andy Shevchenko Subject: [PATCH] platform/x86: intel-vbtn: Simplify autorelease logic Message-ID: MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.8.0 (2017-02-23) Sender: platform-driver-x86-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The new notify_handler logic determining if autorelease should be used or not is a bit awkward, and can result in more than one call to sparse_keymap_report_event for the same event (scancode). The nesting and long lines also made it difficult to read. Simplify the logic by eliminating a level of nesting with a goto and always calculate autorelease and val so we can make a single call to sparse_keymap_report_event. Signed-off-by: Darren Hart (VMware) Cc: Stefan Brüns Cc: AceLan Kao Reviewed-by: Stefan Brüns Tested-by: Stefan Brüns --- Note: This is based on top of Stefan's v2 patch series for intel-vbtn, currently in my review-dvhart branch. drivers/platform/x86/intel-vbtn.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel-vbtn.c index 0861efe..297e1ac 100644 --- a/drivers/platform/x86/intel-vbtn.c +++ b/drivers/platform/x86/intel-vbtn.c @@ -80,6 +80,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) { struct platform_device *device = context; struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev); + unsigned int val = !(event & 1); /* Even=press, Odd=release */ const struct key_entry *ke_rel; bool autorelease; @@ -88,20 +89,20 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) pm_wakeup_hard_event(&device->dev); return; } - } else { - /* Use the fact press/release come in even/odd pairs */ - if ((event & 1) && sparse_keymap_report_event(priv->input_dev, - event, 0, false)) - return; + goto out_unknown; + } - ke_rel = sparse_keymap_entry_from_scancode(priv->input_dev, - event | 1); - autorelease = !ke_rel || ke_rel->type == KE_IGNORE; + /* + * Event press events are autorelease if there is no corresponding odd + * release event, or if the odd event is KE_IGNORE. + */ + ke_rel = sparse_keymap_entry_from_scancode(priv->input_dev, event | 1); + autorelease = val && (!ke_rel || ke_rel->type == KE_IGNORE); - if (sparse_keymap_report_event(priv->input_dev, event, 1, - autorelease)) - return; - } + if (sparse_keymap_report_event(priv->input_dev, event, val, autorelease)) + return; + +out_unknown: dev_dbg(&device->dev, "unknown event index 0x%x\n", event); }