From nobody Sat Feb 7 06:14:42 2026 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (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 C674D285050 for ; Fri, 23 Jan 2026 18:22:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192538; cv=none; b=FNrs77GcI/G6xRUjWLPwYHCdYqdUPixV0lK7WIqrVBYtJhDmNzKNNEvwHevbXdUVC+XpeRTiOOs7EAbd+QUDrywqiu+LedPiOHvwiVEWCBAEuyKzhTYrmdBwZmHHbwXzmaJx0ESiUXcNs6AYDHVnhBkgXmVbxENi/pozOsMbmMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192538; c=relaxed/simple; bh=vKtkU7K3RqQCKIfjSH/DNJHpr6zN6ZGQr3Ky4UrXBdQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bP5DXNF8PyE5w0Fx6Wtu92lk3drRZt8nJGrTLEe12KSBOKRdRuPuC13q0+VJOAC39As3HWi6CqCzfuTkL82v0N7nkSEcbemb1r2T+lmNtZVFJXp2J7p4R5wPqL+Q2InL2nQlMyn8hqB0hMZ4bZlLm9pl6v0BzW33sBMEgAX56g4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FRgL6++q; arc=none smtp.client-ip=209.85.210.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net 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="FRgL6++q" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-823081bb15fso1316698b3a.3 for ; Fri, 23 Jan 2026 10:22:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769192536; x=1769797336; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=P7PAn6tvHTwmV1TdQFHJFHPiY8QmPdWd/ER1+pyJrOM=; b=FRgL6++qa09KXXcxBLTTqE6V/ZVmsZe3IUjrEO9BrwE/i/bsKc8Yhzrm2n8C9C639G Oi+a/0RLHzlIeE2/1MgkGrfn6WgPDBLlTW/mP0cvsz1OJPhp/aTRhYFxPUz0mvaK3U3h NBGZ/NTJ361FK5Li73zRzWxAkdgnhAGqd3ek1vfuApXXZ9sGMcO3bEQ1yFmX/gDHGUID utdVIJjxoO3jg4tZipw3+Q1HvH03EJ2cPcZTo9pviGyyM1PBWEv3FKCBWg2hJuFIrD18 UiX2y51T7AwnzMaUDxKyvp+K7FhCK6sHgR7iGRzAvbDezA4v285S3zhxmxap2CYP9Bnp arJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769192536; x=1769797336; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=P7PAn6tvHTwmV1TdQFHJFHPiY8QmPdWd/ER1+pyJrOM=; b=fmIkOSsjxlfpp6T/HdYfTD4xYzrs9W5x8UOuokMDOLHWDhw298nUpxgacJ6qE3HKXW k2y4LooZM3e0p1zSElUnddAwpwb5bVyzlJUdz4JWPG/JUVPL6lU0/L35QhocdxGgzyu8 vWlXMOT72VwFAzM+y2tqf4WpsOjbDhSNJ3c34RzKivMulwXY96LdsOQIE572Wu3mtwqR MiploaeNMvW3g930t2upM5ANB4p0r9i9a55zvenkhpPXdRiLy1/lFcsgblq3I2+lgx0D jlSd7GOXa53ZcsDgEi76Gw7JDhrmP/KwIchtbm8z9TDrsLzz1Y/7c+rDXdC8FnhkD3i0 jqzQ== X-Forwarded-Encrypted: i=1; AJvYcCXmAos+LKuXhBj6VCRacvzBzG8Q8K5VbUeToEKK7PHEx3OZxMGh0Sz3C0FUTEe7/lTtTfOenEnq1aq2qrI=@vger.kernel.org X-Gm-Message-State: AOJu0YykEl8ViLUeo+Ceat4YB/oos7R3EtezjptUBkdsCrE+RiS848qt GvpnYE6Y2smwAn5X+jtGyIWrU9G5p7YYWHddZlK4MJ6m/p2+aA8ruCil X-Gm-Gg: AZuq6aIQ6Dv/aQvvcUV5J0kqWqTUR74CdyfMziLaODd2jrIFWT8Dc5U7RPV5QPSvUre QXEHptou5CDAQNk+BDODy0Fc3npCK/WkJbbBy1+asqXlplaUK6uSArpfWccUPkTOTan+d8kTkGc lDNR+4gshvcfRW6kD45wfsy8+vJ//BjnSDyigG05+MO5WNjzc4P95OxBPcgG/ouG0a856UHTKLh ETYFUJhtx5MfWqOZw0Zmr4rEv6ZCzOZTK+gsEPYaPShBe28gLQuQZkBOYLJpSmPjDL8bY9MtlrL 1H/KM4TUOM/V0ZTN6/+YG5WCEMuRw5jlG7kWZRzVqCRg+CDLV+YS4aBoMQJAtwA+g9/8GwI0DH5 oMTcm8KErJ784jXG+jc1IGrFJl2l6G4b28+FHzk5T4qMd/QpdsbhNLq0hfxylFLEwQipWfhdPNn hy4zu17EpAoSk5DcJtJdNVCnun X-Received: by 2002:a05:6a00:2b88:b0:823:1094:2458 with SMTP id d2e1a72fcca58-82317ad74ecmr2979756b3a.0.1769192536111; Fri, 23 Jan 2026 10:22:16 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:da43:aeff:fecc:bfd5]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82318771569sm2817157b3a.63.2026.01.23.10.22.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 10:22:15 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: linux-hwmon@vger.kernel.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Jaroslav Pulchart , "Rafael J . Wysocki" , lihuisong , Guenter Roeck Subject: [PATCH RFT 1/5] hwmon: Handle attribute visibility evaluation in device core Date: Fri, 23 Jan 2026 10:22:04 -0800 Message-ID: <20260123182208.2229670-2-linux@roeck-us.net> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260123182208.2229670-1-linux@roeck-us.net> References: <20260123182208.2229670-1-linux@roeck-us.net> 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 Content-Type: text/plain; charset="utf-8" In preparation for supporting sysfs attribute updates, move attribute visibility evaluation into device core. Signed-off-by: Guenter Roeck --- drivers/hwmon/hwmon.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index 0b4bdcd33c7b..9e9ad42b6d7d 100644 --- a/drivers/hwmon/hwmon.c +++ b/drivers/hwmon/hwmon.c @@ -523,10 +523,12 @@ static struct attribute *hwmon_genattr(const void *dr= vdata, const char *name; bool is_string =3D is_string_attr(type, attr); =20 + /* + * Basic mode sanity check. This is less than perfect since + * attribute visibility and with it the mode can change during + * runtime, but it is the best we can do. + */ mode =3D hwmon_is_visible(ops, drvdata, type, attr, index); - if (!mode) - return ERR_PTR(-ENOENT); - if ((mode & 0444) && ((is_string && !ops->read_string) || (!is_string && !ops->read))) return ERR_PTR(-EINVAL); @@ -557,7 +559,7 @@ static struct attribute *hwmon_genattr(const void *drvd= ata, a =3D &dattr->attr; sysfs_attr_init(a); a->name =3D name; - a->mode =3D mode; + a->mode =3D ops->write ? 0644 : 0444; /* updated when attributes are gene= rated */ =20 return a; } @@ -896,6 +898,17 @@ __hwmon_create_attrs(const void *drvdata, const struct= hwmon_chip_info *chip) return attrs; } =20 +static umode_t hwmon_kobj_is_visible(struct kobject *kobj, struct attribut= e *attr, int n) +{ + struct device_attribute *dattr =3D to_dev_attr(attr); + struct hwmon_device_attribute *hattr =3D to_hwmon_attr(dattr); + struct device *dev =3D kobj_to_dev(kobj); + void *drvdata =3D dev_get_drvdata(dev); + + return hwmon_is_visible(hattr->ops, drvdata, hattr->type, hattr->attr, + hattr->index); +} + static struct device * __hwmon_device_register(struct device *dev, const char *name, void *drvdat= a, const struct hwmon_chip_info *chip, @@ -946,6 +959,7 @@ __hwmon_device_register(struct device *dev, const char = *name, void *drvdata, } =20 hwdev->group.attrs =3D attrs; + hwdev->group.is_visible =3D hwmon_kobj_is_visible; ngroups =3D 0; hwdev->groups[ngroups++] =3D &hwdev->group; =20 --=20 2.45.2 From nobody Sat Feb 7 06:14:42 2026 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (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 8DE8A23F424 for ; Fri, 23 Jan 2026 18:22:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192539; cv=none; b=fxFnwjQwAMvC2LZVXFM00b51RJifX4/yZSWP+BNBjMaAzu3054oACzvns4OOKEjqdvt21HNuVpVbzJ566oDBkmLQyDEbKtk2ghf4AoWTvPIQzdNOYo3fF7kLlt0Js8pSlvoKGB0l4wYWKoh4tewAlwxVnBIkJ8T0EK0ME4w+n9s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192539; c=relaxed/simple; bh=u8UanGH828x/wa/TE/D0ClcvT3TQ3+GCvwMRIjSql6s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jmlQ9OsrPnMV66+CUeMTsBXJvlQgFnWuYRwQv89PiS3Xr3f7l3MWlKk4Qh9mmp/ckqKNvJ2g5wHcDcWd6G5174vaHQwM6UobXoKo594efLZ2ASq4KIlHtpd5fi5eGMq1ADteZuTp/0RdUCCv+688t2JtkapzsbXZdfw9jRDWuhU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VnMpkFdt; arc=none smtp.client-ip=209.85.210.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net 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="VnMpkFdt" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-81dbc0a99d2so1312370b3a.1 for ; Fri, 23 Jan 2026 10:22:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769192538; x=1769797338; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=+wgD+Lhq7HXYqBeKTh5vKd8poAoMtNS0Hz8zr8Bfuzs=; b=VnMpkFdtCCkWqz8gI1uZPEWjtKAsIA6IJwXIourWANLuXwEiIUbWXAHjB3jG/S3u4z KoXWHwShLxSW9nVJAoksvRQbdMATcUD/Hie87RS/YeGvvzlQZ3TXf2EhGRA58WYEkvbv z5tDQlXAOjDtG08rGqjDR4gHI5ar0UjpEag8r8vzRX9fmX8JX8kG2mkTzDGYAKdS5H5p MmH/43Q7GsAHiF3gRREtuDKjbYc9oaCKqnXmlTTUyA8Hzx3JxWZmVUY1dPv/HUQaD1va DYVNadZ1WVwLDImV8YMppT3nBCnfODj0T4n58xWbZ+Y7SqFHUT6QSyUJXoh6VgrwyNfA S06A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769192538; x=1769797338; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+wgD+Lhq7HXYqBeKTh5vKd8poAoMtNS0Hz8zr8Bfuzs=; b=FidSpX0V3k3RBXDN6fWlamyvGVLR7gyqAwNv9169gysBsJA3pRn3V6hRjVAixvJtJ4 3JGWhCjdl2+9c4Dn62oq7DCZmvqt6Ut++Pq+zGh/9cdxdG5nICcg74r/z4hVr2CxP8Yk JjQpUcc9sFI5XbqSToVTYvfXUDsgvkzoH38KknZ5vqJRbWMw+/r3j4LiySfn5E9hgq9Y hoyFdZLpQhQ5zxx3vhP/f9lvDWrfVcvgUbUK3A5gla/qnKbSR8cm/JOdVinlY4ussbKy 2JjYTAOvNG0LNoNpBEFo1374Weq0Qf6dNMFD2svp+QbFV1WdRJgRwrqaG4ca0DU+PQRh 8Y+w== X-Forwarded-Encrypted: i=1; AJvYcCUahd7i40+X+pXllXSJ+xdmUWo25Xa9l7eDWaTT2kLFYiXgqhYATe5dDl/js9keJ9WmTo5UTCS34QAzW3A=@vger.kernel.org X-Gm-Message-State: AOJu0YwZxcqv20f0naBDacbmg76N4K0b/WE5J891X9/sDMWIAboYbdgb zWE5V+IZnkKjqhzpee3H9cLvNLlvYB4YPUpmE9fSSfjRoF3DxHTrbPH4 X-Gm-Gg: AZuq6aK1EbBeMFfvBEZioIiYXpf7A262ghSfFxR0D3eUA3Cpr1R/Yr4KkLoipTNjsCx 3FDVvyVxnbX/AnZi5DlSCgqOmQ1r1/qJhfrsvPL6lNYmGHOWhrYxqqTQmrf+vJA9MxX+e3tQdN8 MkV9NV+/xkpJ/2LpC8BZehapE9q6XSChw6NoZVcDOVzNMRYVoiCiOCNKD689LleCZfA9ujkk7i6 mxn9daSF5kziU7mD/3zx/MzNLHUr+/6LHshrMj83UK+Es7kPOtwS8do4lBxSlxj/gIt4SiDmJUF MwOFUJVsEHTCXamqJS3juTic1bNALVXWthNpRB29wA0jQYd9BLJg1lUvcLo8G2XH/QSzGAj+6+H cVIo9TmSfupxMdSnUA+Bm42CVk1/SghpIGgJSgkbcYJkTBC13HPKbw9SuzIr0+OA2CfMBK6+6bi 8CtiYRTmEEJNZERYFDwq1qnDl/ X-Received: by 2002:a05:6a00:22d5:b0:7a2:7458:7fc8 with SMTP id d2e1a72fcca58-82317c0fbbfmr3029305b3a.13.1769192537702; Fri, 23 Jan 2026 10:22:17 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:da43:aeff:fecc:bfd5]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231871f97asm2759775b3a.40.2026.01.23.10.22.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 10:22:17 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: linux-hwmon@vger.kernel.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Jaroslav Pulchart , "Rafael J . Wysocki" , lihuisong , Guenter Roeck Subject: [PATCH RFT 2/5] hwmon: Provide helper function to find thermal zones Date: Fri, 23 Jan 2026 10:22:05 -0800 Message-ID: <20260123182208.2229670-3-linux@roeck-us.net> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260123182208.2229670-1-linux@roeck-us.net> References: <20260123182208.2229670-1-linux@roeck-us.net> 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 Content-Type: text/plain; charset="utf-8" Provide a helper function to find registered thermal zones and use it in the thermal notification function. Signed-off-by: Guenter Roeck --- drivers/hwmon/hwmon.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index 9e9ad42b6d7d..1f35285ca7a0 100644 --- a/drivers/hwmon/hwmon.c +++ b/drivers/hwmon/hwmon.c @@ -261,6 +261,21 @@ static int hwmon_thermal_add_sensor(struct device *dev= , int index) return 0; } =20 +static struct hwmon_thermal_data *hwmon_thermal_find_tz(struct device *dev= , int index) +{ + struct hwmon_device *hwdev =3D to_hwmon_device(dev); + struct hwmon_thermal_data *tzdata; + + if (!IS_ENABLED(CONFIG_THERMAL_OF)) + return NULL; + + list_for_each_entry(tzdata, &hwdev->tzdata, node) { + if (tzdata->index =3D=3D index) + return tzdata; + } + return NULL; +} + static int hwmon_thermal_register_sensors(struct device *dev) { struct hwmon_device *hwdev =3D to_hwmon_device(dev); @@ -297,18 +312,10 @@ static int hwmon_thermal_register_sensors(struct devi= ce *dev) =20 static void hwmon_thermal_notify(struct device *dev, int index) { - struct hwmon_device *hwdev =3D to_hwmon_device(dev); - struct hwmon_thermal_data *tzdata; + struct hwmon_thermal_data *tzdata =3D hwmon_thermal_find_tz(dev, index); =20 - if (!IS_ENABLED(CONFIG_THERMAL_OF)) - return; - - list_for_each_entry(tzdata, &hwdev->tzdata, node) { - if (tzdata->index =3D=3D index) { - thermal_zone_device_update(tzdata->tzd, - THERMAL_EVENT_UNSPECIFIED); - } - } + if (tzdata) + thermal_zone_device_update(tzdata->tzd, THERMAL_EVENT_UNSPECIFIED); } =20 static int hwmon_attr_base(enum hwmon_sensor_types type) --=20 2.45.2 From nobody Sat Feb 7 06:14:42 2026 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 3A0352356BA for ; Fri, 23 Jan 2026 18:22:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192541; cv=none; b=kXxh0SmOsXX3tjAKNRo1VXB3Dme5H5fjKN3q93yfFjCefOiUCZPMjyWPyVCFCHF/D0zNFUYMixBIIokqDyYVdR/wSHE9Ke0Q0cdkxH+QLPw8IwrQPIpJwLN+nMWnUJo04mMtHHudxM+byN5CAFxKQGR6X27e3UqgSeFWIyyaTAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192541; c=relaxed/simple; bh=SIVuQucr0XUIbRjwS0Nu80xS1m3kZ3OXWbHv6X+sf9A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bXRYsyzVDouhGf0KZ5KrviW2UipmR7tG1UIuzOFE5ieaY6ofvdaPVl0E8eVVhOcDPYWZb1qIKXi09M8XRvzQR1pCDcvKw+sK3brShu9DPw5I/9WlGilM8Yg2ZbmbRTlEbjpWnmb6rmOCTatDG02OKuRMh2CYY0GqwEbQxEVJFMM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Im4JyzYT; arc=none smtp.client-ip=209.85.210.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net 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="Im4JyzYT" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-82307c6902eso1082973b3a.3 for ; Fri, 23 Jan 2026 10:22:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769192539; x=1769797339; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=AKM++0ITaCmDLPaI1GObBl9/EOl/aYbw0SPRuuisulc=; b=Im4JyzYTdISApslmzIeaKSzYVrb0P1/35xRULrzILzBqYy7L7EvTujaL7fi516pAhi JgCqaL104H+KYc8nyo1P677feR+xFmDjUOgxkQDuk74hU9MuY6lotKm5CvX3+lagu8MF Vo09dsyAwqapItulJmSgceQ8smvCOjfns2RyesQ0EUeQhP7S1KovfuuJk0pFWdF4ojOg DQY2A1AzJxv7uONcFdCyq+y1oagiQPSlynXr/9jCOvhYUZeAY7hGQM8gAbjaxaUwm4zN BRePxFztkta+gk98qBRUo6qgIP3PIopa4LktS2gaaKb45cX7SBQxwWMEYWWd6cTA9eRt 0wrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769192539; x=1769797339; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AKM++0ITaCmDLPaI1GObBl9/EOl/aYbw0SPRuuisulc=; b=KKBVBQz2HNdWm6fPslED5exiFQPc94+ZCIf6Fa+0x5ese7IGHcXoluyEYyFdELEgFD 2Wq7btS6g45GICtwGcc0o/ChlaS3MDNgnhTQqmp5itMkI4oiG47Rg9qX4gJ6PBsrqA0T KbV0/VDtbUod9l1b1Iu1f1XPEXL2hUOszolah6EM8xoCjySPctDqR3UZKzy/Mq0yvgzE rDdwtzAJMjQXIDeZki76S2aRAbM8hzbQmvlJBAjZjQWlTOzU0H8O4+R6e19GMTNzmhNl R/U1VpjElM2/N9cAeks4Vq2hKwfaF7dfDbhlxu24ZQUsc2q1KWdLaNOwYV+pEvE79viP v2WA== X-Forwarded-Encrypted: i=1; AJvYcCVeT6VFHnpiEG5XPnCXMctESBFcL8uCQnx6tsqG7P+XR2/rVZuzVpkLhdpLUcD5fzrp/bfuvl7k5kHEIOo=@vger.kernel.org X-Gm-Message-State: AOJu0YwDqxhz57dKkvHymgnxsAZAe9zhlPymVMK4RhiSPz0UhvijFebo vRj+Coe1s/HnExkNEpuASnIgIHEPu8SsgkwPRqMgJBeYXZfgcUEfWeWr X-Gm-Gg: AZuq6aLGGsfs+ATUOBCe3O5wOKv9RWhwTjIo8C0Yt0drCSDt1ScEUf+RI/vRPtDfMQG cSa6l6mCaTqzP+HKoO75qfalO2gfOT6MywUcgZON38cBPh81hgWrJRGEdKiImcsBtMCakuTmz7L VIgWCzQhzw5CXBsn80GLSVYuxWUZjPtjbZZ8usS+/KUQkJq6VodrgD4bdkSVZKhkZzjGz7NVdX/ TAXsOvIKkzfO17LikIC6kAB3ykbcVAD1RjZjmQOQEv+r2SIjPO8kfC7zVHDbFU0MAh3am7uKFOS UKIPzZwvDSyH38X6dpvpYN61NxkxrR2Qvth5XDBLA/G4KjEQNzejlWbquzZEBcj6wuDdOLNTqXn 4sIFUn2AS5eBjDOqWAwxrpTaPhnsG6vpz8e6q/Njwmk3sbMrJwTyblet52IsYocq8Py0RywyIQg KVJMrOAbYpWT5VPv8gxzLzylwEis7dCrxzec8= X-Received: by 2002:a05:6a00:1c9c:b0:819:5db9:6ac0 with SMTP id d2e1a72fcca58-823216f72a9mr1820886b3a.37.1769192539277; Fri, 23 Jan 2026 10:22:19 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:da43:aeff:fecc:bfd5]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82318663d82sm2792223b3a.21.2026.01.23.10.22.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 10:22:18 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: linux-hwmon@vger.kernel.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Jaroslav Pulchart , "Rafael J . Wysocki" , lihuisong , Guenter Roeck Subject: [PATCH RFT 3/5] hwmon: Add support for updating thermal zones Date: Fri, 23 Jan 2026 10:22:06 -0800 Message-ID: <20260123182208.2229670-4-linux@roeck-us.net> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260123182208.2229670-1-linux@roeck-us.net> References: <20260123182208.2229670-1-linux@roeck-us.net> 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 Content-Type: text/plain; charset="utf-8" Implement support for updating thermal zones. This is necessary to be able to handle updates to sysfs attribute visibility. Signed-off-by: Guenter Roeck --- drivers/hwmon/hwmon.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index 1f35285ca7a0..cb89218a0b6a 100644 --- a/drivers/hwmon/hwmon.c +++ b/drivers/hwmon/hwmon.c @@ -276,7 +276,7 @@ static struct hwmon_thermal_data *hwmon_thermal_find_tz= (struct device *dev, int return NULL; } =20 -static int hwmon_thermal_register_sensors(struct device *dev) +static int hwmon_thermal_handle_sensors(struct device *dev, bool update) { struct hwmon_device *hwdev =3D to_hwmon_device(dev); const struct hwmon_chip_info *chip =3D hwdev->chip; @@ -294,22 +294,42 @@ static int hwmon_thermal_register_sensors(struct devi= ce *dev) continue; =20 for (j =3D 0; info[i]->config[j]; j++) { + umode_t mode; int err; =20 - if (!(info[i]->config[j] & HWMON_T_INPUT) || - !hwmon_is_visible(chip->ops, drvdata, hwmon_temp, - hwmon_temp_input, j)) + if (!(info[i]->config[j] & HWMON_T_INPUT)) continue; + mode =3D hwmon_is_visible(chip->ops, drvdata, hwmon_temp, + hwmon_temp_input, j); + if (!mode) { + struct hwmon_thermal_data *tzdata; =20 - err =3D hwmon_thermal_add_sensor(dev, j); - if (err) - return err; + if (!update) + continue; + tzdata =3D hwmon_thermal_find_tz(dev, j); + if (tzdata) { + devm_thermal_of_zone_unregister(dev, tzdata->tzd); + devm_release_action(dev, hwmon_thermal_remove_sensor, + &tzdata->node); + } + } else { + if (!update || !hwmon_thermal_find_tz(dev, j)) { + err =3D hwmon_thermal_add_sensor(dev, j); + if (err) + return err; + } + } } } =20 return 0; } =20 +static int hwmon_thermal_register_sensors(struct device *dev) +{ + return hwmon_thermal_handle_sensors(dev, false); +} + static void hwmon_thermal_notify(struct device *dev, int index) { struct hwmon_thermal_data *tzdata =3D hwmon_thermal_find_tz(dev, index); --=20 2.45.2 From nobody Sat Feb 7 06:14:42 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 7DE85287259 for ; Fri, 23 Jan 2026 18:22:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192544; cv=none; b=qAdHsmxGqVvXgn/wViW5yF9LxEBNYH76vt7Zizuu4VwgSWRhaq+dtOzU02xRbaNm9yEiMQ6ROaF4iNvRadtjaD/NynhzHVOWjCOTHgxKPZK0PbxWckMYzKfB8NC52f7tf0gcm21DBNl++giV4GhVQsX/pH6raSNsmV3+jhAqlmk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192544; c=relaxed/simple; bh=pjFIKTAcgTOMhK443dH8yu6xajqx4n3WaCh4sL4FWoQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UlrFiLvYrfpWS+ZI+SdiLLA99QXdqGtz9JctyjA7oKT167r8SNRYry9xzo3MbbS2pWWtAvBeHGx//o0sPtUMYWLMrQLXg7DUv2gGZGvI1pEeA6V4svZVv1WSESI5veTsad3Am2yCocZ3eUsMEe/KRct0f6mKrvl12Q0QyK6nrxs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Up1OdfDR; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net 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="Up1OdfDR" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2a0a95200e8so16903195ad.0 for ; Fri, 23 Jan 2026 10:22:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769192542; x=1769797342; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=tkJ+o7BV1rRzeunFqGJvREeRYIZ540q5bogHmtrFmU0=; b=Up1OdfDRtohvyuQcuiOAdUbFqFjcsjm87NrZxt3eiKlPB4Ub9imIALghoZ0m/d/Mj2 CScoz34F5UfUW/Lg0i+q27avIJpkFq2SNMgizAsNKM3QX6vux83O0EUam9oeA8U//W/b qx1oR3nbbJr+bj5bW39sotrqUK5pnWJVq2hbS9nIEsgwa2zWdrSh7ip4dgrkB6KadHbM kyZ84eZ7rdyAzSfOx5y9bQLzcr2GCI82DE1yXzeGIm4yGS4LBNlpm9PRUHnAVtf3G4fz dPsNU6RdQrpYFULO471Gw5gnJJQhM93djan0srDG+hazXaE79RKFHuG3Z0RmKDokHmrt AlBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769192542; x=1769797342; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tkJ+o7BV1rRzeunFqGJvREeRYIZ540q5bogHmtrFmU0=; b=JPZmgV3HxqA8x0xr9DE073/B6Wxg2tLmD5iv84KAMutDKKFaG5ujuoVtSKJ5fQcL1l ctRzbJwpvL0FGFhMtaVBv9XzFnS+8lG+oS0f/sIzYZiyKHoSzo5KsjrfJ1TolAFKsSy1 Pah1Qd+jj66dpk455GLlbfI81TUUmON4y+tMEFO9nVClb1l08LqlvNm+wbCwHBoqUalX Dc9+ODQqJOGu1AIle9Nhs6WJY4KPU2JxAcWwYUrRoxwjEdwqyomiTcxb2AG2oWdT6KZH BuzSpoRm+E57UFicu1Lv6/9srW3gT/eE7VshJdOSnI+K+tXpqapnvb8ZgqwSc/CngcMH IKjA== X-Forwarded-Encrypted: i=1; AJvYcCWAcR7yY+/l81mijXlKJ+kdlYnA3hTujNtikkbmqE+9p/MnaH+aaFhoVbEQrE/NxoAukbFzWGE6FskJVIs=@vger.kernel.org X-Gm-Message-State: AOJu0YzMPANbGqwQDsPeISvnRl+hVNUZ9rOE2ex2rakB6Y5f3qiaXaLg m6YW81Puwf3/dFThlFtip9m43u+LPOOIpy11JcPQwdy1l5z28BtmC3cA X-Gm-Gg: AZuq6aJwZATma8QqFK0tXFU1fF10Q15CyYau7sj+TvQ35ybGXqbHWUE5WK7HEBZkN7L wcspBEpZ8Zqt5AHLz8rrWEe8+VgdEiQ5slPlOiDT8Z2e1lVq8LtqjNDznTFy/C1/sapehJHSZ4p D0D6gUovgfOH6AKDvIh9LwBPFtFfR1iU5KknSB2CBnorluymsZ4rQybSW6MLFkebvs07HumfoF7 rYsN4RWsjT4vEVvRIMzBBF3gQ6bwW7U8i2ug6bq63QFyxCmXXqDYdZTN/C9ZLlaST9/4KXEy1SQ 4946ixZCyXemDRakwa54BAsyKlionl4XrU9MD9pPwrE/sgIMcgqEqmQKYyMUrqXsuTMQEiYHzNo QQ5+HkCMLF3ZePOcXiBn4mSwEMFUKr4usj8dRUegViVhX3IuCbHFGDHZpw3NQgjQXdlI2um3EU6 kVQypDuMZOUi9vPVY0I2EYuwAn X-Received: by 2002:a17:903:2443:b0:2a0:b62e:e016 with SMTP id d9443c01a7336-2a7fe625081mr32543535ad.32.1769192541799; Fri, 23 Jan 2026 10:22:21 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:da43:aeff:fecc:bfd5]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802fb03dfsm25604715ad.75.2026.01.23.10.22.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 10:22:20 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: linux-hwmon@vger.kernel.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Jaroslav Pulchart , "Rafael J . Wysocki" , lihuisong , Guenter Roeck Subject: [PATCH RFT 4/5] hwmon: Implement hwmon_update_groups() Date: Fri, 23 Jan 2026 10:22:07 -0800 Message-ID: <20260123182208.2229670-5-linux@roeck-us.net> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260123182208.2229670-1-linux@roeck-us.net> References: <20260123182208.2229670-1-linux@roeck-us.net> 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 Content-Type: text/plain; charset="utf-8" In some situations the visibility of hwmon sysfs attributes may change. Support this by providing a new API function hwmon_update_groups() to update both visible attributes and thermal zones. Signed-off-by: Guenter Roeck --- Documentation/hwmon/hwmon-kernel-api.rst | 8 ++++++++ drivers/hwmon/hwmon.c | 24 ++++++++++++++++++++++++ include/linux/hwmon.h | 2 ++ 3 files changed, 34 insertions(+) diff --git a/Documentation/hwmon/hwmon-kernel-api.rst b/Documentation/hwmon= /hwmon-kernel-api.rst index 1d7f1397a827..a41b1038fbf0 100644 --- a/Documentation/hwmon/hwmon-kernel-api.rst +++ b/Documentation/hwmon/hwmon-kernel-api.rst @@ -42,6 +42,8 @@ register/unregister functions:: =20 char *devm_hwmon_sanitize_name(struct device *dev, const char *name); =20 + int hwmon_update_groups(struct device *dev); + void hwmon_lock(struct device *dev); void hwmon_unlock(struct device *dev); =20 @@ -89,6 +91,12 @@ for other functions such as interrupt handlers or for at= tributes which are fully implemented in the driver, hwmon_lock() and hwmon_unlock() can be us= ed to ensure that calls to those functions are serialized. =20 +If the visibility of sysfs attributes changes during runtime, the driver +needs to call hwmon_update_groups() with the hwmon device as parameter +to update attribute visibility. If the driver registered thermal zones +using hwmon_device_register_with_info() and the visibility of thermal +sensors changes, this call will also update thermal zones as needed. + Using devm_hwmon_device_register_with_info() -------------------------------------------- =20 diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index cb89218a0b6a..9163b8290dbe 100644 --- a/drivers/hwmon/hwmon.c +++ b/drivers/hwmon/hwmon.c @@ -330,6 +330,11 @@ static int hwmon_thermal_register_sensors(struct devic= e *dev) return hwmon_thermal_handle_sensors(dev, false); } =20 +static int hwmon_thermal_update_sensors(struct device *dev) +{ + return hwmon_thermal_handle_sensors(dev, true); +} + static void hwmon_thermal_notify(struct device *dev, int index) { struct hwmon_thermal_data *tzdata =3D hwmon_thermal_find_tz(dev, index); @@ -799,6 +804,25 @@ static const int __templates_size[] =3D { [hwmon_intrusion] =3D ARRAY_SIZE(hwmon_intrusion_attr_templates), }; =20 +int hwmon_update_groups(struct device *dev) +{ + struct hwmon_device *hwdev =3D to_hwmon_device(dev); + const struct hwmon_chip_info *chip =3D hwdev->chip; + const struct hwmon_channel_info * const *info; + int ret; + + ret =3D sysfs_update_groups(&dev->kobj, dev->groups); + if (ret || !chip) + return ret; + + info =3D chip->info; + if (info[0]->type !=3D hwmon_chip || !(info[0]->config[0] & HWMON_C_REGIS= TER_TZ)) + return 0; + + return hwmon_thermal_update_sensors(dev); +} +EXPORT_SYMBOL_GPL(hwmon_update_groups); + int hwmon_notify_event(struct device *dev, enum hwmon_sensor_types type, u32 attr, int channel) { diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h index 301a83afbd66..8cadba24ed4b 100644 --- a/include/linux/hwmon.h +++ b/include/linux/hwmon.h @@ -492,6 +492,8 @@ int hwmon_notify_event(struct device *dev, enum hwmon_s= ensor_types type, char *hwmon_sanitize_name(const char *name); char *devm_hwmon_sanitize_name(struct device *dev, const char *name); =20 +int hwmon_update_groups(struct device *dev); + void hwmon_lock(struct device *dev); void hwmon_unlock(struct device *dev); =20 --=20 2.45.2 From nobody Sat Feb 7 06:14:42 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (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 D4F5C2BD5A7 for ; Fri, 23 Jan 2026 18:22:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192546; cv=none; b=WRdjgGSQ0wxWSoXNedokrea+4/na9IUdvwJ/zFabujjNts4I5UGowc+0L/kNjgYOSx3laqPAUWXe13ppEdEIJWdufj8Wj/KmJ/tvVxkLX5GZlelmSZgbbZ6CKMSdnhVsEoc61Z0fxBdxXxZUCihVstM5mO9WaXOw4gVyqTmxwJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769192546; c=relaxed/simple; bh=SPXPIbBetVfrtSr87AGPJKY7Q8T4ACNl5x7JB3uNAOU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VI9yumzAvGc/7vDPBW6p5G73PB3Pq0NGHTuUc69D0ZAp4RipJic+1tpHwl5g/NFszCkz3L/7fAhMgCtu5enU5vIIhf0isSvLGbBXzoSc6cZH7BGk9N3sAwoK0DOF/aOfcB3i3nD5UBw//hWzj/tF5fx5n8UeUSCo1LXD6zTmfZQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AozLaqGX; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net 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="AozLaqGX" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2a0ac29fca1so18748395ad.2 for ; Fri, 23 Jan 2026 10:22:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769192544; x=1769797344; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=7zXV0Ml05DG2GM6i3iG21b9r1Ulg08rCjKLZ42eCdfw=; b=AozLaqGXFgUIo93vSYugJPxx2oCm/pnMkWWKOm+msOqL55Qfwc50yiON7ZDf8hhOBL b/NMMCN2l4aBVfq0GiCYN2W8xS47MKRhfcPYtaklDYj0/3s7tPcax/neS/RoOvks6vzi Zz//JmqINkhgRlY3kbsuLbMocH5FJJNkuWQtuT5P0hsA8byeU+97SS5kbc0p0jHAzmbZ Ry4YEIAUuntxwN7c67UgKfePQK1ZqqNxSiyVT2TRySxOJcjAOqz8MjYmb78c2rQSNAm5 OUjQhS2vwd3jZZ1GPzDOgWQkrgPNkrdwizsWUDi/0qKCwVi/ia/grUS4eMtqPatsC6W4 bkZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769192544; x=1769797344; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7zXV0Ml05DG2GM6i3iG21b9r1Ulg08rCjKLZ42eCdfw=; b=TCwYUi1XUi0hTThssyQxZqmz68qXazxW4E1DF+hFiNwAuSmjAYBhdim9Je5StegpXW SeTrdeuDytuHNTcMdkRfNEikMjG5v2yGv62YxuICCE61sC6E90GhyOMHqJgX3I6nxwWM yJom96zxA3TNsN1v//7xGAPLvN3w/Lmwq5TZsWE/h9RbmedNaprHv7xINFBkPjCTWEP0 Nh0fx0KRv867MaC/62Pnvnn/ibb05u82hkOnwkTABhuQ7N/dOalnpIgtSw2mmUXBSPdG I9nEzp6kgBaITB6R4GfaU7IGGoCovvSyGUdSWb8Q/8p8ylX48XRRgdvsZ4YAA0M0EgFB AcLQ== X-Forwarded-Encrypted: i=1; AJvYcCWWYxJ87Rh/Sp0PtJJqKTPgkmtvyD4tFviEuR2v68V2ISHJjlPMOsWt4F1GepuO5Jr3HGoNDQU1zgNMyB4=@vger.kernel.org X-Gm-Message-State: AOJu0YwuW4KqJXF+Q28tbEerY5/fLSTV4ISseTFXt2GaiOB7tTjHMIL3 ddO8KFX8b79IZg2wL4NJdwmqR5HGsfHCPJORDYpkl9j3cRzrE9S0Y2mD X-Gm-Gg: AZuq6aIPbrEEUI2zM4r58Pe3+DjnsxjhnCHYTikzz1UyRYfGosLKhbHIknwd6opJFxG TzKUy91ByD5IJRHyvCO1Ec1oiomB2y626Vu6WZXu/pZosv1EeCjxHYTqpIbMssarmVaSLtJtcYP MThJgUBvar2N9rje6+85y9hFnyw7U527E7CR6XGp9hqsS4IlpPIzvYGScG1ILgGDOn4hmve4HZb ZnKoHF8x1pNqjSLFbZ80MePr/klo0Ug+oQXmEGN1KQxmXxqOUUlg8qOL9OQmHTie9kR4OuJqe0o +dW8sX1cZC3S1z+g9O2Mhxc/01bD2T2quledNa29nOV8QwRkZ03KP3vx5dOiBunu52tAY9RzQe/ hf9a/Up6g66JR5Xy0yK02UrDTYNpsvrSS10Co3sWFX7B1ddD5YrOn4NUXhZE/v7Nh2pbC2nUqbb 4+gvvucFBx0aCvKNflVPuapXZJ X-Received: by 2002:a17:903:189:b0:2a5:8d30:58f7 with SMTP id d9443c01a7336-2a7fe56f709mr42504345ad.17.1769192543622; Fri, 23 Jan 2026 10:22:23 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:da43:aeff:fecc:bfd5]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802daa85esm25452095ad.1.2026.01.23.10.22.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 10:22:22 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: linux-hwmon@vger.kernel.org Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Jaroslav Pulchart , "Rafael J . Wysocki" , lihuisong , Guenter Roeck Subject: [PATCH RFT 5/5] hwmon: (acpi_power_meter) Use hwmon_update_groups() to update sensor visibility Date: Fri, 23 Jan 2026 10:22:08 -0800 Message-ID: <20260123182208.2229670-6-linux@roeck-us.net> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20260123182208.2229670-1-linux@roeck-us.net> References: <20260123182208.2229670-1-linux@roeck-us.net> 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 Content-Type: text/plain; charset="utf-8" If the driver is notified about hardware a configuration change, the driver unregisters the hardware monitoring device and registers it again. This is conceptually wrong and can have unintended side effects, especially if a userspace application is in the process of reading attributes during that time. If the hardware configuration changed, call hwmon_update_groups() instead to update attribute visibility. Update driver locking to use the hardware monitoring lock for all locking operations and drop the driver internal lock. Signed-off-by: Guenter Roeck --- drivers/hwmon/acpi_power_meter.c | 37 +++++++++++--------------------- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_me= ter.c index 29ccdc2fb7ff..59b56217e856 100644 --- a/drivers/hwmon/acpi_power_meter.c +++ b/drivers/hwmon/acpi_power_meter.c @@ -75,7 +75,6 @@ struct acpi_power_meter_capabilities { struct acpi_power_meter_resource { struct acpi_device *acpi_dev; acpi_bus_id name; - struct mutex lock; struct device *hwmon_dev; struct acpi_power_meter_capabilities caps; acpi_string model_number; @@ -445,8 +444,6 @@ static int power_meter_read(struct device *dev, enum hw= mon_sensor_types type, if (type !=3D hwmon_power) return -EINVAL; =20 - guard(mutex)(&res->lock); - switch (attr) { case hwmon_power_average: ret =3D update_meter(res); @@ -501,7 +498,6 @@ static int power_meter_write(struct device *dev, enum h= wmon_sensor_types type, if (type !=3D hwmon_power) return -EINVAL; =20 - guard(mutex)(&res->lock); switch (attr) { case hwmon_power_cap: ret =3D set_cap(res, val); @@ -547,9 +543,9 @@ static ssize_t power1_average_max_store(struct device *= dev, if (ret) return ret; =20 - mutex_lock(&res->lock); + hwmon_lock(res->hwmon_dev); ret =3D set_trip(res, POWER_METER_TRIP_AVERAGE_MAX_IDX, trip); - mutex_unlock(&res->lock); + hwmon_unlock(res->hwmon_dev); =20 return ret =3D=3D 0 ? count : ret; } @@ -566,9 +562,9 @@ static ssize_t power1_average_min_store(struct device *= dev, if (ret) return ret; =20 - mutex_lock(&res->lock); + hwmon_lock(res->hwmon_dev); ret =3D set_trip(res, POWER_METER_TRIP_AVERAGE_MIN_IDX, trip); - mutex_unlock(&res->lock); + hwmon_unlock(res->hwmon_dev); =20 return ret =3D=3D 0 ? count : ret; } @@ -825,44 +821,38 @@ static void acpi_power_meter_notify(struct acpi_devic= e *device, u32 event) =20 switch (event) { case METER_NOTIFY_CONFIG: - mutex_lock(&resource->lock); + hwmon_lock(resource->hwmon_dev); free_capabilities(resource); remove_domain_devices(resource); - hwmon_device_unregister(resource->hwmon_dev); res =3D read_capabilities(resource); if (res) dev_err_once(&device->dev, "read capabilities failed.\n"); res =3D read_domain_devices(resource); if (res && res !=3D -ENODEV) dev_err_once(&device->dev, "read domain devices failed.\n"); - resource->hwmon_dev =3D - hwmon_device_register_with_info(&device->dev, - ACPI_POWER_METER_NAME, - resource, - &power_meter_chip_info, - power_extra_groups); - if (IS_ERR(resource->hwmon_dev)) - dev_err_once(&device->dev, "register hwmon device failed.\n"); - mutex_unlock(&resource->lock); + res =3D hwmon_update_groups(resource->hwmon_dev); + if (res) + dev_err_once(&device->dev, "Failed to update hardware monitoring data\n= "); + hwmon_unlock(resource->hwmon_dev); break; case METER_NOTIFY_TRIP: sysfs_notify(&device->dev.kobj, NULL, POWER_AVERAGE_NAME); break; case METER_NOTIFY_CAP: - mutex_lock(&resource->lock); + hwmon_lock(resource->hwmon_dev); res =3D update_cap(resource); if (res) dev_err_once(&device->dev, "update cap failed when capping value is cha= nged.\n"); - mutex_unlock(&resource->lock); + hwmon_unlock(resource->hwmon_dev); sysfs_notify(&device->dev.kobj, NULL, POWER_CAP_NAME); break; case METER_NOTIFY_INTERVAL: sysfs_notify(&device->dev.kobj, NULL, POWER_AVG_INTERVAL_NAME); break; case METER_NOTIFY_CAPPING: - mutex_lock(&resource->lock); + hwmon_lock(resource->hwmon_dev); resource->power_alarm =3D true; - mutex_unlock(&resource->lock); + hwmon_unlock(resource->hwmon_dev); sysfs_notify(&device->dev.kobj, NULL, POWER_ALARM_NAME); dev_info(&device->dev, "Capping in progress.\n"); break; @@ -889,7 +879,6 @@ static int acpi_power_meter_add(struct acpi_device *dev= ice) =20 resource->sensors_valid =3D 0; resource->acpi_dev =3D device; - mutex_init(&resource->lock); strcpy(acpi_device_name(device), ACPI_POWER_METER_DEVICE_NAME); strcpy(acpi_device_class(device), ACPI_POWER_METER_CLASS); device->driver_data =3D resource; --=20 2.45.2