From: "Derek J. Clark" <derekjohn.clark@gmail.com>
To: Antheas Kapenekakis <lkml@antheas.dev>, linux-hwmon@vger.kernel.org
Cc: linux-doc@vger.kernel.org, linux-pm@vger.kernel.org,
platform-driver-x86@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>,
Kevin Greenberg <kdgreenberg234@protonmail.com>,
Joshua Tam <csinaction@pm.me>,
Parth Menon <parthasarathymenon@gmail.com>,
Eileen <eileen@one-netbook.com>
Subject: Re: [PATCH v2 06/12] hwmon: (oxp-sensors) Add turbo led support to X1 devices
Date: Sat, 01 Mar 2025 07:13:12 -0800 [thread overview]
Message-ID: <7C8385B2-9E18-4AE2-A3C3-A4F2E0931D53@gmail.com> (raw)
In-Reply-To: <20250222161824.172511-7-lkml@antheas.dev>
On February 22, 2025 8:18:17 AM PST, Antheas Kapenekakis <lkml@antheas.dev> wrote:
>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.
>
>As part of researching this topic, I verified that other OneXPlayer
>devices do not have a turbo led, which makes this feature only
>applicable to X1 and X1 mini devices.
Antheas,
Do you mean a turbo LED That can be set via EC? OXP devices have had an LED to indicate turbo all the way back to the 1S and mini AMD. I'm not sure if they can be set prior to X1, but this is incorrect as posted.
>Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
>---
> drivers/hwmon/oxp-sensors.c | 84 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 84 insertions(+)
>
>diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
>index 1c01636582d7..9c43ec0fc994 100644
>--- a/drivers/hwmon/oxp-sensors.c
>+++ b/drivers/hwmon/oxp-sensors.c
>@@ -101,6 +101,12 @@ static enum oxp_board board;
> */
> #define OXP_X1_CHARGE_BYPASS_MASK_S3S5 0x02
>
>+/* X1 Turbo LED */
>+#define OXP_X1_TURBO_LED_REG 0x57
>+
>+#define OXP_X1_TURBO_LED_OFF 0x01
>+#define OXP_X1_TURBO_LED_ON 0x02
>+
Not a blocker for me on this series, but we should consider looking at creating some enums in the future to capture functionality in a more concise way. There are quite a few define's at this point and enums offer a little bit of value validation.
> enum charge_type_value_index {
> CT_OFF,
> CT_S0,
>@@ -466,6 +472,73 @@ static ssize_t tt_toggle_show(struct device *dev,
>
> static DEVICE_ATTR_RW(tt_toggle);
>
>+/* Callbacks for turbo toggle 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;
>+ int rval;
>+ bool value;
>+
>+ rval = kstrtobool(buf, &value);
>+ if (rval)
>+ return rval;
>+
>+ 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;
>+ }
>+ rval = write_to_ec(reg, val);
>+
>+ if (rval)
>+ return rval;
>+
>+ return count;
>+}
>+
>+static ssize_t tt_led_show(struct device *dev,
>+ struct device_attribute *attr, char *buf)
>+{
>+ int retval;
>+ u8 reg;
>+ long enval;
>+ long val;
>+
>+ switch (board) {
>+ case oxp_x1:
>+ reg = OXP_2_TURBO_SWITCH_REG;
>+ enval = OXP_X1_TURBO_LED_ON;
>+ break;
>+ default:
>+ return -EINVAL;
>+ }
>+
>+ retval = read_from_ec(reg, 1, &val);
>+ if (retval)
>+ return retval;
>+
>+ return sysfs_emit(buf, "%d\n", val == enval);
>+}
>+
>+static DEVICE_ATTR_RW(tt_led);
>+
> /* Callbacks for turbo toggle attribute */
> static bool charge_control_supported(void)
> {
>@@ -894,8 +967,19 @@ static 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 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
> };
>
- Derek
next prev parent reply other threads:[~2025-03-01 15:13 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-22 16:18 [PATCH v2 00/12] hwmon: (oxpsensors) Add devices, features, fix ABI and move to platform/x86 Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 01/12] hwmon: (oxp-sensors) Distinguish the X1 variants Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 02/12] hwmon: (oxp-sensors) Add all OneXFly variants Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 03/12] ABI: testing: sysfs-class-power: add BypassS0 charge_type Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 04/12] hwmon: (oxp-sensors) Add charge threshold and bypass to OneXPlayer Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 05/12] hwmon: (oxp-sensors) Rename ec group to tt_toggle Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 06/12] hwmon: (oxp-sensors) Add turbo led support to X1 devices Antheas Kapenekakis
2025-03-01 15:13 ` Derek J. Clark [this message]
2025-03-01 15:54 ` Antheas Kapenekakis
2025-03-01 16:13 ` Derek J. Clark
2025-03-01 16:52 ` Antheas Kapenekakis
2025-03-01 17:01 ` Derek J. Clark
2025-02-22 16:18 ` [PATCH v2 07/12] hwmon: (oxp-sensors) Move pwm_enable read to its own function Antheas Kapenekakis
2025-03-01 15:21 ` Derek J. Clark
2025-03-01 15:55 ` Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 08/12] hwmon: (oxp-sensors) Move pwm value read/write to separate functions Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 09/12] hwmon: (oxp-sensors) Move fan speed read to separate function Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 10/12] hwmon: (oxp-sensors) Adhere to sysfs-class-hwmon and enable pwm on 2 Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 11/12] platform/x86: oxpec: Move hwmon/oxp-sensors to platform/x86 Antheas Kapenekakis
2025-03-01 14:31 ` kernel test robot
2025-03-01 14:40 ` Antheas Kapenekakis
2025-03-03 14:06 ` Guenter Roeck
2025-03-03 17:47 ` Antheas Kapenekakis
2025-02-22 16:18 ` [PATCH v2 12/12] ABI: testing: add tt_toggle and tt_led entries Antheas Kapenekakis
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=7C8385B2-9E18-4AE2-A3C3-A4F2E0931D53@gmail.com \
--to=derekjohn.clark@gmail.com \
--cc=corbet@lwn.net \
--cc=csinaction@pm.me \
--cc=eileen@one-netbook.com \
--cc=jdelvare@suse.com \
--cc=kdgreenberg234@protonmail.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=lkml@antheas.dev \
--cc=parthasarathymenon@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=samsagax@gmail.com \
/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