From: Antheas Kapenekakis <lkml@antheas.dev>
To: platform-driver-x86@vger.kernel.org
Cc: linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org,
linux-pm@vger.kernel.org, Guenter Roeck <linux@roeck-us.net>,
Jean Delvare <jdelvare@suse.com>,
Jonathan Corbet <corbet@lwn.net>,
Joaquin Ignacio Aramendia <samsagax@gmail.com>,
Derek J Clark <derekjohn.clark@gmail.com>,
Kevin Greenberg <kdgreenberg234@protonmail.com>,
Joshua Tam <csinaction@pm.me>,
Parth Menon <parthasarathymenon@gmail.com>,
Eileen <eileen@one-netbook.com>,
linux-kernel@vger.kernel.org, sre@kernel.org,
linux@weissschuh.net, ilpo.jarvinen@linux.intel.com,
hdegoede@redhat.com, mario.limonciello@amd.com,
Antheas Kapenekakis <lkml@antheas.dev>
Subject: [PATCH v9 07/15] platform/x86: oxpec: Add turbo led support to X1 devices
Date: Thu, 17 Apr 2025 19:53:02 +0200 [thread overview]
Message-ID: <20250417175310.3552671-8-lkml@antheas.dev> (raw)
In-Reply-To: <20250417175310.3552671-1-lkml@antheas.dev>
The X1 and X1 mini lineups feature an LED nested within their turbo
button. When turbo takeover is not enabled, the turbo button allows
the device to switch from 18W to 25W TDP. When the device is in the
25W TDP mode, the LED is turned on.
However, when we engage turbo takeover, the turbo led remains on its
last state, which might be illuminated and cannot be currently
controlled. Therefore, add the register that controls it under sysfs,
to allow userspace to turn it off once engaging turbo takeover and
then control it as they wish.
2024 OneXPlayer devices, other than the X1s, do not have a turbo LED.
However, earlier models do, so this can be extended to them as well
when the register for it is found.
Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
Reviewed-by: Derek J. Clark <derekjohn.clark@gmail.com>
Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
---
drivers/platform/x86/oxpec.c | 84 ++++++++++++++++++++++++++++++++++++
1 file changed, 84 insertions(+)
diff --git a/drivers/platform/x86/oxpec.c b/drivers/platform/x86/oxpec.c
index ee37070ec54fc..e8f27441fa31f 100644
--- a/drivers/platform/x86/oxpec.c
+++ b/drivers/platform/x86/oxpec.c
@@ -87,6 +87,12 @@ static enum oxp_board board;
#define OXP_TURBO_RETURN_VAL 0x00 /* Common return val */
+/* X1 Turbo LED */
+#define OXP_X1_TURBO_LED_REG 0x57
+
+#define OXP_X1_TURBO_LED_OFF 0x01
+#define OXP_X1_TURBO_LED_ON 0x02
+
static const struct dmi_system_id dmi_table[] = {
{
.matches = {
@@ -434,6 +440,73 @@ static ssize_t tt_toggle_show(struct device *dev,
static DEVICE_ATTR_RW(tt_toggle);
+/* Callbacks for turbo LED attribute */
+static umode_t tt_led_is_visible(struct kobject *kobj,
+ struct attribute *attr, int n)
+{
+ switch (board) {
+ case oxp_x1:
+ return attr->mode;
+ default:
+ break;
+ }
+ return 0;
+}
+
+static ssize_t tt_led_store(struct device *dev,
+ struct device_attribute *attr, const char *buf,
+ size_t count)
+{
+ u8 reg, val;
+ bool value;
+ int ret;
+
+ ret = kstrtobool(buf, &value);
+ if (ret)
+ return ret;
+
+ switch (board) {
+ case oxp_x1:
+ reg = OXP_X1_TURBO_LED_REG;
+ val = value ? OXP_X1_TURBO_LED_ON : OXP_X1_TURBO_LED_OFF;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ ret = write_to_ec(reg, val);
+ if (ret)
+ return ret;
+
+ return count;
+}
+
+static ssize_t tt_led_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ long enval;
+ long val;
+ int ret;
+ u8 reg;
+
+ switch (board) {
+ case oxp_x1:
+ reg = OXP_X1_TURBO_LED_REG;
+ enval = OXP_X1_TURBO_LED_ON;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ ret = read_from_ec(reg, 1, &val);
+ if (ret)
+ return ret;
+
+ return sysfs_emit(buf, "%d\n", val == enval);
+}
+
+static DEVICE_ATTR_RW(tt_led);
+
/* PWM enable/disable functions */
static int oxp_pwm_enable(void)
{
@@ -691,8 +764,19 @@ static const struct attribute_group oxp_tt_toggle_attribute_group = {
.attrs = oxp_tt_toggle_attrs,
};
+static struct attribute *oxp_tt_led_attrs[] = {
+ &dev_attr_tt_led.attr,
+ NULL
+};
+
+static const struct attribute_group oxp_tt_led_attribute_group = {
+ .is_visible = tt_led_is_visible,
+ .attrs = oxp_tt_led_attrs,
+};
+
static const struct attribute_group *oxp_ec_groups[] = {
&oxp_tt_toggle_attribute_group,
+ &oxp_tt_led_attribute_group,
NULL
};
--
2.49.0
next prev parent reply other threads:[~2025-04-17 17:53 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-17 17:52 [PATCH v9 00/15] hwmon: (oxpsensors) Add devices, features, fix ABI and move to platform/x86 Antheas Kapenekakis
2025-04-17 17:52 ` [PATCH v9 01/15] hwmon: (oxp-sensors) Distinguish the X1 variants Antheas Kapenekakis
2025-04-17 17:52 ` [PATCH v9 02/15] hwmon: (oxp-sensors) Add all OneXFly variants Antheas Kapenekakis
2025-04-17 17:52 ` [PATCH v9 03/15] platform/x86: oxpec: Move hwmon/oxp-sensors to platform/x86 Antheas Kapenekakis
2025-04-17 17:52 ` [PATCH v9 04/15] ABI: testing: sysfs-class-oxp: add missing documentation Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 05/15] ABI: testing: sysfs-class-oxp: add tt_led attribute documentation Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 06/15] platform/x86: oxpec: Rename ec group to tt_toggle Antheas Kapenekakis
2025-04-17 17:53 ` Antheas Kapenekakis [this message]
2025-04-17 17:53 ` [PATCH v9 08/15] platform/x86: oxpec: Move pwm_enable read to its own function Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 09/15] platform/x86: oxpec: Move pwm value read/write to separate functions Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 10/15] platform/x86: oxpec: Move fan speed read to separate function Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 11/15] platform/x86: oxpec: Adhere to sysfs-class-hwmon and enable pwm on 2 Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 12/15] platform/x86: oxpec: Follow reverse xmas convention for tt_toggle Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 13/15] power: supply: add inhibit-charge-awake to charge_behaviour Antheas Kapenekakis
2025-04-17 17:53 ` [PATCH v9 14/15] platform/x86: oxpec: Add charge threshold and behaviour to OneXPlayer Antheas Kapenekakis
2025-04-24 13:48 ` Ilpo Järvinen
2025-04-24 18:00 ` Antheas Kapenekakis
2025-04-25 11:05 ` Ilpo Järvinen
2025-04-17 17:53 ` [PATCH v9 15/15] platform/x86: oxpec: Rename rval to ret in tt_toggle Antheas Kapenekakis
2025-04-24 13:50 ` Ilpo Järvinen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250417175310.3552671-8-lkml@antheas.dev \
--to=lkml@antheas.dev \
--cc=corbet@lwn.net \
--cc=csinaction@pm.me \
--cc=derekjohn.clark@gmail.com \
--cc=eileen@one-netbook.com \
--cc=hdegoede@redhat.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jdelvare@suse.com \
--cc=kdgreenberg234@protonmail.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=linux@weissschuh.net \
--cc=mario.limonciello@amd.com \
--cc=parthasarathymenon@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=samsagax@gmail.com \
--cc=sre@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox