summaryrefslogtreecommitdiff
path: root/drivers/hwmon
AgeCommit message (Collapse)Author
13 hoursMerge branch 'headers' of git://git.infradead.org/users/willy/pagecache.gitMark Brown
# Conflicts: # net/ceph/osd_client.c
3 dayshwmon: (pmbus/tda38740) Add driver for Infineon TDA38740/TDA38725Colin Huang
Add a PMBus driver for Infineon TDA38740 and TDA38725 single-voltage synchronous buck regulators. Signed-off-by: Colin Huang <u8813345@gmail.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://patch.msgid.link/20260918-add-tda38740-and-tda38725-v6-2-a8b11018d850@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: hp-wmi-sensors: Fix info_map[] allocation typeKees Cook
In preparation for making the devm_kmalloc family of allocators type aware, we need to make sure that the returned type from the allocation matches the type of the variable being assigned. (Before, the allocator would always return "void *", which can be implicitly cast to any pointer type.) The assigned type of "info_map[type]" is "struct hp_wmi_info **", but the converted allocation type would be "struct hp_wmi_info ***", as the size was taken from "*info_map", which is one level of indirection too many. Luckily both element types are pointers of the same size. Take the size from the element type of the assignment target. Build tested ARCH=x86_64 allmodconfig with GCC 16.2.0: drivers/hwmon/hp-wmi-sensors.o Assisted-by: LLM coccinelle Signed-off-by: Kees Cook <kees+treewide@kernel.org> Acked-by: James Seo <james@equiv.tech> Link: https://patch.msgid.link/20260917211338.i.682-kees@kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: scmi: Fix info[] allocation typeKees Cook
In preparation for making the devm_kmalloc family of allocators type aware, we need to make sure that the returned type from the allocation matches the type of the variable being assigned. (Before, the allocator would always return "void *", which can be implicitly cast to any pointer type.) The assigned type of "scmi_sensors->info[type]" is "const struct scmi_sensor_info **", but the converted allocation type would be "const struct scmi_sensor_info ***", as the size was taken from "*scmi_sensors->info", which is one level of indirection too many. Luckily both element types are pointers of the same size. Take the size from the element type of the assignment target. Build tested ARCH=x86_64 allmodconfig with GCC 16.2.0: drivers/hwmon/scmi-hwmon.o Assisted-by: LLM coccinelle Signed-off-by: Kees Cook <kees+treewide@kernel.org> Link: https://patch.msgid.link/20260917211344.i.911-kees@kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: pwm-fan: Add const to channels allocation typeKees Cook
In preparation for making the devm_kmalloc family of allocators type aware, we need to make sure that the returned type from the allocation matches the type of the variable being assigned. (Before, the allocator would always return "void *", which can be implicitly cast to any pointer type.) The assigned type is "const struct hwmon_channel_info **", but the converted allocation type would be "struct hwmon_channel_info **", which is the same type without the const qualifier. As there is no general way to safely add const qualifiers, take the size from the assignment target instead. No change in allocation size results. Build tested ARCH=x86_64 allmodconfig with GCC 16.2.0: drivers/hwmon/pwm-fan.o Assisted-by: LLM coccinelle Signed-off-by: Kees Cook <kees+treewide@kernel.org> Link: https://patch.msgid.link/20260917211417.i.173-kees@kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: asus_wmi_sensors: Fix info[] allocation typeKees Cook
In preparation for making the devm_kmalloc family of allocators type aware, we need to make sure that the returned type from the allocation matches the type of the variable being assigned. (Before, the allocator would always return "void *", which can be implicitly cast to any pointer type.) The assigned type of "sensor_data->wmi.info[type]" is "const struct asus_wmi_sensor_info **", but the converted allocation type would be "const struct asus_wmi_sensor_info ***", as the size was taken from "*sensor_data->wmi.info", which is one level of indirection too many. Luckily both element types are pointers of the same size. Take the size from the element type of the assignment target. Build tested ARCH=x86_64 allmodconfig with GCC 16.2.0: drivers/hwmon/asus_wmi_sensors.o Assisted-by: LLM coccinelle Signed-off-by: Kees Cook <kees+treewide@kernel.org> Link: https://patch.msgid.link/20260917211332.i.711-kees@kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/tps53679) Select page 0 for single-page TPS536C7Sanman Pradhan
tps536c7_identify() sets info->pages to 1 for a single-channel part and then accesses page 0 (writing PMBUS_PHASE) without ensuring PAGE is actually 0. pmbus_set_page() does not update the PAGE register when info->pages is 1, so if boot firmware left PAGE set to another value the PHASE writes and subsequent telemetry may target the wrong page. Select page 0 explicitly before configuring PHASE. Signed-off-by: Sanman Pradhan <psanman@juniper.net> Link: https://patch.msgid.link/20260916235406.681131-3-sanman.pradhan@hpe.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: use named initializers for acpi_device_idPawel Zalewski
Use a designated initializer for the acpi_device_id fields which makes the code more readable and consistent with how lists are initialized in the rest of the kernel code base. Also drop explicitly setting fields to 0 where it is redundant. Unify the list terminator to have a single space between the brackets and no trailing comma. Signed-off-by: Pawel Zalewski <pzalewski@thegoodpenguin.co.uk> Link: https://patch.msgid.link/20260915-acpi-hwmon-v2-1-39d17c748eb6@thegoodpenguin.co.uk Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/tps53679) Add support for TPS536C7Sanman Pradhan
TPS536C7 is a dual-channel D-CAP+ step-down controller whose channels are distributed across a configurable number of phases (N+M, up to 12 total). Whether channel B (PMBus page 1) exists depends on the phase configuration register, so the page count is derived at probe time. Factor the TPS53676 phase-map parsing into a shared helper and reuse it for TPS536C7. Only aggregate per-channel telemetry is exposed: leave info->phases[] unset so the PMBus core never programs the PHASE selector on every read (and because TPS536C7 can place up to 12 phases on channel A, exceeding PMBUS_PHASES). Report VOUT in linear format like TPS53676. Since the core never programs PHASE, set it to 0xff on each populated page so READ_IOUT reports the aggregate channel current, and verify it (PHASE can be write-protected). Fail identification if aggregate selection cannot be established, since otherwise a single phase current could be reported as the channel total. A configuration with no channel-A phase is rejected with -EOPNOTSUPP: the PMBus core models pages as the contiguous range 0..pages-1 and cannot represent a channel-A-absent topology. On the tested TPS536C7 (device ID 54 49 53 6c 70 00, CAPABILITY 0xd0), block reads of IC_DEVICE_ID and USER_DATA_03 return -EBADMSG with PEC enabled, while retrying those two reads without PEC returns the expected 6- and 24-byte payloads. Standard byte/word telemetry keeps using PEC, so only those two identification reads fall back to no-PEC. Co-developed-by: Senthil Muniyappan <smuniyappan@juniper.net> Co-developed-by: Vaibhav Agarwal <avaibhav@juniper.net> Signed-off-by: Sanman Pradhan <psanman@juniper.net> Link: https://patch.msgid.link/20260915164823.160977-4-sanman.pradhan@hpe.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (dell-smm) Add Dell Precision 3650 Tower to fan control whitelistPatrick Pepin
On the Dell Precision 3650 Tower, the EC ignores fan speed writes unless automatic BIOS fan control is disabled first. The I8K_FAN_30A3_31A3 SMM code pair works on this machine through the WMI-SMM backend: after writing 1 to pwm1_enable, all three fans (CPU, front, top) accept the three fan states and report matching RPM, and writing 2 hands control back to the BIOS. I8K_FAN_34A3_35A3 was tested as well and also works; I8K_FAN_30A3_31A3 is used since it matches recent OEM software. Tested on BIOS 1.48.0 with kernels 7.0.0-30 and 7.0.0-31 (Ubuntu 26.04). Signed-off-by: Patrick Pepin <patpep@me.com> Acked-by: Pali Rohár <pali@kernel.org> Link: https://patch.msgid.link/20260914080955.87925-1-patpep@me.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/max34440): Add support for ADPM12300Alexis Czezar Torreno
ADPM12300 is a quarter brick DC/DC Power Module. It is a high power non-isolated converter capable of delivering regulated 12V with continuous power level of 3000W. Uses PMBus. Signed-off-by: Alexis Czezar Torreno <alexisczezar.torreno@analog.com> Link: https://patch.msgid.link/20260914-dev_adpm12300-v1-1-15fc8143d457@analog.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (lm63) Add Sensylink CTF2301 supportTroy Mitchell
Add Sensylink CTF2301 support to the LM63 driver. CTF2301 follows the LM63-style temperature, tachometer, and PWM register layout, while using a 12-bit local temperature register and requiring the ALERT/TACH pin to be configured for tachometer input. Register an optional thermal cooling device when the device tree node provides #cooling-cells, allowing thermal zones to control the fan through the existing PWM path without changing behavior for existing LM63-family users. Signed-off-by: Troy Mitchell <troy.mitchell@linux.dev> Link: https://patch.msgid.link/20260914-ctl2301-v5-4-522def70acb4@linux.dev Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (socfpga) add Agilex 5 channel mappingTze Yee Ng
Add temperature channel mapping for Agilex 5 and bind it to the "intel,agilex5-svc" compatible string. Reuse the Agilex voltage channels. Agilex 5 omits temperature channel 2 (top-left corner) because that sensor is not present; remaining sensors keep Agilex channel numbers. The "intel,agilex5-svc" compatible is added to the stratix10-svc match table by a separate patch [1]. Without that change the service layer does not bind on Agilex 5, so the socfpga-hwmon device is never created; this patch depends on it. Update the socfpga-hwmon documentation to list Agilex 5, the matching compatible string, and the SDM temperature/voltage channel tables. Signed-off-by: Tze Yee Ng <tze.yee.ng@altera.com> Link: https://lore.kernel.org/all/20260907082203.2639395-4-adrian.ho.yin.ng@altera.com/ [1] Link: https://patch.msgid.link/41bb317cbfb6f4e2711581f2ccb22071db17b19e.1789373027.git.tze.yee.ng@altera.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus) Validate number of phases per pageGuenter Roeck
It is possible for a PMBus driver to configure a phase count larger than the PMBUS_PHASES limit and cause an out-of-bounds read. Add a bounds check for info->phases against PMBUS_PHASES in the core API to prevent the potential out-of-bounds read. Cc: Nuno Sá <nuno.sa@analog.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Nuno Sá <nuno.sa@analog.com> Link: https://patch.msgid.link/20260912145038.2411447-1-linux@roeck-us.net
3 dayshwmon: (pmbus) add support for MAX20826 and similar devicesNuno Sá
The MAX20826 IC and similar provide a high-density, flexible and scalable dual-loop solution for high current cores for AI applications. These are dual loop solutions multiphase voltage regulators. Between Rails A and B, MAX20855B and MAX20908 supports up to 8 phases total configurable from 8+0 to 4+4 phases, MAX20912 supports up to 12 phases from 12+0 to 6+6, and MAX20826 and MAX20916 supports up to 16 phases from 16+0 to 8+8. Co-developed-by: Alexis Czezar Torreno <alexisczezar.torreno@analog.com> Signed-off-by: Alexis Czezar Torreno <alexisczezar.torreno@analog.com> Signed-off-by: Nuno Sá <nuno.sa@analog.com> Link: https://patch.msgid.link/20260911-hwmon-max20826-support-v2-4-5e30cbd97d84@analog.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/core) Add mapping function to pmbus_read_block_data()Nuno Sá
This is in preparation for adding support to a device which needs to use it's own read_block implementation. The MAX20826 family is one such device. When not in PMBus page mode, each of its two rails sits at a different I2C address, so selecting the rail cannot be done through pmbus_set_page() and has to be handled by the driver. Signed-off-by: Nuno Sá <nuno.sa@analog.com> Link: https://patch.msgid.link/20260911-hwmon-max20826-support-v2-2-5e30cbd97d84@analog.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (k10temp) Add support for 1ah/80hMario Limonciello
1ah/80h uses same base as other programs. It only supports Tctl. Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Link: https://patch.msgid.link/20260911191803.1522358-2-mario.limonciello@amd.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (nct6775) Add support for NCT6122DPaul Louvel
The NCT6122D hardware monitor is the same as the NCT6126D, the only difference if the number of UARTs: two instead of six. Add it to the driver using the nct6126 chip kind to avoid code duplication. Assisted-by: opencode:z-ai/glm-5.3-flash Signed-off-by: Paul Louvel <paul.louvel@bootlin.com> Link: https://patch.msgid.link/20260909-bootlin-hwmon-nct6126-v1-3-4e85615fef10@bootlin.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (nct6775) Add support for NCT6126DPaul Louvel
Add support for the hardware monitoring functionality of the NCT6126D Super-I/O chip. The NCT6126D hardware monitor is nearly identical to the NCT6116D: the fan, PWM, temperature, TSI, alarm. The differences are: - Device IDs 0xd283 (A version) and 0xd284 (B version), which both fall into the NCT6116D ID range (0xd280) when masked with SIO_ID_MASK. Instead, compare the full value to distinguish from NCT6116D. - One additional VIN: VHIF scaled at 16 mV/LSB. - The fan count limit registers are documented for all five fans. Also expose fan4_min. Assisted-by: opencode:z-ai/glm-5.3-flash Signed-off-by: Paul Louvel <paul.louvel@bootlin.com> Link: https://patch.msgid.link/20260910-bootlin-hwmon-nct6126-v2-2-ee629ab35e49@bootlin.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (arctic_fan_controller) Dual-license GPL-2.0-or-later OR BSD-2-ClauseAureo Serrano de Souza
The in-tree driver is solely authored by ARCTIC. Keep the existing GPL-2.0-or-later grant and add BSD-2-Clause so the files may be used under either license. Signed-off-by: Aureo Serrano de Souza <aureo.serrano@arctic.de> Link: https://patch.msgid.link/20260910050401.279868-3-aureo.serrano@arctic.de Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (arctic_fan_controller) Default PWM cache to MCU 40%Aureo Serrano de Souza
The device has no GET_REPORT and every OUT report carries all 10 channels, so the cache has to start at some value. Starting at 0 means the first sysfs write to a single channel also sends 0% on the other nine. The MCU factory default is 40%. Initialize pwm_duty[] to 102 (40% on the 0-255 sysfs scale) at probe and on reset-resume. Any initial cache can be stale if the module is reloaded without a device reset. 40% matches the hardware after power-on or power-loss resume, and a first single-channel write leaves the fans running at a safe speed. PWM is still not taken from periodic IN reports: the device is manual-only and the host cache stays authoritative after the first successful write. Signed-off-by: Aureo Serrano de Souza <aureo.serrano@arctic.de> Link: https://patch.msgid.link/20260910050401.279868-2-aureo.serrano@arctic.de Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (hih6130) Replace sprintf() with sysfs_emit()Massinissa Ghoul
Use sysfs_emit() instead of sprintf() in the sysfs show functions hih6130_temperature_show() and hih6130_humidity_show() to use the preferred kernel interface for writing to sysfs buffers. No functional change intended. Note: Not runtime tested due to lack of hardware. Signed-off-by: Massinissa Ghoul <massigh680@gmail.com> Link: https://patch.msgid.link/20260907-hwmon-hih6130-sysfs-emit-v1-1-a1adb5245d0f@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: Add driver for AX3000/AX3005 TSADCPetar Stepanovic
Add a hwmon driver for the temperature sensor ADC (TSADC) controller found on Axiado AX3000 and AX3005 SoCs. The controller measures temperature at locations within the SoC silicon die. Each TSADC controller is registered as a separate hwmon device and exposes one read-only temperature channel. The sensor is configured for continuous conversion during probe. The current TSADC hardware does not support threshold or alarm reporting. All TSADC interrupt sources are masked during initialization, and only the current temperature is exposed through temp1_input. The averaged 12-bit ADC code is converted to millidegrees Celsius using a lookup table with linear interpolation between adjacent entries. Raw values outside the characterized lookup-table range are clamped to the nearest supported temperature. Signed-off-by: Petar Stepanovic <pstepanovic@axiado.com> Link: https://patch.msgid.link/20260903-axiado-ax3000-tsadc-v1-2-a8a0f3b251f5@axiado.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/ltc4286) Add writable shunt_resistor sysfs attributeCarl Lee
The LTC4286/LTC4287 driver uses rsense to scale current and power telemetry. rsense is board-specific rather than a fixed device characteristic, and may differ across qualified BOM variants using the same software image. If rsense does not match the installed board configuration, current and power readings are mis-scaled. Add a writable shunt_resistor sysfs attribute so userspace can update the board calibration value after platform identification. Initialize rsense from shunt-resistor-micro-ohms as before (or the existing default when absent), and validate runtime updates before recalculating the current/power scaling coefficients. Signed-off-by: Carl Lee <carl.lee@amd.com> Link: https://patch.msgid.link/20260907-hwmon-pmbus-ltc4286-add-runtime-shunt-resistor-control-v2-1-5f47f7e5a1bb@amd.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: fix typos in commentsHemanth Selam
Fix typos in comments, reported by scripts/checkpatch.pl using the misspelling list in scripts/spelling.txt. Only touches comments, no code changes. Assisted-by: Cursor:claude-opus-5 Signed-off-by: Hemanth Selam <hemanth.selam@gmail.com> Link: https://patch.msgid.link/20260904114249.26515-1-hemanth.selam@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (asus_rog_ryujin) Add ROG Ryujin III 360Zac Lanzon
Add the USB product ID of the base ASUS ROG RYUJIN III 360 (0b05:1aa2, USB product string "ROG RYUJIN III"). It uses the same status report layout and cooler duty channel as the RYUJIN III EXTREME, EVA and WHITE editions, so it can share rog_ryujin_iii_info. Tested on a ROG RYUJIN III 360: coolant temperature, pump speed and internal fan speed report plausible values that track load, and the internal fan follows pwm2 (30% -> 870 RPM, 40% -> 1590 RPM). Assisted-by: Claude:claude-fable-5-1 Signed-off-by: Zac Lanzon <lanzonza@gmail.com> Link: https://patch.msgid.link/20260903004054.502171-1-lanzonza@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (yogafan) Add support for new Lenovo modelsSergio Melas
Add DMI quirk entries and map correct ACPI paths and configurations for additional Lenovo laptop models: Yoga 14cACN 2021, IdeaPad 3 15ALC6 Ub and Yoga 740-15IML, leveraging DMI product family matching. Signed-off-by: Sergio Melas <sergiomelas@gmail.com> Link: https://patch.msgid.link/20260908094931.2227049-1-sergiomelas@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (asus-ec-sensors) add ROG STRIX Z490-A GAMINGMario Nuevo
The ROG STRIX Z490-A GAMING and Z490-F GAMING are essentially the same board apart from the F's onboard WiFi module, which isn't wired through the EC, so they share the same EC sensor layout. The Z490-A exposes the same EC sensor set as the Z490-F (chipset, CPU, motherboard, T_Sensor and VRM temperatures plus CPU_OPT and VRM HS fans) at the same EC registers, so reuse the Z490-F board_info for it. Signed-off-by: Mario Nuevo <marionuevo@gmail.com> Signed-off-by: Eugene Shalygin <eugene.shalygin@gmail.com> Link: https://patch.msgid.link/20260905080346.1957380-1-eugene.shalygin@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/tps53679) Add support for TPS53622 and TPS53659Sanman Pradhan
TPS53622 and TPS53659 are dual-channel D-CAP+ step-down controllers that use the VID VOUT format and VOUT_MODE identification like the existing TPS53679/TPS53688, so they reuse tps53679_identify(). Shorten the Kconfig prompt to the family name and list the supported chips in the help text instead; this also adds TPS53685, which is already supported by the driver but was missing from the list. Update the driver documentation, including the per-attribute lists, and fix an existing "TPS53588" typo (should be TPS53688) in those lists. Signed-off-by: Sanman Pradhan <psanman@juniper.net> Link: https://patch.msgid.link/20260901211129.360792-3-sanman.pradhan@hpe.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: Add Minisforum UM780 XTX EC monitoring and fan controlSebastián Peyrott
Add a DMI-gated hwmon driver for the embedded controller used by the Minisforum UM780 XTX with board revision 1.1 and BIOS 1.06. Expose the CPU and system fan control temperatures and tachometers. The tachometer protocol returns one byte per OEM command, so serialize transactions and use high-low-high sampling to reject torn values. Allow selecting either complete OEM CPU fan profile through pwm1_enable and changing the two validated system fan transition temperatures through standard automatic-curve attributes. Cache coherent settings and restore them after the firmware reloads defaults following resume. Signed-off-by: Sebastián Peyrott <speyrott@gmail.com> Link: https://patch.msgid.link/20260902000509.191115-1-speyrott@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (spd5118) Avoid probing when 16-bit addressing is enabledArmin Wolf
Support for 16-bit addressing was removed when support for i3c was added to the driver. Switching between 8-bit and 16-bit addressing might confuse the system firmware, so we are forced to bail out if 16-bit addressing was configured during boot. Signed-off-by: Armin Wolf <W_Armin@gmx.de> Link: https://patch.msgid.link/20260901200142.495319-2-W_Armin@gmx.de Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (spd5118) Select page 0 unconditionally during probeArmin Wolf
Some Intel i2c controllers can be configured by the BIOS to reject writes to the SPD device. This often causes problems when the register page needs to be changed, usually during resume. Avoid probing on affected devices by unconditionally selecting page 0 by writing the SPD5118_REG_I2C_LEGACY_MODE register during probe. This will fail on affected controllers and thus prevent the driver from probing. Signed-off-by: Armin Wolf <W_Armin@gmx.de> Link: https://patch.msgid.link/20260901200142.495319-1-W_Armin@gmx.de Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (dell-smm) Add Latitude 5420 to fan control whitelistArmin Wolf
A user reported that the Dell Latitude 5420 needs to be whitelisted for the special SMM calls necessary for globally enabling/disabling BIOS fan control. Reported-by: pp12313124124@gmail.com Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221935 Signed-off-by: Armin Wolf <W_Armin@gmx.de> Link: https://patch.msgid.link/20260901181849.241776-2-W_Armin@gmx.de Acked-by: Pali Rohár <pali@kernel.org> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (dell-smm) Add Dell OptiPlex 7090 to fan control whitelistArmin Wolf
A user reported that the Dell OptiPlex 7090 needs to be whitelisted for the special SMM calls necessary for globally enabling/disabling BIOS fan control. Closes: https://github.com/Wer-Wolf/i8kutils/issues/18 Signed-off-by: Armin Wolf <W_Armin@gmx.de> Link: https://patch.msgid.link/20260901181849.241776-1-W_Armin@gmx.de Acked-by: Pali Rohár <pali@kernel.org> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (asus-ec-sensors) add ROG STRIX X670E-A GAMING WIFIAsai Neko
The ROG STRIX X670E-A GAMING WIFI is missing from the driver's DMI table. Consequently, the board lookup fails with -ENODEV, asus_ec_sensors does not load, and no asusec hwmon device or EC temperature readings are available. The board uses the same EC sensors, access mutex, and AMD 600-series register layout as the ROG STRIX X670E-E GAMING WIFI. Add its DMI entry using the existing X670E-E board information and document the board as supported. Before the change, there was no asusec device under /sys/class/hwmon and there were no EC readings. After the change, the driver registered four sensors with representative readings of 57-61 C for CPU, 68-71 C for CPU package, 43-44 C for motherboard, and 49-52 C for VRM. The readings correlated with nct6775 and k10temp. Repeated polling with both hwmon drivers loaded produced no EC access, bank-switch, concurrent access, or locking errors. Tested on an ASUS ROG STRIX X670E-A GAMING WIFI with BIOS 2704. Signed-off-by: Asai Neko <sugar@sne.moe> Reviewed-by: Eugene Shalygin <eugene.shalygin@gmail.com> Link: https://patch.msgid.link/20260901-asus-x670e-a-hwmon-fix-v2-1-759406c2a61a@sne.moe Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (lm90) Reject channel 2 on chips with only one remote sensorFlaviu Nistor
Validate firmware channel definitions against chip capabilities and return -EINVAL when channel 2 is configured on devices with 1 remote channel. Signed-off-by: Flaviu Nistor <flaviu.nistor@gmail.com> Link: https://patch.msgid.link/20260826184750.4798-3-flaviu.nistor@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (it87) add IT8613E supportbenoit.masson
Teach the Super I/O probe path to recognize IT8613E and add its hardware monitoring configuration. Add feature flags, 11 mV ADC scaling, the IT8665-style PWM register map, six PWM temperature mapping sources, and GPIO pin-mux checks. Only three temperature inputs are currently known, so retain the existing three temperature limit and offset resources. Document the chip in the hwmon guide. Signed-off-by: benoit.masson <yahoo@perenite.com> Signed-off-by: Jerome Tollet <jerome.tollet@gmail.com> Link: https://patch.msgid.link/5afd336442307450f77467b2a749d405970a2099.1788040385.git.jerome.tollet@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (it87) prepare for extended PWM temp mapsbenoit.masson
Introduce helper logic for PWM-to-temperature mappings so newer register layouts can be supported while retaining the legacy two groups of three temperature sources. Honor the four global temperature sources on IT8603E and IT8622E instead of applying the legacy grouping to those chips. Use per-chip masks and shifts for newer extended mappings. Newer controllers keep the duty cycle in a separate register, so write their temperature mapping in both manual and automatic mode. This keeps the selected mapping across cache refreshes and mode changes. On older controllers, defer mapping writes while in manual mode and apply the cached mapping when switching to automatic mode. Signed-off-by: benoit.masson <yahoo@perenite.com> Signed-off-by: Jerome Tollet <jerome.tollet@gmail.com> Link: https://patch.msgid.link/7b4f2befc3d214b646c0582e6410f17e78748b4e.1788040385.git.jerome.tollet@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (it87) describe per-chip PWM temperature mapsbenoit.masson
Add a per-chip count for PWM temperature mapping sources and use it when reporting and validating mappings. Keep existing chips on their previous three-source defaults. This prepares the driver for chips with a different number of mapping sources. Signed-off-by: benoit.masson <yahoo@perenite.com> Signed-off-by: Jerome Tollet <jerome.tollet@gmail.com> Link: https://patch.msgid.link/619425df92463b3c3f9e90f00c527c4009599ea8.1788040385.git.jerome.tollet@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (sht4x): Add support for Sensirion STS4x temperature sensorsAlessandro Zini
The Sensirion STS4x series is the temperature-only variant of the SHT4x family. It shares the same I2C command set, conversion formulas, CRC checksum, and timing with the SHT4x, but only returns temperature data (3 bytes: 2 data bytes + 1 CRC byte). Add support for the STS4x series by dynamically adjusting the read response length, suppressing humidity channel attributes when probed as STS4x, and omitting heater sysfs attributes. Link: https://sensirion.com/resource/datasheet/sts4x Signed-off-by: Alessandro Zini <alessandro.zini@siemens.com> Link: https://patch.msgid.link/20260821091924.18975-3-alessandro.zini@siemens.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/tps25990) Add TPS1689 supportStoyan Bogdanov
Extend the existing TPS25990 driver to support the TPS1689 eFuse, as both devices share the same command interface and functionality. Update the documentation to include TPS1689 support. Signed-off-by: Stoyan Bogdanov <sbogdanov@baylibre.com> Link: https://patch.msgid.link/20260817101455.3526260-4-sbogdanov@baylibre.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus/tps25990) Rework driver for multi-device supportStoyan Bogdanov
Rework existing implementation to allow adding support for new devices to the existing driver. chip_id is used to identify the current device and differentiate logic where needed. Changes include: - Add an enum listing supported chips - Add a structure to hold per-device m, b, R coefficients Signed-off-by: Stoyan Bogdanov <sbogdanov@baylibre.com> Link: https://patch.msgid.link/20260817101455.3526260-2-sbogdanov@baylibre.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: Add fan monitoring support for HONOR FMI-XXNikita Dubrovskih
The HONOR FMI-XX firmware exposes a serialized \\GFNS ACPI method. It returns a status byte and a 16-bit fan speed in RPM for either of two firmware channels. Add a DMI-restricted, read-only hwmon driver using that firmware interface. The driver deliberately exposes no fan control or direct Embedded Controller access. The interface was validated on firmware 1.09 with fan channel 0 reporting approximately 2500-2800 RPM. Channel 1 is readable and remained at 0 RPM during idle and a short CPU load. Signed-off-by: Nikita Dubrovskih <testname142@gmail.com> Link: https://patch.msgid.link/20260815234041.2262291-1-testname142@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (yogafan) Add Lenovo Yoga Pro 9 16IMH9rahlquist
The Lenovo Yoga Pro 9 16IMH9 (83DN) exposes its fan tachometers at ACPI paths different from the generic Yoga configuration. Add a model-specific two-fan configuration for the PC00.LPCB.EC0 namespace and document the corrected mapping. Tested on a Lenovo Yoga Pro 9 16IMH9 (83DN) with BIOS NKCN35WW: the patched module registers fan1_input and fan2_input, both reporting 1800 RPM at idle. Signed-off-by: Richard Ahlquist <rahlquist@gmail.com> Link: https://patch.msgid.link/20260813164746.105154-1-rahlquist@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: Add support for currX_emergency and inX_[l]emergency attributesGuenter Roeck
Some hardware monitoring chips support three alarm levels for current and voltage high limits, and three alarm levels for voltage low limits. Add support for currX_emergency, inX_emergency, and inX_lemergency attributes together with the appropriate alarm attributes to support such chips. Cc: Manaf Meethalavalappu Pallikunhi <manaf.pallikunhi@oss.qualcomm.com> Tested-by: Manaf Meethalavalappu Pallikunhi <manaf.pallikunhi@oss.qualcomm.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Link: https://patch.msgid.link/20260813211433.879638-1-linux@roeck-us.net Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (hp-wmi-sensors) Improve raw WMI string handlingJames Seo
Commit c9ba59258094 ("hwmon: (hp-wmi-sensors) Fix failure to load on EliteDesk 800 G6") left out some logic for recognizing raw WMI strings in check_numeric_sensor_wobj(). This issue was reported by a user along with an incomplete and unsuitable proposed solution [1]. Add the missing logic and properly remedy the issue. Also slightly refactor how raw WMI strings are recognized elsewhere to make the intent that they should be treated as regular ACPI strings clearer. Reported-by: Muhammad Bilal <meatuni001@gmail.com> Link: https://lore.kernel.org/linux-hwmon/20260916002907.161210-1-meatuni001@gmail.com/ [1] Fixes: c9ba59258094 ("hwmon: (hp-wmi-sensors) Fix failure to load on EliteDesk 800 G6") Signed-off-by: James Seo <james@equiv.tech> Link: https://patch.msgid.link/20260916221912.434119-5-james@equiv.tech Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (pmbus/tps53679) Select page 0 for single-page TPS53676Sanman Pradhan
tps53676_identify() derives the number of PMBus pages but does not ensure that page 0 is selected for single-page configurations. pmbus_set_page() does not update the PAGE register when info->pages is 1, so if boot firmware leaves PAGE set to another value subsequent register accesses may target the wrong page. For single-page devices, select page 0 explicitly. Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676") Cc: stable@vger.kernel.org Signed-off-by: Sanman Pradhan <psanman@juniper.net> Link: https://patch.msgid.link/20260916235406.681131-2-sanman.pradhan@hpe.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (pmbus/tps53679) Fix TPS53676 phase page decodingSanman Pradhan
tps53676_identify() reads the USER_DATA_03 phase configuration to count the phases assigned to each channel and derive the number of PMBus pages. In each 16-bit phase descriptor the channel (PAGE) is encoded in bit 4 and the firing order in bits 3:0, but the code tested bit 3 (0x08), which is part of the firing-order field. TPS53676 supports up to seven phases, so firing-order bit 3 is never set. As a result the existing test classifies every enabled phase as channel A. On a dual-channel configuration the phases assigned to channel B are therefore miscounted as channel A and page 1 is not exposed. Test the PAGE field (bit 4) instead. Fixes: cb3d37b59012 ("hwmon: (pmbus/tps53679) Add support for TI TPS53676") Cc: stable@vger.kernel.org Signed-off-by: Sanman Pradhan <psanman@juniper.net> Link: https://patch.msgid.link/20260915164823.160977-2-sanman.pradhan@hpe.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (hp-wmi-sensors) Fix use-after-free in fungible_show()Muhammad Bilal
nsensor->current_state is dynamically replaced as the sensor's state changes. update_numeric_sensor_from_wobj() does this by freeing the old string and installing a new one: if (strcmp(trimmed, nsensor->current_state)) { new_string = hp_wmi_strdup(dev, trimmed); if (new_string) { devm_kfree(dev, nsensor->current_state); nsensor->current_state = new_string; } } This function is only ever called from hp_wmi_update_info() while state->lock is held, so the free-and-replace itself is properly serialized against concurrent updates. fungible_show(), however, reads the same pointer after the lock has already been dropped: err = hp_wmi_update_info(state, info); if (err) return err; switch (prop) { ... case HP_WMI_PROPERTY_CURRENT_STATE: seq_printf(seqf, "%s\n", nsensor->current_state); break; hp_wmi_update_info() takes state->lock internally and releases it before returning, so by the time fungible_show() dereferences nsensor->current_state in seq_printf(), no lock is held. Two processes reading a sensor's current_state debugfs entry at overlapping times (or one reading it while another read of the same sensor triggers a refresh) can race: one thread's seq_printf() can be part-way through printing the string at the moment another thread's call into update_numeric_sensor_from_wobj() frees it with devm_kfree() and installs a new pointer, causing a use-after-free read. Take state->lock around the read in fungible_show() as well, so it can never run concurrently with the free-and-replace in update_numeric_sensor_from_wobj(). Fixes: 23902f98f8d4 ("hwmon: add HP WMI Sensors driver") Cc: stable@vger.kernel.org Signed-off-by: Muhammad Bilal <meatuni001@gmail.com> Acked-by: James Seo <james@equiv.tech> Link: https://patch.msgid.link/20260916002926.161595-1-meatuni001@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
7 dayshwmon: (w83793) release probe data through krefGuangshuo Li
w83793_probe() initializes data->kref to manage the lifetime of the driver data. The normal remove path drops the driver-owned reference with kref_put(), while watchdog users take and release additional references through the same kref. However, the probe error path still frees data directly with kfree(). This bypasses the kref-managed lifetime and discards the initial reference without a matching kref_put(), leaving the reference accounting unbalanced. Drop the probe-owned reference with kref_put() instead and let w83793_release_resources() perform the final free, matching the normal remove path. This issue was found by manual code inspection. Fixes: 5852f9609d21 ("hwmon: (w83793) Add watchdog functionality") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com> Link: https://patch.msgid.link/20260914073638.1662500-1-lgs201920130244@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>