From nobody Sun Jun 14 03:06:35 2026 Received: from mail-dy1-f181.google.com (mail-dy1-f181.google.com [74.125.82.181]) (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 4D7F539F187 for ; Thu, 9 Apr 2026 23:45:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775778337; cv=none; b=q+brEuBE3gpowgf5PL/fPriyNB5TXyEeACe+87LAtZEco2NnrXRbtkfGutEo51OK1VYZ6PqFba+qITUoijkHv9L8b6XuC0TFzJF12cTh56iy/m4uEYZWi6Z+1n4MPuYLaRxTZC7O4QiCSgPVS6ZZurx6pAwdWoKZccM6tp1/f64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775778337; c=relaxed/simple; bh=2P6zAm6CvXpFrFJgiACbPFdpEi37z8+x3+bAs63/Ca4=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=lHxcfPYHUgUXwyYq93bZVw05QtEZuls5geNM2+UaJrFwE0ivXLtgKMchE3zYgz/JjyHXX4Ci/CLD+AkOG4j+ALGf3S0B2hADgIKqzbewK0r3io/y7Ik/g8xmYzBIAOHXecsyIyYPk7znE4E8sR8J0w36LXZDJS4wIY5Wb/QHpbg= 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=I1TJOdu5; arc=none smtp.client-ip=74.125.82.181 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="I1TJOdu5" Received: by mail-dy1-f181.google.com with SMTP id 5a478bee46e88-2cf1646bd11so2487010eec.1 for ; Thu, 09 Apr 2026 16:45:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775778335; x=1776383135; darn=vger.kernel.org; h=content-transfer-encoding:content-disposition:mime-version :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=ouN4F/CWT5cLpxIJDhPP//g5FL6B3nOG4Cx/O3IYmuI=; b=I1TJOdu5i1612JSmM8KAcM6gQ7OqADIjgHqYIILHcIbxoGZN9Wdsud3KY97qeyQQC9 GBkK0mtlcb63nj+/I4WRjWT/O4dpJlvLPIu5mJWDmi5DE9G8TDK3EGXFjpewDOmzgJV1 qUzvPbZosnQNx9yxuF4JQKst7UbpAATJynjmy05FOinG50b3z46h8b86b3n6hTe92/vq SgYVSAk5gRKttd9mfJ6ceIBYPAJEHal7jz4qddLh19ydMPfE33B5+C4AN2XZKYcTwtjN UkCWPOJQK1DVTiwloPJb6a2WV6D4x+JpKfBGAt90HHFi8d+i9umH9eGtevDAVROaX/xv 4tuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775778335; x=1776383135; h=content-transfer-encoding:content-disposition:mime-version :message-id:subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ouN4F/CWT5cLpxIJDhPP//g5FL6B3nOG4Cx/O3IYmuI=; b=Z81l21RyD6C87C7t+UqgcPnVGtbUSsisA5vIEXGsesHLZ6hSUHvkZULg8p6zBsXzv/ ZNAdqUEggzTpCgO8JmwFGs6pMWJatK8I8PGSGnGybGefuxavhYywLr68I1Qqda99Ai3h Lpn3PBrnNzCIMvGNHE/GQcxYZkfGO21rXnKJzqDlNYqqTwOhbDuDYEkV2G5XZbE9c4Yb +sA/EPGP/3f6i1ZUhuWWYRKbqE4Ov5L2KVo+JQpv05wZnjCmWCjeVX9eB2kZU7Re4z/F vHG7Ib2nwvh41xG8nbcQk2csA0PX8xTkmlJ0EeIgogUTYT8YTezqOyNhW9hKWpcWgaEG 2dNg== X-Forwarded-Encrypted: i=1; AJvYcCX1rkoI9GspQQKBC6pi+r7uPND+3Y47ngxVZmg03pM721JUaf27x8PFEw5Pss47w8FqtX6z8L+u21M9RPs=@vger.kernel.org X-Gm-Message-State: AOJu0YzxsxqsTAR8A8IzuxkOkVhbou4sAo8m7WCwcOVXuFaL2rsUOVm+ XI1X6U8YTlbNTn9PL0CsQb1o99MJCkvTAdzXm72/TCrTSt40zR600/NZ X-Gm-Gg: AeBDieuHakqGQJJk6OwsdxKszUSnJuwPF90pFQCpe8rvZ3dRuy4IqCC8+4BTcJuma5r DP20HYRV19BZiKAVK8wQ1Gn8ZzKPZ1/+/A0lWUPhuqSk8oQgxa0DKs/DKiyPlepImM8qIo7xy/R CFUPXpZTHqDYKpIH6yK2KHdQUSg5peygNMOs350PMVWY7hJ3dXDyT7ICfLeApsyhZfqxSfaORJ6 NH7lV1YjJa+cZ2ncdGzkmLJXb0YhzwJb+LiH5I1YTtx2h4Jcu2F6rH8y0IiNsE3kI5jYR1buYik Y0nrskODAvlU6CGra2bDTTgcBju/PmAGpyiZhQ48+JPIclWtnw7/g31Qdux2EHRfHw8uBxxzZLC fpC8E+9mw8bROEKFwP9HDoJbOhYRdPLTQpv81mYTivem4ysl0Qg+tKL2lUxffFriE3sNnicdrJI fpKWSUQurFM+5pLOzlDMi8LuAv9qdfdbys446OcA== X-Received: by 2002:a05:7301:4007:b0:2c5:b972:b436 with SMTP id 5a478bee46e88-2d589cb5f67mr744336eec.23.1775778335278; Thu, 09 Apr 2026 16:45:35 -0700 (PDT) Received: from localhost ([2804:14c:5bc6:8c1b:bd31:3c86:2fed:6c43]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2d5632a64easm2076089eec.31.2026.04.09.16.45.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Apr 2026 16:45:34 -0700 (PDT) Date: Thu, 9 Apr 2026 20:45:31 -0300 From: =?iso-8859-1?Q?Jos=E9?= Guilherme de Castro Rodrigues To: Corentin Chary , "Luke D. Jones" , Denis Benato , Hans de Goede , Ilpo =?iso-8859-1?Q?J=E4rvinen?= Cc: =?iso-8859-1?Q?Jos=E9?= Guilherme de Castro Rodrigues , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] platform/x86: asus-wmi: fix camera key led on Zenbook S14 Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix key led not turning on/off when the camera key is pressed. The asus_wmi_dev_is_present(ASUS_WMI_DEVID_CAMERA_LED) check fails on Zenbook S14, and no sysfs attribute for the camera key led is created. The check succeeds for ASUS_WMI_DEVID_CAMERA_LED_NEG, though, and when it is read, the led state is synchronized. By doing a read after every key press, the led is guaranteed to stay in sync with the actual camera state. This change is not visible to userspace, as no sysfs attribute for ASUS_WMI_DEVID_CAMERA_LED_NEG exists. Tested on an ASUS Zenbook S14 with BIOS version UX5406SA.309. Signed-off-by: Jos=C3=A9 Guilherme de Castro Rodrigues --- Changes in v2: - Do not return after triggering the update. - Use tabs for indentation on new defines. --- drivers/platform/x86/asus-wmi.c | 19 +++++++++++++++++++ include/linux/platform_data/x86/asus-wmi.h | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wm= i.c index 80144c412b90..32d0d4ce60ff 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -70,6 +70,8 @@ module_param(fnlock_default, bool, 0444); #define NOTIFY_KBD_TTP 0xae #define NOTIFY_LID_FLIP 0xfa #define NOTIFY_LID_FLIP_ROG 0xbd +#define NOTIFY_CAMERA_TOGGLE_1 0x82 +#define NOTIFY_CAMERA_TOGGLE_2 0x85 =20 #define ASUS_WMI_FNLOCK_BIOS_DISABLED BIT(0) =20 @@ -307,6 +309,7 @@ struct asus_wmi { u32 kbd_rgb_dev; bool kbd_rgb_state_available; bool oobe_state_available; + bool camera_neg_led_available; =20 u8 throttle_thermal_policy_mode; u32 throttle_thermal_policy_dev; @@ -1982,6 +1985,18 @@ static int micmute_led_set(struct led_classdev *led_= cdev, return err < 0 ? err : 0; } =20 +static bool is_camera_toggle(int code) +{ + return code =3D=3D NOTIFY_CAMERA_TOGGLE_1 || code =3D=3D NOTIFY_CAMERA_TO= GGLE_2; +} + +static void camera_neg_led_trigger_update(struct asus_wmi *asus) +{ + u32 result; + + asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_CAMERA_LED_NEG, &result); +} + static enum led_brightness camera_led_get(struct led_classdev *led_cdev) { struct asus_wmi *asus; @@ -4587,6 +4602,9 @@ static void asus_wmi_handle_event_code(int code, stru= ct asus_wmi *asus) if (is_display_toggle(code) && asus->driver->quirks->no_display_toggle) return; =20 + if (is_camera_toggle(code) && asus->camera_neg_led_available) + camera_neg_led_trigger_update(asus); + if (!sparse_keymap_report_event(asus->inputdev, code, key_value, autorelease)) pr_info("Unknown key code 0x%x\n", code); @@ -5062,6 +5080,7 @@ static int asus_wmi_add(struct platform_device *pdev) #endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */ =20 asus->oobe_state_available =3D asus_wmi_dev_is_present(asus, ASUS_WMI_DEV= ID_OOBE); + asus->camera_neg_led_available =3D asus_wmi_dev_is_present(asus, ASUS_WMI= _DEVID_CAMERA_LED_NEG); =20 if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY)) asus->throttle_thermal_policy_dev =3D ASUS_WMI_DEVID_THROTTLE_THERMAL_PO= LICY; diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/pla= tform_data/x86/asus-wmi.h index 554f41b827e1..1a9349da6069 100644 --- a/include/linux/platform_data/x86/asus-wmi.h +++ b/include/linux/platform_data/x86/asus-wmi.h @@ -56,7 +56,7 @@ #define ASUS_WMI_DEVID_MICMUTE_LED 0x00040017 =20 /* Disable Camera LED */ -#define ASUS_WMI_DEVID_CAMERA_LED_NEG 0x00060078 /* 0 =3D on (unused) */ +#define ASUS_WMI_DEVID_CAMERA_LED_NEG 0x00060078 /* 0 =3D on */ #define ASUS_WMI_DEVID_CAMERA_LED 0x00060079 /* 1 =3D on */ =20 /* Backlight and Brightness */ --=20 2.53.0