From nobody Wed Jul 15 13:58:13 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 4210149218D for ; Thu, 2 Jul 2026 09:48:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985739; cv=none; b=tgGaA6Hqf7rOXPy83Qd/mLTWGWqBB3Yt1mXUQMvTtLV8KF+Dv+ZNyjCTc/4Qc9ND/mCaAO/SpN3w40KkNNnUUOIry/fR80806Tkz4x4U5F7Ni5TZ9V4fitq32P5zNFTPg2AN50paGzawE7awyoBqHDjSb/KZkQB7/ARNn+NW0P0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985739; c=relaxed/simple; bh=Lu3/5yHuoogzBqicGhxPgGA1aDVYvg1NFiEWlLRcr8U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lswddV7QRZplQ2vbTyMoSJUR9q6D1ZNQ6rAkjx4Lkoo+822kV0W4yeHnaFot4WJ0RIj3sgemsbfFSIJGenZgi8neTlHJRWJEw8jBo7gpt34PfShNlFueSEqBOPASp/Sj+MMmNQUiMuh09iwrtb7uumO9ZPVwn4wsapUz9gSk6sI= 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=EFQeYm4K; arc=none smtp.client-ip=209.85.221.46 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="EFQeYm4K" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-473ba028d46so1601812f8f.1 for ; Thu, 02 Jul 2026 02:48:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782985736; x=1783590536; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4x6ovqqT3u1g/52da0/4nr7vRP4DjhNe/AZQZOSjueM=; b=EFQeYm4KvPP5W+didPgTm6ddMVCOha3R/D2ZEOtgTSnuQRACp6v2FdUBEH6d4zUCBg DA3eLleQNMgV/QtDK/R8CW+8Y8Q3tJW5DNqUnO5GhsCo8fNkAwV1VF8rKhplKyzDyLSf QdPl7+rNIMSOkpDVI5aWZqMIHYFPTNhKs2MfseiVC0+nyot1QQtInIvlY+cPmoghpYd8 RVKnxBlN63QeXTlfGjrqL0dfXDcm4k3xxYiYk7qvyFxc66paW3+2WxqPsb2mOwBxnv7F +4vqMqfEyP35eOWk8FZb7FqaK7cahcyJ3zN3K7RT+QRGT1xrbOgFMmJZg12PK4sGpjWZ xS0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782985736; x=1783590536; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=4x6ovqqT3u1g/52da0/4nr7vRP4DjhNe/AZQZOSjueM=; b=MRwU0460YoeP5eebMrqS1lZUad7FAmfyf2fvNgjgDWgEIov1UxBxdA22iRoMX4oK42 n1gQW3rKc28yrdVUGNJEjwxrvFX+vb8cibqtv28Z8U42sDlp2otAZtw+iNNd0jjsbUdn pIYqbRsiocAIwDr1POW2s0bYgWsExwvQC55v/+yIF48A2O/bQzPgvMxkYAFpV/fTCi5m Ri5i5EJfZNWdtaO6GHnTveY2HwwHRqXba+hw0zEnGU2w6uXTMJiqPpjSptbEJmfC3FgC P6Gn0t9tzMlIqQev6ep1eTIUhk52UGSO8ZwjbxIeyRC+ZoTRyu5mkKVLKeTiDbCjP4Em jXqQ== X-Forwarded-Encrypted: i=1; AHgh+RoSSGGzYb0uShOHdKjW6ekyDSJ+ttMkbSkKAL4B8/dymRImD/sY/8Znz4jgrEOSmO2gdr9dlyt8f2+ov/8=@vger.kernel.org X-Gm-Message-State: AOJu0YzeHrMJqOeIIzDGOY+trjvR0/zPIe/Uo9HCvlmcEwyvUQJ1xDNK jvoHUDIlHdssksYr/OUt8Z/c725TDybFi9yFM1iyCoedfzZg5Epuflzj X-Gm-Gg: AfdE7cnIzvIMY7i/RplMzEQVogOWSi5aMphwl9NbVUxvSh3f3f0CaeyrazzTSM6PXgK PCqtX0knD6i3XcDHTXTN0OGcIyAdFGsuL3qT7QkER5v6DBYrEQNwBGAFYMIaO8R2sIockfHKwMI TNfLxKF/XNyIY4yDPKqLeGjyQM7rMulsORFWfFZTIi6DuO6pjey9ZdRBYyLnpDESj4cFHV6Oe6R 7A4gTH+lYVj6YmJeRaol/G+JdDjmVnunzNk8E0nnOXUSIxp1f2Dy1jTGLcwbuqWj/2d+dDLFWyZ mfIsxvKTywiXLG6jaKpI+taFJSgnBmH3+7FwvmQCz13uSeynRLpf5DATVRNYdNUkS4KAMFmtl9/ eHj/WEtowb2E7cM+6VGzUOZSNIKowHvni1NYpPpj374qihCurPeJyJu9dPIIM4O8+oAX2exAXT5 JlKj2L6L653caWYDhH2sivfLRWpAqaTxc/S8LUBrM0OjABMTo+GIEG+bEPLr9EGLvKg9kxbnA5w Wc5xQ== X-Received: by 2002:a5d:5f8e:0:b0:46c:cffc:7638 with SMTP id ffacd0b85a97d-4775a1010ccmr7965353f8f.30.1782985735640; Thu, 02 Jul 2026 02:48:55 -0700 (PDT) Received: from Ansuel-XPS24.localdomain (host-79-52-250-217.retail.telecomitalia.it. [79.52.250.217]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-477dbe617b1sm7381364f8f.16.2026.07.02.02.48.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 02:48:55 -0700 (PDT) From: Christian Marangi To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Christian Marangi , Lorenzo Bianconi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: Wayen Yan Subject: [PATCH v6 1/7] thermal/drivers: airoha: fix copy paste error on clamp_t low temp Date: Thu, 2 Jul 2026 11:48:29 +0200 Message-ID: <20260702094846.17325-2-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260702094846.17325-1-ansuelsmth@gmail.com> References: <20260702094846.17325-1-ansuelsmth@gmail.com> 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 In airoha_thermal_set_trips, there is a copy paste error on clamping the value for the low trip temp point. Fix it to the correct value and actually clamp for the low variable. Fixes: 42de37f40e1b ("thermal/drivers: Add support for Airoha EN7581 therma= l sensor") Signed-off-by: Christian Marangi Reviewed-by: Wayen Yan --- drivers/thermal/airoha_thermal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/thermal/airoha_thermal.c b/drivers/thermal/airoha_ther= mal.c index b9fd6bfc88e5..439aa011b75c 100644 --- a/drivers/thermal/airoha_thermal.c +++ b/drivers/thermal/airoha_thermal.c @@ -273,7 +273,7 @@ static int airoha_thermal_set_trips(struct thermal_zone= _device *tz, int low, =20 if (low !=3D -INT_MAX) { /* Validate low and clamp it to a supported value */ - low =3D clamp_t(int, high, RAW_TO_TEMP(priv, 0), + low =3D clamp_t(int, low, RAW_TO_TEMP(priv, 0), RAW_TO_TEMP(priv, FIELD_MAX(EN7581_DOUT_TADC_MASK))); =20 /* We offset the low temp of 1=C2=B0C to trigger correct event */ --=20 2.53.0 From nobody Wed Jul 15 13:58:13 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 91F9449550A for ; Thu, 2 Jul 2026 09:48:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985740; cv=none; b=YlUGraP+71I0+48G5sAxXNP9e2ZSWVJqKdb6TYD52kljOgevux786DMHQbhgCSQ//JwZS8wtGHZydCbm6Bqd4wYfU5mJx+iyxGk5an/CNAX5RIMGkw2IPaJs1ywCJf1EJbKCLDGstmaxUm0K5u0EbFd6TC8rDEl7zF5iWGOUjrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985740; c=relaxed/simple; bh=q2RoOMzcj0veePsMkspohWrUIvTiV2RGzC3oQwNbiEg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mOUPcq/u8VFfrCzgLCTaQWteet+thjhqQvL+IZGYHMO0Ca7YVIrxOrRSsCcnLrpvWlgClJ8YuiK0Tz12w0usGQJrZDjWq+SA40F+KT9gLjhXr/hQjjE94ytH8XRQewwBwVoEI6LRiqptrBnuDvaMTiDg8rwiqYzJIg0oW1Fik1Q= 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=JDYKeQFK; arc=none smtp.client-ip=209.85.221.46 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="JDYKeQFK" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-47488efcf30so967222f8f.3 for ; Thu, 02 Jul 2026 02:48:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782985737; x=1783590537; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zX32mNUoHx/o/ajYaMNh117WhqsQfOxAKwbmb4jDyT0=; b=JDYKeQFKEj3DkRllkn8Wq0aO4oOTWTPY7slJjGFblOSWEjQiIU11Omh0aIAGnLLhA/ dIwelOfW2qNZgMZXlaO0xd+DQQQgPrtcPkNEizxaL/Mqc228b1Lq4VUQq13nMLI4ocAN 5WCSFtBqsftUcAN7jnr46sYyeNxifg0shH+fQQwkqmE1R6HxtlFQmQ70VSKz1Sbr5U8I EcDJoUElVoij71tklE5BpI3u+1LfDPcg4Orok9wiIbatHsgGIsJF8pIkC2GWI77WWc/b 8hRahPQS2zClYALejfP44GLitQxfyOwdu9nBLvaCr3auvPR2VJlTPEG3E9FhljUUTTcb ATlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782985737; x=1783590537; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zX32mNUoHx/o/ajYaMNh117WhqsQfOxAKwbmb4jDyT0=; b=O/2/HI0HfUYIWpkREi1vz9PEbDShWwRiYhCNPPwr6gL2Nipkl7m/cULU30VzNGHLwg IBFsFa9ky6Q9hL2CjXbATGKbUEBB/s9HNdZsCpN4LvxXHzDMnE/bq0ILZN25T5/5W99z 1Y4DwwuJVZQQqjvm4sr0t3ixT52Ulvtk/wpXl1ioW+CnoGlnTnZvIKIziKhqmwNJHAIw mrMlE2O3M2cqimp1DxhPilcv+xg1Yl5dHerl2eY+R1OBrbWnRWWxxnK7CL63AJ+wBnn3 ef6HsvAE1IgfziaDWAAoyAePmbbRxBh94sagY0W1dVquikF6VqylQzgG3gAadUNbiBVp Bp0Q== X-Forwarded-Encrypted: i=1; AHgh+RptBZNpJCMzY0XWhOlgqPmPgf5VXaw1TRE4UbHqWV8kdf3a9f60zRzAc1L3v432L1LCBDm9TCjhu5TehBo=@vger.kernel.org X-Gm-Message-State: AOJu0YzGJu4JZMCSbeAEoiKMRwKditkbzi1N5GjXCHUvoMtXqTfqXkEb ky1MJIR2VxbYUCyV06BqhVwmdOjMUNMV43yxBL92i1luCTtoCL6U8At1 X-Gm-Gg: AfdE7clQFVMQ95atI96He2aReK4na+vOIAV3ovt+YxweCEiDHvwi/wIownB/65T1dyC jjjtVqybI2DLwF8pHk3kdeO9/Qyff9hWVmRMZbyi68Hb6rTQifCA3ZRAcbh+GWdBtxfHHX3WqIs MLk9rXdowbyXhFk92+HHULJzMAnqiXjoPYPR40h8FPrF64C/xaZILDDHOUplN6D0EphjtPdjfgm J49Cld3HG2U1Pihxk2VNs2uebj3PEgBfGA/LKVrquJLbxBCI1xb87Ko+Ik8+ZdoaZdSvX01hLlF o9p/hPySaR2Omn/hR2PgETSW00kUKJdKS0sCkM1qS6zqXYS2lhczYF8fWsOlrqp1asjEYcMDXbu AMUBRO2Z40kwO2fFj/na2PlwzI6Gbp6zmbY7pwf6Z17Hx5SgG8+5m9yF0Aa5dZ7EeR2GK4cBvrZ s3xjQD4DoZMMPKK4wf0tIdr8otI2vSS1DLyDz5ngf0NJavc5RGq+x0ONsedweyM5mn4KYMbZKqK 3txVA== X-Received: by 2002:a05:6000:2309:b0:46e:550a:4d2b with SMTP id ffacd0b85a97d-4775a100b67mr7689307f8f.30.1782985737015; Thu, 02 Jul 2026 02:48:57 -0700 (PDT) Received: from Ansuel-XPS24.localdomain (host-79-52-250-217.retail.telecomitalia.it. [79.52.250.217]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-477dbe617b1sm7381364f8f.16.2026.07.02.02.48.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 02:48:56 -0700 (PDT) From: Christian Marangi To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Christian Marangi , Lorenzo Bianconi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: Wayen Yan Subject: [PATCH v6 2/7] thermal/drivers: airoha: fix copy paste error for sen internal Date: Thu, 2 Jul 2026 11:48:30 +0200 Message-ID: <20260702094846.17325-3-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260702094846.17325-1-ansuelsmth@gmail.com> References: <20260702094846.17325-1-ansuelsmth@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In airoha_thermal_setup_monitor there is a copy paste error on configuring the internval for temp monitor. Fix the error and use the correct mask for the sen interval for the EN7581_TEMPMONCTL2 register. Fixes: 42de37f40e1b ("thermal/drivers: Add support for Airoha EN7581 therma= l sensor") Signed-off-by: Christian Marangi Reviewed-by: Wayen Yan --- drivers/thermal/airoha_thermal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/thermal/airoha_thermal.c b/drivers/thermal/airoha_ther= mal.c index 439aa011b75c..829a7327fc40 100644 --- a/drivers/thermal/airoha_thermal.c +++ b/drivers/thermal/airoha_thermal.c @@ -403,7 +403,7 @@ static void airoha_thermal_setup_monitor(struct airoha_= thermal_priv *priv) * sen interval is 379 * 52.715us =3D 19.97ms */ writel(FIELD_PREP(EN7581_FILT_INTERVAL, 1) | - FIELD_PREP(EN7581_FILT_INTERVAL, 379), + FIELD_PREP(EN7581_SEN_INTERVAL, 379), priv->base + EN7581_TEMPMONCTL2); =20 /* AHB poll is set to 146 * 68.64 =3D 10.02us */ --=20 2.53.0 From nobody Wed Jul 15 13:58:13 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 F2E29495537 for ; Thu, 2 Jul 2026 09:48:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985742; cv=none; b=mhsWbJxvYx9bMeQekTvvxoLO6Iz6cBHOG2gXoJmijOKZHoZaBkJllDY9AV0HNw4WSf9Q2ILw44Gja8B9bRWzdYFz7bCgkxLKXdWwEZ/xQemFbhY/8GiT12GU6JhseG2sgy2dDkodj/MyUnznR0ixLpqvouwbUgOQo5Nyrzo0QKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985742; c=relaxed/simple; bh=6ky9g4KHbUV3l6SHftocKchWejvDlv/fyysqR2kd4OU=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gEo2rI3isqOiK3MgS1KSg69gOstR2RojLHdZBpD4xkHAZg4TVqu8Y8k5+r1T+94BAh3L+4rDkqUbJXs0zIZfCSafjRJN4ccg+ggvoHkOeF4SvGgjlqVWoPmfO/IlgsNr7C6Pat3Z8QJluodr9HwBomgev0W4WwVMPDBM46HNtnY= 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=P7UV/XfY; arc=none smtp.client-ip=209.85.221.46 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="P7UV/XfY" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-4758bd3731bso296641f8f.0 for ; Thu, 02 Jul 2026 02:48:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782985738; x=1783590538; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=0e97GBzjavtlOTUp72tsBF2P0b5wNf0hxsRbkXrGaZ4=; b=P7UV/XfY4cFIuaelJPVC0LK9q7hPQBVJdZ4TVUD1Vso3meyFC5VE87NhE0iipYQRen Er7bU8EzvnriZUopaPOtYjVb2q86W9T+Xc3bA725b/OqkfnQUqA5gFfGJUwgb30WYh1s QCF5lRfhGpbEe9ndvFbqe7MWjCb7vZU8BRXwe5/IEetLm6K/UvEPQVrD5jCyX57oebDb Rn+x0gB/MLOEgkIPZK8XiPTJpJDWGUIg6ZUjp1aN6DpK/R71myHP9hVO9HEJwtdFWycS theM8/MibhsNiClX9PNAqhwWDhE3Fwx5UWfjVSpu1PzrXhrlZ/4gwguDEMFzhtWSvaZk 69sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782985738; x=1783590538; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=0e97GBzjavtlOTUp72tsBF2P0b5wNf0hxsRbkXrGaZ4=; b=JE06RCR2NiGcuuAL1mzkasrqa16ytpBjC4go62GxmbCP+QHkVWT8b7cQaDk0qil1bF nqMvlCLQNm7cpteFPNT6S2U/LKuhAYrFqc8cvVob+X0phgQAsYvo+V0zjWtz9ArnbtdN LGbidjBw/Nykz/+eCyMx14gzY8DFOrBz2CGxWQgT4lsstTzL/1wCoIx17PuNiHjf6Rkt uxOUUFfaKo/W1N6RcozFbJuLPV4SEsKfnyDRGRmcoTWGywKueAQ29ezxtql+of1AIIlY As4c4fAqDqb1ks0L27KDe4PCBP/8tOCStxOT27wjwwLq8drmFamTB5Q/C485+WoxkAbJ LQoA== X-Forwarded-Encrypted: i=1; AHgh+Rq8+gOLZQloq9PJEbXABv2GZSgxvj8mzLmRcI5Y6Ge/widuSRANC+HEDAOgGFBToOu5zcFHobVv2Fk0zNg=@vger.kernel.org X-Gm-Message-State: AOJu0YwDicN81+fP8qL05zEISoZUsn+DZ8NtRwRvmtAOtKFSsHVOxw6h I2pNww5SU162Y9SD0HsLM5SnKi9W14ooB0DaAjMmHkPDPF2/zE8lwVnA X-Gm-Gg: AfdE7ckjgZPiacae7muuKf1vv5lfED3pJSlKwxzNl6BfTvy16ZOtEqpWywWiChiK3DE ut5gIh6HvBnEeEaM3vDiht1dEuAJgotdf7lidDzEO4z0vL25nnas0c7RW4Q6Vsv+Ag9kerERsnQ 0BK63LsgSdu1RqdcvWFgO4HVmS3aPN5LDgjxGIIqixEkKQD72Xs9oDKQ7Y/xCmiDmhWmcdUWLel 2JrdDislyy0UbrKXI2E0Y+PLWGLWh2y/VG1y8IUaaE2dcBvR9GEG/gvESH3MjEa9vS3i3oZlmVy Mzko7EiNYhQ2usINGjWLBHvxKCr20C8EI/yMB/YQTay8bPX+ciYS2zJMgBcl1oKAiiQ7DQ3Qjr/ KRH4z7pHFoOdg7HFISoBugSp6w1/xIrKp71EISAUF4QigTS8KFq9YEBFgTBoLef4Ph7bEW1LYj8 AeeN/9aDGQwOgVfI3WeojLX6HtrLDk0dDst3VGfTjGsBALK0PIUN2bjlmD/mG0wldoph6F1kYFi nGX2ZSxerSHBhcC X-Received: by 2002:a05:6000:4a13:b0:472:e43b:5e8c with SMTP id ffacd0b85a97d-475dff5e567mr13844172f8f.20.1782985738375; Thu, 02 Jul 2026 02:48:58 -0700 (PDT) Received: from Ansuel-XPS24.localdomain (host-79-52-250-217.retail.telecomitalia.it. [79.52.250.217]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-477dbe617b1sm7381364f8f.16.2026.07.02.02.48.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 02:48:57 -0700 (PDT) From: Christian Marangi To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Christian Marangi , Lorenzo Bianconi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v6 3/7] thermal/drivers: airoha: Convert to regmap API Date: Thu, 2 Jul 2026 11:48:31 +0200 Message-ID: <20260702094846.17325-4-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260702094846.17325-1-ansuelsmth@gmail.com> References: <20260702094846.17325-1-ansuelsmth@gmail.com> 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 In preparation for support of Airoha AN7583, convert the driver to regmap API. This is needed as Airoha AN7583 will be based on syscon regmap. Signed-off-by: Christian Marangi --- drivers/thermal/airoha_thermal.c | 77 +++++++++++++++++++------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/drivers/thermal/airoha_thermal.c b/drivers/thermal/airoha_ther= mal.c index 829a7327fc40..b63893a8997a 100644 --- a/drivers/thermal/airoha_thermal.c +++ b/drivers/thermal/airoha_thermal.c @@ -194,7 +194,7 @@ #define AIROHA_MAX_SAMPLES 6 =20 struct airoha_thermal_priv { - void __iomem *base; + struct regmap *map; struct regmap *chip_scu; struct resource scu_adc_res; =20 @@ -265,8 +265,8 @@ static int airoha_thermal_set_trips(struct thermal_zone= _device *tz, int low, RAW_TO_TEMP(priv, FIELD_MAX(EN7581_DOUT_TADC_MASK))); =20 /* We offset the high temp of 1=C2=B0C to trigger correct event */ - writel(TEMP_TO_RAW(priv, high) >> 4, - priv->base + EN7581_TEMPOFFSETH); + regmap_write(priv->map, EN7581_TEMPOFFSETH, + TEMP_TO_RAW(priv, high) >> 4); =20 enable_monitor =3D true; } @@ -277,15 +277,15 @@ static int airoha_thermal_set_trips(struct thermal_zo= ne_device *tz, int low, RAW_TO_TEMP(priv, FIELD_MAX(EN7581_DOUT_TADC_MASK))); =20 /* We offset the low temp of 1=C2=B0C to trigger correct event */ - writel(TEMP_TO_RAW(priv, low) >> 4, - priv->base + EN7581_TEMPOFFSETL); + regmap_write(priv->map, EN7581_TEMPOFFSETL, + TEMP_TO_RAW(priv, low) >> 4); =20 enable_monitor =3D true; } =20 /* Enable sensor 0 monitor after trip are set */ if (enable_monitor) - writel(EN7581_SENSE0_EN, priv->base + EN7581_TEMPMONCTL0); + regmap_write(priv->map, EN7581_TEMPMONCTL0, EN7581_SENSE0_EN); =20 return 0; } @@ -300,9 +300,9 @@ static irqreturn_t airoha_thermal_irq(int irq, void *da= ta) struct airoha_thermal_priv *priv =3D data; enum thermal_notify_event event; bool update =3D false; - u32 status; + u32 status =3D 0; =20 - status =3D readl(priv->base + EN7581_TEMPMONINTSTS); + regmap_read(priv->map, EN7581_TEMPMONINTSTS, &status); switch (status & (EN7581_HOFSINTSTS0 | EN7581_LOFSINTSTS0)) { case EN7581_HOFSINTSTS0: event =3D THERMAL_TRIP_VIOLATED; @@ -318,7 +318,7 @@ static irqreturn_t airoha_thermal_irq(int irq, void *da= ta) } =20 /* Reset Interrupt */ - writel(status, priv->base + EN7581_TEMPMONINTSTS); + regmap_write(priv->map, EN7581_TEMPMONINTSTS, status); =20 if (update) thermal_zone_device_update(priv->tz, event); @@ -329,18 +329,19 @@ static irqreturn_t airoha_thermal_irq(int irq, void *= data) static void airoha_thermal_setup_adc_val(struct device *dev, struct airoha_thermal_priv *priv) { - u32 efuse_calib_info, cpu_sensor; + u32 efuse_calib_info =3D 0; + u32 cpu_sensor =3D 0; =20 /* Setup thermal sensor to ADC mode and setup the mux to DIODE1 */ airoha_init_thermal_ADC_mode(priv); /* sleep 10 ms for ADC to enable */ usleep_range(10 * USEC_PER_MSEC, 11 * USEC_PER_MSEC); =20 - efuse_calib_info =3D readl(priv->base + EN7581_EFUSE_TEMP_OFFSET_REG); + regmap_read(priv->map, EN7581_EFUSE_TEMP_OFFSET_REG, &efuse_calib_info); if (efuse_calib_info) { priv->default_offset =3D FIELD_GET(EN7581_EFUSE_TEMP_OFFSET, efuse_calib= _info); /* Different slope are applied if the sensor is used for CPU or for pack= age */ - cpu_sensor =3D readl(priv->base + EN7581_EFUSE_TEMP_CPU_SENSOR_REG); + regmap_read(priv->map, EN7581_EFUSE_TEMP_CPU_SENSOR_REG, &cpu_sensor); if (cpu_sensor) { priv->default_slope =3D EN7581_SLOPE_X100_DIO_DEFAULT; priv->init_temp =3D EN7581_INIT_TEMP_FTK_X10; @@ -359,8 +360,8 @@ static void airoha_thermal_setup_adc_val(struct device = *dev, static void airoha_thermal_setup_monitor(struct airoha_thermal_priv *priv) { /* Set measure mode */ - writel(FIELD_PREP(EN7581_MSRCTL0, EN7581_MSRCTL_6SAMPLE_MAX_MIX_AVG4), - priv->base + EN7581_TEMPMSRCTL0); + regmap_write(priv->map, EN7581_TEMPMSRCTL0, + FIELD_PREP(EN7581_MSRCTL0, EN7581_MSRCTL_6SAMPLE_MAX_MIX_AVG4)); =20 /* * Configure ADC valid reading addr @@ -375,15 +376,15 @@ static void airoha_thermal_setup_monitor(struct airoh= a_thermal_priv *priv) * We set valid instead of volt as we don't enable valid/volt * split reading and AHB read valid addr in such case. */ - writel(priv->scu_adc_res.start + EN7581_DOUT_TADC, - priv->base + EN7581_TEMPADCVALIDADDR); + regmap_write(priv->map, EN7581_TEMPADCVALIDADDR, + priv->scu_adc_res.start + EN7581_DOUT_TADC); =20 /* * Configure valid bit on a fake value of bit 16. The ADC outputs * max of 2 bytes for voltage. */ - writel(FIELD_PREP(EN7581_ADV_RD_VALID_POS, 16), - priv->base + EN7581_TEMPADCVALIDMASK); + regmap_write(priv->map, EN7581_TEMPADCVALIDMASK, + FIELD_PREP(EN7581_ADV_RD_VALID_POS, 16)); =20 /* * AHB supports max 12 bytes for ADC voltage. Shift the read @@ -391,40 +392,52 @@ static void airoha_thermal_setup_monitor(struct airoh= a_thermal_priv *priv) * in the order of half a =C2=B0C and is acceptable in the context * of triggering interrupt in critical condition. */ - writel(FIELD_PREP(EN7581_ADC_VOLTAGE_SHIFT, 4), - priv->base + EN7581_TEMPADCVOLTAGESHIFT); + regmap_write(priv->map, EN7581_TEMPADCVOLTAGESHIFT, + FIELD_PREP(EN7581_ADC_VOLTAGE_SHIFT, 4)); =20 /* BUS clock is 300MHz counting unit is 3 * 68.64 * 256 =3D 52.715us */ - writel(FIELD_PREP(EN7581_PERIOD_UNIT, 3), - priv->base + EN7581_TEMPMONCTL1); + regmap_write(priv->map, EN7581_TEMPMONCTL1, + FIELD_PREP(EN7581_PERIOD_UNIT, 3)); =20 /* * filt interval is 1 * 52.715us =3D 52.715us, * sen interval is 379 * 52.715us =3D 19.97ms */ - writel(FIELD_PREP(EN7581_FILT_INTERVAL, 1) | - FIELD_PREP(EN7581_SEN_INTERVAL, 379), - priv->base + EN7581_TEMPMONCTL2); + regmap_write(priv->map, EN7581_TEMPMONCTL2, + FIELD_PREP(EN7581_FILT_INTERVAL, 1) | + FIELD_PREP(EN7581_SEN_INTERVAL, 379)); =20 /* AHB poll is set to 146 * 68.64 =3D 10.02us */ - writel(FIELD_PREP(EN7581_ADC_POLL_INTVL, 146), - priv->base + EN7581_TEMPAHBPOLL); + regmap_write(priv->map, EN7581_TEMPAHBPOLL, + FIELD_PREP(EN7581_ADC_POLL_INTVL, 146)); } =20 +static const struct regmap_config airoha_thermal_regmap_config =3D { + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, +}; + static int airoha_thermal_probe(struct platform_device *pdev) { struct airoha_thermal_priv *priv; struct device_node *chip_scu_np; struct device *dev =3D &pdev->dev; + void __iomem *base; int irq, ret; =20 priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; =20 - priv->base =3D devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(priv->base)) - return PTR_ERR(priv->base); + base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); + + priv->map =3D devm_regmap_init_mmio(dev, base, + &airoha_thermal_regmap_config); + if (IS_ERR(priv->map)) + return PTR_ERR(priv->map); =20 chip_scu_np =3D of_parse_phandle(dev->of_node, "airoha,chip-scu", 0); if (!chip_scu_np) @@ -462,8 +475,8 @@ static int airoha_thermal_probe(struct platform_device = *pdev) platform_set_drvdata(pdev, priv); =20 /* Enable LOW and HIGH interrupt */ - writel(EN7581_HOFSINTEN0 | EN7581_LOFSINTEN0, - priv->base + EN7581_TEMPMONINT); + regmap_write(priv->map, EN7581_TEMPMONINT, + EN7581_HOFSINTEN0 | EN7581_LOFSINTEN0); =20 return 0; } --=20 2.53.0 From nobody Wed Jul 15 13:58:13 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (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 54C534963DD for ; Thu, 2 Jul 2026 09:49:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985743; cv=none; b=A1+IZYtrFbMX5h2vbecdbYyL3zG2+d5rHS+nZyhMQNuViwje6/iaPILos8O6SJLMity79DxtbW6WcLkeBMUASu/OhvG45MN0YeZbikmCRdukoccF6Fo4U1aemHp53vMdD2SO1muh7+reuceFIiVJ/eHDV1lCR9NtPL/DJ6bnI6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985743; c=relaxed/simple; bh=XuOknPD1hS2q5HwdOufPrXyYQTeSyWpjJoiPkpF0LtA=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fT0+qqmNyYA4DgJ2DVM7alNSIkvyR+m3bq9HokyHYMP13pcASA32cPIpFK0lANQMcTNrwaCQ5hgVhyDmWzI2fdFyROmx4QIF7vLB86SnPkrX688Z3F69/+8CwoPfObYMJOcuXHmpd4ri5FejMU0cgTR26ntwe2dgdk5SizNyhKY= 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=cCTXV7/N; arc=none smtp.client-ip=209.85.221.47 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="cCTXV7/N" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-476a130c138so1488345f8f.0 for ; Thu, 02 Jul 2026 02:49:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782985740; x=1783590540; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=7oxMnXh4V+hcg0T9wDKZ3oIMULl0k+cYP8lb8bHQAhQ=; b=cCTXV7/Nex//DIsCGVpfJOe33eKNTw06z8TisMyhFSyF0ZE+zxM4xeeUyFujf0pVom LAQ7RnM6yiiMLnfea13GwupxKR2NSDcdYov1bKjKT+/wgNztdlutX9yhvwBV1IKF5HlL jJKXdTz6KP/iWxyRSO9ZRpZlYkdTxmzpMYWPrpll8GSLrxe8vyPm3JP1i7y9wwhZZFn9 sQl9KTswlJEIHov/ACdxsPQWPfRMNxIZ7vl4zy+XzVP6m9nTvo18nOpaWCjIWNIC3Q5v w4COXMdi9YCJ7WUWLZJkWmjxuvs1fz5EgywdBLxOn6AlqLGyMpdxvSnXZFjlqkpxQlhI PfXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782985740; x=1783590540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=7oxMnXh4V+hcg0T9wDKZ3oIMULl0k+cYP8lb8bHQAhQ=; b=G/h3gWIRoc5gBzkY3EqW4JhPGG/XfWp4PdB8SLz4V2gJoNDO0/xP5ReW97oaodaide KANd1S8z3Sa6WmxoQOytkKis9WuESa4Ka61GE34BbKbYQx7dYHFOaf7RPYGT5/oTQgZP fNs4YTg9DWuWXGLrjjHSJBe5YpCIgnZVZTqKL21ke9WoSfxSyEEa3Py27f7JBYSq6b0m wogN6rTlYRz4nufxMn4DPrTamg1a4TLpgItr03qjUe7uRZ+BgJdTPBqo6qjzeT752D4A K2exOSSCPP2ARU6QadDKVnaZC5Uz9K2XoGyj6J5MUmfZ8vG4jR8zx2WuZhIoxgof9L2d /WLQ== X-Forwarded-Encrypted: i=1; AHgh+Rql2KTmJrLoXomLZPvRrvHW7zhfKodT3xTfPJk8ZVtIu3Azuh9cXoWREiLIYzfQVLm6GOK8bt+Fefxh624=@vger.kernel.org X-Gm-Message-State: AOJu0YxuzG56Y3Y6E12boQpbj/5bzX7ZdKOelt+ckj5taaUHR8OmbWAs 1Tane7dJk4EnWOoxmm0LrhuUnC0g/3RXxN/uihKk+7ikXNSZ/EqUltzi X-Gm-Gg: AfdE7cl+WPMgkcdmECE31s7l4GzoJoLpj/PHne54clUokG9q/tLp6+7mh4BSWozlCYE bXLHok00DuA8ebylEclCvPGKUA3NVt5JXHApmf9ff+wcvItbWzNhcHZyZtaDLoVjk2LfgdD5aVo rJrsXX/vmAkHthvC7g1pAS9h5M6ZY3dJUjUURJOK7uOg2qyit1Vg6iEKjOewm3WQP5g2GSfFI6K cUeKIvjX5Do2Qs3x0MlqLQt5/JHZUyr2kQC96Whnqm3Tw/yI8rdJfnRblfGYs9PQNYbzkTapXCC LdEn17U0XA1aZZ2ZpXUp60qP5KaBbgp6Q53OWlvmfbgdJ/lYhXwxR4ZgEr529DX6hc1EcjaNSh+ +6UMe51+B0ymhU7d/gftL95LuZQdg/sH5H2O7g+AI1zxCdHR0xRPTv+osV4TWi+FaGGpAbS2VTR 2EVT+MswoUmhWDLFWezIXdP5096B8OcW0JIqZF3sArYpMUQ4vuepYpn2YRsLJ4jG+Wk4cX2vWkV ceeMw== X-Received: by 2002:a05:6000:2087:b0:477:3d23:f920 with SMTP id ffacd0b85a97d-477b3e55ab7mr6235026f8f.26.1782985739651; Thu, 02 Jul 2026 02:48:59 -0700 (PDT) Received: from Ansuel-XPS24.localdomain (host-79-52-250-217.retail.telecomitalia.it. [79.52.250.217]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-477dbe617b1sm7381364f8f.16.2026.07.02.02.48.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 02:48:59 -0700 (PDT) From: Christian Marangi To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Christian Marangi , Lorenzo Bianconi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v6 4/7] thermal/drivers: airoha: Generalize probe function Date: Thu, 2 Jul 2026 11:48:32 +0200 Message-ID: <20260702094846.17325-5-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260702094846.17325-1-ansuelsmth@gmail.com> References: <20260702094846.17325-1-ansuelsmth@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for support of Airoha AN7583, generalize the probe function to address for the 2 SoC differece. Implement a match_data struct where it's possible to define a more specific probe and post_probe function and specific thermal ops and pllrg protect value. Signed-off-by: Christian Marangi --- drivers/thermal/airoha_thermal.c | 102 +++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/drivers/thermal/airoha_thermal.c b/drivers/thermal/airoha_ther= mal.c index b63893a8997a..ebb47ae5f2ce 100644 --- a/drivers/thermal/airoha_thermal.c +++ b/drivers/thermal/airoha_thermal.c @@ -198,12 +198,23 @@ struct airoha_thermal_priv { struct regmap *chip_scu; struct resource scu_adc_res; =20 + u32 pllrg_protect; + struct thermal_zone_device *tz; int init_temp; int default_slope; int default_offset; }; =20 +struct airoha_thermal_soc_data { + u32 pllrg_protect; + + const struct thermal_zone_device_ops *thdev_ops; + int (*probe)(struct platform_device *pdev, + struct airoha_thermal_priv *priv); + int (*post_probe)(struct platform_device *pdev); +}; + static int airoha_get_thermal_ADC(struct airoha_thermal_priv *priv) { u32 val; @@ -220,7 +231,8 @@ static void airoha_init_thermal_ADC_mode(struct airoha_= thermal_priv *priv) regmap_read(priv->chip_scu, EN7581_PLLRG_PROTECT, &pllrg); =20 /* Give access to thermal regs */ - regmap_write(priv->chip_scu, EN7581_PLLRG_PROTECT, EN7581_SCU_THERMAL_PRO= TECT_KEY); + regmap_write(priv->chip_scu, EN7581_PLLRG_PROTECT, + priv->pllrg_protect); adc_mux =3D FIELD_PREP(EN7581_MUX_TADC, EN7581_SCU_THERMAL_MUX_DIODE1); regmap_write(priv->chip_scu, EN7581_PWD_TADC, adc_mux); =20 @@ -228,7 +240,7 @@ static void airoha_init_thermal_ADC_mode(struct airoha_= thermal_priv *priv) regmap_write(priv->chip_scu, EN7581_PLLRG_PROTECT, pllrg); } =20 -static int airoha_thermal_get_temp(struct thermal_zone_device *tz, int *te= mp) +static int en7581_thermal_get_temp(struct thermal_zone_device *tz, int *te= mp) { struct airoha_thermal_priv *priv =3D thermal_zone_device_priv(tz); int min_value, max_value, avg_value, value; @@ -253,7 +265,7 @@ static int airoha_thermal_get_temp(struct thermal_zone_= device *tz, int *temp) return 0; } =20 -static int airoha_thermal_set_trips(struct thermal_zone_device *tz, int lo= w, +static int en7581_thermal_set_trips(struct thermal_zone_device *tz, int lo= w, int high) { struct airoha_thermal_priv *priv =3D thermal_zone_device_priv(tz); @@ -290,12 +302,12 @@ static int airoha_thermal_set_trips(struct thermal_zo= ne_device *tz, int low, return 0; } =20 -static const struct thermal_zone_device_ops thdev_ops =3D { - .get_temp =3D airoha_thermal_get_temp, - .set_trips =3D airoha_thermal_set_trips, +static const struct thermal_zone_device_ops en7581_thdev_ops =3D { + .get_temp =3D en7581_thermal_get_temp, + .set_trips =3D en7581_thermal_set_trips, }; =20 -static irqreturn_t airoha_thermal_irq(int irq, void *data) +static irqreturn_t en7581_thermal_irq(int irq, void *data) { struct airoha_thermal_priv *priv =3D data; enum thermal_notify_event event; @@ -326,7 +338,7 @@ static irqreturn_t airoha_thermal_irq(int irq, void *da= ta) return IRQ_HANDLED; } =20 -static void airoha_thermal_setup_adc_val(struct device *dev, +static void en7581_thermal_setup_adc_val(struct device *dev, struct airoha_thermal_priv *priv) { u32 efuse_calib_info =3D 0; @@ -357,7 +369,7 @@ static void airoha_thermal_setup_adc_val(struct device = *dev, } } =20 -static void airoha_thermal_setup_monitor(struct airoha_thermal_priv *priv) +static void en7581_thermal_setup_monitor(struct airoha_thermal_priv *priv) { /* Set measure mode */ regmap_write(priv->map, EN7581_TEMPMSRCTL0, @@ -412,30 +424,26 @@ static void airoha_thermal_setup_monitor(struct airoh= a_thermal_priv *priv) FIELD_PREP(EN7581_ADC_POLL_INTVL, 146)); } =20 -static const struct regmap_config airoha_thermal_regmap_config =3D { +static const struct regmap_config en7581_thermal_regmap_config =3D { .reg_bits =3D 32, .reg_stride =3D 4, .val_bits =3D 32, }; =20 -static int airoha_thermal_probe(struct platform_device *pdev) +static int en7581_thermal_probe(struct platform_device *pdev, + struct airoha_thermal_priv *priv) { - struct airoha_thermal_priv *priv; struct device_node *chip_scu_np; struct device *dev =3D &pdev->dev; void __iomem *base; int irq, ret; =20 - priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - base =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(base)) return PTR_ERR(base); =20 priv->map =3D devm_regmap_init_mmio(dev, base, - &airoha_thermal_regmap_config); + &en7581_thermal_regmap_config); if (IS_ERR(priv->map)) return PTR_ERR(priv->map); =20 @@ -455,18 +463,55 @@ static int airoha_thermal_probe(struct platform_devic= e *pdev) return irq; =20 ret =3D devm_request_threaded_irq(&pdev->dev, irq, NULL, - airoha_thermal_irq, IRQF_ONESHOT, + en7581_thermal_irq, IRQF_ONESHOT, pdev->name, priv); if (ret) { dev_err(dev, "Can't get interrupt working.\n"); return ret; } =20 - airoha_thermal_setup_monitor(priv); - airoha_thermal_setup_adc_val(dev, priv); + en7581_thermal_setup_monitor(priv); + en7581_thermal_setup_adc_val(dev, priv); + + return 0; +} + +static int en7581_thermal_post_probe(struct platform_device *pdev) +{ + struct airoha_thermal_priv *priv =3D platform_get_drvdata(pdev); + + /* Enable LOW and HIGH interrupt (if supported) */ + regmap_write(priv->map, EN7581_TEMPMONINT, + EN7581_HOFSINTEN0 | EN7581_LOFSINTEN0); + + return 0; +} + +static int airoha_thermal_probe(struct platform_device *pdev) +{ + const struct airoha_thermal_soc_data *soc_data; + struct airoha_thermal_priv *priv; + struct device *dev =3D &pdev->dev; + int ret; + + soc_data =3D device_get_match_data(dev); + + priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->pllrg_protect =3D soc_data->pllrg_protect; + + if (!soc_data->probe) + return -EINVAL; + + ret =3D soc_data->probe(pdev, priv); + if (ret) + return ret; =20 /* register of thermal sensor and get info from DT */ - priv->tz =3D devm_thermal_of_zone_register(dev, 0, priv, &thdev_ops); + priv->tz =3D devm_thermal_of_zone_register(dev, 0, priv, + soc_data->thdev_ops); if (IS_ERR(priv->tz)) { dev_err(dev, "register thermal zone sensor failed\n"); return PTR_ERR(priv->tz); @@ -474,15 +519,18 @@ static int airoha_thermal_probe(struct platform_devic= e *pdev) =20 platform_set_drvdata(pdev, priv); =20 - /* Enable LOW and HIGH interrupt */ - regmap_write(priv->map, EN7581_TEMPMONINT, - EN7581_HOFSINTEN0 | EN7581_LOFSINTEN0); - - return 0; + return soc_data->post_probe ? soc_data->post_probe(pdev) : 0; } =20 +static const struct airoha_thermal_soc_data en7581_data =3D { + .pllrg_protect =3D EN7581_SCU_THERMAL_PROTECT_KEY, + .thdev_ops =3D &en7581_thdev_ops, + .probe =3D &en7581_thermal_probe, + .post_probe =3D &en7581_thermal_post_probe, +}; + static const struct of_device_id airoha_thermal_match[] =3D { - { .compatible =3D "airoha,en7581-thermal" }, + { .compatible =3D "airoha,en7581-thermal", .data =3D &en7581_data }, {}, }; MODULE_DEVICE_TABLE(of, airoha_thermal_match); --=20 2.53.0 From nobody Wed Jul 15 13:58:13 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (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 9E0B149218D for ; Thu, 2 Jul 2026 09:49:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985744; cv=none; b=Pd/onbyemkv/W/UDyV1wr1Kzt/A+xWdezG0nYgkKFKwKM3CbQUg+I2R4bisHVZ/c49HhT1J/bA/qtD+S+EpWxzFnnXxQBRcA2w+WVMIuXGFJsJpI0ZB4AmyWbtl+GBySDo40i9cVh76DVhxcIsHNKoCvGrylYfMdsG22A74MEec= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985744; c=relaxed/simple; bh=gCW1JK9UfuVJlNjcjVAgFsmrKOhj8oYjfr8zCWm7Bfc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gqufM3Ewmoqkt+jSTgg0kg0mJVt0ZpdiRjKCxHQDwnMNC+JRysuIeipwhutleAVajMyW33wXi2H2V3+vDy+dnJz6UfdJcwAVXtqvnVKwmkxUJZrmroNTE4XQtQYwS6h3ujS9jNasr7EX/u5D4v8IRU4Lw5vV3SP2rvzn07qvVS4= 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=jiTro3IZ; arc=none smtp.client-ip=209.85.221.54 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="jiTro3IZ" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-473ba028d46so1601893f8f.1 for ; Thu, 02 Jul 2026 02:49:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782985741; x=1783590541; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=pXeSKigfSE7Ujy9dejCk8EK2GGuGXGtDonABN0rEpDQ=; b=jiTro3IZ//UI+g7vVXPiTjrzgP7wUrwbHBiBZiKsA8cSrA94OXXG7lr8F3NC6Wh5Xz fLXT6tGJH2DgODsglEv1/fZhJsAoJmz760USwjGKySvN2HsuA/uAV2/2AjM2P+h8mDJp /2rmO1fJJwaXFqNmLr8puF6oStQXxvKZE1rmfSyQFsAFUb2tkGeEOhc6riBgwaTVA5Cn 3y+rw59cXY3iwzVRNA9sj8DYH1MJ7/9rmCrfnPQ4uFrlT9BkCndnhgATkYbca9+E4fTe Rg72Hf9/1vQIxt7nJXL3IVZMH6gFIS/i3Qskz6KBQhcfovC8oeZvSR3YTUPQoQOazLpr JJtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782985741; x=1783590541; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=pXeSKigfSE7Ujy9dejCk8EK2GGuGXGtDonABN0rEpDQ=; b=szZEqFRYhZjOIkZ4hfKkFYCEfTJL9v369E1aJeFzBC8dxXqlZ4AlEVGle24td/MleU CuL6jH/w/CF6osRgHcZ13IOwkt2isr9lEcoR87SIue1AoVcggWmlpowViK5BIAEUal1X vXom2JLrECeo184Aq06d4ammwGOK9xfyDfFwa6mD3Otm4Cank2igGVnT9n5Q+aKsEFbh RemMxmw3sqNOeBaVCfFyv6LwKAkxTz/mFru6P+XIFbR5RQKPK8TF9FBvSUumpt2dEgZ+ xHUONUUQK1yfElxJ4tFdghT0A69G7FIrmGAIXiqrvV7/2SJ2o3BeVpb9kD+tr3s4A43n bYLw== X-Forwarded-Encrypted: i=1; AHgh+Rrz5lxPOHeOZr+Q0XtnETSQ5F8OiAiZlsjM21C8b1jl5xEKPUiJyA/Osjh0elUi+b+iwbsVsp0Dtltbdis=@vger.kernel.org X-Gm-Message-State: AOJu0YxjJGwjPT5IWfIymCLiGgQ85YLbG2sbW7jAfbk5DAbjzCbw1w+7 iE4KMntCY1N5WZbHTZGRRgCGYxliPLVFvSpn/M2glljJgojubuS9GK89 X-Gm-Gg: AfdE7cmPp/AVQH+kc2OnjAf/HKhpUdAULveI4rOgWO3aTK/lhBOh1t3hQAK2vY/Q9dv JW0bk4U5QT2uX8RXim0yEbLUq/51hDpMVmvxsXM5LsqQzGY+L3xu6S+5JTWBfeFEet06bK4m2rC IB+SN3mXhYoDIzoit0Cidmaa08dYypjoHoRNoOOzP5cYboXFqHu2QXb2TP2OSTTDiRgotKWvip5 WSZACoBn8qCzniaaDGFkuYuAPCCbOHPf9OEtdgDjPpSz1RxMeQDdEukNGmDP7Xb2zbkGRB8IH/G v5zTBfakp/h7ly3NP8qgagjDMSIR88+uMxxtB8pEKIYhnh5US0Vd7MZOsKizoOZ7qExjecEgL0j XuXxk/ATkixmhGx9pqVVLGYz7SMi9BR3JTszsNVmRHE5GK6wRMnEI9afp1M/FzC3y1BSWrmEoaK YnPHA0tislr0fkXfom/zWleXc/EL4XZ2Yg9fjrFDn2lyytr7rgsym5GuA0fAT5OtUvnh3tMBGMJ HUGvw== X-Received: by 2002:a05:6000:2c07:b0:461:e27d:5690 with SMTP id ffacd0b85a97d-47758fa28ebmr7571330f8f.26.1782985740932; Thu, 02 Jul 2026 02:49:00 -0700 (PDT) Received: from Ansuel-XPS24.localdomain (host-79-52-250-217.retail.telecomitalia.it. [79.52.250.217]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-477dbe617b1sm7381364f8f.16.2026.07.02.02.48.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 02:49:00 -0700 (PDT) From: Christian Marangi To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Christian Marangi , Lorenzo Bianconi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v6 5/7] thermal/drivers: airoha: Generalize get_thermal_ADC and set_mux function Date: Thu, 2 Jul 2026 11:48:33 +0200 Message-ID: <20260702094846.17325-6-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260702094846.17325-1-ansuelsmth@gmail.com> References: <20260702094846.17325-1-ansuelsmth@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for support of Airoha AN7583, generalize get_thermal_ADC() and set_thermal_mux() with the use of reg_field API. This is to account the same logic between the current supported SoC and the new one but with different register address. While at it also further improve some comments and move sleep inside the set_thermal_mux function. Signed-off-by: Christian Marangi --- drivers/thermal/airoha_thermal.c | 56 +++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/drivers/thermal/airoha_thermal.c b/drivers/thermal/airoha_ther= mal.c index ebb47ae5f2ce..249abbbd46bc 100644 --- a/drivers/thermal/airoha_thermal.c +++ b/drivers/thermal/airoha_thermal.c @@ -193,9 +193,18 @@ =20 #define AIROHA_MAX_SAMPLES 6 =20 +enum airoha_thermal_chip_scu_field { + AIROHA_THERMAL_DOUT_TADC, + AIROHA_THERMAL_MUX_TADC, + + /* keep last */ + AIROHA_THERMAL_FIELD_MAX, +}; + struct airoha_thermal_priv { struct regmap *map; struct regmap *chip_scu; + struct regmap_field *chip_scu_fields[AIROHA_THERMAL_FIELD_MAX]; struct resource scu_adc_res; =20 u32 pllrg_protect; @@ -219,25 +228,32 @@ static int airoha_get_thermal_ADC(struct airoha_therm= al_priv *priv) { u32 val; =20 - regmap_read(priv->chip_scu, EN7581_DOUT_TADC, &val); - return FIELD_GET(EN7581_DOUT_TADC_MASK, val); + regmap_field_read(priv->chip_scu_fields[AIROHA_THERMAL_DOUT_TADC], + &val); + return val; } =20 -static void airoha_init_thermal_ADC_mode(struct airoha_thermal_priv *priv) +static void airoha_set_thermal_mux(struct airoha_thermal_priv *priv, + int tdac_idx) { - u32 adc_mux, pllrg; + u32 pllrg; =20 /* Save PLLRG current value */ regmap_read(priv->chip_scu, EN7581_PLLRG_PROTECT, &pllrg); =20 - /* Give access to thermal regs */ + /* Give access to Thermal regs */ regmap_write(priv->chip_scu, EN7581_PLLRG_PROTECT, priv->pllrg_protect); - adc_mux =3D FIELD_PREP(EN7581_MUX_TADC, EN7581_SCU_THERMAL_MUX_DIODE1); - regmap_write(priv->chip_scu, EN7581_PWD_TADC, adc_mux); + + /* Configure Thermal ADC mux to tdac_idx */ + regmap_field_write(priv->chip_scu_fields[AIROHA_THERMAL_MUX_TADC], + tdac_idx); =20 /* Restore PLLRG value on exit */ regmap_write(priv->chip_scu, EN7581_PLLRG_PROTECT, pllrg); + + /* Sleep 10 ms for Thermal ADC to enable */ + usleep_range(10 * USEC_PER_MSEC, 11 * USEC_PER_MSEC); } =20 static int en7581_thermal_get_temp(struct thermal_zone_device *tz, int *te= mp) @@ -344,10 +360,8 @@ static void en7581_thermal_setup_adc_val(struct device= *dev, u32 efuse_calib_info =3D 0; u32 cpu_sensor =3D 0; =20 - /* Setup thermal sensor to ADC mode and setup the mux to DIODE1 */ - airoha_init_thermal_ADC_mode(priv); - /* sleep 10 ms for ADC to enable */ - usleep_range(10 * USEC_PER_MSEC, 11 * USEC_PER_MSEC); + /* Setup Thermal Sensor to ADC mode and setup the mux to DIODE1 */ + airoha_set_thermal_mux(priv, EN7581_SCU_THERMAL_MUX_DIODE1); =20 regmap_read(priv->map, EN7581_EFUSE_TEMP_OFFSET_REG, &efuse_calib_info); if (efuse_calib_info) { @@ -430,13 +444,18 @@ static const struct regmap_config en7581_thermal_regm= ap_config =3D { .val_bits =3D 32, }; =20 +static const struct reg_field en7581_chip_scu_fields[AIROHA_THERMAL_FIELD_= MAX] =3D { + [AIROHA_THERMAL_DOUT_TADC] =3D REG_FIELD(EN7581_DOUT_TADC, 0, 15), + [AIROHA_THERMAL_MUX_TADC] =3D REG_FIELD(EN7581_PWD_TADC, 1, 3), +}; + static int en7581_thermal_probe(struct platform_device *pdev, struct airoha_thermal_priv *priv) { struct device_node *chip_scu_np; struct device *dev =3D &pdev->dev; void __iomem *base; - int irq, ret; + int i, irq, ret; =20 base =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(base)) @@ -455,6 +474,19 @@ static int en7581_thermal_probe(struct platform_device= *pdev, if (IS_ERR(priv->chip_scu)) return PTR_ERR(priv->chip_scu); =20 + for (i =3D 0; i < AIROHA_THERMAL_FIELD_MAX; i++) { + struct regmap_field *field; + + field =3D devm_regmap_field_alloc(dev, priv->chip_scu, + en7581_chip_scu_fields[i]); + if (IS_ERR(field)) { + of_node_put(chip_scu_np); + return PTR_ERR(field); + } + + priv->chip_scu_fields[i] =3D field; + } + of_address_to_resource(chip_scu_np, 0, &priv->scu_adc_res); of_node_put(chip_scu_np); =20 --=20 2.53.0 From nobody Wed Jul 15 13:58:13 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (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 E38D94A139D for ; Thu, 2 Jul 2026 09:49:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985745; cv=none; b=t31kkxq9STFnsP+ovFR5b1N1hB9orSZrRBa9OzlO5YNuLinHjh+Y1DDKeZw8PNUgOvDCRUCiFlA4ink+pIQfUuUlHmPGoTEv2l7GjfhfZ+EB9QnOKxAWQPe8afG6wb57yiCRMdsRVqzUsx7Gx5JmIFjpUMsf751NM4C9QP0LllE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985745; c=relaxed/simple; bh=lB0Bes671BROEQ9VD1Y2AMxRwGu77UsD5N3peyamiys=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QW/xrmTDyfIVualnrNZtdvInl2sQ8Yv9BnJHKoOKSthFo8J1bR0M5BWQXRnkIu14oBVmMH3CcyWbKGd9NoUlYQb2YCIf6+5xuyr1JnZ8+QCYYlw4z0H6GEav+1JaSghqlFRwXWlE+EFhb9Z/+x94ORRvGt75EDwg7eZtAewuHXs= 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=qTU/v9Nv; arc=none smtp.client-ip=209.85.221.44 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="qTU/v9Nv" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-4758b2a9e2aso1046259f8f.2 for ; Thu, 02 Jul 2026 02:49:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782985742; x=1783590542; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N8iw1Xl6qbcQCxs4NT4Uomd3ECGsKeoj91RdXKkbkmc=; b=qTU/v9NvN88MScLJGmsxnArAgxBxIzQhAarCb5OSadG6RCuLDM109DC9GI8TncCnjO PLRAGdD14apXC4RXc0VFG59moW0OhSWpXairVSuvNJ7w5e5LIQBhQYgPu6jVpgZyDGPw Us10n3ElBsff0hnU6fm+IWBHkMZUT+V9ozllB0milw4uUJA1e2H8NPdZgtJrAWGm0Mbw gdKHUfxs2hMTzjFb/d+VuSSpTPCSONpUOLidg3/SprwiEE6hZxCY5kc5anoCvX4OJpN8 j6Jwtz1IN5aQSno5zO6G/DtFrdxlFcAR+VDiB0kjBeBDLRsqNXczh9IVbTmRZDIxZkhc 4Iew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782985742; x=1783590542; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=N8iw1Xl6qbcQCxs4NT4Uomd3ECGsKeoj91RdXKkbkmc=; b=DmcNVYdXi9d257PNxCYEGL0NOCRm9AA3fUr12/wG9qoIoCL53SaMijuyXoB6v6i+8Z jMFAf8CqhkYZk73OeKVRDtmmGbirn2+L6WrCglQLWI2aopV5tstvEWAtPjgyto27c+bS nALTt27otuZMsT3ppSNpipi6hxsT8yYy087+uWJdeEEbjXGPQT9b3kBZK2nKrHsNIX5n B7zvpbu5/Fqbd2yfYe8EW+mKkSofPGI01rN4hXtpFOAkEtKprzxXrBx6bbM5Bxwz+F3O 1crD+yl73yewFY/ZFVYA0FRHM+41c7f/GJ2hlhSm+znaZP5uFZoN4VqsaH6LrkA1eFSl 4vXQ== X-Forwarded-Encrypted: i=1; AHgh+RqZb38Eq28x3aBkUJhePoKLa8R4uZc/hVwUJgOMvTQ4Pn/lamgIZUSLTM+iKwcz2voB6SKDMuW/zNOIFNk=@vger.kernel.org X-Gm-Message-State: AOJu0YyCVH8afdrMJjig0bdbUNr6Bcqm7s3ZsP+rp6Dxa1hiP88aTypS Sc3TLaTiEYCRbYjbNcIWq77wdVuOJJk3Q2ypw5v+wSip2cs47in104t5 X-Gm-Gg: AfdE7cnbHLD8ufZzi+omOtupN53CLw4uxKNVK5+SVszPytYrG7xMCrl60S64ozRfRhr XULqRG80MQD6Y7y2lgBii6LSUNrFIQPuuweAAQ2afptTvGAQNyBUaDLKKpIK3ymn0D76buVqxGq RQAXDADqo+WvfN2yTsPceY2YgAzqhAnbcjjR31NAnPcIrGEmJzvc0+Xl0QudOX2kBuKKXHgU7+w A9cKUsaupyhQFYG6BKs/sjlmyvG2vYL6+x9aIlF0Ar6xEhNGHyr1VALBLIA5Bq+9qahA+MUuUWl L4vx56HJQ0u4NflinGUj8I5/BE1uFRwgF2n5xQJZkc/rTW/sht62LW/+QYmRAI3zjFPcqM6QJ8Q 0zIqPGEjpkYzYYfVeiYz2K3XOMf+2dMkKCJ3OqRXvPyZE0724OBpayLr3cWCfn97KfK1dmva5po ZGn2loiJPf3E33d+hdblbmKdY/6xaIijFhfZgHyuKxJ6VtMnqEiXqeU8VbClvTsiEYRj32ohoHj 78sLA== X-Received: by 2002:adf:e00c:0:20b0:46e:27ed:6d0d with SMTP id ffacd0b85a97d-47757f4cfcbmr5464018f8f.8.1782985742306; Thu, 02 Jul 2026 02:49:02 -0700 (PDT) Received: from Ansuel-XPS24.localdomain (host-79-52-250-217.retail.telecomitalia.it. [79.52.250.217]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-477dbe617b1sm7381364f8f.16.2026.07.02.02.49.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 02:49:01 -0700 (PDT) From: Christian Marangi To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Christian Marangi , Lorenzo Bianconi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: Krzysztof Kozlowski Subject: [PATCH v6 6/7] dt-bindings: arm: airoha: Add the chip-scu node for AN7583 SoC Date: Thu, 2 Jul 2026 11:48:34 +0200 Message-ID: <20260702094846.17325-7-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260702094846.17325-1-ansuelsmth@gmail.com> References: <20260702094846.17325-1-ansuelsmth@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Document support for Airoha AN7583 chip-scu node. This is similar to Airoha EN7581 with the addition of the presence of thermal sensor in addition to controlling HW PIN and other miscellaneous pheriperals. Signed-off-by: Christian Marangi Reviewed-by: Krzysztof Kozlowski --- .../bindings/arm/airoha,en7581-chip-scu.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/airoha,en7581-chip-scu.y= aml b/Documentation/devicetree/bindings/arm/airoha,en7581-chip-scu.yaml index 67c449d804c2..cc564dc7b414 100644 --- a/Documentation/devicetree/bindings/arm/airoha,en7581-chip-scu.yaml +++ b/Documentation/devicetree/bindings/arm/airoha,en7581-chip-scu.yaml @@ -19,15 +19,29 @@ properties: items: - enum: - airoha,en7581-chip-scu + - airoha,an7583-chip-scu - const: syscon =20 reg: maxItems: 1 =20 + '#thermal-sensor-cells': + const: 0 + required: - compatible - reg =20 +if: + properties: + compatible: + contains: + const: airoha,en7581-chip-scu + +then: + properties: + '#thermal-sensor-cells': false + additionalProperties: false =20 examples: --=20 2.53.0 From nobody Wed Jul 15 13:58:13 2026 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 566B24A33F6 for ; Thu, 2 Jul 2026 09:49:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985747; cv=none; b=P8ErujogzUD33n6PoRS3/AyhqKwJNaQ5M7+8MbiUKBjomH+yRRUYPwZV2yUwpW5yZ1D8Zl14sWUTY616PPVrQXb0t4PGAPMRHBw/HKyl7CGXjcLwetjbqd841S7SiT0HSXRe7rf2/GymBQGSNAxaleyVsrUziBenHu6lPXqIoeU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782985747; c=relaxed/simple; bh=iniF0tSViInEh1MMLv25tzxSwqEs76/kr8afwqrlSZE=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kHCeSfasS9IZHzmql/UFF9m3P4TI2p/OzMaLJiBiZYg3R4S9sgFaXomFuEbxsun/Oa31jqihHmtcM5XChmv9L1Ak9g/FkvMqpregDY8vC86X40y+PNYWdz5zVNw97d5e738O0AeKZ0jMqjE2/mz24z5TfUKI/onmzvhvcl1C2UA= 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=DT+5iPee; arc=none smtp.client-ip=209.85.221.50 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="DT+5iPee" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-471eeac43bfso1305052f8f.3 for ; Thu, 02 Jul 2026 02:49:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782985744; x=1783590544; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=uOBI/76zfymmsnLabP6yGWPMsg68pHJzFMjvw0nPsIU=; b=DT+5iPeeuOJHkSLGtg8MRKj9lAs6a7R+5Mxc1a3Rg0w9/lHNoOjc+yZXRtdY3RMXAu 1tILxroXxVq36HJGv+sg0T6fXW6b1bRW6ZaXDT0djIK44zt5MtLGGsFea25T15TrGRcE PeRBK7KQkEXHUv7l5p06GMmVhu5mXgZU1M8jrqwEnmRRdQ5iSdeh0tT8IXWD2Y00rCNB 4npqelzxwYWTLwyVIVR794mPPZluKEJxbnNXRpppJ4y++KeVnGHJ3QDdk+j3Eu85Cbbn P069GK/vjdDNw3PkERJAmjDQSZyU6K5TWjgV5Vr/NQ+j3vWy0yaogLhoAtOTw2yBXiiV hwkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782985744; x=1783590544; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=uOBI/76zfymmsnLabP6yGWPMsg68pHJzFMjvw0nPsIU=; b=HHqxufGilw5wDE3H0/v+EmfAPQEeu8EbkbzYUGelWzWdKYZTUJrMZfRIsx6WfhQ3Xm G4+7PrjcvY6MwIXHb1NOAEwwkr+nyZvSpZTkbNrnjNlTnRdACeKqhuywnlyF5Myrd4gv Jus+Tl4XxbazUnE31U2Ba1hWyMTvln6Bv7Cx9NSPX6RewfzmIHWZNXJ2MnBHzmd/40Hq LfmR5aX8INWdtoj39+WoL/sgCQsMfdJU5PjBfvjezDANP3r7BWteCkSCimhMIDRI6Fq8 NXfQikyHTl1Bo/M4Ludx/y/FZuYCr5Aqr9rF8fqIKowk1su9v/G/2YrNkxFA5Spgf6Mt YUKw== X-Forwarded-Encrypted: i=1; AHgh+Rrl0MAv4NiV+/tZr9lcWRN3bzVgBU+A4RDbWZBrmsWtUkStrCDREw/cirjhhoWO4sDnTaqySSRkib+JcQI=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+oTC3JPAQNu627MkfuEPj2xTGs6AOUd+SZSItae0syNBsRANS w3+SVeuSigubokJeo4YwaKGNMJ4hS15vFYGZWsYXsG7FsPgiMiUYbjOV+uUrAK+b X-Gm-Gg: AfdE7ckEHOMyUY9MTP9puPwZxWtyS4bSszk0YmmvEcMc0YrHdVO8PxqtVrkIlQYGx2r 41BRazkNdcC6FoYC29wl6gQcSczKVDVTmBqlZ5OM8tHYRKhkH2zS1GE9hJqLbbJiFj8Ew0w8B81 B5sIB30q+zsAL1gTCaNWpJ1H9eQsks4mNbTZp/tCUbANJ/W1gxcXnYGvZPreEJ1gw24iPYq4X+e RHNxjlgOjdFnelVa89/chsCQjfaUeUl8Oz4/lKZH0170ME/wvXFO3k2pEs0gigKwEROagOYbBhj nuINd02wXwTropwD0JGZ/laVEElVYGZMn7hJgVmZvIUM+Oo/xYE0zOUpzSD6ecBUM7XQaqGR21p P9mKssPIC985+S+ZOMNXX9PxLy4qGE5sT5SJRIAPu/FNWCQjLzIRoVT512Efnyz49Vmd64N6aEQ HgW+EmDBZ35K1aL/qUejcVhqau0CDzJhye44r+m+HQdKaa8FqjrPOfgxlaCyrzZhFiOBRP+SweY Fkj8RgBYZ3Ra+6I X-Received: by 2002:a05:6000:2506:b0:475:69ce:ac4a with SMTP id ffacd0b85a97d-4775a100fc5mr8013251f8f.33.1782985743675; Thu, 02 Jul 2026 02:49:03 -0700 (PDT) Received: from Ansuel-XPS24.localdomain (host-79-52-250-217.retail.telecomitalia.it. [79.52.250.217]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-477dbe617b1sm7381364f8f.16.2026.07.02.02.49.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Jul 2026 02:49:03 -0700 (PDT) From: Christian Marangi To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , "Rafael J. Wysocki" , Daniel Lezcano , Zhang Rui , Lukasz Luba , Christian Marangi , Lorenzo Bianconi , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v6 7/7] thermal/drivers: airoha: Add support for AN7583 Thermal Sensor Date: Thu, 2 Jul 2026 11:48:35 +0200 Message-ID: <20260702094846.17325-8-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260702094846.17325-1-ansuelsmth@gmail.com> References: <20260702094846.17325-1-ansuelsmth@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add support for Airoha AN7583 Thermal driver. This apply similar logic on how to read the temperature but totally drop support for the PTP_THERMAL subsystem. PTP_THERMAL subsystem was a way to trigger trip point from hardware by configuring how to read the temperature internally. This subsystem has been totally removed from Airoha AN7583 permitting only to read the temperature. The SoC support up to 3 sensor but the original driver always read the BGA sensor hence it's currently implemented reading only this specific sensor. Reference and values for the other 2 sensor are defined for further implementation if confirmed working. set_thermal_mux() is extended to also address muxing the sensor as AN7583 use a different way to read the temperature from 3 different diode. The EN7581 code is updated to account for these changes. Signed-off-by: Christian Marangi --- drivers/thermal/airoha_thermal.c | 161 ++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 4 deletions(-) diff --git a/drivers/thermal/airoha_thermal.c b/drivers/thermal/airoha_ther= mal.c index 249abbbd46bc..c84b5c36e880 100644 --- a/drivers/thermal/airoha_thermal.c +++ b/drivers/thermal/airoha_thermal.c @@ -18,6 +18,12 @@ #define EN7581_DOUT_TADC 0x2f8 #define EN7581_DOUT_TADC_MASK GENMASK(15, 0) =20 +#define AN7583_MUX_SENSOR 0x2a0 +#define AN7583_LOAD_ADJ GENMASK(3, 2) +#define AN7583_MUX_TADC 0x2e4 +#define AN7583_MUX_TADC_MASK GENMASK(3, 1) +#define AN7583_DOUT_TADC 0x2f0 + /* PTP_THERMAL regs */ #define EN7581_TEMPMONCTL0 0x800 #define EN7581_SENSE3_EN BIT(3) @@ -181,6 +187,11 @@ #define EN7581_SCU_THERMAL_PROTECT_KEY 0x12 #define EN7581_SCU_THERMAL_MUX_DIODE1 0x7 =20 +#define AN7583_SCU_THERMAL_PROTECT_KEY 0x80 +#define AN7583_NUM_SENSOR 3 + +#define AIROHA_THERMAL_NO_MUX_SENSOR -1 + /* Convert temp to raw value as read from ADC ((((temp / 100) - init) * sl= ope) / 1000) + offset */ #define TEMP_TO_RAW(priv, temp) ((((((temp) / 100) - (priv)->init_temp) = * \ (priv)->default_slope) / 1000) + \ @@ -193,8 +204,39 @@ =20 #define AIROHA_MAX_SAMPLES 6 =20 +/* + * AN7583 supports all these ADC mux but the original driver + * always checked temp with the AN7583_BGP_TEMP_SENSOR. + * Assume using the other sensor temperature is invalid and + * always read from AN7583_BGP_TEMP_SENSOR. + * + * On top of this it's defined that AN7583 supports 3 + * sensor: AN7583_BGP_TEMP_SENSOR, AN7583_GBE_TEMP_SENSOR, + * AN7583_CPU_TEMP_SENSOR. + * + * Provide the ADC mux for reference. + */ +enum an7583_thermal_adc_mux { + AN7583_BGP_TEMP_SENSOR, + AN7583_PAD_AVS, + AN7583_CORE_POWER, + AN7583_AVSDAC_OUT, + AN7583_VCM, + AN7583_GBE_TEMP_SENSOR, + AN7583_CPU_TEMP_SENSOR, + + AN7583_ADC_MUX_MAX, +}; + +enum an7583_thermal_diode_mux { + AN7583_D0_TADC, + AN7583_ZERO_TADC, + AN7583_D1_TADC, +}; + enum airoha_thermal_chip_scu_field { AIROHA_THERMAL_DOUT_TADC, + AIROHA_THERMAL_MUX_SENSOR, AIROHA_THERMAL_MUX_TADC, =20 /* keep last */ @@ -208,6 +250,7 @@ struct airoha_thermal_priv { struct resource scu_adc_res; =20 u32 pllrg_protect; + int current_adc; =20 struct thermal_zone_device *tz; int init_temp; @@ -224,6 +267,24 @@ struct airoha_thermal_soc_data { int (*post_probe)(struct platform_device *pdev); }; =20 +static const unsigned int an7583_thermal_coeff[AN7583_ADC_MUX_MAX] =3D { + [AN7583_BGP_TEMP_SENSOR] =3D 973, + [AN7583_GBE_TEMP_SENSOR] =3D 995, + [AN7583_CPU_TEMP_SENSOR] =3D 1035, +}; + +static const unsigned int an7583_thermal_slope[AN7583_ADC_MUX_MAX] =3D { + [AN7583_BGP_TEMP_SENSOR] =3D 7440, + [AN7583_GBE_TEMP_SENSOR] =3D 7620, + [AN7583_CPU_TEMP_SENSOR] =3D 8390, +}; + +static const unsigned int an7583_thermal_offset[AN7583_ADC_MUX_MAX] =3D { + [AN7583_BGP_TEMP_SENSOR] =3D 294, + [AN7583_GBE_TEMP_SENSOR] =3D 298, + [AN7583_CPU_TEMP_SENSOR] =3D 344, +}; + static int airoha_get_thermal_ADC(struct airoha_thermal_priv *priv) { u32 val; @@ -234,7 +295,7 @@ static int airoha_get_thermal_ADC(struct airoha_thermal= _priv *priv) } =20 static void airoha_set_thermal_mux(struct airoha_thermal_priv *priv, - int tdac_idx) + int tdac_idx, int sensor_idx) { u32 pllrg; =20 @@ -245,9 +306,20 @@ static void airoha_set_thermal_mux(struct airoha_therm= al_priv *priv, regmap_write(priv->chip_scu, EN7581_PLLRG_PROTECT, priv->pllrg_protect); =20 + /* + * Configure Thermal Sensor mux to sensor_idx. + * (if not supported, sensor_idx is AIROHA_THERMAL_NO_MUX_SENSOR) + */ + if (sensor_idx !=3D AIROHA_THERMAL_NO_MUX_SENSOR) + regmap_field_write(priv->chip_scu_fields[AIROHA_THERMAL_MUX_SENSOR], + sensor_idx); + /* Configure Thermal ADC mux to tdac_idx */ - regmap_field_write(priv->chip_scu_fields[AIROHA_THERMAL_MUX_TADC], - tdac_idx); + if (priv->current_adc !=3D tdac_idx) { + regmap_field_write(priv->chip_scu_fields[AIROHA_THERMAL_MUX_TADC], + tdac_idx); + priv->current_adc =3D tdac_idx; + } =20 /* Restore PLLRG value on exit */ regmap_write(priv->chip_scu, EN7581_PLLRG_PROTECT, pllrg); @@ -361,7 +433,8 @@ static void en7581_thermal_setup_adc_val(struct device = *dev, u32 cpu_sensor =3D 0; =20 /* Setup Thermal Sensor to ADC mode and setup the mux to DIODE1 */ - airoha_set_thermal_mux(priv, EN7581_SCU_THERMAL_MUX_DIODE1); + airoha_set_thermal_mux(priv, EN7581_SCU_THERMAL_MUX_DIODE1, + AIROHA_THERMAL_NO_MUX_SENSOR); =20 regmap_read(priv->map, EN7581_EFUSE_TEMP_OFFSET_REG, &efuse_calib_info); if (efuse_calib_info) { @@ -477,6 +550,10 @@ static int en7581_thermal_probe(struct platform_device= *pdev, for (i =3D 0; i < AIROHA_THERMAL_FIELD_MAX; i++) { struct regmap_field *field; =20 + /* Skip registering MUX_SENSOR field as not supported */ + if (i =3D=3D AIROHA_THERMAL_MUX_SENSOR) + continue; + field =3D devm_regmap_field_alloc(dev, priv->chip_scu, en7581_chip_scu_fields[i]); if (IS_ERR(field)) { @@ -519,6 +596,74 @@ static int en7581_thermal_post_probe(struct platform_d= evice *pdev) return 0; } =20 +static int an7583_thermal_get_temp(struct thermal_zone_device *tz, int *te= mp) +{ + struct airoha_thermal_priv *priv =3D thermal_zone_device_priv(tz); + int sensor_idx; + int delta_diode, delta_gain; + int coeff, slope, offset; + + int diode_zero, diode_d0, diode_d1; + + /* Always read sensor AN7583_BGP_TEMP_SENSOR */ + sensor_idx =3D AN7583_BGP_TEMP_SENSOR; + + coeff =3D an7583_thermal_coeff[sensor_idx]; + slope =3D an7583_thermal_slope[sensor_idx]; + offset =3D an7583_thermal_offset[sensor_idx]; + + airoha_set_thermal_mux(priv, AN7583_ZERO_TADC, sensor_idx); + diode_zero =3D airoha_get_thermal_ADC(priv); + airoha_set_thermal_mux(priv, AN7583_D0_TADC, sensor_idx); + diode_d0 =3D airoha_get_thermal_ADC(priv); + airoha_set_thermal_mux(priv, AN7583_D1_TADC, sensor_idx); + diode_d1 =3D airoha_get_thermal_ADC(priv); + + delta_diode =3D diode_d1 - diode_d0; + delta_gain =3D (delta_diode * coeff) / 100 + (diode_zero - diode_d1); + if (!delta_gain) + return -EINVAL; + + *temp =3D (slope * delta_diode * 10) / delta_gain - offset * 10; + *temp *=3D 100; + + return 0; +} + +static const struct thermal_zone_device_ops an7583_tz_ops =3D { + .get_temp =3D an7583_thermal_get_temp, +}; + +static const struct reg_field an7583_chip_scu_fields[AIROHA_THERMAL_FIELD_= MAX] =3D { + [AIROHA_THERMAL_DOUT_TADC] =3D REG_FIELD(AN7583_DOUT_TADC, 0, 31), + [AIROHA_THERMAL_MUX_TADC] =3D REG_FIELD(AN7583_MUX_TADC, 1, 3), + [AIROHA_THERMAL_MUX_SENSOR] =3D REG_FIELD(AN7583_MUX_SENSOR, 2, 3), +}; + +static int an7583_thermal_probe(struct platform_device *pdev, + struct airoha_thermal_priv *priv) +{ + struct device *dev =3D &pdev->dev; + int i; + + priv->chip_scu =3D device_node_to_regmap(dev->of_node); + if (IS_ERR(priv->chip_scu)) + return PTR_ERR(priv->chip_scu); + + for (i =3D 0; i < AIROHA_THERMAL_FIELD_MAX; i++) { + struct regmap_field *field; + + field =3D devm_regmap_field_alloc(dev, priv->chip_scu, + an7583_chip_scu_fields[i]); + if (IS_ERR(field)) + return PTR_ERR(field); + + priv->chip_scu_fields[i] =3D field; + } + + return 0; +} + static int airoha_thermal_probe(struct platform_device *pdev) { const struct airoha_thermal_soc_data *soc_data; @@ -533,6 +678,7 @@ static int airoha_thermal_probe(struct platform_device = *pdev) return -ENOMEM; =20 priv->pllrg_protect =3D soc_data->pllrg_protect; + priv->current_adc =3D -1; =20 if (!soc_data->probe) return -EINVAL; @@ -561,8 +707,15 @@ static const struct airoha_thermal_soc_data en7581_dat= a =3D { .post_probe =3D &en7581_thermal_post_probe, }; =20 +static const struct airoha_thermal_soc_data an7583_data =3D { + .pllrg_protect =3D AN7583_SCU_THERMAL_PROTECT_KEY, + .thdev_ops =3D &an7583_tz_ops, + .probe =3D &an7583_thermal_probe, +}; + static const struct of_device_id airoha_thermal_match[] =3D { { .compatible =3D "airoha,en7581-thermal", .data =3D &en7581_data }, + { .compatible =3D "airoha,an7583-chip-scu", .data =3D &an7583_data }, {}, }; MODULE_DEVICE_TABLE(of, airoha_thermal_match); --=20 2.53.0