Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp5507082yba; Wed, 10 Apr 2019 22:43:51 -0700 (PDT) X-Google-Smtp-Source: APXvYqzh7S8QFHq1HlfKwDN04EjbYSEGFnXyLlkc9goqH9T+fRTRrMkfYIS53uTYEloAyvtJj6xb X-Received: by 2002:a17:902:7c01:: with SMTP id x1mr22566408pll.299.1554961430960; Wed, 10 Apr 2019 22:43:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554961430; cv=none; d=google.com; s=arc-20160816; b=yCLE2B2tfG7Wc6H9Ua2sq8HzP23cBya2X5Hih+JNrWlcK7CIeuOxDu25gjutK4abDM +0ztHcI4Upz5NOZivnrpy2PVQtEbSwelV8d2jwewHWDZybSb3GijJ6LzPOJeCtuIe2iG OfG9lRPt6zfnMcz0engAk0BCCC2jCBPUiZm0WeDmNLM/czCpzBv3FazEFx/GtCJQiusx OMpsq+dIAT3czqskJOCqoXNqrPfQBKfZxaqOX63qJZFDYdSOZflBfuTz9ALIugvd03uf 26dUJh6VwFBkAItf80IgUHjYM1/xoa093GGbrY3kgC7n98CVaCcHQYY18sDhnGule72Q qGyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:references:cc:from:subject:dkim-signature; bh=1xNhLvjddpC+m7l+jNGd7GnlNGMx67U/dMdy5froaEA=; b=v4MMyK0Mzxd2Z2YFhy2lHzDxwyDNk958ob5r+2m6SBfzvU+/uJpqVsAtfPnndg4bCL x6wuzusFXGHaRqXR8QyqiVJLep/JwvRaQA2LWcRgzV+kmNI8948qdg0bxC7WMB9EpAER Q/YUYgSkF9xhmQ9QbLjPit4hnslVitpyqu3CcxVlj4hwvIxurFS58cjr9zYIq3Ep6Gyo rSfct33ZUbbuGfu8wFaxCdLY9hUND23iEUU+v7zvlMLt9ohOQY8Rb/Uzhf6xIbms/ESv rtcIImLGA/3UP94ZoUao4qcI/SNYuvXxSl2CDBmTMnJG/g6kuLJ4ueArRlm6ZdAXer9y uHbw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=kzU9K5P8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m19si33655763pgk.76.2019.04.10.22.43.35; Wed, 10 Apr 2019 22:43:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=kzU9K5P8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726682AbfDKFm5 (ORCPT + 99 others); Thu, 11 Apr 2019 01:42:57 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:35470 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726230AbfDKFm5 (ORCPT ); Thu, 11 Apr 2019 01:42:57 -0400 Received: by mail-wm1-f66.google.com with SMTP id y197so4967968wmd.0; Wed, 10 Apr 2019 22:42:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:cc:references:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=1xNhLvjddpC+m7l+jNGd7GnlNGMx67U/dMdy5froaEA=; b=kzU9K5P8taYCpYxLxtMUyp6cC5Gs40YYpxf5auzfgHdU+WTPoHl3+5HXb75eaY3z0s Sgxl2LExrpX4DfC2BS5VjTDjIIYDSgNd/ocYuN7fNiotNoI7+kW9eji8CmL3b7sHayyT T35kroYudI5psfsgs4TTq68c4td9uHGCymHyZYxBaEQ8FEFksb8LXgyXfJwt7CEcQ5n2 a1K4AwGKfVlZoZ/9RqkGv/T8SkUxOy3ZH87q9CzkoHUiXcyWZ9KvRiLKQx0Qi8wp76+O ZwqPvi6wjF7o3JrcWP5QT8hTWEkDnkD+CUjF4hIvS4gxIgFd3JZkHd6ff3byFo/mVbvX Jkzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=1xNhLvjddpC+m7l+jNGd7GnlNGMx67U/dMdy5froaEA=; b=UV941jspSoBxFz3NtkCsDpl5h4batYTF0s1VlRDmbgCBa/aw5EO/LhEomn9GNNKnfO HDPYBUUHBss65gZDCP/GQwuzRoLiqUxDoW5/i/eDBijFrsfJtkBxCohvoBl1wLW8TEvU KKAcKZKyCaOMl++VxOPtXc/NIthaBEcxKia31l12eUk425KFDTwfWuNvdXrikyVc9oXa V59jlkMSvYZAoDQNIJuwRizRHEO6JOhpo/d9smU4VJ0Z/8zuIdfTinOsoyfBA6fZ6sLn lHyfn3ihA1rhkiGFIdW/cHc/xXxu5ijfKCLDdLxTZIMYYwU1pU/QEy4ktmG8SmiMzLdh 4IEQ== X-Gm-Message-State: APjAAAUhBAePpGJRv9ZNyJigVFimbNHfTasWmz79PqnnMbDuJO37CDfP oPLagY9Y0/w1a8Im9bLiRuhGf7K5SM8= X-Received: by 2002:a1c:d1c5:: with SMTP id i188mr4970189wmg.8.1554961374962; Wed, 10 Apr 2019 22:42:54 -0700 (PDT) Received: from [192.168.20.141] ([194.99.104.18]) by smtp.gmail.com with ESMTPSA id i18sm34636208wrm.7.2019.04.10.22.42.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Apr 2019 22:42:54 -0700 (PDT) Subject: [PATCH v2 04/11] platform/x86: asus-wmi: Add quirk to force DSTS WMI method detection From: Yurii Pavlovskyi Cc: Corentin Chary , Darren Hart , Andy Shevchenko , Daniel Drake , acpi4asus-user@lists.sourceforge.net, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org References: Message-ID: <78af5288-78f6-cf51-6bc8-b24a4467927f@gmail.com> Date: Thu, 11 Apr 2019 07:42:52 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The DSTS method detection fails, as nothing is returned if method is not defined in WMNB. As a result the control of keyboard backlight is not functional for TUF Gaming series laptops (at the time the only functionality of the driver on this model implemented with WMI methods). Patch was tested on a newer TUF Gaming FX505GM and older K54C model. FX505GM: Method (WMNB, 3, Serialized) { ... If ((Local0 == 0x53545344)) { ... Return (Zero) } ... // No return } K54C: Method (WMNB, 3, Serialized) { ... If ((Local0 == 0x53545344)) { ... Return (0x02) } ... Return (0xFFFFFFFE) } The non-existing method ASUS_WMI_METHODID_DSTS=0x53544344 (actually it is DCTS in little endian ASCII) is selected in asus->dsts. One way to fix this would be to call both for every known device ID until some answers - this would increase module load time. Another option is to check some device that is known to exist on every model - none known at the time. Last option, which is implemented, is to check for presence of the ASUS7000 device in ACPI tree (it is a dummy device), which is the condition used for loading the vendor driver for this model. This might not fix every affected model ever produced, but it likely does not introduce any regressions. The patch introduces a quirk that is enabled when ASUS7000 is found. Scope (_SB) { Device (ATK) { Name (_HID, "ASUS7000") // _HID: Hardware ID } } Signed-off-by: Yurii Pavlovskyi --- drivers/platform/x86/asus-nb-wmi.c | 5 +++++ drivers/platform/x86/asus-wmi.c | 14 ++++++++++++-- drivers/platform/x86/asus-wmi.h | 5 +++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c index b6f2ff95c3ed..cc5f0765a8d9 100644 --- a/drivers/platform/x86/asus-nb-wmi.c +++ b/drivers/platform/x86/asus-nb-wmi.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "asus-wmi.h" @@ -434,6 +435,10 @@ static void asus_nb_wmi_quirks(struct asus_wmi_driver *driver) } pr_info("Using i8042 filter function for receiving events\n"); } + + if (acpi_dev_found("ASUS7000")) { + driver->quirks->force_dsts = true; + } } static const struct key_entry asus_nb_wmi_keymap[] = { diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c index cfccfc0b8c2f..80f3447734fc 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -1885,11 +1885,21 @@ static int asus_wmi_platform_init(struct asus_wmi *asus) * Note, on most Eeepc, there is no way to check if a method exist * or note, while on notebooks, they returns 0xFFFFFFFE on failure, * but once again, SPEC may probably be used for that kind of things. + * + * Additionally at least TUF Gaming series laptops return 0 for unknown + * methods, so the detection in this way is not possible and method must + * be forced. Likely the presence of ACPI device ASUS7000 indicates + * this. */ - if (!asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, 0, 0, NULL)) + if (asus->driver->quirks->force_dsts) { + pr_info("DSTS method forced\n"); + asus->dsts_id = ASUS_WMI_METHODID_DSTS2; + } else if (!asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, + 0, 0, NULL)) { asus->dsts_id = ASUS_WMI_METHODID_DSTS; - else + } else { asus->dsts_id = ASUS_WMI_METHODID_DSTS2; + } /* CWAP allow to define the behavior of the Fn+F2 key, * this method doesn't seems to be present on Eee PCs */ diff --git a/drivers/platform/x86/asus-wmi.h b/drivers/platform/x86/asus-wmi.h index 6c1311f4b04d..94056da02fde 100644 --- a/drivers/platform/x86/asus-wmi.h +++ b/drivers/platform/x86/asus-wmi.h @@ -54,6 +54,11 @@ struct quirk_entry { */ int no_display_toggle; u32 xusb2pr; + /** + * Force DSTS instead of DSCS and skip detection. Useful if WMNB + * returns nothing on unknown method call. + */ + bool force_dsts; bool (*i8042_filter)(unsigned char data, unsigned char str, struct serio *serio); -- 2.17.1