From nobody Wed Dec 17 19:31:55 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E7763FC7; Sun, 5 Oct 2025 22:25:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703130; cv=none; b=Wo7M0eMUJMm/m0Pfzjx8F1fbrtBndRJY6u5bsxxIUretaI350UxFnDMIQIEKtwCuuKVW/AawtN3/nAv14Tn+v1m4S6i+JEBA8jIXJ62UMe3Cz0IDexfhP1hvXm1yB9fPxAERvhDY2GjPRf0SH3z9c8L6sYI8MEpkk4uuAycrh3E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703130; c=relaxed/simple; bh=0cjm2D15ABjPHSqREC4lOS7Gk+i7BOiRrm/etjbkjww=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PtQ0m7hjYrseVtR2Ts//6HMhFzEjumNppXmHCx7CLfphSNTNkCkF4N4WhJrVMF4agJyTOb2WyYl+FUGUOuPjhcNGeJ+gvJDAHrZ9uV5TVOvLYaEnDPNUQiFZsFEb7JxYPezydYa3619AdP8TEJ/JJwFI8xyabAI28KkSsJz9BG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=ParNpCRo; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="ParNpCRo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1759703125; x=1760307925; i=w_armin@gmx.de; bh=G+EoSDUBugpUpUDI6rHVmIJFcQ1Dy/gJilxyTsnZntE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=ParNpCRoEPqRKCY3+6gNsfD1EryWEqkmEr13V5RdlPit27qBpnOP+xjX+mDMGJf9 UmkjzFJ1Hq2/ITCQKHjxh/BQIlF3/Xm+HJ+rdvykr6iiqJHRNnLzbP8sfGTFZPFVH sZoj/XkC0fc+05ThSUVKXnlxV2gHl1Iic0IT1ilQzuN2ONDQtMXHQz2hRQRItoBpe Gw0M5L8YMG6f1WO59qka55+UeWDBltz+DE7hMheiNGEryyD3tlEcz1G4MaWfNCGpI G2xG6vK0cwktOX0sh5UHxEJ75WqEGXTEH5uozzf1rsalgb01FDIscuPG/OkBGtNZm l+p4cVwps8sNnQx0Ow== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MSKy8-1uhEzt1nqK-00TFgr; Mon, 06 Oct 2025 00:25:25 +0200 From: Armin Wolf To: rafael@kernel.org, lenb@kernel.org Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/6] ACPI: fan: Use ACPI handle when retrieving _FST Date: Mon, 6 Oct 2025 00:25:08 +0200 Message-Id: <20251005222513.7794-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251005222513.7794-1-W_Armin@gmx.de> References: <20251005222513.7794-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:VLxRBd3HEpcr6TmoteKkuQsxzD6g3holmfouh36g2BpRZ1v4LXI 7R1lIDqqbJOw2tVyZNtIpRA227wikPsoswmUnJieoK4yiGsG2Hrw2Sry0RbkRmnZAh7GDcc 9/wy1BK5r9tTENBd+wBg+7nfLzWkjr7uQIV+ovFOTH/cV0fkLvew6nF9kq7WGyuaxz8YOMZ WmydQGU5Mdi6+HDqlvU3g== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:P9sTpqmz6Xg=;vA+Zdfmdhfc9ZdKGj6pD3sEv8Q3 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 Content-Type: text/plain; charset="utf-8" Usage of the ACPI device should be phased out in the future, as the driver itself is now using the platform bus. Replace any usage of struct acpi_device in acpi_fan_get_fst() to allow users to drop usage of struct acpi_device. Also extend the integer check to all three package elements. Signed-off-by: Armin Wolf --- drivers/acpi/fan.h | 3 ++- drivers/acpi/fan_attr.c | 2 +- drivers/acpi/fan_core.c | 34 ++++++++++++++++++++++------------ drivers/acpi/fan_hwmon.c | 3 +-- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/drivers/acpi/fan.h b/drivers/acpi/fan.h index 8a28a72a7c6a..d39bb6fd1326 100644 --- a/drivers/acpi/fan.h +++ b/drivers/acpi/fan.h @@ -49,6 +49,7 @@ struct acpi_fan_fst { }; =20 struct acpi_fan { + acpi_handle handle; bool acpi4; bool has_fst; struct acpi_fan_fif fif; @@ -59,7 +60,7 @@ struct acpi_fan { struct device_attribute fine_grain_control; }; =20 -int acpi_fan_get_fst(struct acpi_device *device, struct acpi_fan_fst *fst); +int acpi_fan_get_fst(acpi_handle handle, struct acpi_fan_fst *fst); int acpi_fan_create_attributes(struct acpi_device *device); void acpi_fan_delete_attributes(struct acpi_device *device); =20 diff --git a/drivers/acpi/fan_attr.c b/drivers/acpi/fan_attr.c index c1afb7b5ed3d..9b7fa52f3c2a 100644 --- a/drivers/acpi/fan_attr.c +++ b/drivers/acpi/fan_attr.c @@ -55,7 +55,7 @@ static ssize_t show_fan_speed(struct device *dev, struct = device_attribute *attr, struct acpi_fan_fst fst; int status; =20 - status =3D acpi_fan_get_fst(acpi_dev, &fst); + status =3D acpi_fan_get_fst(acpi_dev->handle, &fst); if (status) return status; =20 diff --git a/drivers/acpi/fan_core.c b/drivers/acpi/fan_core.c index 04ff608f2ff0..ea2c646c470c 100644 --- a/drivers/acpi/fan_core.c +++ b/drivers/acpi/fan_core.c @@ -44,25 +44,30 @@ static int fan_get_max_state(struct thermal_cooling_dev= ice *cdev, unsigned long return 0; } =20 -int acpi_fan_get_fst(struct acpi_device *device, struct acpi_fan_fst *fst) +int acpi_fan_get_fst(acpi_handle handle, struct acpi_fan_fst *fst) { struct acpi_buffer buffer =3D { ACPI_ALLOCATE_BUFFER, NULL }; union acpi_object *obj; acpi_status status; int ret =3D 0; =20 - status =3D acpi_evaluate_object(device->handle, "_FST", NULL, &buffer); - if (ACPI_FAILURE(status)) { - dev_err(&device->dev, "Get fan state failed\n"); - return -ENODEV; - } + status =3D acpi_evaluate_object(handle, "_FST", NULL, &buffer); + if (ACPI_FAILURE(status)) + return -EIO; =20 obj =3D buffer.pointer; - if (!obj || obj->type !=3D ACPI_TYPE_PACKAGE || - obj->package.count !=3D 3 || - obj->package.elements[1].type !=3D ACPI_TYPE_INTEGER) { - dev_err(&device->dev, "Invalid _FST data\n"); - ret =3D -EINVAL; + if (!obj) + return -ENODATA; + + if (obj->type !=3D ACPI_TYPE_PACKAGE || obj->package.count !=3D 3) { + ret =3D -EPROTO; + goto err; + } + + if (obj->package.elements[0].type !=3D ACPI_TYPE_INTEGER || + obj->package.elements[1].type !=3D ACPI_TYPE_INTEGER || + obj->package.elements[2].type !=3D ACPI_TYPE_INTEGER) { + ret =3D -EPROTO; goto err; } =20 @@ -81,7 +86,7 @@ static int fan_get_state_acpi4(struct acpi_device *device= , unsigned long *state) struct acpi_fan_fst fst; int status, i; =20 - status =3D acpi_fan_get_fst(device, &fst); + status =3D acpi_fan_get_fst(device->handle, &fst); if (status) return status; =20 @@ -311,11 +316,16 @@ static int acpi_fan_probe(struct platform_device *pde= v) struct acpi_device *device =3D ACPI_COMPANION(&pdev->dev); char *name; =20 + if (!device) + return -ENODEV; + fan =3D devm_kzalloc(&pdev->dev, sizeof(*fan), GFP_KERNEL); if (!fan) { dev_err(&device->dev, "No memory for fan\n"); return -ENOMEM; } + + fan->handle =3D device->handle; device->driver_data =3D fan; platform_set_drvdata(pdev, fan); =20 diff --git a/drivers/acpi/fan_hwmon.c b/drivers/acpi/fan_hwmon.c index e8d90605106e..4209a9923efc 100644 --- a/drivers/acpi/fan_hwmon.c +++ b/drivers/acpi/fan_hwmon.c @@ -93,13 +93,12 @@ static umode_t acpi_fan_hwmon_is_visible(const void *dr= vdata, enum hwmon_sensor_ static int acpi_fan_hwmon_read(struct device *dev, enum hwmon_sensor_types= type, u32 attr, int channel, long *val) { - struct acpi_device *adev =3D to_acpi_device(dev->parent); struct acpi_fan *fan =3D dev_get_drvdata(dev); struct acpi_fan_fps *fps; struct acpi_fan_fst fst; int ret; =20 - ret =3D acpi_fan_get_fst(adev, &fst); + ret =3D acpi_fan_get_fst(fan->handle, &fst); if (ret < 0) return ret; =20 --=20 2.39.5 From nobody Wed Dec 17 19:31:55 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CD1A248F58; Sun, 5 Oct 2025 22:25:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703135; cv=none; b=P/GV1fHBp9pnOHBxUp83xM6v4lPt5kKwYR9XrJFC7ewQ1cOEqhBC9kn6vnc8JH30aJMin6ORaFpk0yXXPh0ONZhpE+EDU7/BW5KI6Zo25ic3+QKn5Lwe5rpmpw6pJvCUmhdgGuJtah0dfXoWnSUNNSruy/vld4gXnm6PIJHVoTg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703135; c=relaxed/simple; bh=0RWOXnLR7FG9+TwshK3PGnYQaOOl5snD5H0QN+aIVXE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rdXaCsyS2sBtWhavwLg/2QoMXzsVVTYA6cQwgbZkVve0Mr9fxX1Y2zqa0P0tRseKXcW2zkLhJYZ9khAdXlaNBXyCWsijyifRiRKT1yw7UEc4h3rPGGWPQuhgCLsg7zz4iogtHfJJ07vkkgtU27+gnoM0npx/t1MnTgWAA448ack= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=kXi/zDXm; arc=none smtp.client-ip=212.227.17.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="kXi/zDXm" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1759703127; x=1760307927; i=w_armin@gmx.de; bh=FivFU/5ysNNcOss1NqFYq2iX+hPjy6cOYfxHk161Nsw=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=kXi/zDXmXJRy0tPkpsno+uaJc0A4ut51r2yuvvy4Ez+4YIZekeEHO9NM0jDl4W/Q qER2ZO39K03Zle1AztuoCzIGAiRnjeY/ncZEnyEovyBdI28+aY5horGuyYXxLB3xJ pcIeNVoi0IYM3KiNdR2MjP9Cvi/soMB1bZepJzVacCAiFQZAnNysQcAX/5Swbk9vG nfIc2ongHRpkRikMNHCXa4kSCGDLG68hFBdvxF9cSb04bwRWhkIOLG0gifq83OAJ1 nIrCkADZdPbiQZl6QVDIQhCa2pZP+iq673r1AxAE/CTNa0kzURukk66nkNQnkrAlU RMYfUrStIEnEUFTo1A== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mz9Ux-1uIds40VDn-00vh53; Mon, 06 Oct 2025 00:25:27 +0200 From: Armin Wolf To: rafael@kernel.org, lenb@kernel.org Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/6] ACPI: fan: Workaround for 64-bit firmware bug Date: Mon, 6 Oct 2025 00:25:09 +0200 Message-Id: <20251005222513.7794-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251005222513.7794-1-W_Armin@gmx.de> References: <20251005222513.7794-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:YPEtLeJVjS8+ZAHGX8/1zT2v2z/GeFqGfuZjBYNjLUeQ0HR//RK /BtUoRuJdRbBtJhJ8KkS2oh2O+k/ST08D8wYize99X63LilqHxpuOmDQFE0+LcTevC5Cn90 qDde6b3PpDBBAw7+dFW32r3nQv2CkcEnvwrkgLFeV6jHdRshCMSHHNILeUH8Wa/SOUVFyQE YeueO1t1LYGyUYEeWrVjg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:rdoEA7aJETo=;fobz2ZB9V4r7pWIPvvVsdo3LG0o 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 vPZBikAFlNJorzV5C/KwTLW8RJomfo/uGODemN Content-Type: text/plain; charset="utf-8" Some firmware implementations use the "Ones" ASL opcode to produce an integer with all bits set in order to indicate missing speed or power readings. This however only works when using 32-bit intgers, as the ACPI spec requires a 32-bit integer (0xFFFFFFFF) to be returned for missing speed/power readings. With 64-bit integers the "Ones" opcode produces a 64-bit integer with all bits set, violating the ACPI spec regarding the placeholder value for missing readings. Work around such buggy firmware implementation by also checking for 64-bit integers with all bits set when reading _FST. Signed-off-by: Armin Wolf --- drivers/acpi/fan.h | 33 +++++++++++++++++++++++++++++++++ drivers/acpi/fan_hwmon.c | 10 +++------- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/drivers/acpi/fan.h b/drivers/acpi/fan.h index d39bb6fd1326..022bc215cdbc 100644 --- a/drivers/acpi/fan.h +++ b/drivers/acpi/fan.h @@ -11,6 +11,7 @@ #define _ACPI_FAN_H_ =20 #include +#include =20 #define ACPI_FAN_DEVICE_IDS \ {"INT3404", }, /* Fan */ \ @@ -60,6 +61,38 @@ struct acpi_fan { struct device_attribute fine_grain_control; }; =20 +/** + * acpi_fan_speed_valid - Check if fan speed value is valid + * @speeed: Speed value returned by the ACPI firmware + * + * Check if the fan speed value returned by the ACPI firmware is valid. Th= is function is + * necessary as ACPI firmware implementations can return 0xFFFFFFFF to sig= nal that the + * ACPI fan does not support speed reporting. Additionally, some buggy ACP= I firmware + * implementations return a value larger than the 32-bit integer value def= ined by + * the ACPI specification when using placeholder values. Such invalid valu= es are also + * detected by this function. + * + * Returns: True if the fan speed value is valid, false otherwise. + */ +static inline bool acpi_fan_speed_valid(u64 speed) +{ + return speed < U32_MAX; +} + +/** + * acpi_fan_power_valid - Check if fan power value is valid + * @power: Power value returned by the ACPI firmware + * + * Check if the fan power value returned by the ACPI firmware is valid. + * See acpi_fan_speed_valid() for details. + * + * Returns: True if the fan power value is valid, false otherwise. + */ +static inline bool acpi_fan_power_valid(u64 power) +{ + return power < U32_MAX; +} + int acpi_fan_get_fst(acpi_handle handle, struct acpi_fan_fst *fst); int acpi_fan_create_attributes(struct acpi_device *device); void acpi_fan_delete_attributes(struct acpi_device *device); diff --git a/drivers/acpi/fan_hwmon.c b/drivers/acpi/fan_hwmon.c index 4209a9923efc..5581aa6fdfa0 100644 --- a/drivers/acpi/fan_hwmon.c +++ b/drivers/acpi/fan_hwmon.c @@ -15,10 +15,6 @@ =20 #include "fan.h" =20 -/* Returned when the ACPI fan does not support speed reporting */ -#define FAN_SPEED_UNAVAILABLE U32_MAX -#define FAN_POWER_UNAVAILABLE U32_MAX - static struct acpi_fan_fps *acpi_fan_get_current_fps(struct acpi_fan *fan,= u64 control) { unsigned int i; @@ -77,7 +73,7 @@ static umode_t acpi_fan_hwmon_is_visible(const void *drvd= ata, enum hwmon_sensor_ * when the associated attribute should not be created. */ for (i =3D 0; i < fan->fps_count; i++) { - if (fan->fps[i].power !=3D FAN_POWER_UNAVAILABLE) + if (acpi_fan_power_valid(fan->fps[i].power)) return 0444; } =20 @@ -106,7 +102,7 @@ static int acpi_fan_hwmon_read(struct device *dev, enum= hwmon_sensor_types type, case hwmon_fan: switch (attr) { case hwmon_fan_input: - if (fst.speed =3D=3D FAN_SPEED_UNAVAILABLE) + if (!acpi_fan_speed_valid(fst.speed)) return -ENODEV; =20 if (fst.speed > LONG_MAX) @@ -134,7 +130,7 @@ static int acpi_fan_hwmon_read(struct device *dev, enum= hwmon_sensor_types type, if (!fps) return -EIO; =20 - if (fps->power =3D=3D FAN_POWER_UNAVAILABLE) + if (!acpi_fan_power_valid(fps->power)) return -ENODEV; =20 if (fps->power > LONG_MAX / MICROWATT_PER_MILLIWATT) --=20 2.39.5 From nobody Wed Dec 17 19:31:55 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1630A246BA4; Sun, 5 Oct 2025 22:25:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703133; cv=none; b=YSJVemXN2EMcpR5XfcEJ2RRSEAFO/tMDC/rP4wyA8kswIkRszuhPubSdo/fzHABVVg9nzsdZCb+1KK32jSuJl0iD/lGYRVP8FdLdAJFUUlee0MFdFF+QG871M1kwTA9c4q1mA9XjcdA0RBtweU+dEyig57eMKkLPk/i4KjGMufA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703133; c=relaxed/simple; bh=MlHP0jd+Gi1z2ooUPOaFjRaMw+08hV/BrOOkBN8UX5w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=R+YLK1zd3kt/lGOnvVeVNGbBLZsE9e+H8Qx4185+oXAghQfBl+FYYadJB9pkcuUjDBXp8FnoUG7IQJF2gb64y7gd88W6cjW/1b30SDo0qxb17rcj/nwTCkp+NICwlUuR9gxfzI8Tn8yxjoLVK8qt0VCWqv/G9MO3xvJuu77khU0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=gWxUVtQP; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="gWxUVtQP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1759703129; x=1760307929; i=w_armin@gmx.de; bh=bWLZsCK16J6VPDI6PSn/FWwhJiH9UOgcLVn6IdHq3lk=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=gWxUVtQPrmMStICRz4erNq4pw5TZvnSrw81mg4iE0t7VkHeE6H9i6/fZTOcAjRHy NFHo2bNLbAKSAt1ZuyeREU/tad80aG6Y0ufAxuCTeKshkqXm5r87sUrUBmXQ7h8LA xYsWZYL7HLm7dNvZd5zg/Cht6cxd0uuQLlJvqdqJSMatw48DmQgIaatIEjzD5QLlS tr1q2R5F3MwJWNE/tbHAcUDGwjdreaiXn27dJ3izcDyvdAZigfQSYn/J8m1ICAR9g reSvWL8IwJ0MC4YxrVvD9RB2+wK6CVBeiJFreJLV+bFde7+jKEENKtFflnaFThELS auVOBpboTkAoVWxmWg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MOzSu-1uvYrE3bvI-00PwhG; Mon, 06 Oct 2025 00:25:29 +0200 From: Armin Wolf To: rafael@kernel.org, lenb@kernel.org Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/6] ACPI: fan: Use platform device for devres-related actions Date: Mon, 6 Oct 2025 00:25:10 +0200 Message-Id: <20251005222513.7794-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251005222513.7794-1-W_Armin@gmx.de> References: <20251005222513.7794-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:3NNONuo6fOn581SwHidC6t/p7K/Pb9qTzpJMCcLxv06o7iKsweq o58WDbixs6A3SGWs9fW7oZ4f6s5PE1gaQdrTY6r7c6z4M9WNWDPe55z7GXrHmoTnddmBEJB 78xTNlmQ+uVnk3KzKaPaqJcHzi/bA6U5hIYLckc8k9AragC/XwuvgD06ZBT8du5c0RITlLk CWD33whLm696O++VyNEhQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:VARd5Qh4lwk=;9o40UmAKev0R2FNOapnE4L7/Umw dY61zZNuIpv0ReByUHp6xarjsULGeoI/sCUtmc9ltvEzyD/bkVwABwEmkAtpR9n8UblQaaUuc BrNb1zzytb4n92/DgwKmRkHc0TJX7sdZ2Wy9oIYoGQjAOTHk/iDRUcdwmGNAoOb+/r4QDcpUw N+1/iq2dXgncx1Ypa1e4NY3xcUR0n72tnxgNdH1LhdhVup55RPypCecNPCSoKCcRiwkngn8/V OoUXak+/9asW6YbDWIElaOk9UD3ov+dWb3S+kxKh9x95eVSdlJNOckWdCydLpR85q3FKzXNq6 ulZiN/37UepW/DUTgNzeb4UM1A6yWHa85TwDgJTbHpcg+J7oNyWTs5O3CsZciEUP6Potsn7sh Hqmpuz+pH7rcduYF54GONYChHIU38w/m1xWKnehKgtG+kEX1IOoi+M8FIWMKu5r8dslOU+lED bPydT/9F7X2jGMMUWE7NWh++UiDrkhBI+TtAycLI5OUkPhQ19WFUdF8OS+yHyv5X3H4Ggm0zA TTAG//pl/4ZkOOAlltyaSfLe2hF0vrcHhxixyH/P+5pwn9nJ3znCrY/93mF4LH+387JXWZm+s WWeyujCm2HQDSR3pTHVyzT97yVCANWxg4Bvj4EqG2+Y0R1VNkJBlaLhakfWe4+RJrX3QGwUfi 7GYHdnQmrAFn1rdcyctN/YNyVxJCQu/phAClxCut1SnextU8JDOjKWoTnyeztpx4hu3++O3ZZ gB8M50UCkH/q6VmigqRuo+yoQL3c5Rij70F4bC9eW3rQteV5MHHJjk+GveTbynYAlD5yZ+g8m nOKHYOQtG2EnJct/Lvu9Zzw08aTMx1kqTHE+UAFhRh2LxxC/0oXz4opN9CTL5qxRBDOD2ziiF 0dgtFVCZFV3oNgHucuL4Heq3o9d9nX5klKllZjUX3SkzwqkKCVU99IGcD3okMMY10QVzPcY6O 4kdJUWcGaDqeb6qJv4qvi+UwxM7HKcy8WUcjKYY9n31A3Gic1z1pyj4rRJHX83qmj0r0zv+Su QMt9ub3CVOM4n/AEG1kmqqDJRzQoLgSCP6ThCMkpBMD+VvWYGbjK/IxdVGNzmsojG3N7d3f8e SuySfuY6PhCBhvVd6gDIO7DXCsbGz4T2kyR8DoTKIysRtBIZI/jxKkcXePaCOmkjlgWjytwrY jbu68u/zisee0Q8NtVKLHh0wjylNm5yl/yBqKwAb9rURhI7aIn7JVfHqSMzJx4BiIiz3A625B XbkpqM7rP0RE2jJx4aUdg2UwK9baOsWzRcW/FZo2Nvg0m77bIULF43xnUXBjMXtUVi3sp5DxU 9jnyy9+/nrMpY25IiaaFzDQ1pXCCSATtuTXIdz3xR7UJmCwtrGnGcviPlnhazmX1U/KJvKjzv quqymTPJbP71hhznzqwI2bu3eMct0wp+ax/ejcV07H3Z+58CJD0A9pnYYfTU1MLJiFnjL4v5E Me0agfGW2XDrtboItKRiV3L4iHdBJcF+smCzCJcMoceIb8miPfsQusq2Bsi9AlSyWe7wR9aDu WI2NwSBL4TPY4BZJIR/xDrOY72XHadizF19Va+2QrGpLIlHJYJWlFoZuOLvTRJ70Okh04WOlg OdoNBgD37qZZnOBqsGNayx2Gg3wZpXUbD+gRQsYw5jhqJmxJ1dAouiFGf9w2M10u/DJ4RxTTl CNsl4EIT+lGt0lV7/3wXIaFnhC1YIifhKHHz2prG/WVPrQYUZvSYoac70KhSJmxKzSwz+dKGh 9da6h5Nxm9fPW+L8VAtcgwJ6EMgPBPdiF3ZqbBQ9QkcWEgymaL9rLZSSscaWjVJ6RrJ+MHx69 /c0FCxhxDPRraumIvX1u2YyXFTvw5YYPbek9vVSf66rwUX2GgbBQqgwJpOQr/raPW6besJwXS wPFcSK3Gqubz/VqHUuhWNUiN9V1+SjG++ZyOopWsWwjV3nQL+S8gugQO8F7Q75s9+++zVQ9ki aOxHmUwZa3d+NnGgUyxxu75+UkcfCGE5ZX/b0Svo3qrkDICYQOiFzXBfvkR+fBDLZCEUXGvGN VJgnuKwv83xaguwoQmJDsjNdJXDp5iKo5I3WDHh5ztn45i4yEe1ruLavbfqiXf6IQlvjSPLzA 0OcVI6PW6VfQOsjNjYxtkrCimqafhDw7sLn/6R7IYmt3oIl3kEW37y95VbJ1n+EQrnTuFBoPD WLIwO1ntq1NKdtyR5eRyI9nwpdxysf53RJKW6uSUuFCRNmGUWWPKovFKmGltFbixJZiSJ6VMM 0aV3otcouEkEwzDDm4VJU9u9CDEw1EhwxheTlM2SVvzP3vok0sGblH2+mOKBFHEQ/Qpx5+UvU IUId2oHrjEYCbgQzPWLHFcMmReekr6B/3/Dta5fz8DdIaTHWUoZmKr5uhgP1zUefm7rG1vQsw Yhf661CLC7SrKjas47bRUa7/kicSl4tkIR1S5L4bkGO2LhmXtppWPMfVKwdUvcYeIQ3XykIsa CKS8d3h9B7+9fDjpAFCEjkfDz03i3TV+oU6f9ldJjrmFoXnujs3ZQSkqIl9waYDxl8yBT5BBX Q0xAZmlozQTTbkNvT/yL4qjxuF+VBiVeskbxacmQt39mZDlKpPMzAV+QLAQe3nQviARDXxc/y xgebwACYXUlzBilWt/pAzXBVi+qDSaaMAzKzp1aT9B8a79AxliPCCzN98No0OheHApebZdUBj rAlgO4aFZ9GzQzsEQrsrXHunhw3T3KnWd7gcrKerOy5C44K+1owrlBYjFhaXf+tEqh/tr6Egj 6tkKKuVJF5RxVHapQ1gTj0R5DzvEj1+3oCHzag3G3K35fB6wE+GYpM74A1cbO9D4r7Afr0RET n9/sP3qN+I7rmo1XD6nu3dV2EXlyeQxBIvfXnnAsPhmLjuHBoun7uNiORk+pyiLlQ5XyKXQD0 AcTPVXlqCje+DRUv4cW/7wHYuJz37mmKhxA9v6+a7lfZ+qkElDH6L4G10AHFMUqh4tllFKJyP cp8nBCSKgriyoS5nB3HqXqo4VoLAI/gShEfRzXPqstHwfjeKTuUD1tFNXBKGVn7EPzq+QgL4I Q7P9yXWPJVd2sTscrzY5NpP/5foQil+hDBRPOCpUxmBoMKbGNqAbGbtN2FSEc4/nydc4xl+1r YMX0/hlKN0ldwhgIixSQJH/+UUFBO1VjzwvW9JGk4bGbd/7qLYwTpYrGqVBBH6LQZFulthAxj Lomv3QB6/UlGCaYuo/C0AaxJC4fcp5ogWF5cCX1IcBeuFBvMv6HFuDXBWkTrmhk3jiz67uYvB 6tw68dnnhtojkPWMQdBa0BX61AfrGOYNSOKL/naAFHftmD7oSAwrGs1FUIDkyJwA0Y3ItoMKT pbKWPUm//NmlaFRifIxw5R9NRgu/MrVGCxBqEb6IhZ5vl8cKya2nvWWrCfghHO0mPjRxNVKL7 a6JljjY7U7ghIysl0vvOm7SkOHKduNBRZfgr3FjZ5D+vlgK/VCqRDzfa09y2JwlKs7GT0KBVw VuSjYMVk4I0vrZ0/OwlKJTqMQssiK/p+AyHiF1Bee8+IueNTa51C+3y8yQYu0EBmpCqm2g2rS qrIegOboDU0yq3I5sh9/ViAtWxCtjCFXo8w9sk0zT58vJFKEXwyJyjxwlHV5AZCyfP64vbmgW e/BnO05D4UECGrJ6ADRMXV5m8/y89bUE0Ln9apAj66tTKn/n5RQaaedDH+basLpg04/tc1VGU UJe0aSKI/0veOS7vCY69RICyxLKMqHS0dmXUB6yD0m58yAjo7FboP3RSfTslmEzzvjTOuJJn4 ECP3M5SYr8x1C8R6QiXd/nBPESH2pyRaZN9pRm/LwycPZIIXfOw60EscMqigXTcKSoUMaF8aR FwJN5roZuCdKc0BcYgpIMojIMil6ZgUhIhO37+mZ8vztFlglPfSUCwrr7GIF8jthWoxf/f0SW eM/wUQpmjgERPy5LEiEr/1F641J1flbbpJs2pA4Q0bmjPOf759Tzty4gXbDBfP370sRVX1fc1 Ll52bkBqfhMlrg1vP6hsvmZoHWUyyqSsTTJPZeaY7+V+fq5p2er+sVzLpocXwURtBKoCHfC+s qiqauL/eydO0HB35Uisy74a6u/eWhfDLvfYFhJPW2C+d+4mGTAOR8e22HyWJHPmTapyJVOIm9 87I78PWIo1im0KjRnRHELXTl/6jr3UGb0IIIKjQqR9G2kG65YEfQ5KxJMAp0V9fqC/0JZJ+vD yo5YjAx3c/nXlJl1XQv7FFPfM5PfcZHWGwDHoVTQvfIZ1LdYfZHyq6eKQ2IsaInPRAE/QGCOj JpfPSQtcDD7gG0HLI+rdqH71PIpQLBDMODqsNKjF9cy/bO/WFukCACf/YP8T/QAkQkcv5S399 mOL7Dh/SQSN/ExNSQK1gde7hMsOZmU1CdROok2V3QcOQu7vuYkfs87xnqFyxz/KcTx4QxXeOH 1d8p2X7LEqxUGFo2znM4T5qb/48tv9OQHvQ/MkNXh9yJQHJ1XHOyujQ+OgteiqtdlpZe0sdqM Fby1aWeE+FNNNUvHA9EftkciLa7UIQe63DshnnQeLGbznVUDGJ3OF5M/riu/ZhF/A13cq0tPo Y/6IaQfErtY8TIQSyIGJJPI/uWYqBkNzSIvx8f99HpSOxYXryX1ICRGpGdP7PNNUQrVPByhSQ vn1S7s5udRNEcb7NLMlYolmEEp5C4L7GgVMS+l+f8o2oqD3767mK9FHv86aXbiX7DvYCXZUZ4 XtBG42uV19egyoGzzf2K5gMLuXZiNBpUcSp7s3C4vu1V/nIOQ5Tg7w3dJFcQONXbq4eEaC8eq 6u0SXQvn2j2x8NVZntFkYcI7lmMF7HAmp+vhCX3zhtbv/LMKgc0X+AcZvrDrqD6tMnOX1STLS Tt7HjHuCuVBZuRBNg8KEl8lHw+uIKn7TPZXgW+kIEOzANshXCofDiLWuVCBP1HwRuCNZz5QG/ lpiIRwmJiuChjvZPAG25ulD6rSR5QlbFOPzJ01yoYlcrku+bSNtuSkWG7mps7d8h/iAeQe4NJ jr9jnRVLfLVsG4/B8F+86OafR8D6mIEKrcMZEjSe9HDMJ5VKxkolWmFWu89/LPYPTbcUxiXhn PbedQe4/j0HhTNyL1voI/sSg4LzVj3lwDHOqoXMNq0NFOe29dVzVaQ9fwAGki8qs1yMv9P0GO SyNaKtSK2vNqbmFdo= Content-Type: text/plain; charset="utf-8" Device-managed resources are cleaned up when the driver unbinds from the underlying device. In our case this is the platform device as this driver is a platform driver. Registering device-managed resources on the associated ACPI device will thus result in a resource leak when this driver unbinds. Ensure that any device-managed resources are only registered on the platform device to ensure that they are cleaned up during removal. Fixes: 35c50d853adc ("ACPI: fan: Add hwmon support") Signed-off-by: Armin Wolf --- drivers/acpi/fan.h | 4 ++-- drivers/acpi/fan_core.c | 2 +- drivers/acpi/fan_hwmon.c | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/acpi/fan.h b/drivers/acpi/fan.h index 022bc215cdbc..0d73433c3889 100644 --- a/drivers/acpi/fan.h +++ b/drivers/acpi/fan.h @@ -98,9 +98,9 @@ int acpi_fan_create_attributes(struct acpi_device *device= ); void acpi_fan_delete_attributes(struct acpi_device *device); =20 #if IS_REACHABLE(CONFIG_HWMON) -int devm_acpi_fan_create_hwmon(struct acpi_device *device); +int devm_acpi_fan_create_hwmon(struct device *dev); #else -static inline int devm_acpi_fan_create_hwmon(struct acpi_device *device) {= return 0; }; +static inline int devm_acpi_fan_create_hwmon(struct device *dev) { return = 0; }; #endif =20 #endif diff --git a/drivers/acpi/fan_core.c b/drivers/acpi/fan_core.c index ea2c646c470c..46e7fe7a506d 100644 --- a/drivers/acpi/fan_core.c +++ b/drivers/acpi/fan_core.c @@ -347,7 +347,7 @@ static int acpi_fan_probe(struct platform_device *pdev) } =20 if (fan->has_fst) { - result =3D devm_acpi_fan_create_hwmon(device); + result =3D devm_acpi_fan_create_hwmon(&pdev->dev); if (result) return result; =20 diff --git a/drivers/acpi/fan_hwmon.c b/drivers/acpi/fan_hwmon.c index 5581aa6fdfa0..47a02ef5a606 100644 --- a/drivers/acpi/fan_hwmon.c +++ b/drivers/acpi/fan_hwmon.c @@ -162,12 +162,12 @@ static const struct hwmon_chip_info acpi_fan_hwmon_ch= ip_info =3D { .info =3D acpi_fan_hwmon_info, }; =20 -int devm_acpi_fan_create_hwmon(struct acpi_device *device) +int devm_acpi_fan_create_hwmon(struct device *dev) { - struct acpi_fan *fan =3D acpi_driver_data(device); + struct acpi_fan *fan =3D dev_get_drvdata(dev); struct device *hdev; =20 - hdev =3D devm_hwmon_device_register_with_info(&device->dev, "acpi_fan", f= an, - &acpi_fan_hwmon_chip_info, NULL); + hdev =3D devm_hwmon_device_register_with_info(dev, "acpi_fan", fan, &acpi= _fan_hwmon_chip_info, + NULL); return PTR_ERR_OR_ZERO(hdev); } --=20 2.39.5 From nobody Wed Dec 17 19:31:55 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 54B9023F421; Sun, 5 Oct 2025 22:25:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703138; cv=none; b=Zt1Pf5lvLOMtBiyn1l2dXmZD/2+WSkhmwtCUijmsUKxWMQ7KzNJVqGOCiRPUVtH1i/P2DhW7YNBSeqIfkxqgWmqBUqA/p9Yxg/Toeh2h9vVLJHHlJtQshcwMCyhEV1tx5+wkepwgSHrrnoY0dXGUJSe2raHmsix6HtSY00++E7M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703138; c=relaxed/simple; bh=GsodGw3Pa5I05maEkD4DvlWS12xOGCtbRrcjv+ZL8Ao=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=UEFrO9k1HAnSrnzdvB3NGQHuohXPS58tcF4/3IMj1GCyJVqNFPD7j3anpVLUXB7qRuOXd1nPCLaQt+BIAHihqpvRDu0WuWMKuLPqiJYYW/tpnft1QuQkEvspnWZviauQN+IKrPSc8whSuS1IpxzoM0pOHWNIALbb/mA/fPn/hb0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=hGhb3JZ7; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="hGhb3JZ7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1759703130; x=1760307930; i=w_armin@gmx.de; bh=N46U7ktiFSoQjTbVJEfPGL3jUZUVQA+SMnH4zeVlSIY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=hGhb3JZ7BAocKxTBXAYw9s6pOU3dasCg5ymITgh5yad6epDybwugP/gzmFZUkqPH 5NZGB1z4seh8p4K0h2QwvDwm15n77pjqUo0Jk49Q6MQ9xSGRkbroALo2Yt542nneo MOnmUX2wtlArHNW7CMek+U5xTzxfiMQS1rr0qxKHKTTazwGIL46eetwyzeTezyFFG laDMd1yLGTLKRN+nFSTICqczYky9qlhxGBj4GnLvLuMRXLc0Be78EZieTnocj4A8z Dc0bKywxA8Kxeh6XE4ZfnjySgKjxlUCd1fx9YhHHz/jF5OfiBmYLFfwHlyRiFXsrJ Wiebfz0cAnczkJvK1g== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M9Fnj-1vAkUn1dxv-00CXUu; Mon, 06 Oct 2025 00:25:30 +0200 From: Armin Wolf To: rafael@kernel.org, lenb@kernel.org Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/6] ACPI: fan: Add basic notification support Date: Mon, 6 Oct 2025 00:25:11 +0200 Message-Id: <20251005222513.7794-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251005222513.7794-1-W_Armin@gmx.de> References: <20251005222513.7794-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:07WqVr1Wn6Lctl38u/+daflgvnwLNDyLPcmnObNBzE62UnLpqlu hj27ryVackktFU71lEYxhhkoKWAZ173DXV5nHdLJA/EB/Z0z5DuGEjql1O4SkJ4OACqo89Z 1lQmnmm1NBev4MOphOCvPZSF0ICSokSq6Z5hLmmt/V/rmYpudm3ABxhnYR7DVW2NSDsqziy e0YAUACpQg+SAsuRinE7A== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:4RGpwiO2FFQ=;EwIEfR+qoA508nWHfaVrwsQN6Kk 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 +pKf2rbO+N+yI/hWDXypGfgTgOq2zj/hv+VI/i Content-Type: text/plain; charset="utf-8" The ACPI specification states that the platform firmware can notify the ACPI fan device that the fan speed has changed an that the _FST control method should be reevaluated. Add support for this mechanism to prepare for future changes. Signed-off-by: Armin Wolf --- drivers/acpi/fan_core.c | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/acpi/fan_core.c b/drivers/acpi/fan_core.c index 46e7fe7a506d..545b490d624e 100644 --- a/drivers/acpi/fan_core.c +++ b/drivers/acpi/fan_core.c @@ -19,6 +19,8 @@ =20 #include "fan.h" =20 +#define ACPI_FAN_NOTIFY_STATE_CHANGED 0x80 + static const struct acpi_device_id fan_device_ids[] =3D { ACPI_FAN_DEVICE_IDS, {"", 0}, @@ -308,6 +310,49 @@ static int acpi_fan_get_fps(struct acpi_device *device) return status; } =20 +static void acpi_fan_notify_handler(acpi_handle handle, u32 event, void *c= ontext) +{ + struct device *dev =3D context; + struct acpi_fan_fst fst; + int ret; + + switch (event) { + case ACPI_FAN_NOTIFY_STATE_CHANGED: + /* + * The ACPI specification says that we must evaluate _FST when we + * receive an ACPI event indicating that the fan state has changed. + */ + ret =3D acpi_fan_get_fst(handle, &fst); + if (ret < 0) + dev_err(dev, "Error retrieving current fan status: %d\n", ret); + + break; + default: + dev_dbg(dev, "Unsupported ACPI notification 0x%x\n", event); + break; + } +} + +static void acpi_fan_notify_remove(void *data) +{ + struct acpi_fan *fan =3D data; + + acpi_remove_notify_handler(fan->handle, ACPI_DEVICE_NOTIFY, acpi_fan_noti= fy_handler); +} + +static int devm_acpi_fan_notify_init(struct device *dev) +{ + struct acpi_fan *fan =3D dev_get_drvdata(dev); + acpi_status status; + + status =3D acpi_install_notify_handler(fan->handle, ACPI_DEVICE_NOTIFY, + acpi_fan_notify_handler, dev); + if (ACPI_FAILURE(status)) + return -EIO; + + return devm_add_action_or_reset(dev, acpi_fan_notify_remove, fan); +} + static int acpi_fan_probe(struct platform_device *pdev) { int result =3D 0; @@ -351,6 +396,10 @@ static int acpi_fan_probe(struct platform_device *pdev) if (result) return result; =20 + result =3D devm_acpi_fan_notify_init(&pdev->dev); + if (result) + return result; + result =3D acpi_fan_create_attributes(device); if (result) return result; --=20 2.39.5 From nobody Wed Dec 17 19:31:55 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F1A4D24A04A; Sun, 5 Oct 2025 22:25:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703136; cv=none; b=NO7m5cbTMqMGn6V1Zi7WDsuYE4QGKAAD5kee4xQLZTvXzHWtguU3KGl8J0gJe3FnFuHOYtXKzOa0obdALyXxX6Mb20BVqQVUOzc6xlD5jot0KkhKskaKgw+O56ZmFR0baknWCXu7nIxcZSVsASipPVzj6AJ5Jnr8MAA/zB2Dh3c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703136; c=relaxed/simple; bh=xqh6pZSk7wn5lhjBA+DBxUBR9bAgiYE7r/8l3/H8sgo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EPzAi5l+8GxraYT4pXyLDYT02KN0rfJPY3877RBJVJDe4IoeogFDbTbuxEPe1XH81dcTlneVuZXEr1IOIuTBdFXEN7zyVbm7FRm/7U5bKc1X8syuJDHTHslt/PANj59VZbW2CL2ptn5R8NKoCFq2Ywg8e4XZ7PhRjKWloeoB+h0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=RSuAPNuV; arc=none smtp.client-ip=212.227.17.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="RSuAPNuV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1759703132; x=1760307932; i=w_armin@gmx.de; bh=vdLDI039lJrjTfOzfv2/hzx80BvbbopABIHNmkFDoos=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=RSuAPNuVcxsNJFwcjd2iEjPPAsl0trfThZFERpnNVK+2dl48IORs1X7bWyCRX+Nt ye2UADXAy4k/8sj0dC3A18udM2Rnz4Mt5r1rESkBJTaMe+G1OtrkJOCvUkUG0jDgT Tc38xm/XAYCn0nG8N8SKkM/lRJgXrN+E/XhVYXhG7MPH9V9fYccwkQ1ziNkxTzidj z9ihhuy1X0fncJincwAkjqXPsqCzcX5w3GYJ11KxAUad6fNX9M8jqm/hD6GEJQn3c vn7fjc5gu/4PivjDv3I8krZKepxtzMJqKAmaot59TvVDh3/g02Ptul3H71ENxXvOQ SHJnwVPUqhTjN+BJUQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MGyxX-1v0oLQ3qlP-00DX6K; Mon, 06 Oct 2025 00:25:32 +0200 From: Armin Wolf To: rafael@kernel.org, lenb@kernel.org Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/6] ACPI: fan: Add hwmon notification support Date: Mon, 6 Oct 2025 00:25:12 +0200 Message-Id: <20251005222513.7794-6-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251005222513.7794-1-W_Armin@gmx.de> References: <20251005222513.7794-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Cgyzx88MbDOoHeHKsaqQoR5KXXihNpoAORlzvyTVtjzeKnpG+KW xoW13ZO6lOLlztcY7TwyIJwQ6w/kk9aUYjf3aA1brcKwr1l/MHGcG4yteTLVouGUa294YxC QJzPkD2iyuESE5EmowBILKSPfXgYtAo1U2BCTNTelHnFLn2CIVL6t+wm+En1HOP0WLQ2hEz 0ygn39FRUUGky25vjYQQA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:AWIDZv39W5w=;nRsHn975m+gctLoMO+lMLHVZszB 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 Content-Type: text/plain; charset="utf-8" The platform firmware can notify the ACPI fan device that the fan speed has changed. Relay this notification to the hwmon device if present so that userspace applications can react to it. Signed-off-by: Armin Wolf --- drivers/acpi/fan.h | 5 +++++ drivers/acpi/fan_core.c | 1 + drivers/acpi/fan_hwmon.c | 15 +++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/acpi/fan.h b/drivers/acpi/fan.h index 0d73433c3889..dcc1ad3118ff 100644 --- a/drivers/acpi/fan.h +++ b/drivers/acpi/fan.h @@ -56,6 +56,9 @@ struct acpi_fan { struct acpi_fan_fif fif; struct acpi_fan_fps *fps; int fps_count; +#if IS_REACHABLE(CONFIG_HWMON) + struct device *hdev; +#endif struct thermal_cooling_device *cdev; struct device_attribute fst_speed; struct device_attribute fine_grain_control; @@ -99,8 +102,10 @@ void acpi_fan_delete_attributes(struct acpi_device *dev= ice); =20 #if IS_REACHABLE(CONFIG_HWMON) int devm_acpi_fan_create_hwmon(struct device *dev); +void acpi_fan_notify_hwmon(struct device *dev); #else static inline int devm_acpi_fan_create_hwmon(struct device *dev) { return = 0; }; +static inline void acpi_fan_notify_hwmon(struct device *dev) { }; #endif =20 #endif diff --git a/drivers/acpi/fan_core.c b/drivers/acpi/fan_core.c index 545b490d624e..3dbd22bc3a48 100644 --- a/drivers/acpi/fan_core.c +++ b/drivers/acpi/fan_core.c @@ -326,6 +326,7 @@ static void acpi_fan_notify_handler(acpi_handle handle,= u32 event, void *context if (ret < 0) dev_err(dev, "Error retrieving current fan status: %d\n", ret); =20 + acpi_fan_notify_hwmon(dev); break; default: dev_dbg(dev, "Unsupported ACPI notification 0x%x\n", event); diff --git a/drivers/acpi/fan_hwmon.c b/drivers/acpi/fan_hwmon.c index 47a02ef5a606..d3374f8f524b 100644 --- a/drivers/acpi/fan_hwmon.c +++ b/drivers/acpi/fan_hwmon.c @@ -162,12 +162,19 @@ static const struct hwmon_chip_info acpi_fan_hwmon_ch= ip_info =3D { .info =3D acpi_fan_hwmon_info, }; =20 +void acpi_fan_notify_hwmon(struct device *dev) +{ + struct acpi_fan *fan =3D dev_get_drvdata(dev); + + hwmon_notify_event(fan->hdev, hwmon_fan, hwmon_fan_input, 0); +} + int devm_acpi_fan_create_hwmon(struct device *dev) { struct acpi_fan *fan =3D dev_get_drvdata(dev); - struct device *hdev; =20 - hdev =3D devm_hwmon_device_register_with_info(dev, "acpi_fan", fan, &acpi= _fan_hwmon_chip_info, - NULL); - return PTR_ERR_OR_ZERO(hdev); + fan->hdev =3D devm_hwmon_device_register_with_info(dev, "acpi_fan", fan, + &acpi_fan_hwmon_chip_info, NULL); + + return PTR_ERR_OR_ZERO(fan->hdev); } --=20 2.39.5 From nobody Wed Dec 17 19:31:55 2025 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 411D4257437; Sun, 5 Oct 2025 22:25:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703141; cv=none; b=VENE3FoaFrXYScR847OimdbBc+emZTMv6V4gRi+0ar8wJGSiirE6DZcEgMZoNjJt0/QTQNDubFCFBCzZ/NP+kHmInBfubyil8d+lmcmpj7WBIcmZmsvTEUoJkZOkTAEK/ZsuQLAy8IWKZgGfGS266q2gbPGbIe0bv3miJ3M4lwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759703141; c=relaxed/simple; bh=JmGoKzre6jzusEgmQMrgmGJhIFX0IjcQpWCLECVV4Sc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ny0fRW98Bux4REIEuXl8TuxEQtZOermLdzpXqM24YhhcWkt6whpeqTme5TsOBZ1G015gWhZzw/43wD36AOsRJjl4W9ZxpZCBqq96kHBV4XnSIzeVuS2/jLTxhF2mfSkRu6dzwCC0wV+lGSEDv7pl8kvp3CxpjFXdHV8Cij6VzbE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=LaF+AJWR; arc=none smtp.client-ip=212.227.17.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="LaF+AJWR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1759703133; x=1760307933; i=w_armin@gmx.de; bh=fC59uYsOztFbVFpJEgpmo6LZu0JgT49QtBOmgLhNzJU=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=LaF+AJWRYcHlnVeQ/C+H3egbDl6Xxoovrd8X/YL/fc1OoEKVzpxUXmxcU+fMZGTq 2oq4kNSsfXVXVF5gGpD2QFWgrF4UP1OmqU4UypAJn1mNStL7yb1HWbV7RkZyFL/K3 h3MRYQIZrJ/9JYbkO3dnqAZviCwFXpO3f746kWh+SMrtdXZq+rPHdtRYL/XQ/iciA DlbXsbB0rJ+1aGlUhXf0lujal2WQxjQDjwmXcf+ZtwqCUZikItca1ZHcwWdwZeXhu dwhDq1t7KoSyHcBMKkayqE0icp0i2jUVlqhNdy2zJH/SZOoyJMATV3oGuDt71Ryp+ Qozn9/SUnnxBmwnDrg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from mx-amd-b650.fritz.box ([93.202.247.91]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Md6R1-1uVvZO0g7f-00oswS; Mon, 06 Oct 2025 00:25:33 +0200 From: Armin Wolf To: rafael@kernel.org, lenb@kernel.org Cc: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 6/6] ACPI: fan: Add support for Microsoft fan extensions Date: Mon, 6 Oct 2025 00:25:13 +0200 Message-Id: <20251005222513.7794-7-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251005222513.7794-1-W_Armin@gmx.de> References: <20251005222513.7794-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:KtLN6kxp8cpMsndId500y6L4GBS9nD5H1RxOlI5+WPiGFVeYnci zaf0cp1R29abzGHRVWrbiZkybihpxKtl8dt/R8lMCUDBaRmzuJPGX8r0ZjnNo6Cp/NwD3hP 0BQL2yikapaelsTIP7k8L52+oQZ2bHfUwJIpDIfjBdGS5BstjgZOvsFcfePt+Aqnz9UjgB1 BuR/jZPvsfzmrSmEI7BSw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:kmrJ7VIy5Q0=;bCw7/MwXQw+yC85nhuBU9iI0SUU LwboWiSU0ULYqUDAzpzyUL6SrOFQRbw1PFEAFiS9J1oqQRX40Mka8Tuyn3TByeXQiNG4gXqYW HHRM66aW9ATyb9rN16amqjD1iI0TAlb6MkkYcGvYUBCEfchKx9b/81EvKCVZsXA3SlYcx+f2B DLFuP2x8B8Ns1dTtoWOuIptjU38+KA5p3yzV2c17uxuk37SmEZzv17xQXeVLMwfxos15a7w9b RlCo07vEnY7FETZkKUuh5sLCTv05m3YnWYpDqFvEhG6uPmwLCETD7C7h0LkmaYxx5sy4EfKVj vmq9UH52QK36XgQ831yjoi5AJtvE/iI685mP/X7fvUTvKZx/JlU1+fpQ8dA8z147ATZ2N2FWQ 3+q3/z6g5zuhuBX1Gjl6Dyhz1yAYwV6yPWFCg0obmpcpa0Jllcg94okjAO0LqN4O2LYxn7GIb AI9Mz02/WugTlfw2JA9jvx3q48l9sjJmDVpM0Ahhkjdi5ZMJFlwaLTXtYmEynRl89pWriut8V 8cSdavODjeGNAwmHhny8Hii0vhjJ8Py6tytErqaXThfsRRbCkWGlpApDlXYILqst1QZVEH0EW +Gk5DCQTxD1R/cQTleaa3AT8N/vSv8iMOFnunGktGUVVWw5HiZ3ciNQaQskcEDfAfgLshB1BV Day/jsiez/cONYRgHWUZV16CP42ZivbA5wbGrCrea9FymK6ut8hjIQL0+UAqupPNUtUC3QxHZ mqxEbZgI9qarK4Oe7zIeGZlvtmzrKtxtIeZKxTqFXwZqYy9NzTsEwesAfZjc9nth9DWJ6ns9b oh1eosd6JcuBi1xJi+Y6GFwgx8+1PIV+7vbpcNkRAoqhcrcYXSt4wVeGDbmyor1Pq8Aztjk2n zEkhRraY2nS/uu90MOgN0ZaHO1Ni69m8p46kBmnC4AyLt8B3K66/HV1guo8rPGmwmobovL6ZB XJTlyDwjTjtW45TeCNp4z+3REU4ZxaKym8DvIwUQTvdXSXl0HILphY+7FoEkKAXCNlMgzX+Ql RTIV3vSPyoZcMu79FoDWrS/Ckz5W0Q37EUqbNcH19j2uB7/Slje3i98dltUfa9M+DYM5HKank ZEMy8mCU0ua3rLW95nVD+k3iTEMvRrXrRga9fi3ei/ttKdGQIwH45yn34BJk65hjXhaJweTT6 lYHSonk2WGVoL/5eKU02Wyuj7ZSqRCEutG9yMsVEMuabozK9w06J9JujzA1cfcYM3xAkF6AkL qaMIElOsx0ZVJOYIHrPzBvc3oVrxjB6FNcZe+THZR9b2itnn9pg7v8bQ0Xzp3PQfUBqDerazi F9t6gQXUEM/X2h8nfrA9q3mDHMpmbLPlK645wt808aeRjs1lC7yMXdfV830acKF/9MxJ5BUth rWz2nQxGUqWi9D4FFC1JYncw0+1E1BDNkSLVg1oQxOEkWAFvV/vj/gVe7o/Iu9AJO7zZzTFL6 z3QjKfzWBXNZXJ/HwULUgqiCxqHaOMkwV/8KaZYuoRMqICzCm0ftAo26zdU0LdcF6+iP7GJNR BROwo35NHPFIlUHsdQWxD9GrClegvjBoMzd7yzkHpM5EIi8Vcwwv+BLuqtLRUZT7Njc1kta2x XArKmLYgGuepQlchiVYt5EMkd8oK7JV54/O1062ZpGU0kC8aqT7i0w/HPv86qJSnDTpCUpLVV 1Qg1OJj9xbqV97CGIXrRCjJ/DAq2nvQdntA3vhxDy2CiWU1mJJ1xiyEBRCqeQUbGXsiG1k0Uf dFaNut5c88oyuPAVkJAAriGPj6pckRcpWV/VMmLKrUblS3M8ucWsFnZOACWcfdKRpkT5nULmz frnUQBcXi/S4yO+MGBfNJexfu4Reh1b+V8ugrvZmJxaco1jujffQFOu4ScCu5Mf+UsKwCnvAQ XwEfRpcPT/KUP8kCF7+46BFWeQBoHhuXrjiy2/YYQbKVBg/e6/kT0XntKilamlRQsJEV7ZweS Vblo5jtO3lnsUf/rNSGPy0CkObXJx5HAloMu53UyoIM3BufNvrGecb1e2sX6NZ51hzUivH5WD asbA5jWMd8pUeZkZL2rT9kBPlyGT8k7itwuj0I+1mAL0RMqnMF3MtVGTAP3NQWtVjU5QXB8uX dhb6udDPVSggndD6B/MuM3mKrk1Cs+1DTHLBltzvqf8r6PCAwb3mA6zaoGH90xs2pHEq2f87R lo++EIBa6AsQgMmmkDNDtMIpy70KlIks81ZyTaOXIv4NkacKDGXGUIuD/wXhCMOmVPQ5G9NiN 7QcgJrCcPDw+fVIQRVVUoaAg32tRTQVv9BD4Ur3+bvn1dsjlVli07O8EsxDgGnNTtCwyLZUXt Kuq9Kl32uvz2Luzd38+AjC51LRDhSHHCT+lpHgZkOGkKQni0ME3BGKgeieTDsUabfTXeW8TAq zv32H9fNe0MJ10tNG7OXroFp23KtjrJ36CONLJn5ZMcQ+LZ8AyEXr99Yf/oc6fmB/husRxsI6 7oosPCKmmHqodUkBy8h9vsUyMlWmpBfoajYvNhOoBFhAxCq75gvetKTXH6omSLMmMunvvBf0R YKtR9LmWiJa2ZC6HtFBWkoF8/F7oVKG7+COCDg/OfZ8EC7fzu6MxH62z6d+4HefchhmTKDLt5 84Z89A81+1CZN7vUJokywSmuLi4ApicJ1VW0nSy7EMvpVshKnnV6DObauzpSBE1Rk4W6MwBHX ehbk6UbQXKLFmPPCxqaA93G27i7rpYp0oMTI1XK33zAgFd0HbCmulmMIyhG3QoazeRaEqlDXZ otoVLuWCT5+pikzEErKYZgzGNjblfpNq6pe9//rCx45S9OzRpTQN85wvUcDfgPZWhMj2etCJS 9Bfu7iArXEYrr4m5YruRX5o81KLVmTWDbz5Cz3X8fN+a4rNnVHoXvnNnV/WH+vbZ09j6Q+c2l g/KzuftnBUtEkE/wtCLb6qmmT4stPhh1lA+c8tnH8+87nYfLpQiiWVaoYWvgWhu+CKohQUOAt RixRsWCemmK48EQz2aW7dzvdFbca4Uv4FaOAv9TUnHHOEajixiHUeJsP8cCAHONm3OCZP+Cbu ULR302C4uagYZnyexrUkEbRDAbGCZbMnzblG6hhHn40oFZ9gun8KTTW+vQAzmlSkykwugPW0Y CEuz9YMYIz8O5jV438cZl7zjihW866iex0+PmUaMerxniJcHIUUop26EX0hEhklID/d6RnXoj l2H5b3YzJG6nCjLFPPi0Cp3s/jrPkMiRhfgi5Xy5PFHqe/fO8M/lZS07w6VG9TBgkESsLQKSx HBdkmIFkVaaLvA9Run5bCflKOe27BGZ+udiON4BJj4SsfMDnDpQ7PErBBmR4e0ez8WnhyvKlc 0GaUF6f4TA/4QZd6K5yrBu+xlfhKdvNqpa3cBH1ZOf9CBFnPjs72nFFB+KcdotiLXqegttVDi RMuXHyOuRxQe4FATuHFhHYNYJgQ/7SHWuPa9zFttKrEtZ9JARByqTwlM+CEeIrDwV0oYjPj9p nwVSwdc0JJCDpgmU76Mo2Fk4+aGt+SjVlPvAEqRIdGJWn+pTz1LN4Czm4KTiX/TB1xvO2P/M4 xli6sMdQYE0xT1Y9rQmEOwovSN/Eb/QRMIk9kSSc2kkbtd9LrYm2xCa7r9v1xC34FP15YinRW 3RRuMowjDQgBX94pvv9YS/OMESaQaYD2Qn2PJr4vA3GIjwucHf8FUQdV4YwbZVPQd0nG5TgB8 MsF7sTWnIwu0u/LsL4Y5bFBrYq87kg/3nuIUoHcqa0ReqbOs6gsr5TplDfkGPrQfeey9FoJSF O7bjkn2DQRb8c59TX9douwWxeHBjWYrNY5Irx7rNZRCKZt7I6IycKmBY60oZE6zYLp2E6LVCN PDbvxkH5g/aDWyPhmjf5of+IFu1ZyU1sFzS5DLvkTjCV0adjS4dR+pPnXijs8CWI5L1SZ8C9t 6m3eIG0lAo7Nsa6HipXGzeKIy2XDYfJ9swzp9LQBWIUDFvDtXSrJrQIVfPQRP261RJ3Dwptyk kSqFA+eHFWF0haNQoFK8LBC7pdLxU31YnZJ4M3Gq2d6JNPylv/qSVnLnw2fgC2BT2LbrSAfLn cN/942FOl0fSclTwwYJz/3G+8UB41K38JsWQ3joBMqktFrQa0kNC6TcIjTUgv/RJlYh9RXTDr ezTIExZwRYjfVqD+gvzDTLFTK6FjNg+IDjboOuCfBFg4ZTCGMu/vQgtn9UNroZEJu2QYRQf3R ZYgM7GYUM0fFFJTFp7KrUA4ogIDtGeJGJIrN3L5l906WdzTXeIa5r3bMAnrChbJ/XNOPtUOmo kuHXaDKRa2dRKh6T+v4zqPodIBEEMxCI1rOBwJGZtHPPpjCbRpGBlNXZ6uPIplc5kz6inmXuK d2zVIH78ir7z9Txu4Ay6fWFdecOz0Il+nT81JdmVywD7MZk6aOjJecYW1SsltMlK8V1CRSXKJ gUJu7WP7CKy8r959eWiDSG8NZfKQSPQoaWnGGl5XcKUeHow5P4haNlDhEdeYQlyAUzRyTpFSj punvymud+bOk7qleYLEyJS31Cnr1DSiRfd+HYXa4GLkTbMwlwZODakk1ZhO1jX6Gbz3nuUE// oP3ZIsGLIfuBz+QESzgTlUx/uEcTAdOg5eTUVBGokLGLXCJv2HMaYru6hdViKMU8f7N+wyxbb JieO/gXBtQNWAZoP6hxz7+UVaS9BhsVHXnXIr//uC42zHq9jLAiLRQSgKgZ+9nBJGkbuk6HOg yI5o8HiDp9RmaN3ALRPn0yMljTAUNUSjsFDL8Ws3372NzCM0oBI1Qc2qT/qO2JjDD0v7eAoID yqDzo4wZE7WvUx7/Ji4FQNlo0e4TxFvaQLoaH6DhEgDFYVeoyJst8HULAY63mfcBg4aiPBEfB h03eE8sVFuzpUip0ih2Uktbl8N8pm7R9nfNkJUurIwgqX9EQtVk66poogFRkE3K1lgEDEMfNS z9cqaP6by796zPar6aRfW6S1/88V3lqS6qgjk1g8POuGd2vaG/3V+emnb22f6b6kLBoJPNPBk gvM2seHo6McwnxwnAvjsLZbjVavbHasmaZuH/Asvi/vs6JfxuRLLRdUP1Zg9rE0MKtJFXowwx 9121qppmdfm86DR4TXvXhZD3yA0mEtDQSEGoIObvAj6lMJiJQbeVdQAG2/MrK5NbpwCx+UMqH HjIpUBut5EQRcQ+m2RN/PIJq5al/Q9XhIrkgVGydN77i+cBoC+CHzO2by2Jw== Content-Type: text/plain; charset="utf-8" Microsoft has designed a set of extensions for the ACPI fan device allowing the OS to specify a set of fan speed trip points. The platform firmware will then notify the ACPI fan device when one of the trip points is triggered. Unfortunatly, some device manufacturers (like HP) blindly assume that the OS will use said extensions and thus only update the values returned by the _FST control method when receiving such a notification. As a result the ACPI fan driver is currently unusable on such machines, always reporting a constant value. Fix this by adding support for the Microsoft extensions. During probe and when resuming from suspend the driver will attempt to trigger an initial notification that will update the values returned by _FST. Said trip points will be updated each time a notification is received from the platform firmware to ensure that the values returned by the _FST control method are updated. Closes: https://github.com/lm-sensors/lm-sensors/issues/506 Signed-off-by: Armin Wolf --- drivers/acpi/fan.h | 2 + drivers/acpi/fan_core.c | 176 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 176 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/fan.h b/drivers/acpi/fan.h index dcc1ad3118ff..f85f9a0fbfcd 100644 --- a/drivers/acpi/fan.h +++ b/drivers/acpi/fan.h @@ -56,6 +56,8 @@ struct acpi_fan { struct acpi_fan_fif fif; struct acpi_fan_fps *fps; int fps_count; + /* A value of 0 means that trippoint-related functions are not supported = */ + u32 fan_trip_granularity; #if IS_REACHABLE(CONFIG_HWMON) struct device *hdev; #endif diff --git a/drivers/acpi/fan_core.c b/drivers/acpi/fan_core.c index 3dbd22bc3a48..ca8c291ac8cc 100644 --- a/drivers/acpi/fan_core.c +++ b/drivers/acpi/fan_core.c @@ -7,11 +7,16 @@ * Copyright (C) 2022 Intel Corporation. All rights reserved. */ =20 +#include #include +#include +#include +#include #include #include #include #include +#include #include #include #include @@ -21,6 +26,20 @@ =20 #define ACPI_FAN_NOTIFY_STATE_CHANGED 0x80 =20 +static const guid_t acpi_fan_microsoft_guid =3D GUID_INIT(0xA7611840, 0x99= FE, 0x41AE, 0xA4, 0x88, + 0x35, 0xC7, 0x59, 0x26, 0xC8, 0xEB); +#define ACPI_FAN_DSM_GET_TRIP_POINT_GRANULARITY 1 +#define ACPI_FAN_DSM_SET_TRIP_POINTS 2 +#define ACPI_FAN_DSM_GET_OPERATING_RANGES 3 + +/* + * Ensures that fans with a very low trip point granularity + * do not send too many notifications. + */ +static uint min_trip_distance =3D 100; +module_param(min_trip_distance, uint, 0); +MODULE_PARM_DESC(min_trip_distance, "Minimum distance between fan speed tr= ip points in RPM"); + static const struct acpi_device_id fan_device_ids[] =3D { ACPI_FAN_DEVICE_IDS, {"", 0}, @@ -310,6 +329,138 @@ static int acpi_fan_get_fps(struct acpi_device *devic= e) return status; } =20 +static int acpi_fan_dsm_init(struct device *dev) +{ + union acpi_object dummy =3D { + .package =3D { + .type =3D ACPI_TYPE_PACKAGE, + .count =3D 0, + .elements =3D NULL, + }, + }; + struct acpi_fan *fan =3D dev_get_drvdata(dev); + union acpi_object *obj; + int ret =3D 0; + + if (!acpi_check_dsm(fan->handle, &acpi_fan_microsoft_guid, 0, + BIT(ACPI_FAN_DSM_GET_TRIP_POINT_GRANULARITY) | + BIT(ACPI_FAN_DSM_SET_TRIP_POINTS))) + return 0; + + dev_info(dev, "Using Microsoft fan extensions\n"); + + obj =3D acpi_evaluate_dsm(fan->handle, &acpi_fan_microsoft_guid, 0, + ACPI_FAN_DSM_GET_TRIP_POINT_GRANULARITY, &dummy); + if (!obj) + return -EIO; + + if (obj->type !=3D ACPI_TYPE_INTEGER) { + ret =3D -EPROTO; + goto out_free; + } + + if (obj->integer.value > U32_MAX) { + ret =3D -EOVERFLOW; + goto out_free; + } + + fan->fan_trip_granularity =3D obj->integer.value; + +out_free: + kfree(obj); + + return ret; +} + +static int acpi_fan_dsm_set_trip_points(struct device *dev, u64 upper, u64= lower) +{ + union acpi_object args[2] =3D { + { + .integer =3D { + .type =3D ACPI_TYPE_INTEGER, + .value =3D lower, + }, + }, + { + .integer =3D { + .type =3D ACPI_TYPE_INTEGER, + .value =3D upper, + }, + }, + }; + struct acpi_fan *fan =3D dev_get_drvdata(dev); + union acpi_object in =3D { + .package =3D { + .type =3D ACPI_TYPE_PACKAGE, + .count =3D ARRAY_SIZE(args), + .elements =3D args, + }, + }; + union acpi_object *obj; + + obj =3D acpi_evaluate_dsm(fan->handle, &acpi_fan_microsoft_guid, 0, + ACPI_FAN_DSM_SET_TRIP_POINTS, &in); + kfree(obj); + + return 0; +} + +static int acpi_fan_dsm_start(struct device *dev) +{ + struct acpi_fan *fan =3D dev_get_drvdata(dev); + int ret; + + if (!fan->fan_trip_granularity) + return 0; + + /* + * Some firmware implementations only update the values returned by the + * _FST control method when a notification is received. This usually works + * with Microsoft Windows as setting up trip points will keep triggering + * said notifications, but will cause issues when using _FST without the + * Microsoft-specific trip point extension. + * + * Because of this we have to ensure that an initial notification is trig= gered + * to start the cycle of trip points updates. We achive this by setting t= he trip + * points sequencially to two separate ranges. As by the Microsoft specif= ication + * the firmware should trigger a notification immediately if the fan spee= d is outside + * of the trip point range. This _should_ result in at least one notifica= tion as both + * ranges do not overlap, meaning that the current fan speed needs to be = outside of + * at least one range. + */ + ret =3D acpi_fan_dsm_set_trip_points(dev, fan->fan_trip_granularity, 0); + if (ret < 0) + return ret; + + return acpi_fan_dsm_set_trip_points(dev, fan->fan_trip_granularity * 3, + fan->fan_trip_granularity * 2); +} + +static int acpi_fan_dsm_update_trips_points(struct device *dev, struct acp= i_fan_fst *fst) +{ + struct acpi_fan *fan =3D dev_get_drvdata(dev); + u64 upper, lower; + + if (!fan->fan_trip_granularity) + return 0; + + if (!acpi_fan_speed_valid(fst->speed)) + return -EINVAL; + + upper =3D roundup_u64(fst->speed + min_trip_distance, fan->fan_trip_granu= larity); + if (fst->speed <=3D min_trip_distance) { + lower =3D 0; + } else { + /* + * Valid fan speed values cannot be larger than 32 bit, so + * we can safely assume that no overflow will happen here. + */ + lower =3D rounddown((u32)fst->speed - min_trip_distance, fan->fan_trip_g= ranularity); + } + + return acpi_fan_dsm_set_trip_points(dev, upper, lower); +} + static void acpi_fan_notify_handler(acpi_handle handle, u32 event, void *c= ontext) { struct device *dev =3D context; @@ -323,8 +474,13 @@ static void acpi_fan_notify_handler(acpi_handle handle= , u32 event, void *context * receive an ACPI event indicating that the fan state has changed. */ ret =3D acpi_fan_get_fst(handle, &fst); - if (ret < 0) + if (ret < 0) { dev_err(dev, "Error retrieving current fan status: %d\n", ret); + } else { + ret =3D acpi_fan_dsm_update_trips_points(dev, &fst); + if (ret < 0) + dev_err(dev, "Failed to update trip points: %d\n", ret); + } =20 acpi_fan_notify_hwmon(dev); break; @@ -393,6 +549,10 @@ static int acpi_fan_probe(struct platform_device *pdev) } =20 if (fan->has_fst) { + result =3D acpi_fan_dsm_init(&pdev->dev); + if (result) + return result; + result =3D devm_acpi_fan_create_hwmon(&pdev->dev); if (result) return result; @@ -401,6 +561,12 @@ static int acpi_fan_probe(struct platform_device *pdev) if (result) return result; =20 + result =3D acpi_fan_dsm_start(&pdev->dev); + if (result) { + dev_err(&pdev->dev, "Failed to start Microsoft fan extensions\n"); + return result; + } + result =3D acpi_fan_create_attributes(device); if (result) return result; @@ -486,8 +652,14 @@ static int acpi_fan_suspend(struct device *dev) =20 static int acpi_fan_resume(struct device *dev) { - int result; struct acpi_fan *fan =3D dev_get_drvdata(dev); + int result; + + if (fan->has_fst) { + result =3D acpi_fan_dsm_start(dev); + if (result) + dev_err(dev, "Failed to start Microsoft fan extensions: %d\n", result); + } =20 if (fan->acpi4) return 0; --=20 2.39.5