From patchwork Mon Feb 20 19:50:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Jo=C3=A3o_Paulo_Rechi_Vita?= X-Patchwork-Id: 9583555 X-Patchwork-Delegate: andy.shevchenko@gmail.com 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 883186057F for ; Mon, 20 Feb 2017 19:51:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7DABF2885E for ; Mon, 20 Feb 2017 19:51:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6C5432887B; Mon, 20 Feb 2017 19:51:03 +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.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM 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 1389128875 for ; Mon, 20 Feb 2017 19:51:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752267AbdBTTvA (ORCPT ); Mon, 20 Feb 2017 14:51:00 -0500 Received: from mail-qt0-f193.google.com ([209.85.216.193]:36580 "EHLO mail-qt0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752204AbdBTTu7 (ORCPT ); Mon, 20 Feb 2017 14:50:59 -0500 Received: by mail-qt0-f193.google.com with SMTP id h53so15197501qth.3; Mon, 20 Feb 2017 11:50:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Kb22tmvl1U1I9eIrN6jUAOaybUwFbnwjbsJQ+EV9tMk=; b=OWVLZG22btCV3KqTx4rR4ndLZLMRCbntZb3Ed3kLQ0NXkL4NOrMarvbmXd9w14AJJX 39Coc5BoukcX0IY/xSom8xdUNW7MdsYwhsTin5s4T8Li+wvyD05v0eTL/hjDC8IQEw0/ m6PCKDuEkT7Lwv0DUTOmTA1Xc40TZyKoEYPAbMR4Hi/dsH0vo29C1YsnvJwESazfRROi fi/IegibMpyYL88SEzb6pXHBth1VIgiAnvQ6mlR6mRvG54qT/Pz4fVhjq1GE0wzI5wst 1efUT/FO6ahcOLhlZ43mmIpS5msopREPzJqjbhitp72JoeiA0T9qdyuvUa7Uvb2FrHWd oAjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Kb22tmvl1U1I9eIrN6jUAOaybUwFbnwjbsJQ+EV9tMk=; b=XqVY7Fm5aibioYdKAOpiRfRXOCfUyYO+Fgi3PkOK9mfBkslOKSVoFtHC4L3svUfesW 7tUniy5ckCNm7zsEbaTwMMKA7+C0wcptv/d2ajIN9qq8uyVMLLbfi4qAxUWAmFsY2cNC YVrMNkJQLiCXeyC78hNdNFBv68W7ypFHp/TNxjRLiYR/M8gNvqqou7XtXRz+b0dQwZgf IfIjO3iZSNYZ63JnwwlJj2Z+oUcIdq0E87bkjBMrdUQU+DiP48HtCnQK+Oi/ttFGr/7n 6LQrnswu9p3wzdwM053Kb4Fi1WfvaRIagGAb8DaO1cEl4cix0P31pReqBF5tk7A6PHXl lUHA== X-Gm-Message-State: AMke39lc5G7ox/tk5hjBYxswZKDWVCrLkPL4a/3ujqKG3CS2tVM7MubSAk6Nj/diPrWlYg== X-Received: by 10.237.35.210 with SMTP id k18mr20972823qtc.219.1487620252787; Mon, 20 Feb 2017 11:50:52 -0800 (PST) Received: from localhost.localdomain ([2601:545:c002:1560:ca7a:f025:d4de:385]) by smtp.gmail.com with ESMTPSA id m67sm12506756qte.54.2017.02.20.11.50.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Feb 2017 11:50:52 -0800 (PST) From: "=?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?=" X-Google-Original-From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= To: Corentin Chary , Darren Hart , Andy Shevchenko Cc: platform-driver-x86@vger.kernel.org, acpi4asus-user@lists.sourceforge.net, linux-kernel@vger.kernel.org, linux@endlessm.com, =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= Subject: [PATCHv2 1/2] platform/x86: asus-wmi: Detect quirk_no_rfkill from the DSDT Date: Mon, 20 Feb 2017 14:50:22 -0500 Message-Id: <20170220195023.17775-2-jprvita@endlessm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170220195023.17775-1-jprvita@endlessm.com> References: <20170220195023.17775-1-jprvita@endlessm.com> MIME-Version: 1.0 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 Some Asus laptops that have an airplane-mode indicator LED, also have the WMI WLAN user bit set, and the following bits in their DSDT: Scope (_SB) { (...) Device (ATKD) { (...) Method (WMNB, 3, Serialized) { (...) If (LEqual (IIA0, 0x00010002)) { OWGD (IIA1) Return (One) } } } } So when asus-wmi uses ASUS_WMI_DEVID_WLAN_LED (0x00010002) to store the wlan state, it drives the airplane-mode indicator LED (through the call to OWGD) in an inverted fashion: the LED is ON when airplane mode is OFF (since wlan is ON), and vice-versa. This commit skips registering RFKill switches at all for these laptops, to allow the asus-wireless driver to drive the airplane mode LED correctly through the ASHS ACPI device. Relying on the presence of ASHS and ASUS_WMI_DSTS_USER_BIT avoids adding DMI-based quirks for at least 21 different laptops. Signed-off-by: João Paulo Rechi Vita --- drivers/platform/x86/asus-wmi.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c index 43cb680adbb4..8499d3ae4257 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -159,6 +159,8 @@ MODULE_LICENSE("GPL"); #define USB_INTEL_XUSB2PR 0xD0 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 +static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL }; + struct bios_args { u32 arg0; u32 arg1; @@ -2051,6 +2053,16 @@ static int asus_wmi_fan_init(struct asus_wmi *asus) return 0; } +static bool ashs_present(void) +{ + int i = 0; + while (ashs_ids[i]) { + if (acpi_dev_found(ashs_ids[i++])) + return true; + } + return false; +} + /* * WMI Driver */ @@ -2095,6 +2107,13 @@ static int asus_wmi_add(struct platform_device *pdev) if (err) goto fail_leds; + asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_WLAN, &result); + if (result & (ASUS_WMI_DSTS_PRESENCE_BIT | ASUS_WMI_DSTS_USER_BIT)) + asus->driver->wlan_ctrl_by_user = 1; + + if (asus->driver->wlan_ctrl_by_user && ashs_present()) + asus->driver->quirks->no_rfkill = 1; + if (!asus->driver->quirks->no_rfkill) { err = asus_wmi_rfkill_init(asus); if (err) @@ -2134,10 +2153,6 @@ static int asus_wmi_add(struct platform_device *pdev) if (err) goto fail_debugfs; - asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_WLAN, &result); - if (result & (ASUS_WMI_DSTS_PRESENCE_BIT | ASUS_WMI_DSTS_USER_BIT)) - asus->driver->wlan_ctrl_by_user = 1; - return 0; fail_debugfs: