From nobody Sat Oct 24 20:10:37 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10176443302 for ; Sun, 11 Oct 2026 13:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727095; cv=none; b=l4FSPXg2vRKyw/ZNA/9E4PRBf6R7eKVGvvaSJ4DQj9PzmaVv9gD7wbPFp8Pua6Ny9KNsjWDhpHd+tJBSpLqNBe138AoTHV7y4M+5D/hs2KxzF42R59ERAY3utswfn2r8xpIWV5rFl+YXT5BXBaGTXAOT7In8ujP4b437YDdeBvk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727095; c=relaxed/simple; bh=mD6dZoP3ZagEhLT8en6JZ2TEnxmI/QAwfBdTaspPZtU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NTP8ESNB4AIMnpsq7ezUWiSlL9qTjB4G+fP8K2uqD9DwKius84ePVRzYiYbUxXD2HVNj7OtZsDvYKlIBxfANp+OzrwoUB3i0xQjM1tQanZrdGc/igwfkE0yUaxRSVTNtHspfJjjlv4YAhId053eCPW+5qSmFOaHS3z2sJ3zyHYo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KNyGxobr; arc=none smtp.client-ip=209.85.216.46 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) header.d=gmail.com header.i=@gmail.com header.b="KNyGxobr" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-3ab450c0873so1017552a91.3 for ; Sun, 11 Oct 2026 06:58:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791727093; x=1792331893; 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=6dJ7hRSQIEyiDrhx4pqjl/RoZOTZG8NADNLqENX3HhI=; b=KNyGxobrICBU7Vvtk1Wa1IqWTLHaJzUiQg5QRnzOK1eC8WMXu8m5/fSH3naUUuc5pw 5Ifbml9zvmHY4BDSM9D09MonxzfEmPZy8uYXQJGjrUqwTM2ltvKjsVbgA8gvOcSKoZUe l0sEk3C5Q4lpYgT6FbBj6jebxaC5dbeWtNQIT8s4kPp2qNVUxD9oltJswwIF5bEC+cjs ZyKEUqn1i9Kw3zf8GyMwagUMXMWD4PI/0vE6HnRR2BKodBWiK480I8viq07i8c+RViek GWk97y12ZThWJP4JcUbvwarKtnht5J5R6gF+qbuCrMFmnIiz6dlQH9x02LVz9Mr9TkA3 urNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791727093; x=1792331893; 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=6dJ7hRSQIEyiDrhx4pqjl/RoZOTZG8NADNLqENX3HhI=; b=WFrdwu5WIsyej3y3a/Yunfs8oQeJKLoeLiO9qiGcXlySr0mZaI6aKgkiNM3uipQzRN IqJQJIO/sDmjKvJIROPGbxgy+xw0Znmp7lZT2zWg97zq/0aD5fMO6/U+F9fIjHe7Sx4h 4369Ey2pl+v5gm/v9ZcLR5hlxsENZhn9/DvmUA1IaePWAjcs0rqyGIcVKwXzADX9m6SM Dh2EeL7apSYlkeUIg+2WSAOSjTUO912QTzl9rEylaO+MTAgQavJlGoUgMDWr5AjKXaJL zrf/6shHatQ89h+xqAhlSkJYgbEBqwzf4ElYZEfEz81WxN5eb0aZjTJkoOBz58U3v3pl ta+A== X-Forwarded-Encrypted: i=1; AKwUvBwSgkd3PAWsfkgXjdY7gGYuzYFAJV20ON8YDpfgJI2lVUuNNS+YGRyL7va5qAo7zlFyaSJ4ZvW5UdZUfXg=@vger.kernel.org X-Gm-Message-State: AFq9FYLbnkfASc5bGKk6Y4jaLFyhv3+c3cdBgfi/7DW4h386fmckNh36 lVMrCuKS5CuSa4UX9IrruAq8lz5qQ9mJ8H3NGrjKWyTWH2KeIWYZticb X-Gm-Gg: AYBFou0FrS3mNAIcUZZO/LcP/Y9pYrd+xHKzPUQvV14RUDFnFQbc04cWTyqPFI4tyJr KvYkProPRLakQH0szT4fcRo05Kh1Bs2KenIsgPzyUIF4mQNn5e8xqZZhKg0CaXqBFpSnOP4vW8e +52qSU6mxsHzAYPlCGDZ5OXK1JC37wA/ggvDtKPLWNfIe5PrFcpPKXdEtEwNsj06TmXkItaGUKh +EZsqq5+dEnCgu44UEmsj8SwGDCv6k6r/OqXpVbVJhwVyqdBAm8Bx1jndWmXeiW9SX0IqxXXJdH pr2ws7WToqy3KyMi3URK7nK4CHi4P3wifeB+FKmNGudwBv6i/Ov8QiEjCP1ASVFcgbGj/iM3zpT fWly9yrhcj6rpPk29HhWEoaRkYX5F0BHqkigjxm0ShwNtZd4Etspj14+GNOoy+xBOxB7oJai8J6 9ziZTpSNw8DCrimrCMgDKcJ/X8N8NCKfp264AWZvn9ycCfnZkQ7+MyWSpJVQSPwi9TteDBJ2Vn X-Received: by 2002:a17:90b:2e08:b0:3a7:3474:b1ee with SMTP id 98e67ed59e1d1-3ab3a979396mr6672820a91.60.1791727093298; Sun, 11 Oct 2026 06:58:13 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ab371c32cesm11831648a91.16.2026.10.11.06.58.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2026 06:58:12 -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 , Mingyou Chen Subject: [PATCH v10 1/5] MAINTAINERS: Add maintainer entry of bitland-mifs-wmi driver Date: Sun, 11 Oct 2026 21:57:44 +0800 Message-ID: <20261011135748.11792-2-qby140326@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261011135748.11792-1-qby140326@gmail.com> References: <20261011135748.11792-1-qby140326@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 fa0571a5e479..0874713f262b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -23042,6 +23042,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.55.0 From nobody Sat Oct 24 20:10:37 2026 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8524744AB95 for ; Sun, 11 Oct 2026 13:58:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727105; cv=none; b=P1YpuAeJMP9CFekNp0ATClispt12r1b7kI5nEtkjRZlAmk88Au6Ca/wuVo+seacmIMRMMdjAlDVA1DPaoEb6qhfUf0r7UUwJDcQKUQrL1pBUD+C9N5zlDFftBLze7boi1jJP929Rcq3CaT7/DzZdnnPwKSawJPnuqdV0WoqJPho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727105; c=relaxed/simple; bh=KE32MPdk630OP4mcjFF+tnKfscX0Vy7b57ovCK8ZCP8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WD5fSBSbYWyExvLQKUWUkK0dV+++h2CMT4AjG5oAj3a3tXEGdKqHDkIS0X0mpmMm5GvY+5PVbrNsN2By1HPKzB0RhzMB5a1Q/a1Qtor860LKZVj/rDV8zoNLrqp/rEywm095mdJlEsn1BT4QpZ+sV+aHzbux6Bkli8kdO7DwbTY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=aTlCxwKL; arc=none smtp.client-ip=209.85.215.171 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) header.d=gmail.com header.i=@gmail.com header.b="aTlCxwKL" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-cc4b1f7e8f4so550648a12.1 for ; Sun, 11 Oct 2026 06:58:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791727102; x=1792331902; 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=eEaqWKZCnb8knxALPfuEFW/H7ucJ/r2F6JuslLQC1lc=; b=aTlCxwKL4OMlI9s9tXHCyYpZjEEH+7SK1/nNd2FgBE0c//n4iaO5JTmr4ufWYt0lKS m9GBoKapS1QjjzrDHx9NM/vUl3KpbmHC4EC6UXh83g/t0TghP7mSkR5MCuXsoBuVEIsL vvClEbmgJYhAuBIlGsfOqxxP0MOnbBFFSSmcI0Rc/52YkzfGMl69XqmxaEch9MemATGx gBJ0LVeT4p+fJQ0S60Hwz7rXHxKFfqJ4Fd2J7PGDA//UM2VJRAE40EYDmVlMD6sRZodC G2Tsmrq2jDhpRQmj5u+Is4lOoGGDIoiUOIsZG9ayY8FaN04iEc8OtEyLJfnjY1GWyev+ KrNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791727102; x=1792331902; 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=eEaqWKZCnb8knxALPfuEFW/H7ucJ/r2F6JuslLQC1lc=; b=ETlQ2ztycfO1Nw0Cvjorn4iOwJDh3xbsYX2pspF3jOYHlEkfloXau2JW6xFoeoR9Rx phb2xUiVR5yHSWQBgozsCoPHpyrIo/DK3Qv9H3K5MaQPiuKfTGZGR68OaZiCoG4TuZ0V AKVM3Z7+eHi3tisTIGjTJVeZDxv9jFeu0HAnudUe9aN/B6E6EPVH8PnqZdkHlPU4KJmj /DKcVN5R2WyfjpptCK2j6ufK/mOSSvExMd5Q050+qgRtVrq0644l3k+Jzb3h0xAIUNAN 92QtCjdo6XQWOQRaYtxfoCgjHtirkBoc1s73D+1/bJy/z4abChLeZJmQ5WCTBn8cWE8w lhUQ== X-Forwarded-Encrypted: i=1; AKwUvByqUooNy4ZXfb8d1AjvGCQKFvtR7P0dM6E658ZcgHHrh3u1ml5XxAQIDMDN/yBwyLQwhXf4dZ+xMb4nSeo=@vger.kernel.org X-Gm-Message-State: AFq9FYJ7iX5DM0AYZu+FDt/AP3vRP5fqgGNmEW14Me4ADLv7ZLHkT1zs KnaSsLuKHENKSS2IjaGQCQkh14l5caBgMTJ0toDiO4yJJD3nBbLQYFgK X-Gm-Gg: AYBFou0x9iNfOcD/IFcTQl8of4JlcugeoGenJXz0CheBTqv0S97rXKihH9QUzx18lGA dvnh/q34w8/AiXPvhuirwpLjWFMkUoeAICjF+YsTcGWf1OzaljRI3QeYxwu/BpWnicdVTOOFyX0 J9coEfZ4vuHt/QLpR+yT33PgRL9yw4G1WGR2i/9jaJD0qJ2HbTEd+lO9xm5Hifkd1NQODFhF173 Gi/HRhKG9r/GgntkhYhyvNvRXnjFRq/QM0m5Uop8sq1rZjhAQYy5/3XH6VYhCXhhbeupth9yOhk Q+GaUQUUCFD93JVA9f+hmcYTY0wzNiPpMAMmRerg4k/hwZumnmyYud48bk5vAUafjFG7S7A52jm R8H89vLn1my8Bas3ADngxMhZ3lilmqwh2Z4ojKIQiDeLAjLzvVosDRHu+xmKIymIdddotVtDlvU CaulvrPGdqAF6x2sinSWM4fSS4WIajUdEBR/wVJAD5APlyjg6/hKTGp/NqSsoHco5LwvOkZbjLj WATnQqzqsE= X-Received: by 2002:a17:90b:2e4b:b0:3a8:195f:186 with SMTP id 98e67ed59e1d1-3ab3a9fc457mr5063848a91.42.1791727101759; Sun, 11 Oct 2026 06:58:21 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ab371c32cesm11831648a91.16.2026.10.11.06.58.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2026 06:58:19 -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 , Mingyou Chen , Nika Krasnova Subject: [PATCH v10 2/5] platform/x86: bitland-mifs-wmi: Merge the function of redmi-wmi into the bitland driver Date: Sun, 11 Oct 2026 21:57:45 +0800 Message-ID: <20261011135748.11792-3-qby140326@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261011135748.11792-1-qby140326@gmail.com> References: <20261011135748.11792-1-qby140326@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 | 149 ++++++++++++++++-------- 1 file changed, 102 insertions(+), 47 deletions(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index dd1648b7de77..a6978d14b975 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_KEY_PERFORMANCE =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,60 @@ 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_KEY_PERFORMANCE, 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_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 } }, + + /* OEM preset power mode */ + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KEY_PERFORMANCE, 1, 0), { KEY_PERFORMA= NCE } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KEY_PERFORMANCE, 2, 0), { KEY_PERFORMA= NCE } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KEY_PERFORMANCE, 3, 0), { KEY_PERFORMA= NCE } }, + { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_KEY_PERFORMANCE, 4, 0), { KEY_PERFORMA= NCE } }, + + /* Fn Lock state */ + { KEY_FN_ESC, BI_HOTKEY_CODE(WMI_EVENT_FNLOCK_STATE, 0, 0), {} }, + { KEY_FN_ESC, BI_HOTKEY_CODE(WMI_EVENT_FNLOCK_STATE, 1, 0), {} }, + + /* 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 +784,36 @@ static int bitland_mifs_wmi_probe(struct wmi_device *= wdev, const void *context) &drv_data->notifier); } =20 +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 (entry->keycode =3D=3D KEY_ASSISTANT) { + 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,13 @@ 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: 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 +843,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 +861,14 @@ 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); 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.55.0 From nobody Sat Oct 24 20:10:37 2026 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9492A456297 for ; Sun, 11 Oct 2026 13:58:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727112; cv=none; b=EPR6fD4Rs9vsaOAEg/YCUIy17z44EHEM10GXo2b0LerfgNBXyXxPcyVI5edxKn6vqn0sjqYa1FQ4w5wNp7A5eA1JU1TFjTL3tJZOZ53MgBkZbtuKyN0oqRH14KUS+j0koUPbFhLTQ/MhNesdqwO8+Q1+xIHtV8ntlrrMrv0lW68= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727112; c=relaxed/simple; bh=kZai7cDOlZ0+l6zlb8MOoVY8sOR0vPM3UXr16XTNIpo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JNK6ic249kNPU+HcmpBeyUoJRYTtsoxZAyrVzFoYohUscqbtPVFpC3xR26EIOuM4VXv8+X8tMWQG6LgMmeUedzT7IfXy9PnOwj/2YusOWj+ANUG3YY8+yNWGezEZaWasMxzEpaYKO17j9CstGqzSO3B1gLSonY8dfq565cKddps= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NDdIRD6k; arc=none smtp.client-ip=209.85.216.51 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) header.d=gmail.com header.i=@gmail.com header.b="NDdIRD6k" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-39647aa9d52so637922a91.0 for ; Sun, 11 Oct 2026 06:58:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791727110; x=1792331910; 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=Byus0DODj6fofwroehsBhvXhreRXoniXBi5MxJoOlL0=; b=NDdIRD6kMpIXPWM32EyTX4CHZ917b3pCAW/G5wtqVdCjQ2MhEtaHi9QvEboZ/mZaLN Lnq+uBPkJIG3kuWmJlfvj4+OWwxHLar/Qm6zgxkxBfywCIPTS645KRcYx1QgfR+YVpo0 GGT2FSjI+jn4PkaGh2kc/tQKTIZZwkDPYf3WkQx1hDrwPi5LEiUy0YJf/uUfRly72WRR RdOm1OK+tGC4Oe4c8kcuRdPOhBAWqqOt1iKEvBMMZXiub3Mslze4uPhd5dmjpUrYxIeF X2in/jMmL5oY8/jodnT0VfPnlKfA53s/ubqsQuX/HJWvusyoZis2V6CA5lIEA6sBSNAS ikeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791727110; x=1792331910; 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=Byus0DODj6fofwroehsBhvXhreRXoniXBi5MxJoOlL0=; b=O8ev/0WM2BNc6s031pqpD0t4eZJJ0yEhF3kvI0PYtdiBN8BL7Q9994doomViqKJZFh xDX1Sy5e83JibWert0R/uH6UJycB7K1VwSJQZb5IIgDWm9F62Q8MVRhHV59Hv2c9dw/n zSllGYXFaHtv2PT6l0z7sURmz6MDtYA4Jujv/k9Ptq/8Z4LsVgvCuur8CpLG1zyyv1nW AkhiqYRIr1DvoTCAGI4uj2V4PCfkPoUO7DjHQGibdmlpTkis2qgRzEIQIjZkIGfJVN7g 0JsarJInoGF/R39MSUIIoCmjkAflZxGxs97uqrzMxsd6Mr3pqtNYeLLwMnf5rldf0pvA b/+w== X-Forwarded-Encrypted: i=1; AKwUvBxTQwdkVA/3NH5NmbFfETsmE6vf94frh2IhzLwQbEk3mAG8BGfUEzfR8DzRh0qnyagfTMNEoGS/tVcHW5o=@vger.kernel.org X-Gm-Message-State: AFq9FYKNjHq5RuH5o9RZKWrwGq63sieXbxhTOFM1UACQ6Sbiv/VrLFb6 QASibZYZpGqLqxYueOX5PwfOoezI0cMlygKEcarDJIKQuVXCDJjEDU88 X-Gm-Gg: AYBFou24R3c84GanEiEozOQtr+BSYFk4j2xk4AZCGY2QXVsDAxJQua5zwyoTEmsiU87 cqIQfMjj1wB/iSIlXeVbd7BVc6bz/5CBBuUCHbqPHmXgq02ToEH1z+PogBmEWjO+5YMWWmdAeXy mec8VjV3HtUOdVSi8DFuXBHv8hSrngC1eKjydDwjzBv0XXgd+r7naIy1PN6itIA1Ui7J9sl+GF/ 5OiGG7NbeL/smKtEJ5VJI8NL8gXYWBoXQewNyDr62NoeZIPJ+3klbdqJKquM3TafXJbGUfPfVD2 +3/iKvH2BtybuD5ReUWYVcZEmAUnhXAcfhpSloox62dg3DkWpmKaXIQvCWSpgjzSUMifq3K5V4i CMvs+E3ibzFnaWItGhzVYwnZTF2MLznlrvIZsMppGOxe8uyQ1KZStzZ/cXGsmmULY6D+FTO02Qa okaETRycG4gd9K6kd4NMlgeoOE1ym2mxW6XeIiupsgJrViGyGrPfy8Vkcfm8U57oMB8lrPAcsJ X-Received: by 2002:a17:90b:384b:b0:3a0:295e:6e61 with SMTP id 98e67ed59e1d1-3ab3a953717mr3582472a91.12.1791727109922; Sun, 11 Oct 2026 06:58:29 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ab371c32cesm11831648a91.16.2026.10.11.06.58.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2026 06:58: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 , Mingyou Chen , Nika Krasnova Subject: [PATCH v10 3/5] platform/x86: bitland-mifs-wmi: Add Redmi mic-mute key entries Date: Sun, 11 Oct 2026 21:57:46 +0800 Message-ID: <20261011135748.11792-4-qby140326@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261011135748.11792-1-qby140326@gmail.com> References: <20261011135748.11792-1-qby140326@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 (Fn-lock disabled state) - 0x00012101 (Fn-lock enabled state) 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 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index a6978d14b975..93a519b96189 100644 --- a/drivers/platform/x86/bitland-mifs-wmi.c +++ b/drivers/platform/x86/bitland-mifs-wmi.c @@ -636,6 +636,10 @@ static const struct key_entry bitland_mifs_wmi_keymap[= ] =3D { { KE_KEY, BI_HOTKEY_CODE(WMI_EVENT_SWITCHVIDEOMODE, 1, 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(0x21, 0, 0), { KEY_MICMUTE } }, + { KE_KEY, BI_HOTKEY_CODE(0x21, 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.55.0 From nobody Sat Oct 24 20:10:37 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7825A4582F6 for ; Sun, 11 Oct 2026 13:58:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727121; cv=none; b=pg6XJEwgYpdrQRfyAjPQFoZgncYD8IBlr9MyOUS6BKrXzF+wUwRkCPsWHj3QTEx+9BW3l8D+lrVXm3jnGgzJlKIPNAqPujTrQmAhaZM7rutMdPMs712LVzDbKi5a8qbEXI8RS1QPkckbpa1YA7NzwfWjdNv5sda+NHIE62gn7Rg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727121; c=relaxed/simple; bh=B3BguTlk9zHZCJTi8lMUWN+v5BSrwQzEELivHJQlLuw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IOjK9TFlACNi7JC0VKgDq+VeD2YJkCZRhn73nJ0kQqqBYjnPWda8gFoF4lIcqzPL2Is/9EgDr6NiOJ8TATNLFwnFrslrDmnaoJjzNJoE0NoAHibcXKu1TFjR8t1F4CkDAz9dvzsQboRcE37T4QdR87zfoeyezDO1bMeOOmrMOwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gNWI3E73; arc=none smtp.client-ip=209.85.214.170 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) header.d=gmail.com header.i=@gmail.com header.b="gNWI3E73" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2e8b20a899fso1318255ad.1 for ; Sun, 11 Oct 2026 06:58:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791727119; x=1792331919; 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=jjSH+tkIvUiQIgLglZ3urjR5zbmpKuMZGwy9+eVmxXc=; b=gNWI3E73c0Xb6zQ6f9ttFcrYHz6/T82aGWvcwRMCGeJVY2ujvYB10XXgJCCLqxPElX aNfa0lPcrjpkHnpcjtH/ddE+TaJlcQJOzdpGTAM7jSJCAWIt0FfjybfYRXLdmIhoWac2 oibVvW0OOprOtEp21FHnax9h8KD68Co502EyC/BQlUJ96KuvuQfxfJZQO8wJ5JnVR6FE HGbBnISQoUSj5KBy6lHaZQAaIsXe26fSzfu1u/eevWVVXDr+X1yoGRDDP9ZSgFuUmysB wmA4jMvDTR9Yl+wv9oWi/7dJ8EleSU5nljl7OeN0lxDIz0uNTh+z8S5QAVumVLBWxqdF xN2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791727119; x=1792331919; 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=jjSH+tkIvUiQIgLglZ3urjR5zbmpKuMZGwy9+eVmxXc=; b=wQwkD0/nuD8d6a/bf26t2LldUnF/Hc4Q57ItIyvlf0it4NK5jkEflAFUJPZp5MGvum YpVhM4CxsExy6NbtglLlnkjgYH8n+UFwKfeytsbxcktJ6xd3/eOZl+758loUSHV9xkPR wToQlH17knTu9u9OHzQgF1rD5kK87Ittn2MRITRxPxbvw4OIOk2L/0X7/p8u4wXC699Y Z9NJGsCsRt/mtV8miJM/JOm5SNudaGAegm1nruDWEHYYInCdyHTRdRHltfK+VbK/YyEd TsSWWzwrCZ5dba7S6ffLarIgE96sFDde+1+8FMlrUFLd2zeZPeP66+vQDqMhqw81evbD sFAw== X-Forwarded-Encrypted: i=1; AKwUvBzhhtvBN2WGd6CV7GHWarfWc00Z7oFZREJ1OjzqTBAmKimqHkgriHytFpwkThL7GYwjqzoeSKNJYZ0+qXc=@vger.kernel.org X-Gm-Message-State: AFq9FYLUujPzTGPSPX9AP9h/bqOG/qm5Ng/BP+sjK4qMyT2B4KsN+loT zEqBbeUMRWc/MO0xHesWn6kfus2DEqVuHXM34nLpa2+F0sKQNpyLlGD1 X-Gm-Gg: AYBFou1kxfP093nAUODx9h6YGRJzbDEBAMhi7kJLX5RFjAINW3iiqkDp8JMMqYiZoML cVzLZouT3T578R1nY1RfgVHOkp755UvYw4oiq5yXvZKqSkUuQk8kslQPl2humFIphpSVxEEUZbS YPrV4NVyfbSyz0rY9wWEFWtWc2SVVBrL96W3ug8DHQve9YX2UFwpGR39W6VNGDLNHD79+N9bBFR mHQFFTW19s14arxnggvB+z1wLqrHXbsC4XPsdbVaZ+J9cTAPcPrUtBgPUugS5lGSEQ6P4zU9xLm uYjwv/2QL+drhWrm+L1HgdelKmTLOmBKJcjtypp8eHIxLNStCkaBhHUqNqM/Bbhp8OboMM48cvp xxz+i8YvKWl/gMsH+W2JzydUee68roWtWtT1IrTr2sm1kQvvJk6S6KSrl0ck2G9CbxoI7/Xgmqm A3u4kRFJCu1XEqTCUvEg2GNGdf4vRjefnufQMC95644pk6SfSgxezyDN3QmHv6BzYi52XojcAn X-Received: by 2002:a17:90b:3946:b0:3a8:cc4f:348b with SMTP id 98e67ed59e1d1-3ab3a9175f2mr5442853a91.64.1791727118840; Sun, 11 Oct 2026 06:58:38 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ab371c32cesm11831648a91.16.2026.10.11.06.58.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2026 06:58:36 -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 , Mingyou Chen Subject: [PATCH v10 4/5] platform/x86: redmi-wmi: Drop redmi-wmi driver Date: Sun, 11 Oct 2026 21:57:47 +0800 Message-ID: <20261011135748.11792-5-qby140326@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261011135748.11792-1-qby140326@gmail.com> References: <20261011135748.11792-1-qby140326@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 | 12 --- drivers/platform/x86/Makefile | 1 - drivers/platform/x86/redmi-wmi.c | 154 ------------------------------- 4 files changed, 173 deletions(-) delete mode 100644 drivers/platform/x86/redmi-wmi.c diff --git a/MAINTAINERS b/MAINTAINERS index 0874713f262b..00338dd596a9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -23036,12 +23036,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..f87a8ec95a86 100644 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig @@ -78,18 +78,6 @@ config XIAOMI_WMI To compile this driver as a module, choose M here: the module will be called xiaomi-wmi. =20 -config REDMI_WMI - tristate "Redmibook WMI key driver" - depends on ACPI_WMI - depends on INPUT - select INPUT_SPARSEKMAP - 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. - config GIGABYTE_WMI tristate "Gigabyte WMI temperature driver" depends on ACPI_WMI 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.55.0 From nobody Sat Oct 24 20:10:37 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06C57457E60 for ; Sun, 11 Oct 2026 13:58:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727132; cv=none; b=jQjt5pS3Gxzk76a3ugwp7WglQdKbVciZzT1+pd33mjkOTMf3VTN4BHJE+zD9eAkhrOPIzt9VeGBKf/p55T3xxbusA9t8n6BLAxf7aXBxGdm2seVvKfCYRTWqomxqbs99CZR3pylu9MBPz6EyHnRtc06UrBAXeJ9UfpTB4I3XWJg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1791727132; c=relaxed/simple; bh=hNVxdtsA+cuaEkYdlgBR1kYeiKVJ8dcmCnhQbXTSTZA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BjLlIO76uz2+dLC7smr6XchljsvufeeaMIzcjm5ZmcQFoB94Mcoln1lcry9Mw1WVwjn2FiwstWt2vgyAcHMMaHBUMZ5gaa1glMGggOJJWeD3DVRhn7+m5b5yTbdMs/sEYrt94jaXYMyNHhshNy8w7omBYF9bzLchsfpynduHf2U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=k7D2lHku; arc=none smtp.client-ip=209.85.216.48 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) header.d=gmail.com header.i=@gmail.com header.b="k7D2lHku" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-3a706146559so667554a91.2 for ; Sun, 11 Oct 2026 06:58:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791727126; x=1792331926; 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=8crKPVxpR75PZr278VYF2/V7T1vouNEFR+ch2hfe/Ug=; b=k7D2lHkuIYCRSYkB7f/g7lUp8rWpqfkysDAgoA3xyiOFrMc5D6QfcGhWbVIapOZkGL 1y7G4WMrbSSVqZQuUJVEhzDC6UsAqFcyZD9SHltygSHgIwbqHBezcop3G9Ogwpov0zOa 8pZ9TRlPwkIHuOrK7PXZZuaICOqt09syT7KXSYQ/l/cTdy11VVEEccLev81nXjt9V9KV rfVPD89t7ZCMIiznW/zq2pqJQEv4QWHHTVJzwEkJZ7zWXOwiy9+IiEMKDb8C5lWLFn1n 7TtQO62uYKpglpzNPdfXvs2gbBkzGfpH809jB/2kljPC3mW4wPRAy6f+1fnypJlRY5Nn rlxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791727126; x=1792331926; 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=8crKPVxpR75PZr278VYF2/V7T1vouNEFR+ch2hfe/Ug=; b=P8ZkpjiNwlSEO6t23OvWizgMwEljuevuiesa4NtFhEMr/EEIco7ORnFCwhEr5rlFqL dcuQv18vtc4P4lTZvvHccf6bdiDO5EPurcE7kB9Uh9y+OxffLrL1xFCiXTzd6Dx8qzCy wT/e9EtSAMXlk5rOtEUgSSUDI6CrutqR81b1qCMlSWVE4lkm7+ZhMhlC7+NdEd2Rp2pO VsVm602FPQ1T0Q/MCm8TD5P7aWZvbA6i7ES17Lb3ZDMhxQO+t0liXlh+rqtNTw5DW6eD hgpDRkRszTPMD8S5ybTWGxQKXdOrS5LVebD/A5VkOEYBAHqxg6tg2z9faIfVH129YAJw k5LQ== X-Forwarded-Encrypted: i=1; AKwUvBzYQtwl51bsgDUJnQ4wEzDEJg6FXOKkEK5MtvjKFJOLhaxnbmcwR92FBfSsOSo/q8uDWYES43PN8/3jDpw=@vger.kernel.org X-Gm-Message-State: AFq9FYIE39Z69Nz3eEgVgfX3ZW+V0NRYyrDYfNRdrTwQQUPan204gbZQ QAO+L6aHBLux/0ZM2zUYQr1aA31rfXZUofk0bTUJbmMacsxJr3s2Faf+ X-Gm-Gg: AYBFou0kuhvhoMnqJI1bq1kcnDyau4dOpW844UrNA0TtG8OsY2QGoT8F7mVQZjO5xWs FmN7vR3xwHz9kS0AiafJHAbIIcDnmsbr57NZbuzgLXm7IDfH8C28VIiTtm5gRU/PQvFdqqegAoX OfMwPaOaIDFZgDMwszN3Wg3YAV/g5neA/AHFRNHppw/6eaRNf/RMXV+Duvhbe/aCbb2GaNPtBkK DkAbSO4dsj53dEc3HembYzqiuSuNcLA+YVJC4fv1vyL6q80j/6VQE/SQJwg6vCVKzCGgN1h25p5 FK6IAA7e1xEiVjW3mWfvAlJOsyjuFwEvtNy98W3gCgGXV112yFPojCrUlGKgLPTtvwVsA7wZL4c EnaoCBEBBmecZ3sFQTYrAWLXUCIo8uKaudpZCRDs7CMNl3nGzd/+n1tz0fFPJCNF0Pugxk21aeD Yjlrx2JNmwl81mFB6FkSMaXaLptX5H0/T2kTpQxip85ps4EPuBvXTNuPBrCk2SpxekiM0zwG7S1 Q== X-Received: by 2002:a17:90b:3b82:b0:3ab:4f1:4f76 with SMTP id 98e67ed59e1d1-3ab3a94f426mr6528056a91.24.1791727126176; Sun, 11 Oct 2026 06:58:46 -0700 (PDT) Received: from qby-nixos-laptop ([20.89.137.63]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3ab371c32cesm11831648a91.16.2026.10.11.06.58.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2026 06:58:45 -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 , Mingyou Chen Subject: [PATCH v10 5/5] platform/x86: bitland-mifs-wmi: Add quirks table Date: Sun, 11 Oct 2026 21:57:48 +0800 Message-ID: <20261011135748.11792-6-qby140326@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261011135748.11792-1-qby140326@gmail.com> References: <20261011135748.11792-1-qby140326@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: 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 | 137 ++++++++++++++++-------- 1 file changed, 95 insertions(+), 42 deletions(-) diff --git a/drivers/platform/x86/bitland-mifs-wmi.c b/drivers/platform/x86= /bitland-mifs-wmi.c index 93a519b96189..b3d615a94e8b 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,60 @@ enum bitland_mifs_power_profile { WMI_PP_FULL_SPEED =3D 3, }; =20 +struct bitland_mifs_wmi_data; + +/* + * Value layout of WMI_FN_SYSTEM_PER_MODE. + */ +struct bitland_profile_mode_map { + u8 balanced; + u8 performance; + u8 quiet; + u8 full_speed; +}; + +static const struct bitland_profile_mode_map bitland_mode_map =3D { + .balanced =3D WMI_PP_BALANCED, + .performance =3D WMI_PP_PERFORMANCE, + .quiet =3D WMI_PP_QUIET, + .full_speed =3D WMI_PP_FULL_SPEED, +}; + +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, @@ -166,6 +221,7 @@ 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 @@ -208,37 +264,30 @@ 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; + 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; } =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), @@ -247,6 +296,9 @@ static int bitland_check_performance_capability(struct = bitland_mifs_wmi_data *da struct bitland_mifs_output 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 +321,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 (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_PERFORMANCE; - break; - case PLATFORM_PROFILE_PERFORMANCE: - ret =3D bitland_check_performance_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; } @@ -718,6 +765,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); @@ -732,6 +780,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.55.0