From nobody Sat Jul 25 04:55:26 2026 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.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 AD62A38F249 for ; Fri, 17 Jul 2026 20:59:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321977; cv=none; b=jo/bcSpefyHIF7h8Hum9wfbBHf0HjQtKbMd/cdqBoCBDGsRedJve4kvxhbyRYqYzB2hG4aZ3MtRaSIw/DJwcF7xZmAf23hs3zZOLOY1t7f52u81fibbPcyDxVbGRp99ZPODRaUoJztNZheiEFl6/sFTI+DrKr0ZBDx4lY95KPMk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321977; c=relaxed/simple; bh=xeMJkUp+9bHx+elzCT+IwDbJFiAPwzNnM2mZU7LP9TQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Hu4262wKWW4f0dvff+mZBvYSaSfVIeJYDsrTm+y0Zm9ry5WdcexqKXMBohkIFw/13aCYUIotZdHBGTTdM7+Sh3VY5hTg2gEHEqYl654GGTANmw3TYv3Q792nNM2VoctfTpDKnO+Y+pG4JC3VO5FdVvIU7MjpBcAHI0WnkcOXovw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FC5/LyEC; arc=none smtp.client-ip=209.85.128.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com 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="FC5/LyEC" Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-80e2cfe6918so41175887b3.0 for ; Fri, 17 Jul 2026 13:59:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784321975; x=1784926775; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Wb5kISc8J94n8IdvHv41Cz+DWVxzSUvjB7qt5LTjR6g=; b=FC5/LyECWcoenTWRifsw5+V138Cq0DF33CDN226tfBQNkmYdd2NqQDztzgWZ9Jz0zb fNsHB9NGb6ZDgzCatEKaWB/cfGSCqVSjOfiNQZ8lOUJDERcHxCAXydDGBjo03bP8bn2I eI2PUliFgpFlcn7FPSZJwrmZb2XRUsf5lyTPaZjSgwzpMieF0CC3IeUn63l5gV2T+u5X wAZmbVi4tA+PRAzJg4ik+mmuX1A+h/5uptVY152jvVAacY2i1I5b60a3bRrjMHd4fXbb nS87JLGB+w9dTuoubSilQ9CEVkfrte5iSZFgtKJBz8wP8reUpOrBTWjWTQ7YS/3YucTz wq8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784321975; x=1784926775; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Wb5kISc8J94n8IdvHv41Cz+DWVxzSUvjB7qt5LTjR6g=; b=dodKuOWSiBL7cbMAE3JwO8fsna18RvPzmso6E5JaISZIZyg4k6xS0oI0s1vcjP1tRu 4mg8YZi0TQckIcn52yKK3wvdAUDYA5jlKhtv7lTVKF/pcEmMrc6+zJeURqSG3I8MMER6 JtRFFB7FRXjjnniV+PXyjo9KCSiHBWbC+2nLFNujsZec/rtJmo6LJ+eZ705pcy2Y6rZ+ 83p4W24EDt4m7bQqUTwVa+IojI1/nwzqiUZ/D6JmoQmFNmI6Of5C7tl98E/zTdBJGipo VNMq+TayeiS5jmiexd08Ozduk+KkIUSjX6bU9bhvbxbZ2onJ16mk+pWMwxzYLCYp6Fdz psRg== X-Forwarded-Encrypted: i=1; AHgh+RqEYrN9qNeJ8uUj1X0bDOF4aNVpDpGxM25wtTTsx4uuykbweVmwV4+h8+k6n9dTBfPfy5IjyVt00BeZtWQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyZgS2kor9KInWdo9EekxwPJAtiBV1DVw/6a1z5wstviyuL4BLJ eej1vFZJfo04zluehzq3dvnyejW2hMrMb2LiTSrhBai8MR82zWasBRjTM+Fpe5GJ X-Gm-Gg: AfdE7clu/ehM2YBUbiks/61FxRK4OnjM6PBbii47bFR+G+5VvNZyAIK1VoIGfYptY9L OVH9G/A8YwOd6n569+obzpDdDcslRVkuGdlZ0HKfsJ7KYAK2RBreAf/tLxO7020/Hn9zPXlvrIx e1wuLzhNhktmrE4ffTx40wEqtm++vGBDvakajFUSNvMnaHdov4a65jh12kNknwXaXJEJNmeiUmf 1SyhPP3bJIWv9NztZ9KzbKCekBovjNpW+EQv3/qel2hVTvbdPi7fk5Mbr/GbLc1XKPqbxiH7odY 80d5vnIF3cQfOZuZGXkurplBUxf7jeg1PW6/ec1SLdvHFIAfUxY75A3OtrTF2S4NM9l31rLDC0v SsXoO9wtb92HRzsXgYwWLIQqtoHlh0A5V9LEyAZ/bXRbl4ABkISK9uLanGn8uNq/drBgyGW+22h 1mC6QNqOSBBH0dZTBU X-Received: by 2002:a05:690c:7204:b0:81d:7bfc:40b5 with SMTP id 00721157ae682-81ef25e17f4mr14846097b3.42.1784321974593; Fri, 17 Jul 2026 13:59:34 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81ef3e6656dsm20013647b3.0.2026.07.17.13.59.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 13:59:33 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Fri, 17 Jul 2026 17:59:14 -0300 Subject: [PATCH v2 1/6] dt-bindings: hwmon: add binding for adi,adt7470 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260717-adt7470_thermalzone-v2-1-a55147958fad@gmail.com> References: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> In-Reply-To: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Packham , Andrew Morton , "Darrick J. Wong" , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luiz Angelo Daros de Luca , linux-pwm@vger.kernel.org X-Mailer: b4 0.15.2 The Analog Devices ADT7470 is a temperature monitor and PWM fan controller. It supports up to 10 external temperature sensors and up to 4 PWM fan outputs. Add the YAML device tree binding documentation for it. This includes support for the thermal framework by defining the "#thermal-sensor-cells" property, and support for the PWM subsystem by defining the "#pwm-cells" property. Signed-off-by: Luiz Angelo Daros de Luca --- .../devicetree/bindings/hwmon/adi,adt7470.yaml | 62 ++++++++++++++++++= ++++ 1 file changed, 62 insertions(+) diff --git a/Documentation/devicetree/bindings/hwmon/adi,adt7470.yaml b/Doc= umentation/devicetree/bindings/hwmon/adi,adt7470.yaml new file mode 100644 index 000000000000..14bb6359c91f --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/adi,adt7470.yaml @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/hwmon/adi,adt7470.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Analog Devices ADT7470 hwmon sensor + +maintainers: + - Luiz Angelo Daros de Luca + +description: | + The ADT7470 is a temperature monitor and multiple PWM outputs. + It supports monitoring up to 10 external temperature sensors and control= ling + up to four fans. + +properties: + compatible: + const: adi,adt7470 + + reg: + maxItems: 1 + + "#pwm-cells": + const: 2 + description: | + Number of cells in a PWM specifier. + - The first cell is the PWM channel (0 to 3). + - The second cell is the PWM period in nanoseconds. + + "#thermal-sensor-cells": + const: 1 + description: | + Number of cells required to uniquely identify the temperature sensor= s. + Valid index values are 0 to 9, corresponding to temp1 through temp10. + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + adt7470: hwmon@2f { + compatible =3D "adi,adt7470"; + reg =3D <0x2f>; + #pwm-cells =3D <2>; + #thermal-sensor-cells =3D <1>; + }; + }; + + fan0 { + compatible =3D "pwm-fan"; + /* Connects to PWM channel 0 with a 50000 ns (20 kHz) period */ + pwms =3D <&adt7470 0 50000>; + cooling-levels =3D <0 100 150 255>; + }; --=20 2.55.0 From nobody Sat Jul 25 04:55:26 2026 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.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 34761384CCA for ; Fri, 17 Jul 2026 20:59:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321982; cv=none; b=RtxNz4C3Mu1Gkpmj6Qxk0OP4oF+Y7Li5qlR5sqpUZUfNGGk1kzaFFvnJYwlZD0lJACJfu7lrvaUFJ1a7H+pYCtSzh7a36Wj6fy6dsgUNhlWIYeb47Am2zZaZSP7jUfiEsS+hW+lbAaPHVkrzniizUy+NAzFVDM4k3/bnWaUqAXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321982; c=relaxed/simple; bh=w1Hv0r2r6jSycHFUZO7pD+HmNcQNoWtICO6sg/Lwaxs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LHEDUCxXxvy8a+Na2kNip7WM6d4SWqEKvOCvCTjTe+3i4uJpaIS9yfvo4XCHRTh1PlUpMtasYgIVj5v9KBV5JRVKj+bjyoCt97/SyV+TreSG0vu3RUZxt9zIyKnCfuTDpgQC1XuxJjuH8EqrUH01FyshCltLLfoSDPs/zdKhyPw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CHoTu5ib; arc=none smtp.client-ip=209.85.128.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com 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="CHoTu5ib" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-81ed073fed0so50869567b3.0 for ; Fri, 17 Jul 2026 13:59:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784321980; x=1784926780; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sc68CqtTOQLhSPfGgDFsVsO0c0+MZYn4nDNljvauFns=; b=CHoTu5ibtN6UTy/xBmB5jPCKVuHXmqV8nDwXlx0b5pFrJaYktU6402wZ5P+GYdbleu aWFAjDCjhE8dO1On0eo/WqV52V6iGZfPG7uTETXFpZd5KcAQO8AbKq3nL2RUVAROSOUu 5DolgkfCNwd3DqGM7rcnZ00SbZA6wb5TNySrJEzWtiWmqRtWa9L0GLAcIi7OMKPqr2/d hzWvDtQeQGsMIcpKh9CG6dxp+FXv/vViO22MEh3PJu/SXRU07JdXgToQWHLH6qNgyouq FonfB29zzETZtS3D5Zthr/xI3w+GijkqAsCFmgFtpitG8UeOgTc3fvTmsv7eWcHkVA6o fNXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784321980; x=1784926780; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sc68CqtTOQLhSPfGgDFsVsO0c0+MZYn4nDNljvauFns=; b=XYNBUB8NUDnzLtnj/r80usLqdBWREf5AbGFQBloskbKGvAEBVV732KvINyRpth0Jxl uboHt1P1BWOsZ2VCIHJCZ0mTU0ud7/agYrtiTgIRssTZUna6KNKtrgn7Hz5jLxkb2gvR o+UvXX/sr3nZSy3JH91tpVdYy/mt3jmnEv695ItUFmVLZdH1dG/rN8FEPKUuidELE1it vkodnK845f2zDQbegbTexFY8LvJyoCm5BtIRXIeeHT4SQ1F+BNq1BJIbP5Zt/n4j96yX 9sxwui4j+jsK9BcbVhyoLmeyYPb9ttJW+D3JXgiqdqw2pNiXYUqZ/yvdNfB5QEGPqYDM qIzQ== X-Forwarded-Encrypted: i=1; AHgh+Rp5tRV6IhXaoQlHL5NnLSYn6OLKTVavoLdR2eROabJA8GLsap1yhgpcyUlwANzoSg0D8IUcvd1PIFen1wM=@vger.kernel.org X-Gm-Message-State: AOJu0Yxfw+t94++d5KXAZ5pU+iC3NrhGIlCcuOTIsqFRh1T/nwf98d9B PpF5A8vY1fPOBOnFpvi02f+Tv5L7x8DGG2Nl/a9osRjp6Dgt30pJxSMpaWn+5VuV X-Gm-Gg: AfdE7clS1Q984NfMuA7S0slzAKOJVzEnJikwp51KQEUKHFTsAWpZlS+0Nho4ABNUDrP genGr4cKiarx+3yE/M3GX10n50QfpR5N30g5dZ+Tmoagz3x/9gr9yYsnLOejV0prsWSFo1pUTu3 rAjM2URbjXpyHMnI5x9cy+KjQkI23fgyquEzDSvcoy9MLXxFBU39CoGf+txcn/o72eoA9ASu0fm /q3tzMUqt0uxlzSOvhn++19pHD17S4KW4RyMCXd/WmUt/aLJNm7yR/lgxk449V1RNfg/87FIOQP /RcVTwVzRMF24/GPeERrjH47ayIpcuX8kRYcKudsArbZtSeZbu9+jeuXHI7F2bGfy8/D3EgBDzT 8XUBIzVt63txzXpAHSh/lrYoR4VOCjLzavgPR4Vuj8xs7zaIdhMnac6NPKAL+P6BzDvYEPYS2ZC 59GjHZ+w7GMOHzxshu X-Received: by 2002:a05:690c:4d83:b0:80c:3848:bdf4 with SMTP id 00721157ae682-81ef2671daamr16015557b3.41.1784321979908; Fri, 17 Jul 2026 13:59:39 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81ef3e6656dsm20013647b3.0.2026.07.17.13.59.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 13:59:39 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Fri, 17 Jul 2026 17:59:15 -0300 Subject: [PATCH v2 2/6] hwmon: (adt7470) Fix fans stuck in manual mode on I2C errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260717-adt7470_thermalzone-v2-2-a55147958fad@gmail.com> References: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> In-Reply-To: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Packham , Andrew Morton , "Darrick J. Wong" , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luiz Angelo Daros de Luca , linux-pwm@vger.kernel.org, sashiko-bot@kernel.org X-Mailer: b4 0.15.2 During adt7470_read_temperatures(), the driver temporarily switches the PWM channels to manual mode, performs the temperature collection, and then restores the original configuration registers. However, if an I2C transaction fails at any point after entering manual mode, the function aborts and returns immediately. This leaves the configuration registers un-restored, permanently trapping the fans in manual mode. Introduce a recovery path to ensure that the original PWM configuration registers are always restored, even when intermediate I2C operations fail. Reported-by: sashiko-bot@kernel.org Closes: https://lore.kernel.org/r/20260716213252.EACA71F000E9@smtp.kernel.o= rg Fixes: ef67959c4253 ("hwmon: (adt7470) Convert to use regmap") Signed-off-by: Luiz Angelo Daros de Luca --- drivers/hwmon/adt7470.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index 664349756dc2..481d51617f4b 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c @@ -205,11 +205,12 @@ static inline int adt7470_write_word_data(struct adt7= 470_data *data, unsigned in /* Probe for temperature sensors. Assumes lock is held */ static int adt7470_read_temperatures(struct adt7470_data *data) { - unsigned long res; + struct device *dev =3D regmap_get_device(data->regmap); + u8 pwm[ADT7470_FAN_COUNT]; unsigned int pwm_cfg[2]; - int err; + unsigned long res; + int err, err2; int i; - u8 pwm[ADT7470_FAN_COUNT]; =20 /* save pwm[1-4] config register */ err =3D regmap_read(data->regmap, ADT7470_REG_PWM_CFG(0), &pwm_cfg[0]); @@ -233,19 +234,19 @@ static int adt7470_read_temperatures(struct adt7470_d= ata *data) err =3D regmap_update_bits(data->regmap, ADT7470_REG_PWM_CFG(2), ADT7470_PWM_AUTO_MASK, 0); if (err < 0) - return err; + goto out_restore; =20 /* write pwm control to whatever it was */ err =3D regmap_bulk_write(data->regmap, ADT7470_REG_PWM(0), &pwm[0], ADT7470_PWM_COUNT); if (err < 0) - return err; + goto out_restore; =20 /* start reading temperature sensors */ err =3D regmap_update_bits(data->regmap, ADT7470_REG_CFG, ADT7470_T05_STB_MASK, ADT7470_T05_STB_MASK); if (err < 0) - return err; + goto out_restore; =20 /* Delay is 200ms * number of temp sensors. */ res =3D msleep_interruptible((data->num_temp_sensors >=3D 0 ? @@ -256,13 +257,30 @@ static int adt7470_read_temperatures(struct adt7470_d= ata *data) err =3D regmap_update_bits(data->regmap, ADT7470_REG_CFG, ADT7470_T05_STB_MASK, 0); if (err < 0) - return err; + goto out_restore; =20 +out_restore: /* restore pwm[1-4] config registers */ - err =3D regmap_write(data->regmap, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]); - if (err < 0) - return err; - err =3D regmap_write(data->regmap, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]); + err2 =3D regmap_write(data->regmap, ADT7470_REG_PWM_CFG(0), pwm_cfg[0]); + if (err2 < 0) { + dev_warn_ratelimited(dev, + "failed to restore PWM{1,2} config (%d)\n", + err2); + + if (!err) + err =3D err2; + } + + err2 =3D regmap_write(data->regmap, ADT7470_REG_PWM_CFG(2), pwm_cfg[1]); + if (err2 < 0) { + dev_warn_ratelimited(dev, + "failed to restore PWM{3,4} config (%d)\n", + err2); + + if (!err) + err =3D err2; + } + if (err < 0) return err; =20 --=20 2.55.0 From nobody Sat Jul 25 04:55:26 2026 Received: from mail-yw1-f172.google.com (mail-yw1-f172.google.com [209.85.128.172]) (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 6B4A5384CCA for ; Fri, 17 Jul 2026 20:59:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321987; cv=none; b=rpBbClx5u9DcZT/pAFIhogKaTHUJKSF3LMpvseJglBaOLsbzvLfOlyaTQ1UiTtcHVXB0Pmg2BEO6qMCWtyyRPAYrZNmjmzxRYDj8MSlMQ3vlhYfsPwR8kEx6IorGHQpxWTzDYHxbfxTWRN1hW51gUgm6JcGeK2+nL91z+WgicbU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321987; c=relaxed/simple; bh=Kdez29RF+m6FsrlcEjGdPN28KX0lJ2ws3nkWv56Cdps=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VhDQBKm5STh4CQKTXdJ6J40zRuBLmjAVQ8V4JmAAm+gTQIiXuJEf+1AIhERbByZMPysra3Qa+5qwTVR5UQbOL8V2F0Kk1hcAdaHVkc7Yzgq1KEA4rfAK0/+dAgJD+a6HbZHz8ruwnpduduMsWfHbLrs+JKoTDWJqL2rhGfXjFZo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=U61aN/Hx; arc=none smtp.client-ip=209.85.128.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com 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="U61aN/Hx" Received: by mail-yw1-f172.google.com with SMTP id 00721157ae682-81e9578097eso9296897b3.2 for ; Fri, 17 Jul 2026 13:59:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784321985; x=1784926785; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fv/fL35f4caEG98+4FMRujisrJB19L+8TqSLjVkSazE=; b=U61aN/Hxvnjv83E9eLgbGhBhfNivmnWdwHiP+g7S89b5KGTmKZXFptyR8SRkGPvEHJ XoMYdknPMsWt+4+x7INPkR4ZngdCl8Vk/2cafpCef5ANLYjiYw7O4UAcrRSJKBjNuzwE iz1T6SWmzMS7VmoGqqM43VyAa5rCty70rfaKFa/Ya5/P9PIflVgAoS/5/C72rLF+KbiF OzVKAizWyg/KmK7/gyjLx3PEgw41g8mGdtXBnN4Osd8fhBtPfn1YecuVxTRL4HJ0kj31 p2kBLMt9UWYQqxZhFEdJ4rRTbrhRjMqpPatLdUQwMTVG3oZrxq9Q63JFaazUJVeAiCf5 l8xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784321985; x=1784926785; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fv/fL35f4caEG98+4FMRujisrJB19L+8TqSLjVkSazE=; b=kK+tKr6aa5qylzmD7fCYeOLnk/Irswg0wkpfDe7RbPCdm6lfmdRrAR0a4SwdEuO494 wAC9RaZnID51JI44a8SjXd6R6di5aFzPC3pliN0sAEHINNupriz0/Qg7qx37jcwZz3MB dTXfkW/W0w77joOVf9L1+cH3FEOmWiIEjUtOhY7WoW6PeZ/+m6Qs88+KQbYUzEz5FXmO JH2QXdtncLOawC098PwzCJkrm9N+94cHwilncax+4MG2Ld695aNz0I1G9GhZ3dr0LyyS TjHf54OCdi1K2Jch7F56hXRuJPZ7U19G8l1SKacGnOIBTv9205ei5e7TUCvHdFWavch5 B8Hg== X-Forwarded-Encrypted: i=1; AHgh+Rr9vvlB2cJiI01ajZg/qVG71qLBhrI80SXTYaD+KkyAbcy3qDC4JaDRAeYKIU7rFFZ8VNJ/KcgSvpXXQJg=@vger.kernel.org X-Gm-Message-State: AOJu0YxEqar8z/tz8vldZ/kXwuwrj2C6LfxLOOhmL+fM0PPhzCvEQ/hq 2inNN8PO0G7yOw5ampBx3da8EiwYF3+BLCmHTjw+TS5USlbeHYHFciqg2+JLRsqv X-Gm-Gg: AfdE7cl8E8hgPi00WAj4pC+8yie15zrJwJ9rIM4Ifr/ptFQLUcav/d88hAauH3AnY0y Za14mNIbSOMXzH2zOBwhQGn5LDB6Sv249PR0TpqemtvIzWCmvAJAnON2bHgtz0su/LQo6QAV4LY T/Kxrxt7f81a69q39vxMFi0I0MZ85mgHiImmC89gMpDwmpM0ZuqYTdaVyzAicAKnw/EEidxbaDj GVroJyubs6fnhkU/iL94ioXeF6JgvDgY8hYKsANtcNjacWnEFercqztoSDcviRHn8k+C0pHm39s bIH8+5zkq+jMTDCVPJtHix5WSoXyFainY4MeDejy6WwZlyfphXYW+Jm5jm5bdBnMkKTb1uixBqt M4INnhlw0Zv0dgHKdWfxNk/a3xi2gvaLXAG+b1IiqHmOzYxpXqBTNrPyMRY6ccBa6EWY4kIWrLx JapZHmXWPnwN+vm/mS X-Received: by 2002:a05:690c:3a0:b0:80c:2365:8756 with SMTP id 00721157ae682-81ef252bfe9mr15275427b3.23.1784321985191; Fri, 17 Jul 2026 13:59:45 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81ef3e6656dsm20013647b3.0.2026.07.17.13.59.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 13:59:44 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Fri, 17 Jul 2026 17:59:16 -0300 Subject: [PATCH v2 3/6] hwmon: (adt7470) Fix busy-loop and I2C flooding in update thread Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260717-adt7470_thermalzone-v2-3-a55147958fad@gmail.com> References: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> In-Reply-To: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Packham , Andrew Morton , "Darrick J. Wong" , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luiz Angelo Daros de Luca , linux-pwm@vger.kernel.org, sashiko-bot@kernel.org X-Mailer: b4 0.15.2 When userspace configures 'auto_update_interval' to 0 via sysfs, the background kthread executes schedule_timeout_interruptible(0), which returns immediately. If 'num_temp_sensors' is concurrently or previously set to 0, the msleep_interruptible() delay inside adt7470_read_temperatures() also becomes 0. This combination forces the background thread into a tight, unbounded busy-loop, hogging the CPU and flooding the I2C bus with a continuous stream of transactions. Fix this vulnerability by raising the lower limit of the clamp_val in auto_update_interval_store() from 0 to 500 milliseconds. This guarantees a reasonable minimum sleep window between sensor updates, protecting the system from intentional or accidental I2C bus denial of service. Reported-by: sashiko-bot@kernel.org Closes: https://lore.kernel.org/r/20260716213252.EACA71F000E9@smtp.kernel.o= rg Fixes: 89fac11cb3e7 ("adt7470: make automatic fan control really work") Signed-off-by: Luiz Angelo Daros de Luca --- drivers/hwmon/adt7470.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index 481d51617f4b..77e7be692790 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c @@ -509,7 +509,7 @@ static ssize_t auto_update_interval_store(struct device= *dev, if (kstrtol(buf, 10, &temp)) return -EINVAL; =20 - temp =3D clamp_val(temp, 0, 60000); + temp =3D clamp_val(temp, 500, 60000); =20 mutex_lock(&data->lock); data->auto_update_interval =3D temp; --=20 2.55.0 From nobody Sat Jul 25 04:55:26 2026 Received: from mail-yw1-f172.google.com (mail-yw1-f172.google.com [209.85.128.172]) (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 4FD0D38C2C6 for ; Fri, 17 Jul 2026 20:59:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321992; cv=none; b=Sh97NkP7EeOmHIYSQJwWiSkOCnqqctAnXGOFwPEYBuuin0ejwyJJqi6sDV89sWF5Kyqi+0KNzSvjEO74luSJEHps3Uz3iXq8Wq7srVGN+sipKsjGNl6IU5JPTXFKKapDDj4V2YJW/IpVRy1v6om6EwLWZl97qC4tZ9UKdujNYIo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321992; c=relaxed/simple; bh=fnVgoboZr5j9JDLEgQ4eEddGgsOOhWK2bjedrn78jJo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eiVwxyzGD2T69XHj27JWvqQ1vezU0e2kPDHYS8P0unPEev+03It4MBVon/kWyCFPOhkD8Hc6vFyY2BT5lK+zv0QawyA/2i9JogQo1VSUAQC9D2+pg/FJt/19NPel4XyyMi04H3pCqb8Rv4++mS/IEcLAuxixxb/UaG7C4HfPN3Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FeBM+QjU; arc=none smtp.client-ip=209.85.128.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com 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="FeBM+QjU" Received: by mail-yw1-f172.google.com with SMTP id 00721157ae682-81eb41c1f1aso65239697b3.2 for ; Fri, 17 Jul 2026 13:59:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784321990; x=1784926790; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=BtAAUJ2YREqt6a8rhFME7soHPuDVoeI++mttqZ0tqsE=; b=FeBM+QjU/wUftkYjyo/uskNxGxckRqu/m7ZWYXcAgKD5ZA8xsjQNAL74/Nkvh0Rb10 SsxsZQf/EF9CD4F2TxOxz9aM+KCBuw+PDPMUleWLc2dJ8c45k0soCIOkltgR4FsvaWJK /4Zpd7J/EcR/iHsdeIDkXZQA5ig3VdLyidAr/Og91NvtwPTFFniARZ2QYYkXw0Hg2fS9 FKqZ4CMlWGC4srWn+RFpkhKsv/cP8dQzWMk9r3IgaM8w9NgGcK9USoDsv1eRgBe9TP9C +M7EbXRgMMV+EhpCy0noP0V72hMKHcC49AnIc8xzr2FRw8LXJ7k+Yp8SsrqP7OMBfzsI mIQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784321990; x=1784926790; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=BtAAUJ2YREqt6a8rhFME7soHPuDVoeI++mttqZ0tqsE=; b=OTrKv+fn4Bu75RhTs8ViYgr4/pZEGfI4WHDgIZqRbb7CVmBVj1Q6a7yWd10JM9XF6J 2gHL54B8NRndpY6Zjp9ZSD4aehR26cIIoKiMcUeE5l2jIOIj1qma1lQ/oHRwtVGan9S+ Mg1bAZxqIoaxJCaOzOMtG8s45xnTA8ngw4svOMRhcz9/G/z5v7FwxMUZOetJQ8q0VxDj Hv9rP78urthNN4VnsIKKCNW0KRBYss4cGda4oM2szD12e5X1cm0tfmJFlIN+OUstc7LV VcwaSu8bI8zDOj1qaa7OTIMqLQV/DqBw+VCKn6atClKak3/0WjTdCFhxZ4cx7qN4DhYW S74w== X-Forwarded-Encrypted: i=1; AHgh+RpjtGtpiY+RsNeo2t/u+vNvfwut5lICMAUMQHhiVcxzNhX7R7q4tCD4zs3JMiPzWHhUNWZ/puzKFRDbHcg=@vger.kernel.org X-Gm-Message-State: AOJu0YzUlm0bU6ATOgYhJoIPwZe75NP+4H2HAAgEnd7nK5YOj/hhVNfk j5jv3vxEy3XGs11YESaEIEbILmdcdqFnIOi4GA35JU4nkBuuijkBJr5bz4AujL2f X-Gm-Gg: AfdE7cmAkZ/5fJA/z1ClkEr4GJQ63wHelZhmx7eZ3FKmhvRA8pp9dTvPU/c9y8GAdyu zgXqxq86wP0c6bUiWSIM5tyPmInzOrAJQO/dv1wQrVH1uqbewcVmpjqYNzCHo4GX6ljofelizjF 3w3AIw54mA4z2+oORb/1ErQjyrmqISunnRFyQf+9Vn+mzxyIA/kJUdt8sfcIl/BWZxEfRRyi9vC YkFKbzRIHaearyayr18REBdWvm1Ps9m4vAbP+FM0MBX17B8vbHBgdcMfLWjot/jj/3n5wQmffIA 5D0poos3JtUfxssbd/RiuVk5GYkUAiJKBVdbiJ7btpoXlF09CiriycxpZDvZGpZaSTR3WPsp7iC wy+9qHDe+lKAGXIEaKMurVFxYi6oT40b3M/I+dWMyvdw42pUU1d1F+xtSYQAEj9Ptfg7+F5WJSi /gi4S7Oju2lNmGBGMh X-Received: by 2002:a05:690c:7244:b0:80a:9f1a:d48f with SMTP id 00721157ae682-81ef283dacfmr14086577b3.54.1784321990187; Fri, 17 Jul 2026 13:59:50 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81ef3e6656dsm20013647b3.0.2026.07.17.13.59.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 13:59:49 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Fri, 17 Jul 2026 17:59:17 -0300 Subject: [PATCH v2 4/6] hwmon: (adt7470) Add ADT7470_PWM_MAX macro Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260717-adt7470_thermalzone-v2-4-a55147958fad@gmail.com> References: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> In-Reply-To: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Packham , Andrew Morton , "Darrick J. Wong" , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luiz Angelo Daros de Luca , linux-pwm@vger.kernel.org X-Mailer: b4 0.15.2 Instead of a magic 255, use a macro to refer to it. Signed-off-by: Luiz Angelo Daros de Luca --- drivers/hwmon/adt7470.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index 77e7be692790..d881609c99aa 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c @@ -100,6 +100,7 @@ static const unsigned short normal_i2c[] =3D { 0x2C, 0x= 2E, 0x2F, I2C_CLIENT_END }; #define ADT7470_REG_FAN_MAX(x) (ADT7470_REG_FAN_MAX_BASE_ADDR + ((x) * 2)) =20 #define ADT7470_PWM_COUNT 4 +#define ADT7470_PWM_MAX 255 #define ADT7470_REG_PWM(x) (ADT7470_REG_PWM_BASE_ADDR + (x)) #define ADT7470_REG_PWM_MAX(x) (ADT7470_REG_PWM_MAX_BASE_ADDR + (x)) #define ADT7470_REG_PWM_MIN(x) (ADT7470_REG_PWM_MIN_BASE_ADDR + (x)) @@ -829,7 +830,7 @@ static int adt7470_pwm_write(struct device *dev, u32 at= tr, int channel, long val =20 switch (attr) { case hwmon_pwm_input: - val =3D clamp_val(val, 0, 255); + val =3D clamp_val(val, 0, ADT7470_PWM_MAX); mutex_lock(&data->lock); data->pwm[channel] =3D val; err =3D regmap_write(data->regmap, ADT7470_REG_PWM(channel), @@ -887,7 +888,7 @@ static ssize_t pwm_max_store(struct device *dev, if (kstrtol(buf, 10, &temp)) return -EINVAL; =20 - temp =3D clamp_val(temp, 0, 255); + temp =3D clamp_val(temp, 0, ADT7470_PWM_MAX); =20 mutex_lock(&data->lock); data->pwm_max[attr->index] =3D temp; @@ -922,7 +923,7 @@ static ssize_t pwm_min_store(struct device *dev, if (kstrtol(buf, 10, &temp)) return -EINVAL; =20 - temp =3D clamp_val(temp, 0, 255); + temp =3D clamp_val(temp, 0, ADT7470_PWM_MAX); =20 mutex_lock(&data->lock); data->pwm_min[attr->index] =3D temp; --=20 2.55.0 From nobody Sat Jul 25 04:55:26 2026 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.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 F01B1331EB7 for ; Fri, 17 Jul 2026 20:59:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321998; cv=none; b=MNgR30FdjfR3iMR0ZaKqoQVavjPywJodX7wufED9lnBYG9gBhj/ARW5A+BtXdrQxlW4x4k7ZwQfS1J7PDeVDv0z1hMYksdK2PwFiQZ4OhuWltUjz/m8LjpVGFDBfGzE1A+1k5g38TOinUSuIcg9tvzxpXhXI1zGoKdRXvLa1v98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784321998; c=relaxed/simple; bh=86gXb+0iVKo/CNaBiOs1PGuYej+NgCevE8J2gY29EUw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e02489VMdxCYzhH2OBHBmsDFCT0C8gyVD7ukDOXjv1iX3c0egOqnKaOf1UzGw7N0oEPyU/14zDvjmwWsPQ9RjqKxYjK5LwGU1fF9qe2Zi1gBbetURSRu8Dz8OybX2cpDa8+RUUgonKkbsnPPvA6w6Tj783s4d0YrYwcJ7ZQZqD4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=rfX2qIli; arc=none smtp.client-ip=209.85.128.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com 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="rfX2qIli" Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-80dc4a68e4aso67843977b3.0 for ; Fri, 17 Jul 2026 13:59:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784321996; x=1784926796; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=tKIuG7ZT2h5nSeNmJaQ8VJ/Mhodno/coMufjCgnracY=; b=rfX2qIli55FppQdCCmrdfcE6+1UWCUgQ41wHu/BhBt82aKhaQJMIL1usnM1qEgusHU +AeadF7+rSchl3LBtpr7ZrBZPazjvwcyulwMGCrYbJUKnmyVJD8jVIUYGNfjDAhxgxlf ElfeM1YSD83tuoCSJA+H+a3FAIZZ3u/CiSYk0VBANx4r5GmY3Q0jTdwENQnUpWLd6wy+ 6gd/pirkTqhvX8wZ8gNxxdHkVR7NicGbfWguyEC19XWPeZaKpyAfLW7CoFH4JTVRmlqS SOCDNEPgGAJ8jUeELPMenZwJhgafMP4LjEegRISp3Ss+3o8b/kDuepir0Sm0sw2HVd4t dknQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784321996; x=1784926796; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tKIuG7ZT2h5nSeNmJaQ8VJ/Mhodno/coMufjCgnracY=; b=boY9NsdKxrF4oC2ONFjA55xrD6ZcXV/ZY8B5SmuZC/HAlsYk2kau3abpEF/SNeOAkw 1Reggd7G+2RQ2aDF0/7lu3rNk7BT21UfPbu4fLY+nS5Y021C9YH9J1+CQorFswuuFtYj IhZ2J0/vzzg7Mdf1tU9Rj5VOJu47J1BGGoeWThT+0kYJY90DFx6eiJH/Oz0m3nwA3lVx kvbY/nAlyhtdfHsYkTyidLZJGBhgYhxlFEMFtaTFMa18yMhRJ/hCTaklOqgVZ3oMpoKd lz4es9tcLJInEX2eZmnfWA/zKNjmTL33walLxQXHY9GedhTrTzOSCZVmwGCAnQ8djeoo Ozyw== X-Forwarded-Encrypted: i=1; AHgh+Rql24wTR421sRQkxV1Fzp6TXzqgiC6IQTgtW8aR5OZNSPxtLV79azwQ7tQPIx4N6XGH9MJKuSNq9OVjEBc=@vger.kernel.org X-Gm-Message-State: AOJu0YwbQl5oHsHwxvDpMUthvEz5swUWdlIrULUkkG+74d8R8mH4xjKK eySYVognaB36Pw+aTbxVOW/va/7H1AEonmMGK2MHyk0f6WMZV7ZNoXOYpM8ujnHc X-Gm-Gg: AfdE7ckdTZknodexrirN4fHX0FG7zS0TgIwCDaoPRzcLSppkGfbxOHsOMW8fn1RakBc SOdOpkNdurJkSeETQImu4s79afxsEElDj1TZ6Rk317Rg16EPsV5taLD4R1X1ScoGTsXj8ZbTCuz WO+ke6kMOYSJffnmy3HEFbLcXun7GWQBAxgKdMJc4FW8tGID44DEriAoiauYanjTDWzNuQfbJoS wumKlOi54xRKj6orfwbnMZmC9zk10/ryAGmHYRaQcgoOLwWOTapfIx2vouAGBEt/M/L2f6MLfYP fN8yak3Lr0Z8VRy7j13nZDtPHqNZwB2aDspNBbN9y89USSBfu51PLySbChbrEC3BSnEjjX9WG+L 6v1qBXThDo1b3cyoLaBGBBxcDSXJQ4IfOK4jttHWQYU7yHb1vga2YeSe0EMKtTspy+KZM/s5zrw rEF0trPoTfiDXL3Or3 X-Received: by 2002:a05:690c:9a93:b0:80d:fc34:a79e with SMTP id 00721157ae682-81ef26119d8mr15502717b3.35.1784321995782; Fri, 17 Jul 2026 13:59:55 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81ef3e6656dsm20013647b3.0.2026.07.17.13.59.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 13:59:55 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Fri, 17 Jul 2026 17:59:18 -0300 Subject: [PATCH v2 5/6] hwmon: (adt7470) Register as a PWM provider Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260717-adt7470_thermalzone-v2-5-a55147958fad@gmail.com> References: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> In-Reply-To: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Packham , Andrew Morton , "Darrick J. Wong" , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luiz Angelo Daros de Luca , linux-pwm@vger.kernel.org X-Mailer: b4 0.15.2 hwmon: (adt7470) Register as a PWM provider The ADT7470 features four PWM outputs that can be used to control fans. Previously, these were only accessible through the legacy hwmon sysfs interface. Register the ADT7470 as a generic PWM provider. This enables standard Device Tree PWM consumers, such as "pwm-fan", to use the device through the "#pwm-cells" property. When a PWM consumer applies a new PWM state, the driver automatically switches the corresponding PWM channel to manual mode so that the requested duty cycle takes effect. The duty cycle specified by the PWM framework is internally converted to the 0-255 scale expected by the hardware registers. The legacy sysfs interface remains unaffected and operates in parallel. Signed-off-by: Luiz Angelo Daros de Luca --- drivers/hwmon/Kconfig | 1 + drivers/hwmon/adt7470.c | 67 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 68 insertions(+) diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 08c29685126a..8838b6714e60 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -224,6 +224,7 @@ config SENSORS_ADT7462 config SENSORS_ADT7470 tristate "Analog Devices ADT7470" depends on I2C + depends on PWM || PWM=3Dn select REGMAP_I2C help If you say yes here you get support for the Analog Devices diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index d881609c99aa..aaae14a421cd 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c @@ -22,6 +22,7 @@ #include #include #include +#include =20 /* Addresses to scan */ static const unsigned short normal_i2c[] =3D { 0x2C, 0x2E, 0x2F, I2C_CLIEN= T_END }; @@ -864,6 +865,57 @@ static int adt7470_pwm_write(struct device *dev, u32 a= ttr, int channel, long val return err; } =20 +static int adt7470_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, + const struct pwm_state *state) +{ + struct adt7470_data *data =3D pwmchip_get_drvdata(chip); + unsigned int pwm_auto_reg_mask; + int err; + u8 val; + + if (pwm->hwpwm % 2) + pwm_auto_reg_mask =3D ADT7470_PWM2_AUTO_MASK; + else + pwm_auto_reg_mask =3D ADT7470_PWM1_AUTO_MASK; + + if (state->enabled && state->period > 0) + val =3D DIV_ROUND_CLOSEST_ULL(state->duty_cycle * 255, state->period); + else + val =3D 0; + + mutex_lock(&data->lock); + + if (data->pwm[pwm->hwpwm] =3D=3D val && + data->pwm_automatic[pwm->hwpwm] =3D=3D 0) { + mutex_unlock(&data->lock); + return 0; + } + + /* Put the PWM channel in manual mode before updating it. */ + err =3D regmap_update_bits(data->regmap, + ADT7470_REG_PWM_CFG(pwm->hwpwm), + pwm_auto_reg_mask, 0); + if (err < 0) + goto out; + + data->pwm_automatic[pwm->hwpwm] =3D 0; + + err =3D regmap_write(data->regmap, + ADT7470_REG_PWM(pwm->hwpwm), val); + if (err < 0) + goto out; + + data->pwm[pwm->hwpwm] =3D val; +out: + mutex_unlock(&data->lock); + + return err; +} + +static const struct pwm_ops adt7470_pwm_ops =3D { + .apply =3D adt7470_pwm_apply, +}; + static ssize_t pwm_max_show(struct device *dev, struct device_attribute *devattr, char *buf) { @@ -1299,6 +1351,21 @@ static int adt7470_probe(struct i2c_client *client) if (IS_ERR(hwmon_dev)) return PTR_ERR(hwmon_dev); =20 + if (IS_REACHABLE(CONFIG_PWM)) { + struct pwm_chip *chip; + + chip =3D devm_pwmchip_alloc(dev, ADT7470_PWM_COUNT, 0); + if (IS_ERR(chip)) + return PTR_ERR(chip); + + chip->ops =3D &adt7470_pwm_ops; + pwmchip_set_drvdata(chip, data); + + err =3D devm_pwmchip_add(dev, chip); + if (err) + return dev_warn_probe(dev, err, "failed to register PWM chip\n"); + } + data->auto_update =3D kthread_run(adt7470_update_thread, client, "%s", dev_name(hwmon_dev)); if (IS_ERR(data->auto_update)) --=20 2.55.0 From nobody Sat Jul 25 04:55:26 2026 Received: from mail-yw1-f169.google.com (mail-yw1-f169.google.com [209.85.128.169]) (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 00B5443F0BE for ; Fri, 17 Jul 2026 21:00:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784322003; cv=none; b=uNQSvZASIWlVGGY9IwchjKBcRWxSMTHJPjOZ+MK953DCy8csCtJ/ClwarTH4TF/Cct4OgAzPR/Arwa1eXV1zsW9LrxjI+x5DWIGa5Jleprdkept4PpTMr2keJ6u/t4msJ9rv2MzxoG1wtRVibGoXzuct6chP13LOPAArW1u7CeI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784322003; c=relaxed/simple; bh=8Fve2063ng9ha5wZtD1FR+vdZcWSIu8cW4ZgNpjdBwk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jmkpsKP3rkUDxAeWQ+uWgBV2LsZ7aOkj4l5sV37EN4oJr8iRtavh3ZBBF+UZv6Ddm8krTjGI4mV/+n7DriHbtLUOfymiZzezB023FFvDKWpTKapuQac5vEmEHS+zswApWR2aQt6+GdnDzBjN/pqwfJz5U0mMwhR7NEiAef0pip0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SOzuxz/S; arc=none smtp.client-ip=209.85.128.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com 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="SOzuxz/S" Received: by mail-yw1-f169.google.com with SMTP id 00721157ae682-81e9f7491ffso104650697b3.0 for ; Fri, 17 Jul 2026 14:00:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784322001; x=1784926801; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=FetDMiCgPkyxkRzwngK3OSAJNfZgDIIZiTYVMWGBG8I=; b=SOzuxz/SPFR6TLAAXwUIM6M971JUOobWorPE/Bxo2kwum8Ro0dBuy945l/pZy55KVe 1iJ84shaDHpsIMeyqAm8sdV0lhrYDCE0JEuLbBnzfwv4HUFX30CV3YTUXCfzH6kLnv2E 1Kwts0XjYrPjUsSZdCXM/gSxN9wMBLMFoIP0S4LDKfGHb07QzbuTIHDTJrekC74kOpH4 r58sdMJI4PzEEEKEhvRZny7lkmI6FHwLNneZU6pev6K+6dbsO6iS+OkyJ04uxH7j52xQ i7iGwgFMS3MswGjvaMnzeayG5VjOvZ7Y0JnhE6cEzk/fq6UfmPz4XqlmQDeqzL3O0IJ+ jfXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784322001; x=1784926801; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=FetDMiCgPkyxkRzwngK3OSAJNfZgDIIZiTYVMWGBG8I=; b=dj2BwWla6DUeLaVYwWKJz5bTmlZAJUp/ETxLaLvCPeb1BuLC4lJp8DaNgtp5pHKjF4 CkxKSBQikVTF6muZK1ZB3/fK991dU8vJzStVVgONiCU+dkfvbQ7fWIP459rXGcBpTp43 3m/59RpIlpPnGsZSvO+fpI6XyYZY95OJF4BSJN0ZeFsz+hllkBTvNZWQ9WWe689zA6/7 Cd9oxjlZ3yvDAxkZl5XfWWxVVtoTyog4+N4c8BLPoksqoEq0SqF33xRKKOu4M5oUGE5m VvpG7/vBgLsuRsgsX8tEhKRwnj5oAu4Pp7jGfzAicUUXB1IEv52Kb4fSHNHjRyjPrDaz 8+qA== X-Forwarded-Encrypted: i=1; AHgh+Rq5Z12i1p9Jm2ppqlsMYkLB1toUCSBqjXm+YZ3CEw1Fpke9J7UolO9pz2VSyIt4PuwpPxZrhV8SIeAWaao=@vger.kernel.org X-Gm-Message-State: AOJu0Yzyl2lPK0Mr9OhUwtGtvnrsuWcZ670jKLG6dB2/RoqtJnTS52LS s5ucEBiK89CgFmdYH+VliN3+g9pI4A0cdh3xbhL8JbVW2PuA78EFhDcywthn5Lqs X-Gm-Gg: AfdE7cmdJe3+iCyZvO+oX7vhYLY+1JlK+3HKevQV8ZMSTWYzE2l7wca2SASKglR2WPL FTwIUaC4JB32hkars2tUotWqh0j3NAuJwJcEEPL/60UlRltOOWi44gQOKZNhbeC2u8mwlHB8nib x35nTMOfeT3HziLezhDWmBTCgnqZQXfjEqN5IrK1uF4RcF31sD/jwjwvbNMyHSL10HyO5FPO8/4 fhP4SDQafJ9KEdsPv+LjL+JySQbZrFMj3xMQ6MytkpEWUF7oPwOt/UIlLB1uSMB5NeKmLnV0aBz rMJrPXwiYjcRdFEf3ICLkxF22QLO9pV1DnYKdUmUK8D0Wsa8sE9cTEZruCfV3kjdPiPNNAtCUO/ mC0zVpAis0B1zNYKPa6TmqBf0SYjRkNxgRTxpG7b0IvyEIfwNq1N1i5/YAnrocwAkKCjGwxofLC PWKfhYlcxfk5soFlLQ X-Received: by 2002:a05:690c:650f:b0:81d:42e6:6a82 with SMTP id 00721157ae682-81ef273585emr18799947b3.25.1784322000847; Fri, 17 Jul 2026 14:00:00 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81ef3e6656dsm20013647b3.0.2026.07.17.13.59.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 14:00:00 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Fri, 17 Jul 2026 17:59:19 -0300 Subject: [PATCH v2 6/6] hwmon: (adt7470) Add thermal zone sensor support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260717-adt7470_thermalzone-v2-6-a55147958fad@gmail.com> References: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> In-Reply-To: <20260717-adt7470_thermalzone-v2-0-a55147958fad@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chris Packham , Andrew Morton , "Darrick J. Wong" , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Luiz Angelo Daros de Luca , linux-pwm@vger.kernel.org X-Mailer: b4 0.15.2 Expose the ADT7470 external temperature sensors to the thermal framework using HWMON_C_REGISTER_TZ. Signed-off-by: Luiz Angelo Daros de Luca --- drivers/hwmon/adt7470.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index aaae14a421cd..595a8f934d60 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c @@ -1251,6 +1251,8 @@ static const struct hwmon_ops adt7470_hwmon_ops =3D { }; =20 static const struct hwmon_channel_info * const adt7470_info[] =3D { + HWMON_CHANNEL_INFO(chip, + HWMON_C_REGISTER_TZ), HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM, HWMON_T_INPUT | HWMON_T_MIN | HWMON_T_MAX | HWMON_T_ALARM, --=20 2.55.0