From nobody Sat Jul 25 06:09:50 2026 Received: from mail-yw1-f176.google.com (mail-yw1-f176.google.com [209.85.128.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B70B53C3F64 for ; Thu, 16 Jul 2026 21:21:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236916; cv=none; b=lcK5UVeIRNEerESNuttxVKtPeFEUEdcsrow6NUJ0GgVhCr8TL4+KzM7ePaur7oTm4bcvtjD8YhXZS7xpEyxD8GEGrUuDvbsgY+YOCsGmAGpCsrxZDhmqTH2+dKkJylNNeC8aLBzQgrBps7CSlLJNwRH/E1dGBU7i9KavrLnheSM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236916; c=relaxed/simple; bh=Xkbry7Ckhih7oUQ+rnPYJWu/qW8xoRySqajhom5hWR4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aJpWwvvv5nJ9ODxgS4Ygek9OEYTwLiBUb3HywAqvJ+aRvLL8xjiUISgliTChUR1rSIZQxtirZdh9O8/kXUp68dRqclOfhLZIJuwoVeb0e6O3qQRr+/sLAHyQle4jMeUnV8OeiAcUlKi/grSy7W+1ap2rOo5PYMKRE7Rkh/AKfgI= 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=eIUaTvrp; arc=none smtp.client-ip=209.85.128.176 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="eIUaTvrp" Received: by mail-yw1-f176.google.com with SMTP id 00721157ae682-8111c0c7561so98962247b3.3 for ; Thu, 16 Jul 2026 14:21:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784236914; x=1784841714; 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=NKYB741Vi9+5Td+ttBpzIWdLFHulzs+nfBDpWAYF04A=; b=eIUaTvrpcY6ZsEO2DIqCkIFRm60i6qylpdQUZP9j5N4DWz2xofU6x5/A9Ret2r3atA DXSmQlDaDAc7hltffggEA5jWumM/f37WY/sLwZHVNxHajL7OsY51570UGGDcMc1pyzq9 dctUojG5eN74/qTcwT8VawkNCHY+A3YmfiLs7fWyHD8UpFt0KgBOcNDqiMsOeVhDRZ0f +r2+uLghhSvMcWzmai7e3W+pKiCn/pfOR2dCrmWUZhBKnagp7EtLlox/WL8tvVVP8i2I huKWkyOq+UfMN7C3gdE5tTcnLKaTTTpKlYK9tPn4g7LkASq2+RBMggpkGLrMPlk5XHrq UpAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784236914; x=1784841714; 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=NKYB741Vi9+5Td+ttBpzIWdLFHulzs+nfBDpWAYF04A=; b=CGHGVdxNkeMEKatZ8lQXVk+Xcf6IB5H4rmsMesz4pA7/GEiDNwcxGZ0tjet8SA8Kxx dCqi1ptNHe/ngX5NYLWLNQkdr51cQu1GY3f1QQliAwN3MwxwBcT6kG+ozldPkVQoi9ng YOO5p8iN5zn5TZE9vM7wjJYM9DVAljr5vzDHg/IcFqdt9VeoU6e98qBo7XOZC7JeYOqG MOPigmPemuVfk1k2MwkfEb2zNT6zTsQmdS9/Itm3jGNdWtLUrSXro6MthFxsv0n68SoQ Pnbx45TKBKRP38i0qy3NXOkT5Po3L2DYHSbKeF4o3QyteK84jr0k7m57MHIRdfbVfvgr YyYA== X-Forwarded-Encrypted: i=1; AHgh+RpWkIKLiNmjqtQvj6pe97M6vi8h9DOsIFE4m/C1M+vVR6a+gQrUokhmPR6V3/Z/L/bf1FaVZvSvc221D2k=@vger.kernel.org X-Gm-Message-State: AOJu0YwmyBMY3hpX7zHr9DqANlb060yagj3GMM2RkqJ1EgULJJ9L8BhQ agmear71cfIOkzWOkj56shaszZH1lNT2lPp8bUYvnzGJtXe0GvJb6ZSi X-Gm-Gg: AfdE7cku9p1FVvnAhoduBhVCboOQ19PYv6XtenGpMkunhGEja5+Rk63aVNhhhurHiFo aBZJnYIY+KRPKcdIc1MHU4DoK752umlUOeZZLmoCZjngJhKPWAQ6ii1ydZf9DEwO4DQ8JIOGuBD d7v6flix8oUiqGPu3fjCCZJQTf/r5e9Cw74MqH//dbL4IV4iOw1QaKBkE7yNUv24WrdrMqwUIEp 4/TyJQ6zUdKeR97n4yTB2qvnJAdh+pOSmVlr4YTV1DsHjd3SyrNZrTFyPpulgwIExZDeGIKplls /mfNlxlPajtCuXigON+6t+V1xyDp9lc3X1jwRg/d8gn7CZSsPfO3JQ0IGay4wQLYSWqy51ELrLb f+sE7R69p6tG1Kd9CPZkL/XE/m/45xZrJNg8E2IsEs1wIhJhoi6VudN7oZ9w+Abtvd3AZIumWMx BfAufI2dwf49ZpGjCEqk8xrG9+6m8= X-Received: by 2002:a05:690c:9b0b:b0:81c:ef47:2dd0 with SMTP id 00721157ae682-81ec00c8b00mr90286367b3.49.1784236913517; Thu, 16 Jul 2026 14:21:53 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81eee7fde39sm5026477b3.36.2026.07.16.14.21.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 14:21:52 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Thu, 16 Jul 2026 18:21:38 -0300 Subject: [PATCH 1/4] 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: <20260716-adt7470_thermalzone-v1-1-cc55ef35edde@gmail.com> References: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> In-Reply-To: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , de Luca Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@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 "#cooling-cells" and "#thermal-sensor-cells" properties. Signed-off-by: Luiz Angelo Daros de Luca --- .../devicetree/bindings/hwmon/adi,adt7470.yaml | 53 ++++++++++++++++++= ++++ 1 file changed, 53 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..e0c0fdadd1cf --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/adi,adt7470.yaml @@ -0,0 +1,53 @@ +# 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 + + "#cooling-cells": + const: 2 + description: | + Cooling device exposing the 4 PWM channels. + + "#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>; + + hwmon@2f { + compatible =3D "adi,adt7470"; + reg =3D <0x2f>; + #cooling-cells =3D <2>; + #thermal-sensor-cells =3D <1>; + }; + }; --=20 2.55.0 From nobody Sat Jul 25 06:09:50 2026 Received: from mail-yw1-f182.google.com (mail-yw1-f182.google.com [209.85.128.182]) (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 455ED330B14 for ; Thu, 16 Jul 2026 21:21:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236920; cv=none; b=EHu2KsrXgi9RooIueYl0dn27P8JxQTV8HaesuDgyIsHiOTnciDRNT5RlujrMuhcYRdmWcmyiQGtDHEEtdsGiCXhR9Cc1jpA7xg+pysq8KAMXs7dOSw36e7Gc3uNEz7PLhUJuXkdNBR5COKlctTUHquo9W6ZzEyDHtQvdJoDkGuw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236920; c=relaxed/simple; bh=JD5Lp8KBOzUlFKcqEFqYNpeW9EwGOL+uYSqusXaqVIc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VOTolwxeyYKfLvqA6iIcw0313zOpAcYFZ0Q/3kPFPgawfAmGOhFmYplas4DJFI9asRUPYDnFwbdk93i8ZTaKHOFU35KJFisKYRNDSFyH4R8C7toNBZR9IgCeTX7w2aoPAsL2DyEVadZoWRxotJjDVs35fybq0dwGvBeCDfP+0I4= 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=NJB7aGiz; arc=none smtp.client-ip=209.85.128.182 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="NJB7aGiz" Received: by mail-yw1-f182.google.com with SMTP id 00721157ae682-81e86df8987so13121637b3.3 for ; Thu, 16 Jul 2026 14:21:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784236917; x=1784841717; 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=kLUXzNCOe0RCZXyD10EHKPfmRl2c/iE1pNVJYbsebOo=; b=NJB7aGiz8fKIl7h0n9uedQgm+0fobo9CG5WSWDq56vQkLe8EkBrh2KWGycGgDd8l64 Ae4xAfw+OLvT8bDLZWvNxmmKbglTm2sWzUtBxWU4Ppd1jci8dS6/0w7PArhfx1KzMhvh +uemWOukNxi4J+pzX8tg6SC2xBC3/RwjF+AJzLaxzckFjPkwmxy54njRJ0xyyqs5ey/C /XQF9bB43XeYhfEKRh2AyR0+hoPC7RjEXr0yuuhtc+QdQqF0GC+paSzxZe+MYoZQDWWV z4qVf1NJK1gexAFw0biRLD/br4h8GtjfMyf4QhkMZHn3kv2U9Fkp9S1741eG/vwmHVnY Q5Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784236917; x=1784841717; 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=kLUXzNCOe0RCZXyD10EHKPfmRl2c/iE1pNVJYbsebOo=; b=s/7j4YXxqAevM1oPO6Y22oJQY0Q/SG+IMkhGganBQk3p/65RKnOMb/Jk+xHhu/MVlI 1xaQUHAw4RJCHJNrcGOoX/ExU8X00WbLnJXZEvJzAbu9Cwd1GFWtv9WvEKj2FJNNvoTX agXCn/n9zRqJPMIS8eRd73065A3QgXrjN78gn73ykyxQqbQN5Lt0GfbK0YKCDp7bY8/B JNi+ZR3vwTpPxHoRmTFtO4FBhEz4eUPZpDfnM0jwahQ2XFcmI23PQMW8JgpPsUJiZEuK WRLdtnMLlarxqo9wXfULAPLdo7ip1KYpawPYiw3EZ6amztvUX3FH5yNuGEb9v67UqMtd G+nQ== X-Forwarded-Encrypted: i=1; AHgh+RrlMuRBKlI9Bo0GZzkUBK3sWW2gges1zRgm816cq4XgT3QKSpeGSI1C0DoRpsWIrKKtXqX3iXJ6nW39Maw=@vger.kernel.org X-Gm-Message-State: AOJu0Yw513CHbx74XixDdXIYK4oHo+XYIPUA5zTtm2Y69gtQLihWk52g +dTtB+9c9dI6EbTXA5V53c6Xym5k2LGB885e46vDdb8Y5Thm0irVzkcj X-Gm-Gg: AfdE7ckYTZUWOuAJRnrRnlkZ9cBoSr+FdxL9NQUPRnj2TtdfqC+wdoKMSjeaNtudn+4 XIrhg2tOu3gMJuVVDxUzTH9RO4RPFZEsHcwS0OHig53Apjez6yy82S+/OdkyzVXaJ6chQPMhx5V m5K8tFmv6p30QWTPux9JRs7kuIqX9FZAh2cMckN39Ko+6l8jmaeMOdRwnDtGHSiN2HV0w7UBiFH 37KlkyWIyKTSBHLvxcIPm6LPDuqHDFJOReSwDgKzPGWbbywmIKcnxbdtw8M6DXHwsEFFJzAFDUF mNTdCgwhMfwQtpbv1xJL4idfPuBWU0P6+VjauiG9kdoJVqVbApny9sDB+fUQQqy6IqXN/6VD0V5 yYDbo1HVp7rK96KwvPZFFtQLD1lb7H+0yjjwchbCWHUQNPv5OrCDgx7vIyn6n5NqAyiVyLbYX9n OMTYuQPMFNVRvQ5SIL X-Received: by 2002:a05:690c:22c1:b0:81e:bbbf:7f6 with SMTP id 00721157ae682-81ecfa6bedbmr67424427b3.52.1784236917245; Thu, 16 Jul 2026 14:21:57 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81eee7fde39sm5026477b3.36.2026.07.16.14.21.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 14:21:56 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Thu, 16 Jul 2026 18:21:39 -0300 Subject: [PATCH 2/4] 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: <20260716-adt7470_thermalzone-v1-2-cc55ef35edde@gmail.com> References: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> In-Reply-To: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , de Luca Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@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 664349756dc2..4ac292cd7f47 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)) @@ -811,7 +812,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), @@ -869,7 +870,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; @@ -904,7 +905,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 06:09:50 2026 Received: from mail-yw1-f179.google.com (mail-yw1-f179.google.com [209.85.128.179]) (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 7E9A33C3F7C for ; Thu, 16 Jul 2026 21:22:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236924; cv=none; b=YsFqp90ZhFiHEd7XlVn3aWwaUWMUHuvK0oivsTiv2ZHvHbrahdP0vF0Qpe14rshwd8HMzDiNhWtV8bvY981vvotJes7xDl1sQQTPIUxdYhg6o8SfbfGAxO15+PXhm6zWIBl6o9f9lZWoKlQAlJ10LnjMn4M8v5KidvsuxU3Ilz0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236924; c=relaxed/simple; bh=tCxNab6MNI/HOGJW3wkdiUk64Q6R6tu7p6UITFWGt6Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XjF2XAS//sC/3R4tgYAGNfwEkCDxSD1R9b2xcBrF8nCRJKeCJvtT+SZUkLvSTSfmDrw53Qmr6lUFAQ9TC2nTmGizJ/9lAkyoCjyBtX/Q1s6mQzjXpYKc91QzoxA2C3zLCoKoeLfj3ryxgBQezwOc++ep4DNchAQxdWVDEqhMqhw= 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=hViRpZCi; arc=none smtp.client-ip=209.85.128.179 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="hViRpZCi" Received: by mail-yw1-f179.google.com with SMTP id 00721157ae682-7dbcb505578so38732187b3.3 for ; Thu, 16 Jul 2026 14:22:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784236921; x=1784841721; 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=BqKDYCR457ugmsmta4q9ZtrpQUflfFAWvlDAq3xKBJc=; b=hViRpZCiQ0gFRTqZ4IuSeXA50LcNrGXsfE7UmVYGLjVenuHGp25kVbVGbvaXWKQwT/ 2tdqhELt5Nt0OIVDPwZJLki4Ot5eLYpul50yEn30+TMWl1bZQPudmPbFAroqIQJ7qHOv krYXpDSMY9j37/Us52kOV+2e6h6bjGEP31T5Wgt/N6xWmDe9WL4xN9V7tRjO6xBO3Zsm C8VJq4mVxqvSALhE3h57LgleaBZ8GrPE3/PLuHRZYU9EyGjUjDo6eBUbHiGaNo30QX6R 7I3I8Wn9ZB9ws/VMfgDE2AmG+k58LlfwwU38k4wwKB9zKe3QScgogItCmxOx3k8NOdev f5CQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784236921; x=1784841721; 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=BqKDYCR457ugmsmta4q9ZtrpQUflfFAWvlDAq3xKBJc=; b=ktPvQv8Zr+B9g4V5RtyGitMZw1qajUvORhdqFFL5qj99xV4rGV54cgEb3dMfEzER7k WfLxTDU39P7thJedQDA+wZIyEmhSmbNrdZ8gcXbSLNj25obv2MOiMIfvhdgfajZQ/5Ic 5nqPGP2ohlsJE5t+BOlzxLJ09bR3Zb8QZhRoGQcAXGzK7aryRU2mwXUC34AqqcvamnZm Rm5JHlJxoWsHZxIKM+9rxf/WS7AL2U7NiWnS5xxf/jCn+2GUut3nJXxuKUG+QZFEtI0N 2WjssYGD1KoZ7a7QhFS7ZVT/FqvOkQ+Wknp31ZLcwAKozP7s9guQlND89AeULoj4AgsL QJPQ== X-Forwarded-Encrypted: i=1; AHgh+RpH2EtgN+b4Df+GvVRfbd7P5MZB0KmnBC49CNSlTeQRsXk5yfo3IqUh3p8nwGbYrDTLH/uazPIrANxpuZA=@vger.kernel.org X-Gm-Message-State: AOJu0YyPwiKLckE5sCigDpjjTpju4L043ccGFrm14Lq7mMNE999i3uzL 1h7LmaAhHfljW0oeaRCbZ2e+Y9W+Qo+K/A96pCy9wEFZc03k2mZpcZJe X-Gm-Gg: AfdE7ckQfvyTDj42vkihO8ubW6cipUA7Dyoo4lKZ3doKTFAUfQXYGwzEqU3CO9daxGj Rfv7thWsiMF3nG49iAURvC5uDOFQGzjE4STxZifgj6hcTZP6IOnDbmXPrWJ394h1XiidJrAWJ9w aYFz+y77xGEVBJ19a/b9z/ThEYrE4YkeyiljNOpFqtg27p0Z4KV3YMRYjneOm+UqihWF1gevtu6 QTfjacAcECKnlmGYSGln5nFnXdrnIRI3pPcoEK2tGvJUi+aYYN1xgAJCpGHUAGyVtnZ6hWVuW8o LxrLft1vieFJK0jqH/mZkM5DLU2+VtFxtCr1KyVHUvW7uW5BmjUrP7sV/txUVkaUVUfXed+NnYe 7y7TS5qCBs0J3VdvO2WP72SHRo6JNvKo2DFWoH3o22udemADezaXuzX74ZYaBAJSianp7jk+6DD F1ie8oZOAq4zbklWiC X-Received: by 2002:a05:690c:e1c:b0:80d:f9bb:3d3c with SMTP id 00721157ae682-81eede60cb7mr5927727b3.36.1784236921306; Thu, 16 Jul 2026 14:22:01 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81eee7fde39sm5026477b3.36.2026.07.16.14.21.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 14:22:00 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Thu, 16 Jul 2026 18:21:40 -0300 Subject: [PATCH 3/4] hwmon: (adt7470) Add thermal cooling device 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: <20260716-adt7470_thermalzone-v1-3-cc55ef35edde@gmail.com> References: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> In-Reply-To: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , de Luca Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 The ADT7470 has four PWM outputs that can be used to control fans. Register each PWM output as an optional thermal cooling device via Device Tree so it can be referenced by thermal zones. When the thermal subsystem sets a cooling state, the driver switches the corresponding PWM channel to manual mode so that the requested duty cycle takes effect. Registration is optional: when the "#cooling-cells" property is absent, devm_thermal_of_child_cooling_device_register() returns -ENODEV and the driver silently skips that PWM channel. The PWM cache is populated with an explicit adt7470_update_sensors() call before the cooling devices are registered, so that an early get_cur_state() call from the thermal core does not observe stale (zeroed) values. Signed-off-by: Luiz Angelo Daros de Luca --- drivers/hwmon/adt7470.c | 122 ++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 122 insertions(+) diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index 4ac292cd7f47..b865f4bd50f8 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 }; @@ -142,6 +143,13 @@ static const unsigned short normal_i2c[] =3D { 0x2C, 0= x2E, 0x2F, I2C_CLIENT_END }; #define ADT7470_FREQ_MASK 0x70 #define ADT7470_FREQ_SHIFT 4 =20 +struct adt7470_data; + +struct adt7470_cooling_device { + struct adt7470_data *data; + int pwm_index; +}; + struct adt7470_data { struct regmap *regmap; struct mutex lock; @@ -171,6 +179,8 @@ struct adt7470_data { =20 struct task_struct *auto_update; unsigned int auto_update_interval; + + struct adt7470_cooling_device cooling_devices[ADT7470_PWM_COUNT]; }; =20 /* @@ -846,6 +856,107 @@ static int adt7470_pwm_write(struct device *dev, u32 = attr, int channel, long val return err; } =20 +static int adt7470_get_max_state(struct thermal_cooling_device *cdev, + unsigned long *state) +{ + *state =3D ADT7470_PWM_MAX; + return 0; +} + +static int adt7470_get_cur_state(struct thermal_cooling_device *cdev, + unsigned long *state) +{ + struct adt7470_cooling_device *cooling =3D cdev->devdata; + struct adt7470_data *data =3D cooling->data; + + mutex_lock(&data->lock); + *state =3D data->pwm[cooling->pwm_index]; + mutex_unlock(&data->lock); + + return 0; +} + +static int adt7470_set_cur_state(struct thermal_cooling_device *cdev, + unsigned long state) +{ + struct adt7470_cooling_device *cooling =3D cdev->devdata; + struct adt7470_data *data =3D cooling->data; + unsigned int pwm_auto_reg_mask; + int err; + + if (cooling->pwm_index & 1) + pwm_auto_reg_mask =3D ADT7470_PWM2_AUTO_MASK; + else + pwm_auto_reg_mask =3D ADT7470_PWM1_AUTO_MASK; + + state =3D clamp_val(state, 0, ADT7470_PWM_MAX); + + mutex_lock(&data->lock); + + if (data->pwm[cooling->pwm_index] =3D=3D state && + data->pwm_automatic[cooling->pwm_index] =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(cooling->pwm_index), + pwm_auto_reg_mask, 0); + if (err < 0) + goto out; + + data->pwm_automatic[cooling->pwm_index] =3D 0; + + err =3D regmap_write(data->regmap, + ADT7470_REG_PWM(cooling->pwm_index), state); + + if (err < 0) + goto out; + + data->pwm[cooling->pwm_index] =3D state; +out: + mutex_unlock(&data->lock); + + return err; +} + +static const struct thermal_cooling_device_ops adt7470_cooling_ops =3D { + .get_max_state =3D adt7470_get_max_state, + .get_cur_state =3D adt7470_get_cur_state, + .set_cur_state =3D adt7470_set_cur_state, +}; + +static int adt7470_register_cooling_devices(struct device *dev, + struct adt7470_data *data) +{ + int i; + + for (i =3D 0; i < ADT7470_PWM_COUNT; i++) { + struct thermal_cooling_device *cdev; + char cdev_name[THERMAL_NAME_LENGTH]; + + data->cooling_devices[i].data =3D data; + data->cooling_devices[i].pwm_index =3D i; + + snprintf(cdev_name, sizeof(cdev_name), "adt7470-pwm%d", i); + cdev =3D devm_thermal_of_child_cooling_device_register(dev, + dev->of_node, cdev_name, + &data->cooling_devices[i], + &adt7470_cooling_ops); + + if (IS_ERR(cdev)) { + if (PTR_ERR(cdev) =3D=3D -ENODEV) + continue; + return dev_warn_probe(dev, PTR_ERR(cdev), + "failed to register cooling device %s\n", + cdev_name); + } + } + + return 0; +} + static ssize_t pwm_max_show(struct device *dev, struct device_attribute *devattr, char *buf) { @@ -1281,6 +1392,17 @@ static int adt7470_probe(struct i2c_client *client) if (IS_ERR(hwmon_dev)) return PTR_ERR(hwmon_dev); =20 + if (IS_ENABLED(CONFIG_THERMAL)) { + /* fill the cache before registering the cooling devices */ + err =3D adt7470_update_sensors(data); + if (err) + return err; + + err =3D adt7470_register_cooling_devices(dev, data); + if (err) + return err; + } + 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 06:09:50 2026 Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 57CA23C3F50 for ; Thu, 16 Jul 2026 21:22:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236927; cv=none; b=r0ViFl5Q2dsO2FTwE319zyWKHSIrFGBVnUftpYbs/Sjk2krMaOR39hntlC+YAE0pUPKV+T18VBSUAD5PCvIdLl7/hk1mGFxwBKMY+krrZfEqz8o3ZNYogs/jqHE8pIsijGb5ytdQLExeVhDQNEOU6fTdE3Y5PIsQriJnmHzTgkk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784236927; c=relaxed/simple; bh=di/VH3YQcCw/7iLYEOx612efanY41Z9PtB5xD5Hj7tc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=L5nm0eB4VF+lXVQz8s1T428ACEUEk5la3zSeqkomuF9AtnUVsLrVzJU4u9PpG8LV3+a9vcQ6d0NnkB2TOkw5AThSXaD5MSNgS2EoaRD/532iqXYFBepMiaYfFAhuUs27htVUqSgb8dxk54oM6ZLXZGpI7l0vNUOFyMbljXaCNJM= 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=gQcZ58ci; arc=none smtp.client-ip=209.85.128.170 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="gQcZ58ci" Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-81e9d8f3289so48697237b3.1 for ; Thu, 16 Jul 2026 14:22:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784236925; x=1784841725; 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=x6NgVKU/MGFjVMwgvxbOq/84pStl4moKfaollvGnRng=; b=gQcZ58ciw22JN2mZ7wrjM0SEswiFuhYf2maRI2PNEtqSf7Mc/adrT0q1M+TzRhx5rk 6vsb+pNFK1LQ4SPpUtYEeksJRZ0yZQ0zWvEyCO/T/rz1P6DjA/NV/hs1TYvmewWYVSM9 iW5Dz/ZFXHjZL05xuzYadYT1b9xRNg1DsEdZr/dEBPFBiHlxUmsWM2afy/c3q1SfnghE Hce8GVyjDuia1l0vynQ8yESoeBaRQy7u3JHa1OwrjYR0gTOvPn4K7SpKhUjpz0njcRZy iRQoq5AOOtPwuXbBzTIl2glWnbMRps/zYj0bNyyGql0FcjQOBeo1twtZDuQSFo/a5PtU V0MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784236925; x=1784841725; 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=x6NgVKU/MGFjVMwgvxbOq/84pStl4moKfaollvGnRng=; b=XM4+abFVoo6OFzArvtb2BrO9Zq4V9e+/FvW1fr9TAkLzmE7R7+EGeCxvCGsjnUuUjp aKZ3Uu5JtCoeSdiJ2T/zKar8ozqCZ/eKXFk6O4PBYuuhp5MPGhpI/cct7Bvg/8xJpDHz P0N2q8jy91QTNnK2GsKwPqSWxI+0W/jr3L/CWvR3JBPckK1pdaJR9rXN/Mks9xX2DVOc 7m4u+TK13JsgcGeOJfAwvOMBU704ZUAS9zWdTJfoDAd+TiyroxsOLtAorEi0/tfMfVJC qPRRFh47UKbfETok8VA8D3ONUAo7GPVZs5sZHngfyyQ063SFq/nwP7NGg2VkkQdEY+62 544A== X-Forwarded-Encrypted: i=1; AHgh+Ro9afT9DH6C5fZrFEuKoqWN5doq4b9D+OUo6kGYF/g5UEB9EqCLS5kp2VveI5IcOqfIIxEqq/bkUePoLBA=@vger.kernel.org X-Gm-Message-State: AOJu0YyC56liPNqCCTCsjADmlSLHrbZoYJBOQYec0ZgT/VkuzGILAZGe RTGqKnCjr7NJx+Vsp61nk/Way6PxdjWlMbA28u4ti8wIAq6nW+6ucOuc X-Gm-Gg: AfdE7cky/DHZakFI5haej6Yn2SD7mchSWlW5ea/I02+8+j11Oz/MKCnmB84jF2Xub8L kCZ7c1cZWWjG6gEiKlRO0JCBMvi8J/SglZp0QQbRJ4SUUvnNXyCC/1Emwx8cLHcFIFQ3L2qUMcw ZZ2xgbFEwvowVqKKqgoINlIccVWka0rEyutrQGokdEHFGzFS6IDTu4RRZCnmly75GLq7yKvXsKp jffo9nneuuXosw9EkZisICZmifMkUrfbZeGeXUX6nygRPeAum8DSFMzSbp2ZETz7n6FF71qz6Uj W/ydRZ3Zpq/0tVe7H7LoVt6dOrUa4pTvU0gmbuBW519JW71eb3qSgeJlEnEdcA+NGQivTUxo4mc cGfG+hqHQSha6VOltJfi0/X1dFIXPQ/OECHgy2nhP4rmBARwHPbjpLA7KU7XALKI9Y5x2C4m8qd Pdfmy5+FqRZeq55cCRsCe+JzVtZHA= X-Received: by 2002:a05:690c:610e:b0:80c:16ad:2f10 with SMTP id 00721157ae682-81ecfa39be6mr64792887b3.33.1784236925198; Thu, 16 Jul 2026 14:22:05 -0700 (PDT) Received: from tresc054937.tre-sc.gov.br ([187.94.103.218]) by smtp.gmail.com with ESMTPSA id 00721157ae682-81eee7fde39sm5026477b3.36.2026.07.16.14.22.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 14:22:04 -0700 (PDT) From: Luiz Angelo Daros de Luca Date: Thu, 16 Jul 2026 18:21:41 -0300 Subject: [PATCH 4/4] 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: <20260716-adt7470_thermalzone-v1-4-cc55ef35edde@gmail.com> References: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> In-Reply-To: <20260716-adt7470_thermalzone-v1-0-cc55ef35edde@gmail.com> To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , de Luca Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 Expose the ADT7470 external temperature sensors to the thermal framework via Device Tree. The thermal callbacks use the driver's cached sensor data, avoiding any I2C bus traffic during frequent polling by the thermal core. Signed-off-by: Luiz Angelo Daros de Luca --- drivers/hwmon/adt7470.c | 51 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 51 insertions(+) diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c index b865f4bd50f8..44fe310f0650 100644 --- a/drivers/hwmon/adt7470.c +++ b/drivers/hwmon/adt7470.c @@ -150,6 +150,11 @@ struct adt7470_cooling_device { int pwm_index; }; =20 +struct adt7470_thermal_sensor { + struct adt7470_data *data; + int id; +}; + struct adt7470_data { struct regmap *regmap; struct mutex lock; @@ -181,6 +186,7 @@ struct adt7470_data { unsigned int auto_update_interval; =20 struct adt7470_cooling_device cooling_devices[ADT7470_PWM_COUNT]; + struct adt7470_thermal_sensor thermal_sensors[ADT7470_TEMP_COUNT]; }; =20 /* @@ -957,6 +963,47 @@ static int adt7470_register_cooling_devices(struct dev= ice *dev, return 0; } =20 +static int adt7470_get_temp(struct thermal_zone_device *tz, int *temp) +{ + struct adt7470_thermal_sensor *sensor =3D thermal_zone_device_priv(tz); + struct adt7470_data *data =3D sensor->data; + + mutex_lock(&data->lock); + *temp =3D 1000 * data->temp[sensor->id]; + mutex_unlock(&data->lock); + + return 0; +} + +static const struct thermal_zone_device_ops adt7470_thermal_ops =3D { + .get_temp =3D adt7470_get_temp, +}; + +static int adt7470_register_thermal_sensors(struct device *dev, + struct adt7470_data *data) +{ + int i; + + for (i =3D 0; i < ADT7470_TEMP_COUNT; i++) { + struct thermal_zone_device *tz; + + data->thermal_sensors[i].data =3D data; + data->thermal_sensors[i].id =3D i; + + tz =3D devm_thermal_of_zone_register(dev, i, &data->thermal_sensors[i], + &adt7470_thermal_ops); + if (IS_ERR(tz)) { + if (PTR_ERR(tz) =3D=3D -ENODEV) + continue; + return dev_warn_probe(dev, PTR_ERR(tz), + "failed to register thermal zone %d\n", + i); + } + } + + return 0; +} + static ssize_t pwm_max_show(struct device *dev, struct device_attribute *devattr, char *buf) { @@ -1401,6 +1448,10 @@ static int adt7470_probe(struct i2c_client *client) err =3D adt7470_register_cooling_devices(dev, data); if (err) return err; + + err =3D adt7470_register_thermal_sensors(dev, data); + if (err) + return err; } =20 data->auto_update =3D kthread_run(adt7470_update_thread, client, "%s", --=20 2.55.0