summaryrefslogtreecommitdiff
path: root/drivers/hwmon
AgeCommit message (Collapse)Author
29 hoursMerge branch 'headers' of git://git.infradead.org/users/willy/pagecache.gitMark Brown
# Conflicts: # net/ceph/osd_client.c
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: 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>
43 hourshwmon: 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>
43 hourshwmon: (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>
43 hourshwmon: axiado-tsadc: Add AX3000/AX3005 TSADC supportPetar 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>
43 hourshwmon: (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>
43 hourshwmon: 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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: 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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: 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>
43 hourshwmon: 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>
43 hourshwmon: 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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: (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>
43 hourshwmon: 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>
43 hourshwmon: (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>
43 hourshwmon: 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>
44 hourshwmon: (cgbc-hwmon) Add some temperature sensorsThomas Richard (congatec GmbH)
Add the following temperature sensors: - Alternate Board Temperature (temp11_input) - Top DIMM 1-7 temperature (temp12_input to temp18_input) - Bottom DIMM 1 temperature (temp19_input) This fixes the following warning on conga-SA7: Board Controller returned an unknown sensor (bc_type=1, bc_id=11), ignore it Also update existing labels to match Congatec documentation. Cc: stable@kernel.org Fixes: 08ebc9def79f ("hwmon: Add Congatec Board Controller monitoring driver") Signed-off-by: Thomas Richard (congatec GmbH) <thomas.richard@bootlin.com> Link: https://patch.msgid.link/20260910-cgbc-hwmon-fix-and-new-sensors-v1-2-ef13ae2fa147@bootlin.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
44 hourshwmon: (cgbc-hwmon) Fix current sensors ID lookupThomas Richard (congatec GmbH)
Current sensors on the Congatec Board Controller don't use consecutive IDs, unlike other sensor types (voltage, temperature, fan). The driver assumed consecutive IDs and performed a simple lookup, which caused an unknown sensor warning. Define current sensor IDs explicitly. Changes the warning on conga-SA7 (type and channel are correct now). Before: Board Controller returned an unknown sensor (type=2, channel=17), ignore it After: Board Controller returned an unknown sensor (bc_type=1, bc_id=11), ignore it Cc: stable@kernel.org Fixes: 08ebc9def79f ("hwmon: Add Congatec Board Controller monitoring driver") Signed-off-by: Thomas Richard (congatec GmbH) <thomas.richard@bootlin.com> Link: https://patch.msgid.link/20260910-cgbc-hwmon-fix-and-new-sensors-v1-1-ef13ae2fa147@bootlin.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
44 hourshwmon: (k10temp) Fix model id range of Zen5 TurinRong Zhang
Model 20h-2Fh are mobile processors with single CCD. For example, model 24h is Strix Point, i.e., Ryzen AI 7 (PRO) (H/HX) 360/365/370. Including mobile processors in the model id range of Zen5 Turin processors leads to bogus reporting: k10temp-pci-00c3 Adapter: PCI adapter Tctl: +54.1°C Tccd4: +148.6°C Tccd6: +148.4°C Tccd7: +149.1°C Tccd8: +149.2°C Tccd9: +149.2°C Tccd12: +149.1°C Tccd14: +22.0°C Tccd15: +22.0°C Tccd16: +22.0°C Fix it by removing the said range. Fixes: 8440d5aca227 ("hwmon: (k10temp) Add per-CCD temperature monitoring for Zen5 Turin") Signed-off-by: Rong Zhang <i@rong.moe> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/20260911-k10temp-fix-zen5-epyc-v1-1-643f5a248ae1@rong.moe Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (nct6694) do not expose enable on DTIN temperature channelsAli Ahmet Memis
The driver registers 26 temperature channels, all advertising HWMON_T_ENABLE, and indexes the enable bitmap with the raw channel: data->hwmon_en.tin_en[channel / 8] |= BIT(channel % 8); tin_en is two bytes and only covers the 5 THR and 5 TDP channels (index 0-9). The 16 DTIN channels (index 10-25) are enabled by the firmware and were never meant to carry an enable bit. Because the control structure is packed, writing temp17_enable and above indexes past tin_en into the fin_en bytes that follow it, so it toggles fan enable state instead; nct6694_hwmon_init() then sends the whole structure back to the device, and reads report fan state as temperature state. It stays within the structure, so this is not a memory safety problem, but on a board that uses the fan channels it is not harmless. Give the DTIN channels a temperature config without HWMON_T_ENABLE so the core never creates their enable attribute. The enable path is then reachable only for the first 10 channels, which stay within tin_en, and fin_en is left alone. The DTIN input and limit attributes are unchanged. Fixes: 197e779d29d8 ("hwmon: Add Nuvoton NCT6694 HWMON support") Suggested-by: Ming Yu <tmyu0@nuvoton.com> Link: https://lore.kernel.org/all/20260802124730.20387-1-ali@iusegentoo.com/ Signed-off-by: Ali Ahmet Memis <ali@iusegentoo.com> Link: https://patch.msgid.link/20260803102148.14196-1-ali@iusegentoo.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (asus_rog_ryujin) Synchronize HID command and report handlingArie Miller
rog_ryujin_execute_cmd() holds status_report_request_lock while reinitializing a completion, intending to exclude raw-event handling. However, rog_ryujin_raw_event() does not acquire the lock when it updates the completion. A response can therefore race with reinit_completion() and be lost, leaving the command to time out. Hold the lock while parsing reports and updating their completions. Use the irqsave variants in both paths because raw-event handling may run in interrupt context. Fixes: ed3e03790c5c ("hwmon: Add driver for ASUS ROG RYUJIN II 360 AIO cooler") Reported-by: Sashiko <sashiko-bot@kernel.org> Closes: https://lore.kernel.org/linux-hwmon/20260812104617.858D01F000E9@smtp.kernel.org/ Cc: stable@vger.kernel.org Assisted-by: Codex:gpt-5.6-sol sparse Signed-off-by: Arie Miller <renari@arimil.com> Link: https://patch.msgid.link/20260904022129.97896-3-renari@arimil.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (asus_rog_ryujin) Validate HID report lengthsArie Miller
rog_ryujin_raw_event() parses response headers and payload fields without first checking that they are present in the received report. A short report can therefore make the driver consume uninitialized bytes from the HID transport buffer and expose them as sensor values through sysfs. Validate the response header and the fields used by each response type before parsing them. Fixes: ed3e03790c5c ("hwmon: Add driver for ASUS ROG RYUJIN II 360 AIO cooler") Reported-by: Sashiko <sashiko-bot@kernel.org> Closes: https://lore.kernel.org/linux-hwmon/20260812104617.858D01F000E9@smtp.kernel.org/ Cc: stable@vger.kernel.org Assisted-by: Codex:gpt-5.6-sol sparse Signed-off-by: Arie Miller <renari@arimil.com> Link: https://patch.msgid.link/20260904022129.97896-2-renari@arimil.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (corsair-cpro) Remove debugfs entries when probe failsLinmao Li
ccp_debugfs_init() registers debugfs files whose private data is the devm allocated ccp. If hwmon_device_register_with_info() fails right after it, ccp_probe() returns without removing them: the HID core then frees ccp, and ccp_remove() is not called for a failed probe, so the files stay behind. Reading one of them dereferences the freed pointer. Remove the debugfs entries on that error path. debugfs_remove_recursive() waits for readers already inside the show callbacks, so ccp is no longer reachable through debugfs by the time probe returns. Reported-by: Sashiko <sashiko-bot@kernel.org> Closes: https://lore.kernel.org/linux-hwmon/20260708031612.BD7E61F000E9@smtp.kernel.org/ Fixes: 5997eb60f896 ("hwmon: (corsair-cpro) Add firmware and bootloader information") Signed-off-by: Linmao Li <lilinmao@kylinos.cn> Link: https://patch.msgid.link/20260828061949.3151191-1-lilinmao@kylinos.cn Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (aspeed-pwm-tacho) Propagate reset deassert errorsPengpeng Hou
aspeed_pwm_tacho_probe() installs its reset cleanup action and configures the controller after an unchecked reset deassertion. Stop probing when the reset controller rejects the transition, before the hwmon device becomes visible. Fixes: 18c514cc0e02 ("hwmon: (aspeed-pwm-tacho) Deassert reset in probe") Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn> Link: https://patch.msgid.link/20260830125044.97718-1-pengpeng@iscas.ac.cn Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (gpio-fan) take fan_data->lock in gpio_fan_shutdown()Cong Nguyen
set_fan_speed() writes the control GPIOs one bit at a time. Every other caller locks around it; gpio_fan_shutdown() doesn't. If it races a locked caller, the GPIO writes can interleave and leave the fan at a speed neither caller asked for. Fixes: b95579cd8795 ("hwmon: (gpio-fan) Add a shutdown handler to poweroff the fans") Reported-by: Sashiko AI review <sashiko-bot@kernel.org> Link: https://lore.kernel.org/r/20260830152150.27F5F1F000E9@smtp.kernel.org Assisted-by: Claude:claude-opus-4 Signed-off-by: Cong Nguyen <congnt264@gmail.com> Link: https://patch.msgid.link/20260901155404.1532092-1-congnt264@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (corsair-cpro) Create debugfs entries after hwmon registrationLinmao Li
ccp_debugfs_init() registers debugfs files whose private data is the devm allocated ccp. It runs before hwmon_device_register_with_info(), so when that registration fails, ccp_probe() returns with the files still in place. The HID core then frees ccp, and ccp_remove() is not called for a failed probe, so nothing removes them later either. Reading one of the files dereferences the freed pointer. Create the debugfs entries only after the hwmon device has been registered, so no failing path can leave them behind. The two version queries stay where they are. They send USB commands without holding ccp->mutex, which is only safe as long as nothing else can call send_usb_cmd(); once the hwmon device is registered its callbacks can do so concurrently. Only the debugfs creation moves, and it is told which queries succeeded. Reported-by: Sashiko <sashiko-bot@kernel.org> Closes: https://lore.kernel.org/linux-hwmon/20260708031612.BD7E61F000E9@smtp.kernel.org/ Suggested-by: Guenter Roeck <linux@roeck-us.net> Fixes: 5997eb60f896 ("hwmon: (corsair-cpro) Add firmware and bootloader information") Signed-off-by: Linmao Li <lilinmao@kylinos.cn> Link: https://patch.msgid.link/20260831014509.3352442-1-lilinmao@kylinos.cn Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (pmbus) Clear generic status alarms with CLEAR_FAULTSVishnu Razdan
Some hwmon alarms fall back to STATUS_WORD summary bits when no individual limit alarm is available. On PMBus 1.2 and newer devices, pmbus_get_boolean() acknowledges these alarms with the same byte-data write used for detailed status registers. For example, PB_STATUS_INPUT is 0x2000, so it is truncated to zero when passed to _pmbus_write_byte_data(). The resulting write cannot acknowledge the input alarm. PMBus 1.3 Part II, sections 10.2.4 and 10.2.5, excludes ordinary STATUS_BYTE and STATUS_WORD summary bits from individual clearing. Their summary bits clear when the underlying status bits clear, so changing this to a word-data write would not fix the generic input alarm either. Use the existing page CLEAR_FAULTS path for generic STATUS_WORD alarms, including devices whose status accessor uses STATUS_BYTE. Keep individual byte writes for detailed status registers on PMBus 1.2 and newer devices. As with the existing older-device fallback, CLEAR_FAULTS can clear other latched status; an active condition can reassert its status. Fixes: 35f165f08950 ("hwmon: (pmbus) Clear pmbus fault/warning bits after read") Cc: stable@vger.kernel.org Assisted-by: LLM Signed-off-by: Vishnu Razdan <vrazdan@openai.com> Link: https://patch.msgid.link/20260824-vrazdan-pmbus-status-word-b4-v1-1-2606ecd0c029@openai.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
3 dayshwmon: (chipcap2) fix channels in humidity alarm notificationsJavier Carrasco
hwmon_notify_event() expects the channel number as its last argument, taken into account with the type parameter that it is a humidity sensor type. Given that this device only provides one humidity channel, 0 must be passed. The custom construct to enumerate the channels makes wrong assumptions by listing all types together (temperature and humidity). Remove the custom channel enumeration and pass the right channel to hwmon_notify_event() for hwmon_humidity_min_alarm and hwmon_humidity_max_alarm. Fixes: 3af350929e75 ("hwmon: Add support for Amphenol ChipCap 2") Cc: stable@vger.kernel.org Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com> Link: https://patch.msgid.link/20260823-chipcap2_locks-v2-1-6a26c8e9e2fc@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (applesmc) fix key backlight workqueue leak on register failureCong Nguyen
applesmc_create_key_backlight() allocates applesmc_led_wq before calling led_classdev_register(). When register fails, the error is returned to applesmc_init(), which jumps to out_light_sysfs and skips applesmc_release_key_backlight(), leaking the workqueue. Destroy the workqueue on the register failure path. The bug was introduced when the inline init block was refactored into a helper that returns errors directly, dropping the old out_light_wq unwind label. Fixes: 0b0b5dff8967 ("hwmon: (applesmc) Simplify feature sysfs handling") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4 Signed-off-by: Cong Nguyen <congnt264@gmail.com> Link: https://patch.msgid.link/20260828105413.2401385-1-congnt264@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (sht4x) Fix return value from heater_enable_store()Guenter Roeck
Sashiko reports: The return value in heater_enable_store() causes an unexpected write failure in user-space. When the heater is successfully enabled, the function returns 0 instead of count: drivers/hwmon/sht4x.c:heater_enable_store() { ... data->heating_complete = jiffies + msecs_to_jiffies(heating_time_bound); data->data_pending = true; return 0; } Returning 0 signals to VFS that no bytes were processed. Standard user-space tools will retry the write with the remaining bytes. On the retry, time_before(jiffies, data->heating_complete) evaluates to true, and the function immediately fails with -EBUSY. Return count as expected to fix the problem. Fixes: 0eed6fc3d2b9e ("hwmon: (sht4x): add heater support") Cc: Antoni Pokusinski <apokusinski01@gmail.com> Cc: Alessandro Zini <alessandro.zini@siemens.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Link: https://patch.msgid.link/20260821144916.2889031-2-linux@roeck-us.net
5 dayshwmon: (sht4x) Add missing locksGuenter Roeck
Sashiko reports: Heater sysfs callbacks (heater_enable_store, heater_power_store, and heater_time_store) are exposed to data races without the hwmon lock. If a user-space process reads hwmon data while another process enables the heater, heater_enable_store() executes without holding hwmon_lock(dev). This can interleave I2C commands and mutate shared state (data->heating_complete and data->data_pending) concurrently with sht4x_read_values(), leading to corrupted I2C sequences. Fixes: 53dfa12299c1 ("hwmon: (sht4x) Rely on subsystem locking") Cc: Alessandro Zini <alessandro.zini@siemens.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Link: https://patch.msgid.link/20260821144916.2889031-1-linux@roeck-us.net
5 dayshwmon: (yogafan) fix non-kernel-doc commenthanzhijian
The file description comment starts with "/**" which is reserved for kernel-doc comments, triggering a kernel-doc checker warning. Change it to a plain "/*" comment since it does not document any function or struct. Fixes: c67c248ca406a ("hwmon: (yogafan) Add support for Lenovo Yoga/Legion fan monitoring") Signed-off-by: hanzhijian <hanzhijian1991@gmail.com> Link: https://patch.msgid.link/20260821115720.2017516-1-hanzhijian1991@gmail.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (ina2xx) Decouple in0 and curr1 alarmsJared Kangas
INA2XX current limits are converted into shunt voltage limits internally using the shunt resistor value. Once a current limit's corresponding voltage limit is written to the hardware, shunt voltage and current alarms are indistinguishable from each other. This causes two issues: 1. in0/curr1 alarms may be unintentionally cleared by reading from the opposite input's alarm. 2. When a limit for either in0 (shunt voltage) or curr1 (current) is set, both of their alarms are triggered, and both of their limits read nonzero. An example of this behavior on an INA231: # cd /sys/class/hwmon/hwmon0 # head {curr1,in0}_input ==> curr1_input <== 1713 ==> in0_input <== 2 # echo 1800 >curr1_lcrit # head {curr1,in0}_lcrit_alarm ==> curr1_lcrit_alarm <== 1 ==> in0_lcrit_alarm <== 0 # head {in0,curr1}_lcrit_alarm ==> in0_lcrit_alarm <== 1 ==> curr1_lcrit_alarm <== 0 # head {in0,curr1}_lcrit_alarm ==> in0_lcrit_alarm <== 1 ==> curr1_lcrit_alarm <== 1 This is because curr1 uses the same underlying masks (INA226_SHUNT_*_VOLTAGE_MASK) as in0 on the hardware. As a result, ina2xx_{curr,in}_read() both read the shunt voltage alarms/limits without considering whether the voltage or current is currently set. To fix this, track the active alarm type in ina2xx_data and guard alarm/limit reads with a check that returns zero if the active alarm is for a different type. The new field is initialized based on the MASK_ENABLE register's set function, assuming voltage instead of current when the shunt voltage mask is set. After this fix, the alarms only read back 1 if their corresponding limit is set: # echo 0 >curr1_lcrit # head {curr1,in0}_lcrit_alarm ==> curr1_lcrit_alarm <== 0 ==> in0_lcrit_alarm <== 0 # echo 9999 >curr1_lcrit # head {curr1,in0}_lcrit_alarm ==> curr1_lcrit_alarm <== 1 ==> in0_lcrit_alarm <== 0 # echo 9999 >in0_lcrit # head {curr1,in0}_lcrit_alarm ==> curr1_lcrit_alarm <== 0 ==> in0_lcrit_alarm <== 1 Fixes: 4d5c2d986757 ("hwmon: (ina2xx) Add support for current limits") Signed-off-by: Jared Kangas <jkangas@redhat.com> Link: https://patch.msgid.link/20260820-upstream-ina2xx-in0-curr1-alarms-v2-4-fdce35abc41e@redhat.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (ina2xx) Replace masks with enum in alert functionsJared Kangas
Instead of passing an explicit mask to alert/limit functions like ina226_alert_read(), introduce an enum ina2xx_alert_type that can be converted to a mask internally. This semantically separates current from shunt voltage in helpers that use function masks, which previously saw the same mask for the two functions. Signed-off-by: Jared Kangas <jkangas@redhat.com> Link: https://patch.msgid.link/20260820-upstream-ina2xx-in0-curr1-alarms-v2-3-fdce35abc41e@redhat.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (ina2xx) Parameterize ina2xx_data in ina226_alert_read()Jared Kangas
Mirror ina226_alert_limit_read/write and use struct ina2xx_data instead of struct regmap in ina226_alert_read's parameters. Signed-off-by: Jared Kangas <jkangas@redhat.com> Link: https://patch.msgid.link/20260820-upstream-ina2xx-in0-curr1-alarms-v2-2-fdce35abc41e@redhat.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: Ensure that 'dev' passed to hwmon_notify_event() is a hwmon deviceGuenter Roeck
The device parameter of hwmon_notify_event() must be a hardware monitoring device. Since this is easy to get wrong, and since passing a non-hwmon device may result in a crash, generate a warning traceback and abort if a wrong device class is passed as parameter. Signed-off-by: Guenter Roeck <linux@roeck-us.net>
5 dayshwmon: (ina2xx) Acquire hwmon_lock in shunt_resistor_show()Jared Kangas
shunt_resistor_store() currently acquires hwmon_lock to set data->rshunt, but the corresponding access in shunt_resistor_show() is unprotected. Acquire the lock in shunt_resistor_show() as well to ensure proper synchronization. Fixes: 3ad867001c91 ("hwmon: (ina2xx) fix sysfs shunt resistor read access") Reported-by: Sashiko <sashiko-bot@kernel.org> Closes: https://lore.kernel.org/all/20260729162836.89BDF1F00A3A@smtp.kernel.org/ Signed-off-by: Jared Kangas <jkangas@redhat.com> Link: https://patch.msgid.link/20260820-upstream-ina2xx-in0-curr1-alarms-v2-1-fdce35abc41e@redhat.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>