From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f172.google.com (mail-dy1-f172.google.com [74.125.82.172]) (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 D895125E469 for ; Sat, 13 Jun 2026 02:16:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781317021; cv=none; b=lEk6uqbmj07ewlW1u/cF86vS//gtL+DdKl/1O1BPA3j3EufckSF3h8p5ak9Jf5QtWrSNahfwJAMRc8RkC1JLzIzmIt2m1s5BkEUG2WwhlbLy1WB1qpi6YnQJUrbPQ1F3NENp5GPNCIQ6iUldqNCtBZ6UPwTHgTH8QGBCMA30C8Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781317021; c=relaxed/simple; bh=zVMwEyWWCc8jfTHooJjUSOaj9CWNTteTj5bXrbCRFa8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m2YRSYqm4QFH1riq10HhI84c1/c4PFMYVaS9bul6sZ5KctyqIFf/cblVnZLc3B95+t4LaeWbTJvAVornbPriwCk9PISmrFd8LXbjTepp3J7d95wOnj3LIHHoXO++uAbm0vh11tFpu3nZem//rmlZHPnhN1bWyPbkk7ZDU1O7B8I= 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=cX/dMhFM; arc=none smtp.client-ip=74.125.82.172 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="cX/dMhFM" Received: by mail-dy1-f172.google.com with SMTP id 5a478bee46e88-304d0ac5e3cso3411208eec.0 for ; Fri, 12 Jun 2026 19:16:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781317019; x=1781921819; 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; bh=dWft2f1Im9NncRU+LFQf7xWUs7WelaDhR+JrHlWf3PE=; b=cX/dMhFMUO3GO+30vz/Wq8BemUsdmpxhtRNd5g/7h3X4hUADEO7UoKB5r72iOmJcyB 0Zal99CR1LyWAL6SfyqRN7RbKa/YR9Cjpj7Uwnsk5bAbohmQ8SzLoVFsQOh+YgKfETJh EIGuUnQUaFnGiq80fpDXvZR9RimaVro20G191X96AkSIdTCgpLtxTOakA+uLRfIr+uJ/ 1fzUnXS5bwGqru/+4oRY9sre9cIK8ecnN4awT4L3xkSnm/e+M7tZX9tUz+JVfDHrHxjq 8fq2kurVRRhCGTAqtIA5NgXuAJrK0T2zkmUZLiQHEpywJYaexmsFceTW4q63jcCj4ePp RH5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781317019; x=1781921819; 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; bh=dWft2f1Im9NncRU+LFQf7xWUs7WelaDhR+JrHlWf3PE=; b=WsnVeHXEay3SwosfBNM0FnhtQs4Kn5KECnxsjv8bUhduLhP3qvKFqvf/mXBnKa5y0x 242cVOcAztjxUaSfSOYlqih3bzNecEv+6RiJAbvR0YoMp1AN80XL43+sgBZP9w/ChGqM NSCQK7ZS/vAEr+h1xH2J8c4dUNGv7MJ0kE8sjVjbjh/TwsryA/xJWFi3AI5G8NAx2/jD 4RncLnrCd0QavdL8VkXS1g42i+aWK2V0Yh76uzO7J9UhA2Kn8eS5kcZt0M96Qu1G9LDI eaDyiEBdGDtDD/QPNh+3n2gHmxQZQa3nXwImRDEk7NT2ilIyqJYpxlhhoeN+Ts32pO6s 3qIg== X-Forwarded-Encrypted: i=1; AFNElJ8KDOBmXu+dvBC3pN10cIv4rSIutwgLcEX61pKO+4/DbZKVnYpy0Iu4srzFFTFpSFqPo7Dbz68eiRefRqc=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+hRH9OD4FTPIsVULgDsfZTntIikxYN1xWDKV/pIYJxiIqOLUG qLpM230Hr/kImICFmJ5fBmVAAuZ4GEllghRgO8035DJYeW+znYkikcbX X-Gm-Gg: Acq92OGqCAUj9+8xldX2J7Fs/k00MtcZecdBzdBJHRPZKDAonhTqdV934N3Kaa0SpgH kOcx+BIStwwV+S7MxhVIU+/oLlKvRiGwFVsyMQCdvOqtCQqR84wmtkEDt4S2kTyf8CLVpJrv51A S3r6WfO6uJDX81wW0bpFUseXQR+nv90j5CdhKYOkzcNfBhgLrEfdsm/kKLJx0cPbKV78okLEuxw 1ovy5yu3BowU0m0DDMlPg5FgvGUeSNHD5JSD7kFzBZvFmjbg07Bj66pmsnsBjlu73e2Rq7Yk0NX xIUOGa8QuMEX81B0SjJtCZph5jH9K2Xbs1Zq9LO1Ros70b3atkjoC7Jrod7XC0UBLQONloqjDiQ DINxXJRxu3zT+8ytkz6R3iNpLmzwbqtGA0bQYwKQZOXnewR3jj6D0IjUehulhMcXs62khDkXPlt 2/ePmwag3mhh2W2BTxDtW7XclXrh+qo8G9+x7ZRlinqofAVqP/h6bYBlrtzf3XzobpOJrsPXdRu CM0 X-Received: by 2002:a05:7300:6916:b0:307:3a6c:e708 with SMTP id 5a478bee46e88-3081ff57263mr3376737eec.5.1781317018931; Fri, 12 Jun 2026 19:16:58 -0700 (PDT) Received: from lappy (108-228-232-20.lightspeed.sndgca.sbcglobal.net. [108.228.232.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3081e48e412sm6417828eec.4.2026.06.12.19.16.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2026 19:16:58 -0700 (PDT) From: "Derek J. Clark" To: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede Cc: Armin Wolf , "Derek J . Clark" , "Pierre-Loup A . Griffais" , Thomas Renninger , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] platform/x86: msi-wmi: Add MSI Claw M-Center keys Date: Fri, 12 Jun 2026 19:16:54 -0700 Message-ID: <20260613021654.933618-3-derekjohn.clark@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260613021654.933618-1-derekjohn.clark@gmail.com> References: <20260613021654.933618-1-derekjohn.clark@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: 8bit MSI Claw devices produce WMI events through the MSI WMI hotkeys GUID for some of their buttons. When pressed, these cause spam in the kernel. For the majority of devices these events can be safely ignored as they are duplicated by the AT Translated Set 2 Keyboard device exposed as an evdev. For the MSI Claw A8 BZ2EM model's M-Center Menu button (left of the screen) there is no associated keyboard event, so this event must be exposed. Map this button to the same scancode produced by the AT Keyboard device on other models. This does cause double F15 events on the A1M, 7 AI+ A2VM, and 8 AI+ A2VM, but it appears to be harmless in my testing. Signed-off-by: Derek J. Clark --- v2: - Add comments explaining buffer fields & length. - Test that we have at lease u8[2] before assignment of key ID --- drivers/platform/x86/msi-wmi.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/platform/x86/msi-wmi.c b/drivers/platform/x86/msi-wmi.c index d00ced756581..c9db750fe5ae 100644 --- a/drivers/platform/x86/msi-wmi.c +++ b/drivers/platform/x86/msi-wmi.c @@ -46,6 +46,12 @@ enum msi_scancodes { WIND_KEY_WLAN = 0x5f, /* Fn+F11 Wi-Fi toggle */ WIND_KEY_TURBO, /* Fn+F10 turbo mode toggle */ WIND_KEY_ECO = 0x69, /* Fn+F10 ECO mode toggle */ + /* MSI Claw keys */ + CLAW_KEY_VOLUMEDOWN = 0x21, + CLAW_KEY_CENTER = 0x29, /* MSI M-Center main menu */ + CLAW_KEY_QUICK_LONG = 0x2a, /* MSI M-Center quick access long hold */ + CLAW_KEY_VOLUMEUP = 0x32, + CLAW_KEY_QUICK_SHORT = 0x58, /* MSI M-Center quick access short press */ }; static struct key_entry msi_wmi_keymap[] = { { KE_KEY, MSI_KEY_BRIGHTNESSUP, {KEY_BRIGHTNESSUP} }, @@ -69,6 +75,15 @@ static struct key_entry msi_wmi_keymap[] = { { KE_KEY, WIND_KEY_TURBO, {KEY_PROG1} }, { KE_KEY, WIND_KEY_ECO, {KEY_PROG2} }, + /* These are MSI Claw keys, used for MSI M-Center in Windows */ + { KE_KEY, CLAW_KEY_CENTER, {KEY_F15} }, + + /* These MSI Claw keys work without WMI. Ignore them to avoid double keycodes */ + { KE_IGNORE, CLAW_KEY_QUICK_SHORT }, + { KE_IGNORE, CLAW_KEY_QUICK_LONG }, + { KE_IGNORE, CLAW_KEY_VOLUMEUP }, + { KE_IGNORE, CLAW_KEY_VOLUMEDOWN }, + { KE_END, 0 } }; @@ -183,6 +198,17 @@ static void msi_wmi_notify(union acpi_object *obj, void *context) eventcode = obj->integer.value; pr_debug("Eventcode: 0x%x\n", eventcode); break; + case ACPI_TYPE_BUFFER: + /* Field returns u8[2] here, but is u32 by spec. Allow "oversized" buffers. */ + if (obj->buffer.length < 2) + return; + + /* pointer[0] is key ID, pointer[1] is active state. We don't get release + * events, so ignore the active state and treat as autorelease. + */ + eventcode = obj->buffer.pointer[0]; + pr_debug("Eventcode: 0x%x\n", eventcode); + break; default: pr_info("Unknown event received\n"); return; -- 2.54.0