All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Cc: sre@kernel.org, Hans de Goede <hansg@kernel.org>,
	linux@roeck-us.net,  andersson@kernel.org,
	konradybcio@kernel.org, robh@kernel.org,  krzk+dt@kernel.org,
	conor+dt@kernel.org, bryan.odonoghue@linaro.org,
	 platform-driver-x86@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>,
	 linux-hwmon@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	 devicetree@vger.kernel.org
Subject: Re: [PATCH v2 2/3] platform: arm64: lenovo-thinkpad-t14s: Wire EC thermal events to hwmon
Date: Tue, 30 Jun 2026 18:03:58 +0300 (EEST)	[thread overview]
Message-ID: <ea082fea-3ab8-fa65-aa07-ce82567450f0@linux.intel.com> (raw)
In-Reply-To: <20260630145307.10745-3-daniel.lezcano@oss.qualcomm.com>

On Tue, 30 Jun 2026, Daniel Lezcano wrote:

> The EC generates thermal zone status change notifications for a subset
> of the exposed temperature sensors. Wire these EC events to the hwmon
> notification framework so userspace can be informed when a thermal alarm
> state changes.
> 
> Associate each hwmon temperature channel with its corresponding EC
> thermal event and emit hwmon_temp_alarm notifications through
> hwmon_notify_event() when the EC reports a thermal zone status change.
> 
> Also register thermal zones in the hwmon chip capabilities and keep a
> reference to the hwmon device to allow event propagation from the IRQ
> handler.
> 
> This allows userspace monitoring tools to receive thermal alarm
> updates without polling the sensors and gives the opportuniy to the

opportuniy -> opportunity 

