From nobody Sat Oct 24 20:42:36 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.216.50 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792586080; b=rX016qJev8UMEeIZftyep1/tvjUe/ulKa5jVAS3gyn4zg5aV6B10l/+SdcPxEa3LrPT4 +zAWNIfFoCyBs8VgqUK6im41Eav9Hsc9wOprM7QqcQDX5yVTTKGgmRa8MfJ7nbenh4uTR tac778R6Ppi5znaUr02CIE1AL60lc+Fjt8qAKbZNZDkz0thQpkkIPZxiXZcxe7ABJoIbJ ZFeTOWmAfCXWBU8q5NXMdJRygcIwqUFxpUZ+PNrEvPBV6z7zeW6MfgVNzOEpk9kfwzr6d ClIyWPNQ0ih+mBcmiDCMfS8mKerfFzx3Ejw95YjZ+1P9EpYrmSYZe3KTo3OjphEdDzQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792586080; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=f4nusZtPfvxWEJGgkitB1nCWYQpN5wwU721sOcYgMrU=; b=4WTXZKtmfkv7WpRQgC8FaX9Na63K5b1hNllJCAZ4ic3XPj1XOGjqTdun2sBbiPnFxPt/ 99cEVUCImJ6DGIeeFwn+y1oiZ8EBNPpWMDCnaZBfUPhSDyk5fYJ9/l1DzZlfaOYgD12a3 VPZaDewlUtcpXvASjUXTe/7QwiRzzwndvyEErbq3q+yKQ8WkiyHQk6gzZ3/5zCAYVBM7d pmF+XNgUUXMvb7OKehNPJZJcOO88SOGeobrwpv1KxP9GO386R5MmHTxGmpnLstvRfhNfx 24UYT5v3vzFgMFqa2qxToh41eyS2uPknFasmBTqmafytJ5EZDi7dJ6jt9o5miBNUnrA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=qNv+xtka; arc=none smtp.remote-ip=209.85.216.50 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C68260A2616 for ; Wed, 21 Oct 2026 12:34:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 7C68260A2616 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=qNv+xtka Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-3ab2cb8d577so602480a91.1 for ; Wed, 21 Oct 2026 05:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792586080; x=1793190880; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=f4nusZtPfvxWEJGgkitB1nCWYQpN5wwU721sOcYgMrU=; b=qNv+xtkaj9e8fvQN/Lf6TTHgGBcsZ2dVz5uTfDNP5Zok9HBqV6y01ZfVzhk72M3MWG vf1SUBBm8nMDULiTdREYrInujFA1RQe8ZqSY82qzea3WijkG0ULtWczetNnNIqEBWNUO FzHVLBpiFs5FVWYW6zyLQks2a0yItZimoNIXbfzMI9Vy1gaU/DqecYfB4NkI9JGQFFzO 30kRCNTh2QRYQp6kYJ1U3ST4Kzm9w+BLbUl7X7rHIcCpwSoVC5gRCIGKUspLBEtR21wk m/JELyWEmJohGFMvHJfLY1I24K+jxSwjKm0od0E/ZKf5I9F1+wEy+4LqbUpzwd31SfQp lKuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792586080; x=1793190880; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=f4nusZtPfvxWEJGgkitB1nCWYQpN5wwU721sOcYgMrU=; b=sdaUBKlMmd00MhQbX+0dn+PAF9QxxtJoz1nOyREtxgt3TrCUfoYvzRPSCdb0eHSIQv +U3VNMyfVBgp4BQAhS5z60ZAHK+zimJGRMZL6iwV0h7YkuF6VbgNPalV0GJZ/30gZU/I qHHOH2kXEznpJJa/6fUH/z6FWEbXqtfKzYuhOKaLw5nv9ICQlS1pUjM4+mk7tn6vOb+l HapGLJ2+++B1ntP4KM6ExWrQE0HBCcHXwBhKmmaxpnBGctUPnulUcz9GXxGJA4qQdHyf cKh8o3hLhK4Aapsp99Wpte51WMGWzFjbEB6uzDqD7nq/4rxB5fmCpTCbraTj8tHOq9Tt 1IOg== X-Forwarded-Encrypted: i=1; AKwUvBxu7pPU7p/y4yIyv2d74s00JFkfSX8VhIsgL0acMh/JGGp1OpTTxKZpj/l+wF7LwnJUgKesYmWI9uUcszg=@vger.kernel.org X-Gm-Message-State: AFq9FYIcVe34JTXE377qZomPvD0cRSsP360qJMdd6rQm9jgaAE4RaHxA ERBlc/waH7gMYuvTninIZ6MVhuYM1zfxKbVlWlgj/dxu9NzIqoF47618 X-Gm-Gg: AYBFou0pfocaprjCXiteBz60LJeaO01EWyuFfGRqy3fkj/8Z8VgxggiAxiyid9+KCv1 gCMkz5ARXVAwZHTREU0kSypkLBEL8K7WmBgVp2asZp0cRNt5AZ2QVwQqJu1bLvBSB9hDrzqyPEh sRluUes6TGBbTo7BGtDzBjQDh8sDzINECFrFOYCsGB+rUOp4KUQ2/7LusOiQuG5EBBcL9P/exn0 J7laAOU80S0/gB+SNvRKUZ/vz0i5oKL4b6wf7hdw8/vW9K8l6KyzwIgQ9QFXqmhAu31sz0gM0YB Omk4BrhsHdv8C/6PFCA7QVwxwJmMITsplvlTXArsEkpDeSNIJDVApP9fr2WqzguLxD5DUDfA32G id4WpiT/SLfh9VAFqWOOtu9z7JiKfobRvNa5RC463zQIAAaUpoK191xGcw8H5N1cze6svzCgGEx efFTv1zzOlei/7f1FSIcyVztMEX1loVyxUJdZUZKEDSx64Cq9N8M3Go4kmvdXvDCDObzHPRhTtZ v0zQQIDOQ9hpkIS2uZvTXNAcNmYPVkhA+UAFdWhL7RL6u9x0sHZtUvGKw== X-Received: by 2002:a17:90b:28c5:b0:3ab:be66:ddba with SMTP id 98e67ed59e1d1-3ad86f44cddmr1574310a91.23.1792586079881; Wed, 21 Oct 2026 05:34:39 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ad85f56b03sm1823615a91.3.2026.10.21.05.34.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 05:34:38 -0700 (PDT) From: Mingyou Chen To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede , Ilya Gladyshev Cc: KentoNion , platform-driver-x86@vger.kernel.org, ted eric , Armin Wolf , linux-kernel@vger.kernel.org, Chris Taraszka , Matias Civadda , =?UTF-8?q?=E9=AB=98=20=E4=BF=8A=E6=96=87?= , powerfullz , =?UTF-8?q?=E5=AD=99=20=E8=AA=89=E9=93=AD?= , =?UTF-8?q?Milo=C5=A1=20Vlku?= , Rsplwe , Bozhen Peng , Anton Karasev , Jame Jao , Serhiy Shliapuhin , Mingyou Chen Subject: [PATCH v13 1/7] MAINTAINERS: Add maintainer entry of bitland-mifs-wmi driver Date: Wed, 21 Oct 2026 20:34:08 +0800 Message-ID: <20261021123414.25516-2-qby140326@gmail.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261021123414.25516-1-qby140326@gmail.com> References: <20261021123414.25516-1-qby140326@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a new maintainer entry for the bitland-mifs-wmi platform driver. Signed-off-by: Mingyou Chen --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index cfce3571ac01..63d2fec54e86 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -23043,6 +23043,13 @@ L: platform-driver-x86@vger.kernel.org S: Maintained F: drivers/platform/x86/redmi-wmi.c =20 +BITLAND LAPTOP DRIVER +M: Mingyou Chen +M: Ilya Gladyshev +L: platform-driver-x86@vger.kernel.org +S: Maintained +F: drivers/platform/x86/bitland-mifs-wmi.c + REDPINE WIRELESS DRIVER L: linux-wireless@vger.kernel.org S: Orphan --=20 2.56.0 From nobody Sat Oct 24 20:42:36 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.216.53 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792586090; b=ycJe9KhGkoNXF/LaBL6+Kw3N5dy6AHg/h2BZcDKBxDpXCc4cQkXWpfVPhGZt4yshRZrk zSQ/zjqzuPik/XkrqXq3VzsKcP78cPl+jFP3OSqF1Q4/QnsTGZ5D3u52Ohqd4HhmfCkbz ylK4UtwmdSJ5LPI04BqjOjZdRPzOXZ6AWeOKsvno7m7JEZ3vCDLoelKJUtjBcteLNGTBI HcdUzpvR17N1oKq8PqHy728XlB8KGjl3mVlT3xc7Ke/kOjgPmKJu1/B5DeCTYAC6pc+fo skTwwKW3y+tIPupIJuwoQ+n0UpkL5okV+gaIBJEr+LTlejNZxj/zQk+RT8XAYUpGxvg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792586090; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=Y81mQESgXPYR9nS4rHXdGj0DbylaewWcxtgvMLy1Njk=; b=xr1bSPExreWpm4oV96kkBT2yhjdylPJmoKckXDCNdwjXmEQ8M5QQmIpb3TBwdJcr2BWT NRkFZB0T0RUtNivZH4PqdLpQLF1vblGVFNO/APFYTRUuYnWytfT/mdEsJ8BFIi1JrO2H8 pF3Gwfrp4jwQyjUDNrzrsHmTLlwpooCp4ZKlS4XNNcXShn0P4Xwx6rdsvcPJ+WEnbMbnW OyjA9M6j6hlOyoF+o+te9MwGjQqiBsSCqvkglRdIrmxIE1zN4KbD/ck/SWOcoiZe127AB oafHSFR07XWhfhFAawQXd7k0cY7I62cciebyjzKjpxVDMU/MgqXQ0rwAJ9d6pix1nPA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=BhMCI1Hu; arc=none smtp.remote-ip=209.85.216.53 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AB75606A330 for ; Wed, 21 Oct 2026 12:34:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 7AB75606A330 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=BhMCI1Hu Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-3ab2cb8d577so602637a91.1 for ; Wed, 21 Oct 2026 05:34:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792586089; x=1793190889; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Y81mQESgXPYR9nS4rHXdGj0DbylaewWcxtgvMLy1Njk=; b=BhMCI1HuACkPcuKFM4a2ZExUvcmcNIvqSbtrnu2CCWGmXAHksvrqV0fJ81xLYExVYW JxbM1lgNd/bojqrCZgfExRF03+S9SAoMJdSp6ZYbzRZGPN7bLccqtTSOCVRw7v8aTwDn Mav/yuRSGncCfEh1gx6KGhOeryfkDxscL2dcVrYjq+OZiyYswHeRnk/3sI+Hn8Bz04po QDblMJ4GsdtzluUh34P2Ts8ZEZ0GdMZyAK7u2hHJ5zLDg4qRw8+6A4nBungYYpJ/q4qu 2G+XK7EWP1OPyN/MfPLLAI8Pme2VGxhl1nF9jhHGuAJumLz4tj+EDMY9wHt/ByiNzMy9 vVvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792586089; x=1793190889; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Y81mQESgXPYR9nS4rHXdGj0DbylaewWcxtgvMLy1Njk=; b=vCwuhgot4JJbzjLrCdqHjpLbLCeRZ0Vknz7Vb0qezt38CT4sOiWwXkcA+/VdLRTVeL GL3hQ2c3BMNEZhX9GEDzP302jRdjMFfLh2QC2DU8Tph/EzwU66Iayrn3eRyqkAc2S27g +R+oTJ2AtB+Cuk+smYvCG8NlgnH9qJPPrPpAR15mE5oAupTmr3HsoXFHlyY9Sv88WnWk dlg/lP2RoYfT7Fl2qCqNB1n7jrNe55M6WfIgHwZrIL5K7NDp3Ewq8to+WDr3UGI/grX+ lvNaWgvoW8Tav1uEYhILHym5wd7kAAb+5/b9YFyfvA9hT92HKY0dtty1VKxD62NhuXV1 6ZtA== X-Forwarded-Encrypted: i=1; AKwUvBxT9CO8babal/X/F7R08ImizHQpnQN3krDfzsHoTj/MhyfCRa4ZpI9hr1ZqOqIEfEos6/eKPnB75ZoJcdE=@vger.kernel.org X-Gm-Message-State: AFq9FYJOogg8waBP6qvXJ8QZNjMWBAkaaotkhVbd/YxxTRSXIZAx27Zy m0y9qvHHBDiVCCO1GRoEofBRZdKZP9c76iUPVAGaxH8zghn2GSgvrUt1 X-Gm-Gg: AYBFou1dO9iJ6n92d0Gq5fQOeu/7InHUz0/bxJCyBe426APNwFkEVXkP3iYObvhS90Y QjcCmFovN0KGyfCbtzJU13u3BPRXxPQBUwMOwF7Kp3d87SVfDO8a9D5O4RL/rX8ptxVabU/s16R hlF2iWj9kTLx4Qnu/OIkk9XicnVZSAUvEcDre6qtulJZHbhYqGnUfPguIfVKie5HokZB1NTFmy/ aiosnijKJBPwp79igKs6YvEriUdfVuUgd6keneWvkGL4xIo+ugKXGgg1VeuPUu8k2RDDcPk7CJa 4Yt2dXGRhDuKv4nJ5IqOvAKeEt95f6YugQsMZ4hPoTDwsksZX2NOCpC1Y0YFGbc8Vu6k4VTy26z mZwMnLHO/C39k+NZ1DsxDs49ftXbZXesxitNmJOsL7fHFbNpR19kxtpsRJs0wWbnpm9yv1lUs9g dUw4TPNkTW66Vkcjbd2dp8UN0d8vLKpA6BkvYfifQtedKqDYNct2CJjR5b25ypyDlYwYZZkBjQ+ 2jj1Bj6c/elGCxCyZkNr7UpZD9qHrf5ZbOik6UyxAPQqYZsmRxOfT5o X-Received: by 2002:a17:90b:3842:b0:3a8:bbc2:5551 with SMTP id 98e67ed59e1d1-3ad86cbb435mr1829658a91.0.1792586088703; Wed, 21 Oct 2026 05:34:48 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ad85f56b03sm1823615a91.3.2026.10.21.05.34.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 05:34:47 -0700 (PDT) From: Mingyou Chen To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede , Ilya Gladyshev Cc: KentoNion , platform-driver-x86@vger.kernel.org, ted eric , Armin Wolf , linux-kernel@vger.kernel.org, Chris Taraszka , Matias Civadda , =?UTF-8?q?=E9=AB=98=20=E4=BF=8A=E6=96=87?= , powerfullz , =?UTF-8?q?=E5=AD=99=20=E8=AA=89=E9=93=AD?= , =?UTF-8?q?Milo=C5=A1=20Vlku?= , Rsplwe , Bozhen Peng , Anton Karasev , Jame Jao , Serhiy Shliapuhin , Mingyou Chen , Nika Krasnova Subject: [PATCH v13 2/7] platform/x86: bitland-mifs-wmi: Merge the function of redmi-wmi into the bitland driver Date: Wed, 21 Oct 2026 20:34:09 +0800 Message-ID: <20261021123414.25516-3-qby140326@gmail.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261021123414.25516-1-qby140326@gmail.com> References: <20261021123414.25516-1-qby140326@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The bitland-mifs-wmi and legacy redmi-wmi drivers both attempt to bind to the same WMI GUID (46C93E13-EE9B-4262-8488-563BCA757FEF). This overlap causes a device registration conflict, preventing one of the drivers from loading properly depending on the module initialization order. Merge the event handling logic from redmi-wmi into bitland-mifs-wmi. By handling both device layouts within a single driver, we eliminate the GUID ownership conflict. Tested-by: Nika Krasnova Tested-by: Ilya Gladyshev Reviewed-by: Ilya Gladyshev Signed-off-by: Mingyou Chen --- drivers/platform/x86/bitland-mifs-wmi.c | 153 ++++++++++++++++-------- 1 file changed, 106 insertions(+), 47 deletions(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index dd1648b7de77..9afa2e2764b0 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -35,6 +35,11 @@ #include #include =20 +#define BI_HOTKEY_CODE(id, low, high) \ + (((u32)(high) << 24) | ((u32)(low) << 16) | ((u32)(id) << 8) | WMI_EVENT_= TYPE_HOTKEY) + +#define AI_KEY_VALUE_MASK BIT(8) + #define DRV_NAME "bitland-mifs-wmi" #define BITLAND_MIFS_GUID "B60BFB48-3E5B-49E4-A0E9-8CFFE1B3434B" #define BITLAND_EVENT_GUID "46C93E13-EE9B-4262-8488-563BCA757FEF" @@ -80,9 +85,9 @@ enum bitland_mifs_power_profile { }; =20 enum bitland_mifs_event_id { - WMI_EVENT_RESERVED_1 =3D 1, - WMI_EVENT_RESERVED_2 =3D 2, - WMI_EVENT_RESERVED_3 =3D 3, + WMI_EVENT_SWITCHVIDEOMODE =3D 1, + WMI_EVENT_SELECTIVE_SCREENSHOT =3D 2, + WMI_EVENT_ALL_APPLICATIONS =3D 3, WMI_EVENT_AIRPLANE_MODE =3D 4, WMI_EVENT_KBD_BRIGHTNESS =3D 5, WMI_EVENT_TOUCHPAD_STATE =3D 6, @@ -100,10 +105,11 @@ enum bitland_mifs_event_id { WMI_EVENT_FN_1 =3D 19, WMI_EVENT_FN_2 =3D 20, WMI_EVENT_FN_3 =3D 21, - WMI_EVENT_FN_4 =3D 22, + WMI_EVENT_PERFORMANCE_PLAN_ALT =3D 22, WMI_EVENT_FN_5 =3D 24, WMI_EVENT_REFRESH_RATE =3D 25, WMI_EVENT_CPU_FAN_SPEED =3D 26, + WMI_EVENT_CONFIG =3D 27, WMI_EVENT_GPU_FAN_SPEED =3D 32, WMI_EVENT_WIN_KEY_LOCK =3D 33, WMI_EVENT_RESERVED_23 =3D 34, @@ -607,18 +613,54 @@ static const struct attribute *const laptop_attrs[] = =3D { ATTRIBUTE_GROUPS(laptop); =20 static const struct key_entry bitland_mifs_wmi_keymap[] =3D { - { KE_KEY, WMI_EVENT_OPEN_APP, { KEY_PROG1 } }, - { KE_KEY, WMI_EVENT_CALCULATOR_START, { KEY_CALC } }, - { KE_KEY, WMI_EVENT_BROWSER_START, { KEY_WWW } }, - { KE_IGNORE, WMI_EVENT_FN_J, { KEY_RESERVED } }, - { KE_IGNORE, WMI_EVENT_FN_F, { KEY_RESERVED } }, - { KE_IGNORE, WMI_EVENT_FN_0, { KEY_RESERVED } }, - { KE_IGNORE, WMI_EVENT_FN_1, { KEY_RESERVED } }, - { KE_IGNORE, WMI_EVENT_FN_2, { KEY_RESERVED } }, - { KE_IGNORE, WMI_EVENT_FN_3, { KEY_RESERVED } }, - { KE_IGNORE, WMI_EVENT_FN_4, { KEY_RESERVED } }, - { KE_IGNORE, WMI_EVENT_FN_5, { KEY_RESERVED } }, - { KE_END, 0 } + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_OPEN_APP, 1, 0), { KEY_PROG1 } }, + + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_CALCULATOR_START, 1, 0), { KEY_CALC } = }, + + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_BROWSER_START, 1, 0), { KEY_WWW } }, + + { KE_IGNORE, BI_HOTKEY_CODE(WMI_EVENT_FN_J, 0, 0), {} }, + { KE_IGNORE, BI_HOTKEY_CODE(WMI_EVENT_FN_F, 0, 0), {} }, + { KE_IGNORE, BI_HOTKEY_CODE(WMI_EVENT_FN_0, 0, 0), {} }, + { KE_IGNORE, BI_HOTKEY_CODE(WMI_EVENT_FN_1, 0, 0), {} }, + { KE_IGNORE, BI_HOTKEY_CODE(WMI_EVENT_FN_2, 0, 0), {} }, + { KE_IGNORE, BI_HOTKEY_CODE(WMI_EVENT_FN_3, 0, 0), {} }, + { KE_IGNORE, BI_HOTKEY_CODE(WMI_EVENT_FN_5, 0, 0), {} }, + + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_SELECTIVE_SCREENSHOT, 0, 0), + { KEY_SELECTIVE_SCREENSHOT } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_ALL_APPLICATIONS, 0, 0), { KEY_ALL_APP= LICATIONS } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_CONFIG, 0, 0), { KEY_CONFIG } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_CONFIG, 1, 0), { KEY_CONFIG } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_SWITCHVIDEOMODE, 1, 0), { KEY_SWITCHVI= DEOMODE } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_SWITCHVIDEOMODE, 0, 0), { KEY_SWITCHVI= DEOMODE } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_REFRESH_RATE, 0, 0), { KEY_REFRESH_RAT= E_TOGGLE } }, + + /* AI button has code for each position */ + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FN_5, 1, 0), { KEY_ASSISTANT } }, + + { KE_KEY, BI_HOTKEY_CODE(0x19, 1, 0), { KEY_ASSISTANT } }, + + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KBD_BRIGHTNESS, 0, 0), {KEY_KBDILLUMTO= GGLE} }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KBD_BRIGHTNESS, 0x80, 0), {KEY_KBDILLU= MTOGGLE} }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KBD_BRIGHTNESS, 5, 0), {KEY_KBDILLUMTO= GGLE} }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KBD_BRIGHTNESS, 0x0a, 0), {KEY_KBDILLU= MTOGGLE} }, + + /* Xiaomi G Command Center */ + { KE_KEY, BI_HOTKEY_CODE(0x0a, 1, 0), { KEY_VENDOR } }, + + /* Fn Lock state */ + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FNLOCK_STATE, 0, 0), { KEY_FN_ESC } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FNLOCK_STATE, 1, 0), { KEY_FN_ESC } }, + + /* Fn+`/1/2/3/4 */ + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FN_F, 1, 0), { KEY_F13 } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FN_0, 1, 0), { KEY_F14 } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FN_1, 1, 0), { KEY_F15 } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FN_2, 1, 0), { KEY_F16 } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FN_3, 1, 0), { KEY_F17 } }, + + { KE_END } }; =20 static void bitland_notifier_unregister(void *data) @@ -736,13 +778,42 @@ static int bitland_mifs_wmi_probe(struct wmi_device *= wdev, const void *context) &drv_data->notifier); } =20 +static bool bitland_is_ai_key_scancode(unsigned int code) +{ + return code =3D=3D BI_HOTKEY_CODE(WMI_EVENT_FN_5, 1, 0) || + code =3D=3D BI_HOTKEY_CODE(0x19, 1, 0); +} + +static void bitland_mifs_wmi_report_key(struct wmi_device *wdev, u32 paylo= ad) +{ + struct bitland_mifs_wmi_data *data =3D dev_get_drvdata(&wdev->dev); + struct key_entry *entry; + bool autorelease =3D true; + int value =3D 1; + + entry =3D sparse_keymap_entry_from_scancode(data->input_dev, payload); + if (!entry) { + dev_dbg(&wdev->dev, "Unknown WMI hotkey with payload 0x%08x\n", payload); + return; + } + + /* AI key quirk */ + if (bitland_is_ai_key_scancode(entry->code)) { + value =3D !(payload & AI_KEY_VALUE_MASK); + autorelease =3D false; + } + + guard(mutex)(&data->lock); + sparse_keymap_report_entry(data->input_dev, entry, value, autorelease); +} + static void bitland_mifs_wmi_notify(struct wmi_device *wdev, const struct wmi_buffer *buffer) { - struct bitland_mifs_wmi_data *data =3D dev_get_drvdata(&wdev->dev); const struct bitland_mifs_event *event =3D buffer->data; struct bitland_fan_notify_data fan_data; u8 brightness; + u32 payload; =20 /* Validate event type */ if (event->event_type !=3D WMI_EVENT_TYPE_HOTKEY) @@ -758,24 +829,14 @@ static void bitland_mifs_wmi_notify(struct wmi_device= *wdev, blocking_notifier_call_chain(&bitland_notifier_list, BITLAND_NOTIFY_KBD_BRIGHTNESS, &brightness); - break; + return; =20 case WMI_EVENT_PERFORMANCE_PLAN: + case WMI_EVENT_PERFORMANCE_PLAN_ALT: blocking_notifier_call_chain(&bitland_notifier_list, BITLAND_NOTIFY_PLATFORM_PROFILE, NULL); - break; - - case WMI_EVENT_OPEN_APP: - case WMI_EVENT_CALCULATOR_START: - case WMI_EVENT_BROWSER_START: { - guard(mutex)(&data->lock); - if (!sparse_keymap_report_event(data->input_dev, - event->event_id, 1, true)) - dev_warn(&wdev->dev, "Unknown key pressed: 0x%02x\n", - event->event_id); - break; - } + return; =20 /* * The device has 3 fans (CPU, GPU, SYS), @@ -783,6 +844,14 @@ static void bitland_mifs_wmi_notify(struct wmi_device = *wdev, */ case WMI_EVENT_CPU_FAN_SPEED: case WMI_EVENT_GPU_FAN_SPEED: + /* Redmi refresh rate toggle quirk */ + if (event->event_id =3D=3D WMI_EVENT_CPU_FAN_SPEED && + event->value_low =3D=3D 0 && event->value_high =3D=3D 0) { + payload =3D BI_HOTKEY_CODE(WMI_EVENT_REFRESH_RATE, 0, 0); + bitland_mifs_wmi_report_key(wdev, payload); + return; + } + if (event->event_id =3D=3D WMI_EVENT_CPU_FAN_SPEED) fan_data.channel =3D 0; else @@ -793,27 +862,17 @@ static void bitland_mifs_wmi_notify(struct wmi_device= *wdev, blocking_notifier_call_chain(&bitland_notifier_list, BITLAND_NOTIFY_HWMON, &fan_data); - break; - - case WMI_EVENT_AIRPLANE_MODE: - case WMI_EVENT_TOUCHPAD_STATE: - case WMI_EVENT_FNLOCK_STATE: - case WMI_EVENT_KBD_MODE: - case WMI_EVENT_CAPSLOCK_STATE: - case WMI_EVENT_NUMLOCK_STATE: - case WMI_EVENT_SCROLLLOCK_STATE: - case WMI_EVENT_REFRESH_RATE: - case WMI_EVENT_WIN_KEY_LOCK: - /* These events are informational or handled by firmware */ - dev_dbg(&wdev->dev, "State change event: id=3D%d value=3D%d\n", - event->event_id, event->value_low); - break; + return; =20 default: - dev_dbg(&wdev->dev, "Unknown event: id=3D0x%02x value=3D0x%02x\n", - event->event_id, event->value_low); + dev_dbg(&wdev->dev, + "Unknown WMI event: id=3D0x%02x value_low=3D0x%02x value_high=3D0x%02x\= n", + event->event_id, event->value_low, event->value_high); break; } + + payload =3D get_unaligned_le32(buffer->data); + bitland_mifs_wmi_report_key(wdev, payload); } =20 static const struct wmi_device_id bitland_mifs_wmi_id_table[] =3D { --=20 2.56.0 From nobody Sat Oct 24 20:42:36 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.216.49 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792586098; b=a2J2+xQGOw3QuIenw2W5j0l20RO+7zcnfUwrG633ZI6FBW163Ar8tlxmrHCZc7hTSpn5 Pvi/xZJZ2CS95rrZTGVqitFPKsXdv7WySppvKqpCNb9siQvYrMhauAJWSKFC96GLdIf2m dNWxnvLxz7Wh1dEj2Q/LCn0PYxM87vNYP/CMu8FR61/5TvlRARFo6wEO6ct1jCpVWW8nF c151SUq5AU8++TjlvGdl0oUP1gEQcCnmDqxofqQe5ttzHT8oIpc46CMOjV05Hhzq8/3oS 8VNPrH39Inf3gj5FUUPUe6u429l0P22aGaw4u7a+0DbxL1pG+tKu7k21oOHDGGvyr9Q== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792586098; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=ekcPeRS4977QsjC9hWodQ7fRVCdNhWDisPpyBhUx7KM=; b=Twg9Jx3tQ/vl8/I5EfA6+Q6ofX/skHOULccmoe9xffKuI+20u4zVpDtwKygUDCFdkgoa FgeVFrD4+eGM4NdyJAPUr4IYmVMeG+u87h/LDBzXDCvdA5orx+B5kqj2Vso9q7nSqzrjh gCTLFrNOIQkiTPUME5/gyCrjVu9tPrNledDv4wVEuv5qs55+gaU15OnIlaBxZVI+bZze0 NFe0ZNob9BIcVLeaggW4JFj4VC3Ewch891C0+YmpOAG9kUu3gwEwpYd9eJjlcR1uiRWFJ bc/eNtAU1B+TWuU6SB88A2dWO44vgWMdvvvqGEJr/7nVddB5zMjHMMNbIp2qBe+9SYw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=J9Uyg5Xf; arc=none smtp.remote-ip=209.85.216.49 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0604260A2611 for ; Wed, 21 Oct 2026 12:34:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 0604260A2611 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=J9Uyg5Xf Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-3ac677668a9so650616a91.2 for ; Wed, 21 Oct 2026 05:34:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792586097; x=1793190897; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ekcPeRS4977QsjC9hWodQ7fRVCdNhWDisPpyBhUx7KM=; b=J9Uyg5Xfy4/jiXw3ziddiNFrGfc5Q5+5dOgPDHw+oRg+GOIEI/Wvu09zCHwbbOUiaL mA6T9bE2vjXyqoVg1NMI6g4BRSQmxgL1N6g3uapZsPUn5Xnp0zf4Nl+F+UVGbCuWK4HZ 9b5aLiUrsXcnTWpo3ynMOIRHjsGWZ9gndwL/DxvO8Aqdeo6v1Gb/BIwwYv9Fb1USMrJU OyBNFseBiSThCIWnq5w6t+aFxy6DyDGU1lkAwuS13IS2u9zjdeLAsa/t68m0zd6vzMCF M3OBxPwUQXfZSpGtyPcTQzMlrVT45h0RcjeQ0biMBFbaFDIsuYpi7+Ecg8LXB+Eo/Y91 VNJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792586097; x=1793190897; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ekcPeRS4977QsjC9hWodQ7fRVCdNhWDisPpyBhUx7KM=; b=u1sNUNi3mAj87GNUc/cKzwiUzI+XhDGwX83h2j/aHZjnQa1/aOazeolXbik7MhYYjD qv0YyQJGYwVn7wtxlmWkcecbhlxq+xoMRj1jjCtpxHcDGLxe3GEuvRXw+2iWIv6v+A2L ncGDjShQVTrRAJ8kSQXECJ/15/otK63/W1i6bMq24Be0xesVEjcQdHLReCWYzDjeo2EH 83/VYdST1NVJzDQ74sfGGzkgLdSSc29nxYSaArl5QE2U/ZyPJGvcEcSbPFBamOkPtLie 6HsK5rgGZgD3IIz2vtTjPPoW6HykB4Kbo0FOkgX4QnY/YVTvz1JJ1ivzveBoflj5qjNA JQsg== X-Forwarded-Encrypted: i=1; AKwUvByhfZXyAOZ4zCOk68SH2igH5r/A+tFUSIqpzVZf7xhGnjbMro0WVRpnRSw7FZ4N0yhqbp1xzguVlsewQ58=@vger.kernel.org X-Gm-Message-State: AFq9FYJMOypViD4ae/Qmqcw/N/due9QA6ovLkuU99Gkv9axS5uTY9Kou UDtjCuc4gSdcLraR1GOcoIfyv5by4L4bc5h8qSzVrLLz/n27qHDt5F1+ X-Gm-Gg: AYBFou11bS7BxsbmPOLk5/zLFTOqqkhHNSlHu12NTlc521ARaYjAtHrPtBnhkqLAwaU nMTQ8iD7mPQR+1rI+tbXF5/+QuUtYrliHVv7oYBNa77DGXiyQmKGV/7B4VRr5abXyaUh4gYFnTc S93skeksA0rA9ZghcHdnA0bN8EUKBQYwPHgyYmPKaciHT2if/8rhJy1ssyXnlWaYMalILLO/SX8 B1RRYG9OAkLKO78Qhu3yJ2kh0ryQtrs6VA442JvXtR9huxOJCs5YTvgq/6CZoeRGl7iKnvCXHUT OWsdz8YbldNe+blKFoMqqCgp0pZ1pDiguuEtR849UPQ5MHSirMwUlz5QljWe1zXQZavIxpOEPJ9 cuqKoxvk215Nsg6j2yuAQtbghe5uczaKXMGypG5ThKHpfyeON9wi1i35cgIr8nn4emerberqjUW 2c+MKLRHLAUwRwUO8KfABWJSRDoVkf1QYuxKC9cTwrgCaKCNFP3nuY2q75qOtz9bMQAIO1le4EM rxjQLKwUDGLx80vsb6QfGX1gygH3vA6h2fyT0/G1wx1ow2USYmHNYVP X-Received: by 2002:a17:90a:d883:b0:3ac:17c:6e74 with SMTP id 98e67ed59e1d1-3ad86cc2074mr1452171a91.53.1792586097273; Wed, 21 Oct 2026 05:34:57 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ad85f56b03sm1823615a91.3.2026.10.21.05.34.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 05:34:55 -0700 (PDT) From: Mingyou Chen To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede , Ilya Gladyshev Cc: KentoNion , platform-driver-x86@vger.kernel.org, ted eric , Armin Wolf , linux-kernel@vger.kernel.org, Chris Taraszka , Matias Civadda , =?UTF-8?q?=E9=AB=98=20=E4=BF=8A=E6=96=87?= , powerfullz , =?UTF-8?q?=E5=AD=99=20=E8=AA=89=E9=93=AD?= , =?UTF-8?q?Milo=C5=A1=20Vlku?= , Rsplwe , Bozhen Peng , Anton Karasev , Jame Jao , Serhiy Shliapuhin , Mingyou Chen , Nika Krasnova Subject: [PATCH v13 3/7] platform/x86: bitland-mifs-wmi: Add Redmi mic-mute key entries Date: Wed, 21 Oct 2026 20:34:10 +0800 Message-ID: <20261021123414.25516-4-qby140326@gmail.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261021123414.25516-1-qby140326@gmail.com> References: <20261021123414.25516-1-qby140326@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add the missing Redmibook mic-mute hotkey definitions to the shared sparse keymap table: - 0x00002101 - 0x00012101 Reported-by: Nika Krasnova Link: https://lore.kernel.org/platform-driver-x86/20260531123345.237521-1-nika@ni= kableh.moe/ Signed-off-by: Mingyou Chen --- drivers/platform/x86/bitland-mifs-wmi.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index 9afa2e2764b0..0d7815c2faf9 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -111,7 +111,7 @@ enum bitland_mifs_event_id { WMI_EVENT_CPU_FAN_SPEED =3D 26, WMI_EVENT_CONFIG =3D 27, WMI_EVENT_GPU_FAN_SPEED =3D 32, - WMI_EVENT_WIN_KEY_LOCK =3D 33, + WMI_EVENT_MIC_MUTE =3D 33, WMI_EVENT_RESERVED_23 =3D 34, WMI_EVENT_OPEN_APP =3D 35, }; @@ -636,6 +636,10 @@ static const struct key_entry bitland_mifs_wmi_keymap[= ] =3D { { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_SWITCHVIDEOMODE, 0, 0), { KEY_SWITCHVI= DEOMODE } }, { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_REFRESH_RATE, 0, 0), { KEY_REFRESH_RAT= E_TOGGLE } }, =20 + /* Mic-mute key */ + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_MIC_MUTE, 0, 0), { KEY_MICMUTE } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_MIC_MUTE, 1, 0), { KEY_MICMUTE } }, + /* AI button has code for each position */ { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_FN_5, 1, 0), { KEY_ASSISTANT } }, =20 --=20 2.56.0 From nobody Sat Oct 24 20:42:36 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.216.44 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792586105; b=XpvETfMzbBxOlgf1mU7c1zAScoUYHSng5PBtE5nLkHF3gFOkEdYEENSEZpFd2wJM6cWu TT1T2HEKs2DX9qlzQwuP2tVzL9dF4KAiZThtSTeHZBUYDHq1VGP5rltnsG2IawtDRdpbw nRTkTdEi8Xx+oCmsIn493lwGTbFmV+b6mtubroZ5hjM6dqpRD6fjzaVemDU3l24OCSaaM Bn6ls5+V0cyGyKAp9tcDph1qF2jAu0y8hxhhv+OIqfsoAU0M7b3bPZ2TwDRv1dNvDgdc6 aHrg7td95pkmrx7l+L84e31ZLlRusJsoeWH1mn5PuDdjHOcJ8IZYaoUVCBxxntPLNfw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792586105; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=/U9pxeFHp1yyDPo3cqpKyHrdBbsfXfnVhdf6kExQeGo=; b=w25GW3dxmnq1LJhxfQ9dSuGGwna5rMi+Lw2Rl9DvfZltSukKF98H+LBHcO11YXrC/cI7 +lvwEeHCOkkp/36s/L0lPpPLBcWXsKsuw0p/gcbk/YOEG7Nk52kHyihYZyq5yNm0kvTor gtjuW+AanS/LOQXWG66T0QEObaTVCiNV5IiDWftRu6CnB0GG6eELcaTYn8Qe8bq0pkKhO E6e1xQwz1k02miYegJ6uhJ2G/1/9W3Mn/kTs39iZXi6odQrdKHYm6wmucdg32w6aZ48v7 aFMQAqmlHutJ4UKO5i8useYboMw54bQd3TEX9H1A8rHqY64WOTjXu2vRqm+mvsghdzw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=ev4046RD; arc=none smtp.remote-ip=209.85.216.44 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5078160A4AE1 for ; Wed, 21 Oct 2026 12:35:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 5078160A4AE1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=ev4046RD Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-3ac677668a9so650755a91.2 for ; Wed, 21 Oct 2026 05:35:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792586105; x=1793190905; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/U9pxeFHp1yyDPo3cqpKyHrdBbsfXfnVhdf6kExQeGo=; b=ev4046RDKj26Fv3J+npltPnBTsfIOzkx5Gt6IeJiU7iJYoAK2nnoXpyetLTKjhv3fF VTAaBnPlus57g1Vr5NznAKcAgt+uHPXHB5NdHOCrVG0GjBzDpV/CJRxt+y4u+g1F8vKq ajgWCyBQmkr8VCIGs9d+/OsyJWIfQPNynNoDToTHn1nSSjLhDJNjyHhZRQS7vz6D1VSU lYyyqANt1i2kn+boDq7upwsUoOmF9tWb9X5Tda2Lp4ln4Ou+8OgD02oynwTlp/cBKoaE LG+xXiXzo0Sq7XzJCAJc3UKPKIaVDDUbO+QRH/DHM4pHHkDBAcEYx7XvQ6su1jnn2TP6 A4lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792586105; x=1793190905; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/U9pxeFHp1yyDPo3cqpKyHrdBbsfXfnVhdf6kExQeGo=; b=w5MMBH4hA1x7J7VSh3rQsZL5hucDDo6ugvg96drW/qJjnKVNqup2pGVd0apR785xFY fmz4mF4fVpW9sqMmtXQEBiZq5beQZD9mi0H/QNs2TH4qMsoejGGzSyUQGV86fJySOnZ5 aijlgMpOZesc0oVzddNWE+qnZjNimEh5h7Vp7cNOq6Lm7mD4g9Z014P7ThqzSzRe7RNu 3tfSRwG7UWRhriXlAdQLM9KicbgdI+xHRMuBiHsx5FgWT3DZgCttvmc1u1Vi4TY3CDeO w99pUSIBEc7s2EMAtIXEVscR6+7ZYH97t7IJJyxkn7naeT7+RacxVwYW0i3Hmjce0B6w T0Ig== X-Forwarded-Encrypted: i=1; AKwUvBynqra/N8WqKRfY2Vb2gz98z5hcMgq0y8qS5mL0vk6BRHIsZwDclFvxSBdojINDW25+/ODk4O8ztvdgD7o=@vger.kernel.org X-Gm-Message-State: AFq9FYK6V4RZEYQft42W5oLRQK0gtJTJK7LlgsplzUOpT3Cx//eWakNL Y7gT0dStOcA1AXK2ByRz/bRJtyQUZuQdF81kNJCFbDKCHQqfAkYRMGew X-Gm-Gg: AYBFou3o/KWTsF6Q6OmBWd5NrOXZM1oOiofNW4j/bfnU+0HJl8DWTGjr75Fr2Bc6QQA ssY8zw8aXC+c1snEaeccMKxyCY++Wab9kdXpveir8jN6r3U/sGJYcx2X5BEtqOoQwX5eWJmRaAx tr4LzonTH4qJEXVUalSYgRqmZUCrjMR28CympsNywuP14mrLPmt4Bl+MNoM0MqbimVYzhq3XGwM n6L9FZ/4baYUFfQ9SICOKpzh8I8F2EmI52F6v9wPudkZCG4EgE9PzPc+P/E/5T+Y4ygzpzYRxI+ nOLTys01tTH7UG9yvHK0hvF0LHFpSFrc9MCeTE/ISyYFXs5Iu54o5vTljUZflidD8yGHX20dmcn YEEn61drPC5A7wryDS27+WCSS5dKy2Z5XrF5JZZ5dTSBXNmIGxZkYRl4rJr3BW7nZHvgdzxHY1w go/oJCR08NGOkb86LvVpKXdmJsL+uMu2g+jBXvF937UZrj8Xlfvejbi/xwQCk6aKQZYqjGcBx7a GRkhWPr71YP6XbtDi2abyEB/p35+bX3ozaYhu2FkpUuYiAy7Qz2u7pRyt2edT/jHgJluP/OTQFw Qg== X-Received: by 2002:a17:90b:1642:b0:3ac:b3e5:426c with SMTP id 98e67ed59e1d1-3ad86c8f925mr1833838a91.26.1792586104709; Wed, 21 Oct 2026 05:35:04 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ad85f56b03sm1823615a91.3.2026.10.21.05.34.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 05:35:03 -0700 (PDT) From: Mingyou Chen To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede , Ilya Gladyshev Cc: KentoNion , platform-driver-x86@vger.kernel.org, ted eric , Armin Wolf , linux-kernel@vger.kernel.org, Chris Taraszka , Matias Civadda , =?UTF-8?q?=E9=AB=98=20=E4=BF=8A=E6=96=87?= , powerfullz , =?UTF-8?q?=E5=AD=99=20=E8=AA=89=E9=93=AD?= , =?UTF-8?q?Milo=C5=A1=20Vlku?= , Rsplwe , Bozhen Peng , Anton Karasev , Jame Jao , Serhiy Shliapuhin , Mingyou Chen Subject: [PATCH v13 4/7] platform/x86: redmi-wmi: Drop redmi-wmi driver Date: Wed, 21 Oct 2026 20:34:11 +0800 Message-ID: <20261021123414.25516-5-qby140326@gmail.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261021123414.25516-1-qby140326@gmail.com> References: <20261021123414.25516-1-qby140326@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The redmi-wmi driver is no longer needed because its functionality has been superseded by the new generic bitland platform driver. All supported Redmi laptop models are now handled properly via the updated WMI interfaces in bitland-mifs-wmi. Remove the obsolete code, Kconfig entries, and Makefile references to clean up the platform directory. Signed-off-by: Mingyou Chen --- MAINTAINERS | 6 -- drivers/platform/x86/Kconfig | 11 +-- drivers/platform/x86/Makefile | 1 - drivers/platform/x86/redmi-wmi.c | 154 ------------------------------- 4 files changed, 4 insertions(+), 168 deletions(-) delete mode 100644 drivers/platform/x86/redmi-wmi.c diff --git a/MAINTAINERS b/MAINTAINERS index 63d2fec54e86..401811130a28 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -23037,12 +23037,6 @@ S: Maintained T: git https://github.com/pkshih/rtw.git F: drivers/net/wireless/realtek/rtw89/ =20 -REDMIBOOK WMI DRIVERS -M: Gladyshev Ilya -L: platform-driver-x86@vger.kernel.org -S: Maintained -F: drivers/platform/x86/redmi-wmi.c - BITLAND LAPTOP DRIVER M: Mingyou Chen M: Ilya Gladyshev diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig index 7ee9ff3879c9..569644ed1bf5 100644 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig @@ -79,16 +79,13 @@ config XIAOMI_WMI be called xiaomi-wmi. =20 config REDMI_WMI - tristate "Redmibook WMI key driver" + tristate "Redmibook WMI key driver (DEPRECATED)" depends on ACPI_WMI depends on INPUT - select INPUT_SPARSEKMAP + select BITLAND_MIFS_WMI help - Say Y here if you want support for WMI-based hotkey events on - Xiaomi Redmibook devices. - - To compile this driver as a module, choose M here: the module will - be called redmi-wmi. + This option is deprecated and will be removed in a future release. + Please enable CONFIG_BITLAND_MIFS_WMI directly. =20 config GIGABYTE_WMI tristate "Gigabyte WMI temperature driver" diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile index b90c544387be..3052b92fb5fa 100644 --- a/drivers/platform/x86/Makefile +++ b/drivers/platform/x86/Makefile @@ -9,7 +9,6 @@ obj-$(CONFIG_HUAWEI_WMI) +=3D huawei-wmi.o obj-$(CONFIG_MXM_WMI) +=3D mxm-wmi.o obj-$(CONFIG_NVIDIA_WMI_EC_BACKLIGHT) +=3D nvidia-wmi-ec-backlight.o obj-$(CONFIG_XIAOMI_WMI) +=3D xiaomi-wmi.o -obj-$(CONFIG_REDMI_WMI) +=3D redmi-wmi.o obj-$(CONFIG_GIGABYTE_WMI) +=3D gigabyte-wmi.o obj-$(CONFIG_BITLAND_MIFS_WMI) +=3D bitland-mifs-wmi.o =20 diff --git a/drivers/platform/x86/redmi-wmi.c b/drivers/platform/x86/redmi-= wmi.c deleted file mode 100644 index cc82ef502002..000000000000 --- a/drivers/platform/x86/redmi-wmi.c +++ /dev/null @@ -1,154 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* WMI driver for Xiaomi Redmibooks */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define WMI_REDMIBOOK_KEYBOARD_EVENT_GUID "46C93E13-EE9B-4262-8488-563BCA7= 57FEF" - -#define AI_KEY_VALUE_MASK BIT(8) - -static const struct key_entry redmi_wmi_keymap[] =3D { - {KE_KEY, 0x00000201, {KEY_SELECTIVE_SCREENSHOT}}, - {KE_KEY, 0x00000301, {KEY_ALL_APPLICATIONS}}, - {KE_KEY, 0x00001b01, {KEY_CONFIG}}, - {KE_KEY, 0x00011b01, {KEY_CONFIG}}, - {KE_KEY, 0x00010101, {KEY_SWITCHVIDEOMODE}}, - {KE_KEY, 0x00001a01, {KEY_REFRESH_RATE_TOGGLE}}, - - /* AI button has code for each position */ - {KE_KEY, 0x00011801, {KEY_ASSISTANT}}, - {KE_KEY, 0x00011901, {KEY_ASSISTANT}}, - - /* Keyboard backlight: Off / Auto / Low / High (new state in byte 2) */ - {KE_KEY, 0x00000501, {KEY_KBDILLUMTOGGLE}}, - {KE_KEY, 0x00800501, {KEY_KBDILLUMTOGGLE}}, - {KE_KEY, 0x00050501, {KEY_KBDILLUMTOGGLE}}, - {KE_KEY, 0x000a0501, {KEY_KBDILLUMTOGGLE}}, - - /* Xiaomi G Command Center */ - {KE_KEY, 0x00010a01, {KEY_VENDOR}}, - - /* OEM preset power mode: 1=3DBalanced 2=3DSilent 3=3DTurbo 4=3DFull spee= d */ - {KE_KEY, 0x00011601, {KEY_PERFORMANCE}}, - {KE_KEY, 0x00021601, {KEY_PERFORMANCE}}, - {KE_KEY, 0x00031601, {KEY_PERFORMANCE}}, - {KE_KEY, 0x00041601, {KEY_PERFORMANCE}}, - - /* Fn Lock state: 1=3Don 0=3Doff */ - {KE_KEY, 0x00000701, {KEY_FN_ESC}}, - {KE_KEY, 0x00010701, {KEY_FN_ESC}}, - - /* Fn+`/1/2/3/4 */ - {KE_KEY, 0x00011101, {KEY_F13}}, - {KE_KEY, 0x00011201, {KEY_F14}}, - {KE_KEY, 0x00011301, {KEY_F15}}, - {KE_KEY, 0x00011401, {KEY_F16}}, - {KE_KEY, 0x00011501, {KEY_F17}}, - - {KE_END} -}; - -struct redmi_wmi { - struct input_dev *input_dev; - /* Protects the key event sequence */ - struct mutex key_lock; -}; - -static int redmi_wmi_probe(struct wmi_device *wdev, const void *context) -{ - struct redmi_wmi *data; - int err; - - /* Init dev */ - data =3D devm_kzalloc(&wdev->dev, sizeof(*data), GFP_KERNEL); - if (!data) - return -ENOMEM; - - dev_set_drvdata(&wdev->dev, data); - - err =3D devm_mutex_init(&wdev->dev, &data->key_lock); - if (err) - return err; - - data->input_dev =3D devm_input_allocate_device(&wdev->dev); - if (!data->input_dev) - return -ENOMEM; - - data->input_dev->name =3D "Redmibook WMI keys"; - data->input_dev->phys =3D "wmi/input0"; - - err =3D sparse_keymap_setup(data->input_dev, redmi_wmi_keymap, NULL); - if (err) - return err; - - return input_register_device(data->input_dev); -} - -static void redmi_wmi_notify(struct wmi_device *wdev, union acpi_object *o= bj) -{ - struct key_entry *entry; - struct redmi_wmi *data =3D dev_get_drvdata(&wdev->dev); - bool autorelease =3D true; - u32 payload; - int value =3D 1; - - if (obj->type !=3D ACPI_TYPE_BUFFER) { - dev_err(&wdev->dev, "Bad response type %u\n", obj->type); - return; - } - - if (obj->buffer.length < 32) { - dev_err(&wdev->dev, "Invalid buffer length %u\n", obj->buffer.length); - return; - } - - payload =3D get_unaligned_le32(obj->buffer.pointer); - entry =3D sparse_keymap_entry_from_scancode(data->input_dev, payload); - - if (!entry) { - dev_dbg(&wdev->dev, "Unknown WMI event with payload %u", payload); - return; - } - - /* AI key quirk */ - if (entry->keycode =3D=3D KEY_ASSISTANT) { - value =3D !(payload & AI_KEY_VALUE_MASK); - autorelease =3D false; - } - - guard(mutex)(&data->key_lock); - sparse_keymap_report_entry(data->input_dev, entry, value, autorelease); -} - -static const struct wmi_device_id redmi_wmi_id_table[] =3D { - { WMI_REDMIBOOK_KEYBOARD_EVENT_GUID, NULL }, - { } -}; - -static struct wmi_driver redmi_wmi_driver =3D { - .driver =3D { - .name =3D "redmi-wmi", - .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, - }, - .id_table =3D redmi_wmi_id_table, - .min_event_size =3D 32, - .probe =3D redmi_wmi_probe, - .notify =3D redmi_wmi_notify, - .no_singleton =3D true, -}; -module_wmi_driver(redmi_wmi_driver); - -MODULE_DEVICE_TABLE(wmi, redmi_wmi_id_table); -MODULE_AUTHOR("Gladyshev Ilya "); -MODULE_DESCRIPTION("Redmibook WMI driver"); -MODULE_LICENSE("GPL"); --=20 2.56.0 From nobody Sat Oct 24 20:42:36 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.216.54 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792586114; b=uAxe8qvCHn4tJMjxZq6c+h6L32O79zGM6CAqbIdJ/P9Dj/p+wKhgmueEIGptT62hLE+j ZiLjIgiVDQUS3Uogi8LHspzrbIF9VYp8q6ktQdpPnU5Vai/eimVI1PS2CzCMgV18R5VrB UQl65gSAccCyeJ5yTfR0wMGKUtzZ5k8kopTYQpci/FA5ukZ+7u1xkGPenqiykDjt4fix8 iOdciZp6Esx3OD1ly/ZYbOMDNBUm0JwcFC9LGjDhnB/R2RqUNlj67+z77oihVKw/N8Tku ZYjjJkIWr2HcYa0+I6K8tKEXBHAEImv3W1QuOVSRSW0I7kRGbJePtrj2x5ckP4ny5xw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792586114; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=k34ieup5pE8aTDUteztI7s/TYpflGq9NMqf7xE7uTwQ=; b=UEene+NQyaL779Is6qRJCwv6JnNQnIw9N/uYW5jkSsODLlqpAv/x0y/UDP4+OUuI6Ng6 CB4z+4B5AlqVlJGpc8j7DMv7vrMX0oLqmaeGXshN/tq9L9OLz6TVYLb87dIqdTsnrowiM spu5dKXB64ZWuxwdyEuWIfqnIUDbh0jOoDqNgT8VHSgF4Ad2RfcGYghNnlRFKL6aNL1km 0C8CIij5u8k+CZCnTDYs0sOVlY95jCDG3oyf1PtUMJkcP/7SMsuaVwruJD2oFmmQfUhyA olIAm+k2gc+M8mFaisJ7uhSib9MIXP7eOOxR2wMK/fqjWjsU5TERZa8K1NCvFbP4QZg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=SdrUVYtA; arc=none smtp.remote-ip=209.85.216.54 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3618760A2601 for ; Wed, 21 Oct 2026 12:35:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 3618760A2601 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=SdrUVYtA Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-3acc96a256dso455685a91.3 for ; Wed, 21 Oct 2026 05:35:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792586113; x=1793190913; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=k34ieup5pE8aTDUteztI7s/TYpflGq9NMqf7xE7uTwQ=; b=SdrUVYtALpIzhnjLve0J+ImVtojvyHUDqAfvyZCNdAGVMSA9fvQO6XNWOiqSqTDPpm 8KnLxIPpCyIPKzWH9ZLUF8Vk8uRa5CQFkXyy88UcQNaP5c8eNV3zjt9nLzY9Fi5JxJ8A WYplMkcgP2wDjYmOeDyS4ImKT/6HhCdondBHTonIe2x7dJQVXKs5Zp66vj01s3RSTEJQ p/56j40cvIyP/pVQi1Y77KvoDo1Rg3sQ8PjDwcxoaJ+TZ/SA4doIO91KWutBDBkmIB6u vTSZ1x6DKICyYDJdhBEgj94mJN4KToPgAW7nfenNlJ0bVAIAuErqlyBCTB5JAvmO/A49 /AQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792586113; x=1793190913; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=k34ieup5pE8aTDUteztI7s/TYpflGq9NMqf7xE7uTwQ=; b=dmZvDXqB8ZCGwZh/1LxC+s6afcC6bdopHHDeCv+JudHiQOT027VitlKjFhw4dBhMbu cEUOp+7ti5pyrTuORgFWFNoSbQ67WFBDH+1e+30xBs99Ux184vx1CpfkM0Nk4gkch6uR UXtxNZMB7CZDt6iZkD6pRYaj/NqFTQtUYePg/XfFR59AaSPnGvhrLO9IFxULqMzhfSDN 3ez45Hb1hCFEcnr65widBjl9eYTVMJ5HUR1R0BHPtOvq26PhDxlUa7wHz/85a9fDsub8 D7zLMeaRWijYhmXqB8VfeaKJgFPYWvgz+kpSSgt5pE2WqM8H69ibNumycov9EfKWNTkI +5Vw== X-Forwarded-Encrypted: i=1; AKwUvByz6cuwHb4RBcJr+eY3iQ5JhOGopAO3NRidWXG0ThbxsktmLLbBE+q+5adTr1PFu9UfZvJMonSuFu+QlP0=@vger.kernel.org X-Gm-Message-State: AFq9FYKJ6wYXBJYpjODxJbZWaCd9VcqMS2IXcLIOhXJUVetm7NEbtB0V kVY05y13bIVoqG63O03jmz3t+EOlajr+v5PH+sswH0gUpts+YPonhDRt X-Gm-Gg: AYBFou3pnTP8/TXRhkZ6UXdHWRDNdSf8QvFqGQMWPcxDQV8YIA1famMhfqbaVWwEpA3 IzSf61thheKk1KjH3TAeF2/eBBt6mg7dO9fkXwz+zxDWlg/ervRsgsZqlRum854EYe4OsPOVPLH A0gRPpkYBvJu2IXLmIP0ACP9ovaM9iAZq9/opFYHNAgHXuvEr87PET4zMAjxnODgbLrtZ++VXtu B9IdF1Yf2eeAnNYBXCWx1czhrf6WsPNiec1w7JpQAETCtvUketyv9jkLVJmqk0w7AnzHvvpza3A aB/stDXqTAYXLZES232huQeq0uuMjKckz2SSQ1FCVPyGK4G/uxS5szGaRADcvaBnfBNkEZr8Xwj /OEuemGf0tgTSMTsAryGfjPmhw+BpoCBBuciIIJZNqYwUWyDFFWBuWBbK7wuIIbmo5JOLFObT/R qGdp6McfgCAXbpRqPQmHvDL/4L+Zo0RMZYi4PmWpzB2Vb0c/ldGSisqvJq0czc5YpXC700khDaP yqEqrfKaicRNvsnMxKsJfoZnOPXlaB6rEIS0XJLEGiYGGOg8QFfFGTj X-Received: by 2002:a17:90b:1c8e:b0:3ab:33b6:2c27 with SMTP id 98e67ed59e1d1-3ad86e9d931mr1787586a91.23.1792586113198; Wed, 21 Oct 2026 05:35:13 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ad85f56b03sm1823615a91.3.2026.10.21.05.35.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 05:35:11 -0700 (PDT) From: Mingyou Chen To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede , Ilya Gladyshev Cc: KentoNion , platform-driver-x86@vger.kernel.org, ted eric , Armin Wolf , linux-kernel@vger.kernel.org, Chris Taraszka , Matias Civadda , =?UTF-8?q?=E9=AB=98=20=E4=BF=8A=E6=96=87?= , powerfullz , =?UTF-8?q?=E5=AD=99=20=E8=AA=89=E9=93=AD?= , =?UTF-8?q?Milo=C5=A1=20Vlku?= , Rsplwe , Bozhen Peng , Anton Karasev , Jame Jao , Serhiy Shliapuhin , Mingyou Chen Subject: [PATCH v13 5/7] platform/x86: bitland-mifs-wmi: Add quirks table Date: Wed, 21 Oct 2026 20:34:12 +0800 Message-ID: <20261021123414.25516-6-qby140326@gmail.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261021123414.25516-1-qby140326@gmail.com> References: <20261021123414.25516-1-qby140326@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The MIFS WMI interface is shared by several Bitland ODM laptops which differ in the layout of the performance mode values of WMI_FN_SYSTEM_PER_MODE and in the capability checks. Introduce a quirks table to support multiple machine families without sprinkling model checks over the driver. Signed-off-by: Mingyou Chen --- drivers/platform/x86/bitland-mifs-wmi.c | 180 ++++++++++++++++-------- 1 file changed, 122 insertions(+), 58 deletions(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index 0d7815c2faf9..a54eb5bba1e8 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -84,6 +85,41 @@ enum bitland_mifs_power_profile { WMI_PP_FULL_SPEED =3D 3, }; =20 +struct bitland_mifs_wmi_data; + +struct bitland_profile_entry { + enum platform_profile_option profile; + u8 wmi_val; + bool no_set; +}; + +struct bitland_mifs_quirks { + const struct bitland_profile_entry *profile_entries; + size_t num_profile_entries; + + bool return_code_at_end; + bool skip_ac_type_check; + + /* Accept return value 0 on SET wmi functions */ + bool accept_zero_function; +}; + +static const struct bitland_profile_entry default_profile_entries[] =3D { + { PLATFORM_PROFILE_LOW_POWER, WMI_PP_QUIET }, + { PLATFORM_PROFILE_BALANCED, WMI_PP_BALANCED }, + { PLATFORM_PROFILE_BALANCED_PERFORMANCE, WMI_PP_PERFORMANCE }, + { PLATFORM_PROFILE_PERFORMANCE, WMI_PP_FULL_SPEED }, +}; + +static const struct bitland_mifs_quirks default_quirks =3D { + .profile_entries =3D default_profile_entries, + .num_profile_entries =3D ARRAY_SIZE(default_profile_entries), +}; + +static const struct dmi_system_id bitland_mifs_dmi_table[] =3D { + {} +}; + enum bitland_mifs_event_id { WMI_EVENT_SWITCHVIDEOMODE =3D 1, WMI_EVENT_SELECTIVE_SCREENSHOT =3D 2, @@ -131,12 +167,24 @@ struct bitland_mifs_input { u8 payload[28]; } __packed; =20 -struct bitland_mifs_output { +struct bitland_mifs_output_head_rc { __le16 return_code; __le16 function; u8 data[28]; } __packed; =20 +struct bitland_mifs_output_tail_rc { + __le16 function; + u8 data[28]; + __le16 return_code; +} __packed; + +union bitland_mifs_output_buf { + struct bitland_mifs_output_head_rc head; + struct bitland_mifs_output_tail_rc tail; + u8 raw[32]; +}; + struct bitland_mifs_event { u8 event_type; u8 event_id; @@ -166,27 +214,41 @@ struct bitland_mifs_wmi_data { struct input_dev *input_dev; struct device *hwmon_dev; struct device *pp_dev; + const struct bitland_mifs_quirks *quirks; enum platform_profile_option saved_profile; }; =20 static int bitland_mifs_wmi_call(struct bitland_mifs_wmi_data *data, const struct bitland_mifs_input *input, - struct bitland_mifs_output *output) + struct bitland_mifs_output_head_rc *output) { struct wmi_buffer in_buf =3D { .length =3D sizeof(*input), .data =3D (voi= d *)input }; struct wmi_buffer out_buf =3D { 0 }; + const u8 *payload_data; + __le16 return_code; + __le16 function; int ret; =20 guard(mutex)(&data->lock); =20 ret =3D wmidev_invoke_method(data->wdev, 0, 1, &in_buf, &out_buf, - sizeof(struct bitland_mifs_output)); + sizeof(union bitland_mifs_output_buf)); if (ret) return ret; =20 - struct bitland_mifs_output *result __free(kfree) =3D out_buf.data; + union bitland_mifs_output_buf *result __free(kfree) =3D out_buf.data; =20 - switch (le16_to_cpu(result->return_code)) { + if (data->quirks->return_code_at_end) { + return_code =3D result->tail.return_code; + function =3D result->tail.function; + payload_data =3D result->tail.data; + } else { + return_code =3D result->head.return_code; + function =3D result->head.function; + payload_data =3D result->head.data; + } + + switch (le16_to_cpu(return_code)) { case WMI_RETURN_CODE_SUCCESS: break; case WMI_RETURN_CODE_UNKNOWN_FUNCTION: @@ -195,11 +257,16 @@ static int bitland_mifs_wmi_call(struct bitland_mifs_= wmi_data *data, return -EIO; } =20 - if (result->function !=3D input->function) - return -ENOMSG; + if (function !=3D input->function) { + if (!(data->quirks->accept_zero_function && function =3D=3D 0)) + return -ENOMSG; + } =20 - if (output) - memcpy(output, result, sizeof(*output)); + if (output) { + output->return_code =3D return_code; + output->function =3D function; + memcpy(output->data, payload_data, sizeof(output->data)); + } =20 return 0; } @@ -208,45 +275,41 @@ static int laptop_profile_get(struct device *dev, enum platform_profile_option *profile) { struct bitland_mifs_wmi_data *data =3D dev_get_drvdata(dev); + const struct bitland_mifs_quirks *quirks =3D data->quirks; struct bitland_mifs_input input =3D { .operation =3D cpu_to_le16(WMI_METHOD_GET), .function =3D cpu_to_le16(WMI_FN_SYSTEM_PER_MODE), }; - struct bitland_mifs_output result; + struct bitland_mifs_output_head_rc result; + size_t i; int ret; =20 ret =3D bitland_mifs_wmi_call(data, &input, &result); if (ret) return ret; =20 - switch (result.data[0]) { - case WMI_PP_BALANCED: - *profile =3D PLATFORM_PROFILE_BALANCED; - break; - case WMI_PP_PERFORMANCE: - *profile =3D PLATFORM_PROFILE_BALANCED_PERFORMANCE; - break; - case WMI_PP_QUIET: - *profile =3D PLATFORM_PROFILE_LOW_POWER; - break; - case WMI_PP_FULL_SPEED: - *profile =3D PLATFORM_PROFILE_PERFORMANCE; - break; - default: - return -EINVAL; + for (i =3D 0; i < quirks->num_profile_entries; i++) { + if (quirks->profile_entries[i].wmi_val =3D=3D result.data[0]) { + *profile =3D quirks->profile_entries[i].profile; + return 0; + } } - return 0; + + return -EINVAL; } =20 -static int bitland_check_performance_capability(struct bitland_mifs_wmi_da= ta *data) +static int bitland_pp_check_capability(struct bitland_mifs_wmi_data *data) { struct bitland_mifs_input input =3D { .operation =3D cpu_to_le16(WMI_METHOD_GET), .function =3D cpu_to_le16(WMI_FN_SYSTEM_AC_TYPE), }; - struct bitland_mifs_output output; + struct bitland_mifs_output_head_rc output; int ret; =20 + if (data->quirks->skip_ac_type_check) + return power_supply_is_system_supplied() > 0 ? 0 : -EOPNOTSUPP; + /* Full-speed/performance mode requires DC power (not USB-C) */ if (!power_supply_is_system_supplied()) return -EOPNOTSUPP; @@ -269,47 +332,42 @@ static int laptop_profile_set(struct device *dev, enum platform_profile_option profile) { struct bitland_mifs_wmi_data *data =3D dev_get_drvdata(dev); + const struct bitland_mifs_quirks *quirks =3D data->quirks; struct bitland_mifs_input input =3D { .operation =3D cpu_to_le16(WMI_METHOD_SET), .function =3D cpu_to_le16(WMI_FN_SYSTEM_PER_MODE), }; + size_t i; int ret; - u8 val; =20 - switch (profile) { - case PLATFORM_PROFILE_LOW_POWER: - val =3D WMI_PP_QUIET; - break; - case PLATFORM_PROFILE_BALANCED: - val =3D WMI_PP_BALANCED; - break; - case PLATFORM_PROFILE_BALANCED_PERFORMANCE: - ret =3D bitland_check_performance_capability(data); - if (ret) - return ret; - val =3D WMI_PP_PERFORMANCE; - break; - case PLATFORM_PROFILE_PERFORMANCE: - ret =3D bitland_check_performance_capability(data); + if (profile =3D=3D PLATFORM_PROFILE_PERFORMANCE || + profile =3D=3D PLATFORM_PROFILE_BALANCED_PERFORMANCE) { + ret =3D bitland_pp_check_capability(data); if (ret) return ret; - val =3D WMI_PP_FULL_SPEED; - break; - default: - return -EOPNOTSUPP; } =20 - input.payload[0] =3D val; + for (i =3D 0; i < quirks->num_profile_entries; i++) { + if (quirks->profile_entries[i].profile =3D=3D profile && + !quirks->profile_entries[i].no_set) { + input.payload[0] =3D quirks->profile_entries[i].wmi_val; + return bitland_mifs_wmi_call(data, &input, NULL); + } + } =20 - return bitland_mifs_wmi_call(data, &input, NULL); + return -EOPNOTSUPP; } =20 static int platform_profile_probe(void *drvdata, unsigned long *choices) { - set_bit(PLATFORM_PROFILE_LOW_POWER, choices); - set_bit(PLATFORM_PROFILE_BALANCED, choices); - set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices); - set_bit(PLATFORM_PROFILE_PERFORMANCE, choices); + struct bitland_mifs_wmi_data *data =3D drvdata; + const struct bitland_mifs_quirks *quirks =3D data->quirks; + size_t i; + + for (i =3D 0; i < quirks->num_profile_entries; i++) { + if (!quirks->profile_entries[i].no_set) + set_bit(quirks->profile_entries[i].profile, choices); + } =20 return 0; } @@ -366,7 +424,7 @@ static int laptop_hwmon_read(struct device *dev, enum h= wmon_sensor_types type, struct bitland_mifs_input input =3D { .operation =3D cpu_to_le16(WMI_METHOD_GET), }; - struct bitland_mifs_output res; + struct bitland_mifs_output_head_rc res; int ret; =20 switch (type) { @@ -455,7 +513,7 @@ static enum led_brightness laptop_kbd_led_get(struct le= d_classdev *led_cdev) .operation =3D cpu_to_le16(WMI_METHOD_GET), .function =3D cpu_to_le16(WMI_FN_RGB_KB_BRIGHTNESS), }; - struct bitland_mifs_output res; + struct bitland_mifs_output_head_rc res; int ret; =20 ret =3D bitland_mifs_wmi_call(data, &input, &res); @@ -480,7 +538,7 @@ static ssize_t gpu_mode_show(struct device *dev, struct= device_attribute *attr, .operation =3D cpu_to_le16(WMI_METHOD_GET), .function =3D cpu_to_le16(WMI_FN_GPU_MODE), }; - struct bitland_mifs_output res; + struct bitland_mifs_output_head_rc res; u8 mode_val; int ret; =20 @@ -534,7 +592,7 @@ static ssize_t kb_mode_show(struct device *dev, struct = device_attribute *attr, .operation =3D cpu_to_le16(WMI_METHOD_GET), .function =3D cpu_to_le16(WMI_FN_RGB_KB_MODE), }; - struct bitland_mifs_output res; + struct bitland_mifs_output_head_rc res; u8 mode_val; int ret; =20 @@ -712,6 +770,7 @@ static int bitland_mifs_wmi_probe(struct wmi_device *wd= ev, const void *context) .default_label =3D ":" LED_FUNCTION_KBD_BACKLIGHT, .devname_mandatory =3D true, }; + const struct dmi_system_id *dmi_id; int ret; =20 drv_data =3D devm_kzalloc(&wdev->dev, sizeof(*drv_data), GFP_KERNEL); @@ -726,6 +785,11 @@ static int bitland_mifs_wmi_probe(struct wmi_device *w= dev, const void *context) =20 dev_set_drvdata(&wdev->dev, drv_data); =20 + drv_data->quirks =3D &default_quirks; + dmi_id =3D dmi_first_match(bitland_mifs_dmi_table); + if (dmi_id) + drv_data->quirks =3D dmi_id->driver_data; + if (dev_type =3D=3D BITLAND_WMI_EVENT) { /* Register input device for hotkeys */ drv_data->input_dev =3D devm_input_allocate_device(&wdev->dev); --=20 2.56.0 From nobody Sat Oct 24 20:42:36 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.215.180 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792586122; b=NUKznX9B2prkcttk/poKAu5DQ387mIV4QXXhBF7Lxj9lSN7TumiX+H5Kxgfk3Ekqec// 9IM9TS2aJVa2pRGc2Hg710s9AyA3zxJAhKsgRdxoX+P9oC+x8U7Ru7pUXy4LTVDiQ7c0m DMvnsqyUkb1B8q6WkPJ/hqvX47C+tp00Nug9NhroIJ0FUnktNy/kIDKBW/kIlMQnHPblj dVO2ajivOaWjpgQYMuUOS+rLz3Uo9ytf14p3IY2hGGdQ98d18hI5BMWWemTODHY8QB/FB JYuC8y05TuTadDAJiPScmW3gtn2Fnmt4uA7b129U/ddIKVR+ky1YFPhhsQVXyyAnl5A== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792586122; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=uVtw8U6rcnazFJXWapfAKo/5JBSTjKE2HoWBd7UBtGo=; b=mZgZ+Pc3nyjYfmPD9rvzlVKN5BXT/VcIoa6MhWArHtSNEaWWJ42Cc1+Wa3WLa39O4XsQ yhJTCWLZHvN2QSEndoMezW4KnT7ySPHFhNs09zKDih/zg9s+UMbqTAPe6emPKCyeeLRj4 TInGNSE16HoP/aqTU+g1/aAQhRDk5FAUv8+fU7Z0D+ugY2LgOTgux6plGRXuvzgcp7aBF ERMKKHps+op70Dzun3GrkGK/Cjn/u33YtmCnWiFX1peqzen4zBhnZj2iYx0qhHduHBv3T B75DjMMnLDHTPmf8mjN7OiVLG+2H3PBetOeV3D1GqeTlvkw2psB1b/nytBNyXm582JQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=q2X0HcmN; arc=none smtp.remote-ip=209.85.215.180 Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F0A4606A32D for ; Wed, 21 Oct 2026 12:35:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 8F0A4606A32D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=q2X0HcmN Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-cc4b1f7e8f4so252169a12.1 for ; Wed, 21 Oct 2026 05:35:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792586122; x=1793190922; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=uVtw8U6rcnazFJXWapfAKo/5JBSTjKE2HoWBd7UBtGo=; b=q2X0HcmNYB4LJEBMLYmKcYD5f7vBKgYYqCdDPMP1NmbE4mUp0nc23ZbES5Yztwgozn Tb5aiXWxWtFEaCBf89pakmottmBXCak3vbPC3Rw4WdixUdnMSx2qvC+dOmLKpFbirzMz /KrKQs4WJreTIPYPsgzWrSlapJDjnCQbROFqa3e7I9OjhVBn0yeQOb5tSQ49qwDKIN4L 0Y31CaMQCPAJ879ufkwJOPcYrQpV3ZJEY5UyuJaFVas4B83AOKT5d05RnwD6xqROfg0k 2qy9DXKNoG3OEaR548/lscZ/cvB1peyDZO09LimDtfRBMgPeL7JVYQMNVI9Id1IkVRBH rf2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792586122; x=1793190922; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=uVtw8U6rcnazFJXWapfAKo/5JBSTjKE2HoWBd7UBtGo=; b=udQK2VDDOJoTMyF0OceMU4uboRBNmHZxNnjLkN8x/hQ8pL0SXpQmPDzMtzT0wvn2EY fQAntmhPMC01Ngjrux3nWEylJ8gk1YAPQ1yMQn3LUjdeA/QXJDKRFwHwJlFgMxKVJJsW +dhkvWEmkIGjTO6x6/X6u5eXYbUPTuPnwBKT94TqbU49fdVNKOjSEy1bvIEUEA5Lbf/Q fdfL0OHOqWhAsBYJ3GHyMy8voOSC4Zvtyw5K38Wsxw5ERrn0QIK/lAb1fNjArGU35TGd tlFxokpqvoloNY16nthkVdtw/XnhLt/JoFBNYjyMIyrhohxW0SJn8FD+tYrAHvGguUwN SVig== X-Forwarded-Encrypted: i=1; AKwUvBy7zY8+hYJoE0Eq2mTL8v0PRsmOOdXuV9AXZ7+jFFDVL0ZAhmRaRZNYDT7/GiyqnRRuVy1nDdI/khBD64w=@vger.kernel.org X-Gm-Message-State: AFq9FYJ5NVPA7nkMsLk/wgUkdmg277WS0Q1u3SFf9jHtlrkPAb+jOx2s YZ6GMLBYW/mJsnxuyg+Hpq9R3xbFHTT8+hojeg5qCmP4/hgwpKumCoVL X-Gm-Gg: AYBFou1evB5ymwW+XiiXR6VWMvwB9wspyDanDyeKd23HWjLy4+8SqMYkBGQB69zBgdh KdhCGKAG/ZinGSS5tsPvb8jcHJ50u85tiRMTIINQ9LSsBDFy7HtYHgnHVEvEAdtoI/pF9nGlZzE 8/eKYjUMnAidssw+xukoYRus7qTKE+iNXPWO/tY859310DDxZv8ylTP9WE+c0ZMNEeLW18dE3nj la/4Q9ayvXVeYJP5XDo3fYLcwzt1BG2I1PnVT0jKDqiBikyHm+r1dZTnQXSse2N/FgvUzrcDApg sRTViUvUATHaqnD7p0SxCg7+ZLYMFmIYL1c8BvGYp5LRjW12CCEVRuDP/B3Z+y7wgwYjny1BnHh cYGpOE4Ie1zI4P/lMVgcbmncF3diYf9qgyE/I8eCfweyiRxpDwYtzgwr6juvbQI+eNCQCHs6MFP LzLNSNHcqHgb5JMFw1l4syN8aL60NSiIo4ZBmRMEg20kSDWxn/9ITcq9Hay3BIIqZlW3xLoog1i LG3sdd76qyuG0YjRanJPfpGmcyqHVnnhaJ5sh9/WJQpJyG/pX0kkpWN X-Received: by 2002:a17:90b:1dcf:b0:3ac:4e18:238c with SMTP id 98e67ed59e1d1-3ad86f10199mr1431595a91.49.1792586121968; Wed, 21 Oct 2026 05:35:21 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ad85f56b03sm1823615a91.3.2026.10.21.05.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 05:35:21 -0700 (PDT) From: Mingyou Chen To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede , Ilya Gladyshev Cc: KentoNion , platform-driver-x86@vger.kernel.org, ted eric , Armin Wolf , linux-kernel@vger.kernel.org, Chris Taraszka , Matias Civadda , =?UTF-8?q?=E9=AB=98=20=E4=BF=8A=E6=96=87?= , powerfullz , =?UTF-8?q?=E5=AD=99=20=E8=AA=89=E9=93=AD?= , =?UTF-8?q?Milo=C5=A1=20Vlku?= , Rsplwe , Bozhen Peng , Anton Karasev , Jame Jao , Serhiy Shliapuhin , Mingyou Chen Subject: [PATCH v13 6/7] platform/x86: bitland-mifs-wmi: Fallback to balanced platform profile if last performance profile is not available Date: Wed, 21 Oct 2026 20:34:13 +0800 Message-ID: <20261021123414.25516-7-qby140326@gmail.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261021123414.25516-1-qby140326@gmail.com> References: <20261021123414.25516-1-qby140326@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On Bitland laptops, performance profiles require an external power supply. If the system enters suspend in a performance profile and the AC adapter is unplugged while the machine is asleep, laptop_profile_set() fails with -EOPNOTSUPP during resume when attempting to re-apply saved_profile. Returning an error from the resume callback simply because the power cable was removed during sleep is undesirable, as the device is otherwise fully functional. Gracefully handle this condition by falling back to PLATFORM_PROFILE_BALANCED whenever restoring the saved profile returns -EOPNOTSUPP. Update saved_profile accordingly and notify user space via platform_profile_notify() so daemons such as power-profiles-daemon stay in sync with the actual hardware state. Signed-off-by: Mingyou Chen --- drivers/platform/x86/bitland-mifs-wmi.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index a54eb5bba1e8..f4f37ae2f424 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -392,13 +392,27 @@ static int bitland_mifs_wmi_suspend(struct device *de= v) static int bitland_mifs_wmi_resume(struct device *dev) { struct bitland_mifs_wmi_data *data =3D dev_get_drvdata(dev); + int ret; =20 /* Skip event device */ if (!data->pp_dev) return 0; =20 + ret =3D laptop_profile_set(dev, data->saved_profile); + + if (ret =3D=3D -EOPNOTSUPP && data->saved_profile !=3D PLATFORM_PROFILE_B= ALANCED) { + dev_dbg(dev, "Cannot restore profile %d (likely on battery), falling bac= k to balanced\n", + data->saved_profile); + + ret =3D laptop_profile_set(dev, PLATFORM_PROFILE_BALANCED); + if (!ret) { + data->saved_profile =3D PLATFORM_PROFILE_BALANCED; + platform_profile_notify(data->pp_dev); + } + } + dev_dbg(dev, "Resuming, restoring profile %d\n", data->saved_profile); - return laptop_profile_set(dev, data->saved_profile); + return ret; } =20 static DEFINE_SIMPLE_DEV_PM_OPS(bitland_mifs_wmi_pm_ops, --=20 2.56.0 From nobody Sat Oct 24 20:42:36 2026 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.215.171 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792586131; b=A4AgFRbhWCcGYkTJmpRQKLx4qpxkMJSZ/eSDMO0Lujt+o7iwZ78qeqnnV5LBM0tUYgiI F4vE4EY61fmciAbNfRdZC3GWUdhR9xmA8drgqdJP9AVaR3Qy2KngV5/2SO678/H4N+HMP 63NNHdcKvCKbTtJk3DoIGrwMchPwgWeG+UBN2/ruqjfflM03vExe95teycJid8O0SnYgg 4f3TF3xdDpSMR2j9sOMG08Ve90pC59F8sJ2Xe0QhiBbwO9lVtWZWK3REsZRAvlgyTLCpq CCcN8e+x5tmJ3kuJQq6q61LmDL/2qRVAeY8kAXfSpOaNz0bFyNQ+v8K4G3suJPlt0Zg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792586131; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=wu1qxZELmS9rWT/CuocSgQnLIE8sXZ1eUSoJrMvKaxI=; b=vyexr/kKKXU94scKLCP5NKIZpXkI1ag4tdB2nB6FEs6fRjepxzsQXrSuOPKtYFUQxIeZ VpNv8nWhAYJh+fh6IXbGZ0PhaZK3ib64O1TEA34K/Kxf/vl/QnLDiv8MolR5m9F6QPlqe 2sU/Av7aKigXcgRBsheJS3kj020TVTYl9c42pMKlh2s0iahZCt6VFcjkfj7DrEuG7Wfjr 58DbL5vSBIkF/i8d74E4EGgA69rlhCoYrAoK5fQ28DWIIraDdxAhckC7O02+3+iszGoGV 58IWFB73+m5MQeyr6cXoI6ZxELoIsvGrywdRxA1drBhjDEmf2YwQ6LoTSOwAKhQDvPA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=G7D64tsG; arc=none smtp.remote-ip=209.85.215.171 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85D8D606ABC2 for ; Wed, 21 Oct 2026 12:35:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 85D8D606ABC2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=G7D64tsG Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-cd3310348d2so687809a12.1 for ; Wed, 21 Oct 2026 05:35:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792586131; x=1793190931; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=wu1qxZELmS9rWT/CuocSgQnLIE8sXZ1eUSoJrMvKaxI=; b=G7D64tsGDl66QqN8Sz1fWlom/DCu2eemXsPvx8ILE/DFYzM1apBcPN7JF9qZ25MurD 6mNITetmZdNE9pTP+sA/vxzC53MLjBAoHcMbUTl7ah6OrKfhlLK+jvwhYlLI5Vlb0uhu 1H9QOHB+4J7OtUg/Kkh/u6mUY+efs8jGigG4ZSHPH6zxe/NJdsL9AsdaHdKDNks8OHS6 Z41esGAP6zSqGyNHUE5XCzTLfADGrK05TSpjlTIOiAAcCbwGNluhijsUU89xZvblCy5c pEBaO/nwtAu4opN4lBab4E0QYpiPjXltPXNVD5ENKKd8cDFl8kJtMeW6t2wo8nrW84EP +kDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792586131; x=1793190931; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=wu1qxZELmS9rWT/CuocSgQnLIE8sXZ1eUSoJrMvKaxI=; b=dyXTeoJ6Gc70xTgk3ydjR/ILTtzi6OYIAnHFyQ8ktAiDKuUl44ZhvWk8+r7HH5CtZW 2gq6VWcAK6P87j+DCyOcHYW3JWoD0qARMBz/ZGW3bCzFWoKzLOfXOHRIpOrx8vdiudLX mKgAxFsTJO88aPbJC9ZLXfvQXM/oL77FJu62V4ih8bjLWvdas6RuZVTXUJJXjRAfHj75 fLkr8T1LdzlEWqzapvzNWFYigBn3THoUqNOoMDR30h9hsatM/C2hH5/fO0eP4QWLdZS7 FFDqPDNvWzT8uuFyaGXBOxEFo+hQBiAT2Drl+SmcOwN1BxIB2dkuFwEpzgvrh1mNwoT1 6ruw== X-Forwarded-Encrypted: i=1; AKwUvBz8Om7OivYXNrtLpUfJ9wU98nneST+Dc60Oc14kiNrQtyNMJu+1e8qQaiCl+vU2If7rv8MQjjq27RlgAUA=@vger.kernel.org X-Gm-Message-State: AFq9FYIcSnH3r1CSKXi2Qh1D+NxvWCVZRpoVZmI8bXJ2D/Jip02VN8A+ uq3jmn9swWWUD5BAU+38iFZcJEz50SoavdX7cYKBKA1LlLWLXLTyfE5U X-Gm-Gg: AYBFou11tkNnsPdbzx4CpRN1ZAt3+wSrKFhcOdz+m9LFythRSay+5hxqDU+UuMKk0nN 6nbhKgSJ94/brM1tLE8WH2Ft7Otkm/lYCBmFgRS9ZrPmDW21sZoT7gUPG7HZozdDTyRa1VJjBys VqrOw/B8CYrN67T36pFrZ5J8MJnkBXzJcATOQk8CHuJ88UIOz5169CBAum2IZLF4iTlQ+leKRdQ M7MwaEZ4CpTZMH8MDalsERVu3Mz5454tqZemmmy3ycbKc7qSQq6YLo8WfXAVbPiET31cW6sjqUJ vUjGrQYvZcnp9TtAgg1I82hQZ0VqAupYqVpsG3tD4aEk4/A7pLrLFepGHb82GgUaZP2fBv1Z32G WrHbZo9JuwssFvdwdAJDkzvI+4jR3H5l06PtUbJCLHyPLblR3iHtfDo+FGC6/xnHLv1LKXjY3oZ Tu8qA4tymLFyHBAqisiiHAGlljMVBMTYQ8sEx20IwoftCIZJqoK5/vwz/rZ6qlowcPgMehI/ffv 7Q3q8nCqe8R8DpA8XxCklgkyF2g/vK+iq9THOiwwrlt8ygaxvjgd6+0 X-Received: by 2002:a17:90b:4c8b:b0:3a7:96d:feaf with SMTP id 98e67ed59e1d1-3ad86ec6e0bmr1005629a91.16.1792586130463; Wed, 21 Oct 2026 05:35:30 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ad85f56b03sm1823615a91.3.2026.10.21.05.35.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Oct 2026 05:35:29 -0700 (PDT) From: Mingyou Chen To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede , Ilya Gladyshev Cc: KentoNion , platform-driver-x86@vger.kernel.org, ted eric , Armin Wolf , linux-kernel@vger.kernel.org, Chris Taraszka , Matias Civadda , =?UTF-8?q?=E9=AB=98=20=E4=BF=8A=E6=96=87?= , powerfullz , =?UTF-8?q?=E5=AD=99=20=E8=AA=89=E9=93=AD?= , =?UTF-8?q?Milo=C5=A1=20Vlku?= , Rsplwe , Bozhen Peng , Anton Karasev , Jame Jao , Serhiy Shliapuhin , Mingyou Chen Subject: [PATCH v13 7/7] platform/x86: bitland-mifs-wmi: Permit zero on SET functions Date: Wed, 21 Oct 2026 20:34:14 +0800 Message-ID: <20261021123414.25516-8-qby140326@gmail.com> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261021123414.25516-1-qby140326@gmail.com> References: <20261021123414.25516-1-qby140326@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On Bitland laptops, the ACPI firmware returns 0x0000 for the function field on SET operations, while setting the return code to success (0x8000). Because bitland_mifs_wmi_call() expects the returned function to match the requested function ID, these write operations fail with -ENOMSG (-42). Allow a return function value of 0 on SET operations to prevent false error reports. Fixes: dc1ec4fa86b2b ("platform/x86: bitland-mifs-wmi: Add new Bitland MIFS= WMI driver") Signed-off-by: Mingyou Chen --- drivers/platform/x86/bitland-mifs-wmi.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index f4f37ae2f424..a4c341ffbb9b 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -258,10 +258,14 @@ static int bitland_mifs_wmi_call(struct bitland_mifs_= wmi_data *data, } =20 if (function !=3D input->function) { - if (!(data->quirks->accept_zero_function && function =3D=3D 0)) - return -ENOMSG; + if (function =3D=3D 0 && (data->quirks->accept_zero_function || + input->operation =3D=3D cpu_to_le16(WMI_METHOD_SET))) + goto fn_ok; + + return -ENOMSG; } =20 +fn_ok: if (output) { output->return_code =3D return_code; output->function =3D function; --=20 2.56.0