> kernel to cool them down.
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
> ---
>  drivers/platform/arm64/lenovo-thinkpad-t14s.c | 78 ++++++++++++++-----
>  1 file changed, 57 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/platform/arm64/lenovo-thinkpad-t14s.c b/drivers/platform/arm64/lenovo-thinkpad-t14s.c
> index 35a6f8b0cb6b..5fafb01a2b33 100644
> --- a/drivers/platform/arm64/lenovo-thinkpad-t14s.c
> +++ b/drivers/platform/arm64/lenovo-thinkpad-t14s.c
> @@ -104,10 +104,13 @@ struct t14s_ec_led_classdev {
>  struct t14s_ec_hwmon_sys_thermx {
>  	const char *label;
>  	int reg;
> +	u8 event;
>  };
>  
>  struct t14s_ec_hwmon {
> +	struct device *dev;
>  	struct t14s_ec_hwmon_sys_thermx *sys_thermx;
> +	size_t num_sys_thermx;
>  };
>  
>  struct t14s_ec {
> @@ -490,6 +493,20 @@ static int t14s_input_probe(struct t14s_ec *ec)
>  	return input_register_device(ec->inputdev);
>  }
>  
> +static void t14s_ec_hwmon_notify_event(struct t14s_ec *ec, u8 event)
> +{
> +	for (int i = 0; i < ec->ec_hwmon.num_sys_thermx; i++) {
> +		if (ec->ec_hwmon.sys_thermx[i].event != event)
> +			continue;
> +
> +		hwmon_notify_event(ec->ec_hwmon.dev, hwmon_temp,
> +				   hwmon_temp_alarm, i);
> +
> +		dev_dbg(ec->dev, "Thermal Zone (%s) Status Change Event\n",
> +			ec->ec_hwmon.sys_thermx[i].label);
> +	}
> +}
> +
>  static irqreturn_t t14s_ec_irq_handler(int irq, void *data)
>  {
>  	struct t14s_ec *ec = data;
> @@ -539,13 +556,9 @@ static irqreturn_t t14s_ec_irq_handler(int irq, void *data)
>  		dev_dbg(ec->dev, "LID closed\n");
>  		break;
>  	case T14S_EC_EVT_THERMAL_TZ40:
> -		dev_dbg(ec->dev, "Thermal Zone 40 Status Change Event (CPU/GPU)\n");
> -		break;
>  	case T14S_EC_EVT_THERMAL_TZ42:
> -		dev_dbg(ec->dev, "Thermal Zone 42 Status Change Event (Battery)\n");
> -		break;
>  	case T14S_EC_EVT_THERMAL_TZ39:
> -		dev_dbg(ec->dev, "Thermal Zone 39 Status Change Event (CPU/GPU)\n");
> +		t14s_ec_hwmon_notify_event(ec, val);
>  		break;
>  	case T14S_EC_EVT_KEY_FN_G:
>  		dev_dbg(ec->dev, "FN + G - toggle double-tapping\n");
> @@ -640,13 +653,14 @@ static const struct hwmon_ops t14s_ec_hwmon_ops = {
>  };
>  
>  static const struct hwmon_channel_info *t14s_ec_hwmon_info[] = {
> +	HWMON_CHANNEL_INFO(chip, HWMON_C_REGISTER_TZ),
>  	HWMON_CHANNEL_INFO(temp,
> -			   HWMON_T_INPUT | HWMON_T_LABEL,
> -			   HWMON_T_INPUT | HWMON_T_LABEL,
> -			   HWMON_T_INPUT | HWMON_T_LABEL,
> -			   HWMON_T_INPUT | HWMON_T_LABEL,
> -			   HWMON_T_INPUT | HWMON_T_LABEL,
> -			   HWMON_T_INPUT | HWMON_T_LABEL),
> +			   HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_ALARM,
> +			   HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_ALARM,
> +			   HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_ALARM,
> +			   HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_ALARM,
> +			   HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_ALARM,
> +			   HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_ALARM),
>  	NULL
>  };
>  
> @@ -657,14 +671,34 @@ static const struct hwmon_chip_info t14s_ec_chip_info = {
>  
>  static int t14s_ec_hwmon_probe(struct t14s_ec *ec)
>  {
> -	struct device *dev;
>  	struct t14s_ec_hwmon_sys_thermx sys_thermx[] = {
> -		{ .label = "soc",	.reg = T14S_EC_SYS_THERM0 },
> -		{ .label = "keyboard",	.reg = T14S_EC_SYS_THERM1 },
> -		{ .label = "base",	.reg = T14S_EC_SYS_THERM2 },
> -		{ .label = "charging",	.reg = T14S_EC_SYS_THERM3 },
> -		{ .label = "qtm",	.reg = T14S_EC_SYS_THERM6 },
> -		{ .label = "ssd",	.reg = T14S_EC_SYS_THERM7 },
> +		{
> +			.label = "soc",
> +			.reg = T14S_EC_SYS_THERM0,
> +			.event = T14S_EC_EVT_THERMAL_TZ39
> +		},
> +		{
> +			.label = "keyboard",
> +			.reg = T14S_EC_SYS_THERM1,
> +			.event = T14S_EC_EVT_THERMAL_TZ40
> +		},
> +		{
> +			.label = "base",
> +			.reg = T14S_EC_SYS_THERM2,
> +		},
> +		{
> +			.label = "charging",
> +			.reg = T14S_EC_SYS_THERM3,
> +			.event = T14S_EC_EVT_THERMAL_TZ42
> +		},
> +		{
> +			.label = "qtm",
> +			.reg = T14S_EC_SYS_THERM6
> +		},
> +		{
> +			.label = "ssd",
> +			.reg = T14S_EC_SYS_THERM7
> +		},
>  	};
>  
>  	ec->ec_hwmon.sys_thermx = devm_kmemdup_array(ec->dev, sys_thermx,
> @@ -673,10 +707,12 @@ static int t14s_ec_hwmon_probe(struct t14s_ec *ec)
>  	if (!ec->ec_hwmon.sys_thermx)
>  		return -ENOMEM;
>  
> -	dev = devm_hwmon_device_register_with_info(ec->dev, "t14s_ec", ec,
> -						   &t14s_ec_chip_info, NULL);
> +	ec->ec_hwmon.num_sys_thermx = ARRAY_SIZE(sys_thermx);

Please add include.

> +
> +	ec->ec_hwmon.dev = devm_hwmon_device_register_with_info(ec->dev, "t14s_ec", ec,
> +								&t14s_ec_chip_info, NULL);
>  
> -	return PTR_ERR_OR_ZERO(dev);
> +	return PTR_ERR_OR_ZERO(ec->ec_hwmon.dev);
>  }
>  
>  static int t14s_ec_probe(struct i2c_client *client)
> 

-- 
 i.


  reply	other threads:[~2026-06-30 15:04 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-30 14:53 [PATCH v2 0/3] Lenovo ThinkPad T14s EC thermal monitoring and thermal zone integration Daniel Lezcano
2026-06-30 14:53 ` [PATCH v2 1/3] platform: arm64:: lenovo-thinkpad-t14s-ec: Add hwmon support for temperatures Daniel Lezcano
2026-06-30 14:58   ` sashiko-bot
2026-06-30 15:08   ` Ilpo Järvinen
2026-06-30 14:53 ` [PATCH v2 2/3] platform: arm64: lenovo-thinkpad-t14s: Wire EC thermal events to hwmon Daniel Lezcano
2026-06-30 15:03   ` Ilpo Järvinen [this message]
2026-06-30 15:05   ` sashiko-bot
2026-06-30 14:53 ` [PATCH v2 3/3] arm64: dts: qcom: x1e78100-t14s: Add thermal zones for keyboard skin and charging sensors Daniel Lezcano
2026-06-30 14:59   ` sashiko-bot

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=ea082fea-3ab8-fa65-aa07-ce82567450f0@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=andersson@kernel.org \
    --cc=bryan.odonoghue@linaro.org \
    --cc=conor+dt@kernel.org \
    --cc=daniel.lezcano@oss.qualcomm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=hansg@kernel.org \
    --cc=konradybcio@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=robh@kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.