From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F8D1343D75; Wed, 27 Aug 2025 11:22:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293780; cv=none; b=FU2bsl1EoM1WfDDFoKbMyeiNZF4PuZlorW32WcItIgOEye/JvtuCy50xk6z6+Sk/QSxGXbCOEp3yI+Y+tuS6oyT4c11atj4xTz1ed2DDvTwXWxBJ4lb2ccEjSqHQZQPiPo06UMVxgUkua65v4Xz1yxOlwPpNarFjarOiW9ckNTM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293780; c=relaxed/simple; bh=xomdpeLOMSZJEhkz965+CaS+Vdhm+5amA+tX9TAShNo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mB21+TiPmO7ly34qfnuyQ6Vjo57ak8PC7Zi+62mtCQ1pEviIVNsdnSFVoaA6zY+sypvroHen1iTnlL/Vepvt/GlgI4ggsMHPXQ/5E3JN0K3ck18xkH/OTqLOXfux40rFs4XToRVvDJvNTsIVY3k2x4/4ov7ce+DgzU/169NMCIE= 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=M8lQZt1y; arc=none smtp.client-ip=209.85.215.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="M8lQZt1y" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-b474d0f1d5eso4373264a12.2; Wed, 27 Aug 2025 04:22:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293778; x=1756898578; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=tScKS+WzB6dufhL5mNK+c/AStzi+5Gn3nlm3LBGIbwI=; b=M8lQZt1yPyZKma1SspHWAdbFF/xof4uUrfuJgkZgO2iYZcCdJg/0LG4LZVfrBPT4O5 Rb8lP5JwtS0Cmy/O1xe8upUD7fohjB8RwPb3F9LzrEqVn7pXrz3b3n1MiG0bJ9V8kYgC 6zB8udDrYtLjU+INpmsu9K1jYeHUnkbTQk1+j8lFm9kqCZ4+2+HMPTszlD7XmxL7NEDv n4rghPSIS2qLmK601y3rb4tKSpiae+/sbcp0KbkxEw/C08+QDi83ghcLTDnVhSV9NlmK Wk+qJ7DvGcT25Ai+QtnxWB8hZW9AAvQI0sCdlIa5/LuGit+wUY/i78XINEFFktpixFN9 wnZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293778; x=1756898578; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tScKS+WzB6dufhL5mNK+c/AStzi+5Gn3nlm3LBGIbwI=; b=WRhXGWqP6wLHCSdoPFtG+XARKC2XrcA5jtKbAC5NeJhYVc9wt+9uhw4jMKyEG7BiHG 2Lk3MO7F3dp/uL1XDjjMHa19zysI5SsXeFJgOimPA+pzTZGbpCC1K+Lcuo56kpcIY2oA YAdT3YiLS+H2rWppbdV21qxe8w784AEhvGH9dyp0a3a2vlH+HLOPp1UHFjxTa/LxHN/y bQoAwcz3DeID1vNrU5gO897MFL5i/SoMLHRAP825ZbJRzk8G8b0lnfGlnLjcUgoyQyOR eAPyggDeIVTzO4svJb+RxBwNZDQ6OjYje69vcToSBjtklkpiTCdIMYMX0c/gGKiMIngJ Mp6Q== X-Forwarded-Encrypted: i=1; AJvYcCUKxdibOicQwTFXXINnbrVE4jdLWqhha9UQtfRmL1ouX5aHrAcdI9XWFFI5hdQzFporjEr1OWozEI14nM4R@vger.kernel.org, AJvYcCVxpjNGqmC9Ucqjx7PamFn+B0GwP8neGjtlGPLN/ohydTmGKDzaDWaRDG6nFSA48NISXsx/rHhFTF1U@vger.kernel.org, AJvYcCW5nLOzTORefPM1v1XeNHw7U5leQ+4Vj9el7WbPrY/SEfA/dxm8iH/dl+ry+BGAYPm5nq+FWb0dQ7ELe8w=@vger.kernel.org, AJvYcCWUzFgToI5efpqwqzxiUCgLTYPaEfP9QIVBW+533Yjw7h/JBiBrz6aTkeXpLWqv4i8JdLUnWZy9rWmq@vger.kernel.org, AJvYcCWhsH3et2XVUgO5FklBpbBLHh9L1LmMx8J0ojj4QZdvTe76TWVnn5HYWo9NiU4qeY4fllaOJy9rK42SlhE=@vger.kernel.org X-Gm-Message-State: AOJu0YxC4GuvP3V0gZGaJ0/5nGMZsB2JDfYCRN3n6j7c83BfUPA3EsDO VPGbrfuAE5fcKs/UGQDLvqlebZUcwwBlBc7N1c9SQJgH9LpHSK4pv9mn X-Gm-Gg: ASbGncthH51NE2QKG0aF7KIOq54TeflqEJjWjiA5RDO5cjicPFoY0efUYo6Ar4EmnnA 0qtKlHhju6VmR6WP0FWBtqibEEn8Crew+u5xekni22sc3Pt554dhExZrB1na8ZIPr6lx8OyHpYU UcpK3+F3KOtfmfNq9WCMoB+fJHnu5i7SGKygkXzUgB++e/W+qjkDv4WQEdG8At6C9G5QF/XJI3n JA8dDnaK2b4iWqmfaMDE1ky34wZfIuSu1Hsrv/uLjm7suJseSDH8VuC4c0dxKL6An0MzJftYJHW xrLBxCMT8dNwcjr202xnDLjO7z9+eqW7lGZKBZSqs4qCKwj2y0nTzAyvsuiExxWhy+LDvIhYfqz fs0xbqg0TOMsHIYeD70MflMQ/U+KAlfoktWAe2VBxtpAI7mQVsdShSJ7HTOzh2APaJRQXsLRoCP GYkIQqQyym6UoKxD3W X-Google-Smtp-Source: AGHT+IEHQ8zv3Iwk3K5n+Debu6cIiDOuY8nhm+ii5lcJ3ZyQ2oPc2V5kSWO6f+JtCHeV333/NyZa4Q== X-Received: by 2002:a17:902:d603:b0:246:a42b:a31d with SMTP id d9443c01a7336-246a42ba453mr172730475ad.44.1756293778541; Wed, 27 Aug 2025 04:22:58 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.22.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:22:58 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:35 +1000 Subject: [PATCH v2 01/11] dt-bindings: rtc: Add Apple SMC RTC 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: <20250827-macsmc-subdevs-v2-1-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros , Mark Kettenis X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3520; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=QnTrhwUPyGjBEFWqrKCYz13PtbjM0UoOPM4Jc23FSf0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjUla00QuHr05soLs1Lerqr6uSjCZgdr0LsnPitOs Rm8fr9EpKOUhUGMi0FWTJFlQ5OQx2wjtpv9IpV7YeawMoEMYeDiFICJrFjFyLA7dNKavG3hfy8K 1/jqHtylvSDV8LBG+peNm92rq4VWb7/PyPDT4NCpQ2YVrF+W8EzKfXL+yNML10+VcnG+/Fr57xs D50x+AA== X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Sven Peter Apple Silicon Macs (M1, etc.) have an RTC that is part of the PMU IC, but most of the PMU functionality is abstracted out by the SMC. An additional RTC offset stored inside NVMEM is required to compute the current date/time. Reviewed-by: Mark Kettenis Reviewed-by: Neal Gompa Reviewed-by: Rob Herring (Arm) Signed-off-by: Sven Peter Signed-off-by: James Calligeros --- .../bindings/mfd/apple,smc.yaml | 9 +++++++ .../bindings/rtc/apple,smc-rtc.yaml | 35 +++++++++++++++++++++++++ MAINTAINERS | 1 + 3 files changed, 45 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/apple,smc.yaml b/Documen= tation/devicetree/bindings/mfd/apple,smc.yaml index 8a10e270d421ecd703848f64af597de351fcfd74..38f077867bdeedba8a486a63e36= 6e9c943a75681 100644 --- a/Documentation/devicetree/bindings/mfd/apple,smc.yaml +++ b/Documentation/devicetree/bindings/mfd/apple,smc.yaml @@ -41,6 +41,9 @@ properties: reboot: $ref: /schemas/power/reset/apple,smc-reboot.yaml =20 + rtc: + $ref: /schemas/rtc/apple,smc-rtc.yaml + additionalProperties: false =20 required: @@ -75,5 +78,11 @@ examples: nvmem-cell-names =3D "shutdown_flag", "boot_stage", "boot_error_count", "panic_count"; }; + + rtc { + compatible =3D "apple,smc-rtc"; + nvmem-cells =3D <&rtc_offset>; + nvmem-cell-names =3D "rtc_offset"; + }; }; }; diff --git a/Documentation/devicetree/bindings/rtc/apple,smc-rtc.yaml b/Doc= umentation/devicetree/bindings/rtc/apple,smc-rtc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..607b610665a28b3ea2e86bd90cb= 5f3f28ebac726 --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/apple,smc-rtc.yaml @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/rtc/apple,smc-rtc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Apple SMC RTC + +description: + Apple Silicon Macs (M1, etc.) have an RTC that is part of the PMU IC, + but most of the PMU functionality is abstracted out by the SMC. + An additional RTC offset stored inside NVMEM is required to compute + the current date/time. + +maintainers: + - Sven Peter + +properties: + compatible: + const: apple,smc-rtc + + nvmem-cells: + items: + - description: 48bit RTC offset, specified in 32768 (2^15) Hz clock = ticks + + nvmem-cell-names: + items: + - const: rtc_offset + +required: + - compatible + - nvmem-cells + - nvmem-cell-names + +additionalProperties: false diff --git a/MAINTAINERS b/MAINTAINERS index fe168477caa45799dfe07de2f54de6d6a1ce0615..aaef8634985b35f54de1123ebb4= 176602066d177 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2397,6 +2397,7 @@ F: Documentation/devicetree/bindings/pinctrl/apple,pi= nctrl.yaml F: Documentation/devicetree/bindings/power/apple* F: Documentation/devicetree/bindings/power/reset/apple,smc-reboot.yaml F: Documentation/devicetree/bindings/pwm/apple,s5l-fpwm.yaml +F: Documentation/devicetree/bindings/rtc/apple,smc-rtc.yaml F: Documentation/devicetree/bindings/spi/apple,spi.yaml F: Documentation/devicetree/bindings/spmi/apple,spmi.yaml F: Documentation/devicetree/bindings/watchdog/apple,wdt.yaml --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 2E5C034F468; Wed, 27 Aug 2025 11:23:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293787; cv=none; b=hdSyPRzPskr36rkv5smw1G5M41ZsCB7tF1geUNMb9O/SP+spni18QEYgGCsVJUGGtQrJwMMLnhYT6FaTjCqQbw/c7bJQ2ifa+tbO+dC7J4J9qr0hHr+Nn8AT0QruyVfLcMuup+f3cx5oe6P5TPL6GyRcyodZ7sq7XP1t3NAYJ3Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293787; c=relaxed/simple; bh=pxcU2aOREOtRRxzuCcs3ZxRurRuImy+zjNoj2CEiGZs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CfC2pUnHJYY5BabK2a8o/Dj/VzoxTlxFshOB/7xzoeh7Z6vH99yibkb4QnJyUgYhOzhkLMZQP+x1jcPkwjZ9m+2vpR6niJ9ShsaDS/MC2rZKbNvajIfC33ukS5IJAFtq7BT3Y6hgXwRm6uMwssQV3+dhYla1S0378WARYfHLNpE= 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=diQIRR9g; arc=none smtp.client-ip=209.85.214.177 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="diQIRR9g" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-248a638dbbeso2899675ad.2; Wed, 27 Aug 2025 04:23:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293785; x=1756898585; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=lMx7ge5RX0V+OLlOISVXfqktk6COWSxJMAbdSdyPV+w=; b=diQIRR9gkNYYba+bFr+4X+7X949wPomuNK5k8cJRCsL4MbetDlo07WpRoxowQjIrzW 9OBom3zKBMMuJG3VjtHHq87OpVjteuTTDuj7tyUrRU5yQeiNTj/XdiVPs969M9A93TCM tIEhCbpZ5ZegWRkmnAGqKV91A5lJ7wsQ/WM1E81P6jsTCf13Jd4ggPqAb4ZUScBUz8Yz ljJw7XIuJUjhRvKG6UZH59HtE6IyZBeaxc1a1r9pFLYeaMfy8WRHe9wIyCDOmPHNz9bC Sd+CsHCAc0cdp8tBClv+fQ1qbS0/TN6beyQGFLZ5lKnFTd1c63J+RwVf/ywHJOaB5a+b AxQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293785; x=1756898585; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lMx7ge5RX0V+OLlOISVXfqktk6COWSxJMAbdSdyPV+w=; b=JXQWdM20heibQC63S5+RHiX6PkhxaeTsiBtRsYcg+gZbrf2E2o2WOYI2EOJTvXopLF xe+iVRZ3peUGQ7bz4BaYcz4sD5nb5x95tk5etceEun1WSA7tcVll8MQ+F0Cd/kZ+d4Yk mLXDKBjpwoNy9NFY/yQ/u5qQi8W4xnY7bI+JJWXbGrlMce2+CD/Nm9QGizTDVzq9s1HO 3VllLAUzJ9GVyoRYOARsF5L1GIMRDDtkI5U1EWGMFnTymKKruAiNDEBXBXB85HJBeRZO uuZFXQryTyryuVgtiq0TTthVWtjKxAFUnXfxnsFRewWtfpDeWPtB4XQdDI/sqG0e7tbF vkGg== X-Forwarded-Encrypted: i=1; AJvYcCUBOi8rxlPXiuAas0wfCqOwwznHqx8I9V8pheCSiW4zM3I22gTBWVSA9r7u8zKl1gKJpKO8VrOoWZuy@vger.kernel.org, AJvYcCVhsZzL5P1UcTiwIwq14fXb2CT6ZwL+SAH6flDZ7m+PJdsvoFpAOq6gmBuJ66KTTel6SVwWxK0zT2yX@vger.kernel.org, AJvYcCWBVmQXTAHw18hJ4c2vo3vxAqAhoDoSgC6qng0adPkfbFjOYfRRmxTBBrWgpT3CQvKHl4L/OSX33UQTIXU=@vger.kernel.org, AJvYcCWTlTHfCrTEVyBO7Nq1ZPDPYb+k9vrdzWQA58l8tuPnHSt/ggg51Jgzxql60I1u7n8Dsrsbv4KbebkrQec=@vger.kernel.org, AJvYcCXo21MM5AzH1hDxP56mUPCcaUftcosg630r2N5fVyR4jXFtlcdmCxY3M44JRa5TJy+9SpvcEsHUUmiAd6Kk@vger.kernel.org X-Gm-Message-State: AOJu0YwPZpAAZ0cXVE4/Sah+Z4cBLZITaJSRfkx3qLCBlrN2MzlSBS3e WFxxRvmSrKcT6wdXzmhoPRduUfgcVrSd3w/l5EnD3LgfRVDwgmpYOc/sujvnbyiT X-Gm-Gg: ASbGnctRUirsZ/qyufhb3g8v997yLNfcS0b6/BP40Iptz9EhRz5yPmJ8svGkWXFHic3 oW5l/IK6mJAQELiYrMp1tfioYjCPP+HuY9Dwu6bbMf9huywaVpkHfAjMBe1TUW81a7P/EIANW9o xtfnid97XMCclrsLM63Za9MeRZChGQWmRO1Ph6C8inEt2U3JrtHuNON1Bwhzqv2zVttHVFpDp13 kOM49Vq2//C0kn7jYOCMjTllTpJP56K2aa2WnvJcVFnvoh6pMK4bmC5D0t/dFuDP4jhkKW2gN7F 4yaTVaUtktUlcS6orCrRXSaLMOT/q4pJk3bPcqqE6HhSoeUjaKgeSt+y3w2RaUDFqpe0KC9i+Hk OxA3gKpuQy5aj0HkEDHp7wgvA5EoBMrujXZmteywGM4w7oBnTMvo37uD4WZPeGRcXXQ5cN405AM jSm6/g2peejP7wmkcj X-Google-Smtp-Source: AGHT+IF96nOBV89XAjJ4kjuERk9/bHO1FA/Ey9YMo6wYm4uiasLB6ej7p9n24uxKX3zXTXWR9yC0Sg== X-Received: by 2002:a17:903:943:b0:242:fbc6:6a83 with SMTP id d9443c01a7336-2462eb56b82mr242150185ad.0.1756293785286; Wed, 27 Aug 2025 04:23:05 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.22.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:04 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:36 +1000 Subject: [PATCH v2 02/11] dt-bindings: hwmon: Add Apple System Management Controller hwmon schema 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: <20250827-macsmc-subdevs-v2-2-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7585; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=pxcU2aOREOtRRxzuCcs3ZxRurRuImy+zjNoj2CEiGZs=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjUZue70sF8b25USLiK50JO1tt/Q0n7atllVx7s/v T3Yrh3QUcrCIMbFICumyLKhSchjthHbzX6Ryr0wc1iZQIYwcHEKwEQ8ghn+V3EcFdQ3q5f7I/Zd /jeTzeK3CfIHP5y9/bXQ/601n92GCwz/bEKOW5/oyp48Iehb/S+Hbx/eOO1unsWgb2i71S9ie+9 mLgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Apple Silicon devices integrate a vast array of sensors, monitoring current, power, temperature, and voltage across almost every part of the system. The sensors themselves are all connected to the System Management Controller (SMC). The SMC firmware exposes the data reported by these sensors via its standard FourCC-based key-value API. The SMC is also responsible for monitoring and controlling any fans connected to the system, exposing them in the same way. For reasons known only to Apple, each device exposes its sensors with an almost totally unique set of keys. This is true even for devices which share an SoC. An M1 Mac mini, for example, will report its core temperatures on different keys to an M1 MacBook Pro. Worse still, the SMC does not provide a way to enumerate the available keys at runtime, nor do the keys follow any sort of reasonable or consistent naming rules that could be used to deduce their purpose. We must therefore know which keys are present on any given device, and which function they serve, ahead of time. Add a schema so that we can describe the available sensors for a given Apple Silicon device in the Devicetree. Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- .../bindings/hwmon/apple,smc-hwmon.yaml | 132 +++++++++++++++++++++++++ .../bindings/mfd/apple,smc.yaml | 36 +++++++ MAINTAINERS | 1 + 3 files changed, 169 insertions(+) diff --git a/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml b= /Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml new file mode 100644 index 0000000000000000000000000000000000000000..08cc4f55f3a41ca8b3b428088f9= 6240266fa42e8 --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml @@ -0,0 +1,132 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/hwmon/apple,smc-hwmon.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Apple SMC Hardware Monitoring + +description: + Apple's System Management Controller (SMC) exposes a vast array of + hardware monitoring sensors, including temperature probes, current and + voltage sense, power meters, and fan speeds. It also provides endpoints + to manually control the speed of each fan individually. Each Apple + Silicon device exposes a different set of endpoints via SMC keys. This + is true even when two machines share an SoC. The CPU core temperature + sensor keys on an M1 Mac mini are different to those on an M1 MacBook + Pro, for example. + +maintainers: + - James Calligeros + +definitions: + apple,key-id: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: The SMC FourCC key of the desired sensor. + Must match the node's suffix. + + label: + description: Human-readable name for the sensor + +properties: + compatible: + const: apple,smc-hwmon + +patternProperties: + "^current-[A-Za-z0-9]{4}$": + type: object + additionalProperties: false + + properties: + apple,key-id: + $ref: "#/definitions/apple,key-id" + + label: + $ref: "#/definitions/label" + + required: + - apple,key-id + - label + + "^fan-[A-Za-z0-9]{4}$": + type: object + additionalProperties: false + + properties: + apple,key-id: + $ref: "#/definitions/apple,key-id" + + apple,fan-minimum: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: SMC key containing the fan's minimum speed + + apple,fan-maximum: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: SMC key containing the fan's maximum speed + + apple,fan-target: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: Writeable endpoint for setting desired fan speed + + apple,fan-mode: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: Writeable key to enable/disable manual fan control + + label: + $ref: "#/definitions/label" + + required: + - apple,key-id + - label + + "^power-[A-Za-z0-9]{4}$": + type: object + additionalProperties: false + + properties: + apple,key-id: + $ref: "#/definitions/apple,key-id" + + label: + $ref: "#/definitions/label" + + required: + - apple,key-id + - label + + "^temperature-[A-Za-z0-9]{4}$": + type: object + additionalProperties: false + + properties: + apple,key-id: + $ref: "#/definitions/apple,key-id" + + label: + $ref: "#/definitions/label" + + required: + - apple,key-id + - label + + "^voltage-[A-Za-z0-9]{4}$": + type: object + additionalProperties: false + + properties: + apple,key-id: + $ref: "#/definitions/apple,key-id" + + label: + $ref: "#/definitions/label" + + required: + - apple,key-id + - label + +additionalProperties: false diff --git a/Documentation/devicetree/bindings/mfd/apple,smc.yaml b/Documen= tation/devicetree/bindings/mfd/apple,smc.yaml index 38f077867bdeedba8a486a63e366e9c943a75681..3fc4aa39292395f27b569455085= 8c6b34d18308d 100644 --- a/Documentation/devicetree/bindings/mfd/apple,smc.yaml +++ b/Documentation/devicetree/bindings/mfd/apple,smc.yaml @@ -44,6 +44,9 @@ properties: rtc: $ref: /schemas/rtc/apple,smc-rtc.yaml =20 + hwmon: + $ref: /schemas/hwmon/apple,smc-hwmon.yaml + additionalProperties: false =20 required: @@ -84,5 +87,38 @@ examples: nvmem-cells =3D <&rtc_offset>; nvmem-cell-names =3D "rtc_offset"; }; + + hwmon { + compatible =3D "apple,smc-hwmon"; + + current-ID0R { + apple,key-id =3D "ID0R"; + label =3D "AC Input Current"; + }; + + fan-F0Ac { + apple,key-id =3D "F0Ac"; + apple,fan-minimum =3D "F0Mn"; + apple,fan-maximum =3D "F0Mx"; + apple,fan-target =3D "F0Tg"; + apple,fan-mode =3D "F0Md"; + label =3D "Fan 1"; + }; + + power-PSTR { + apple,key-id =3D "PSTR"; + label =3D "Total System Power"; + }; + + temperature-TW0P { + apple,key-id =3D "TW0P"; + label =3D "WiFi/BT Module Temperature"; + }; + + voltage-VD0R { + apple,key-id =3D "VD0R"; + label =3D "AC Input Voltage"; + }; + }; }; }; diff --git a/MAINTAINERS b/MAINTAINERS index aaef8634985b35f54de1123ebb4176602066d177..56aabfbc2520749beb9dba235f8= e86c15e17b7b6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2380,6 +2380,7 @@ F: Documentation/devicetree/bindings/cpufreq/apple,cl= uster-cpufreq.yaml F: Documentation/devicetree/bindings/dma/apple,admac.yaml F: Documentation/devicetree/bindings/gpio/apple,smc-gpio.yaml F: Documentation/devicetree/bindings/gpu/apple,agx.yaml +F: Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml F: Documentation/devicetree/bindings/i2c/apple,i2c.yaml F: Documentation/devicetree/bindings/input/touchscreen/apple,z2-multitouch= .yaml F: Documentation/devicetree/bindings/interrupt-controller/apple,* --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 F1D7334F468; Wed, 27 Aug 2025 11:23:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293794; cv=none; b=ZizwBiaZhF/3cEWasmRBmLhbYpA7B/qcpsTlkJJAfz/pi3VQmJyp+1q38lInpJDrdIeIszw0gUXC7M3J34xJF7yykR3hDCFWxoXmSnitAZid4B9AHZ4mf23PQ9sZ3Jn4z6+oFuBoAUdUaxDmVE0b19k+qOBs91m9CAPhclQD0aw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293794; c=relaxed/simple; bh=kOHCh1tmOZfsjtAJTxIUfVW8g8Mep1vWd7pXV+GQ63g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=umcmWMx5XSxJUlFWZh2ha0xrvHWO/CCRZBNMNeQ9TaV29fmssUBWgV1yeQ36YrDUJG9MaBUx0O0aQBdNBu/SWMDrih3I25GEUIy4Qp5XPJvJBejY/UON/8VXmWQQ/fqhyWPHSBOcz8tBvHLO44MkIW7n/RIiBMF4+CleOaCdxAQ= 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=V4qmCjpM; arc=none smtp.client-ip=209.85.210.175 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="V4qmCjpM" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-770530175a6so2380440b3a.3; Wed, 27 Aug 2025 04:23:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293792; x=1756898592; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=V1KClXnYNESaxX6nw8jQRbh+BCfXEal+QzR0BXC9Jp4=; b=V4qmCjpMF7LQFDhXchhi76gTEUh0yqSHKhbG0rbydGRoPXtIrsf0iUhJgv001GK1dN gTn7jnQdyTHnUH/qKo89W8u8wKiPxTquqoguYV+VVLCbni8mHQoICWJCZmlOJ3ZHn2pr vFCDjvhBbI9p5McSbn1feQJD9RMltpGsaNcpBdW1KxM5nqfYNn9qczXoB2hEvVhvKSPv n8GuzAMrAqVmxzMjhiPozaAjPHirOV1UYk2t3xh50sEci1y+PG1VZ7swAK7NTAZfA7y3 7x/3Dy2fmcMgAOnZnFPv+d++TVnpARX3DV0/Kv0/vmc8gd0H7LfuMxvCobgEtl9TMWMN SZmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293792; x=1756898592; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=V1KClXnYNESaxX6nw8jQRbh+BCfXEal+QzR0BXC9Jp4=; b=qQuF3vCp+VI3JjcD7yqczpge9NUFomCJI790fgDcKC2B1oJIv3F5J0/YK9tLRnfeGw sgHJwzePux5ioKgwOAKg+YU6XFaJtkzmE3SQNIbGWBinIaGGaMecZ6z4Orm8yAqGRg9l /g8lo16RE+6qYXaY7QKnLfJkRXt7lrX6AzKQPQYxsNa2zDm7RECyP3cUFaRk7M72aiGC kR+n0OfSTNPybDYd9HcUuFTmZJUiEcaRHwhvVsfG27LIXuwQfEEra9JAV27CWD1Hy5aw z2kooiA33NXkn4GF0va8dNMn4TN2tJaFWXnCaVYP3syjTx/vmubtiWl0Da079lqLFKhw ilFw== X-Forwarded-Encrypted: i=1; AJvYcCVOhkX/XFe5wZyg2hS3IDwYf2rtk/3nioFPVKsg19uST04YnWRMNnpLQz1xC7lbZ4meO7eFZL7QReH480Y=@vger.kernel.org, AJvYcCWbhtfXRPKA+d4AzayLTJDAXyM3XuC5dc2c9ittMkd06EhPonyzW99+6BcAla29qDLzgg2fOtbNpf04@vger.kernel.org, AJvYcCX2dr2PTDmwzMk/ObXzDLjMvHC7v76qsAHSdIx8x/QjbKdoDeYjCzUrkHVxe6DxqhLLupiAzsLJQ8Nx3+Y=@vger.kernel.org, AJvYcCXoaZtBiRevbReUnH4+aHSqi3xK3n9/p2rBCSwULhB/RMJEA1bOw2dK7NtpJfYZNTMaHG4Iuz8dWEKEHo+a@vger.kernel.org, AJvYcCXzbs/6YF9XNLCCxaygSXkGu/6Hscv32tlz55ewMmydKiRIYuCNQWD/TzAMjQ7n9KNs7UxTJRjtpKra@vger.kernel.org X-Gm-Message-State: AOJu0YwLmJKob/AUddJNB6iYH3YjyQmZ/VrlSDqz8lDUmmnlJZSrMCMd XU1qsII8b4lTP+cfW6Zl0E89rTOGIECK4efvPfi6n5M6TqVuZXEom6AZwbSI39Jj X-Gm-Gg: ASbGncutpWWqEPM33f4C+mUWOAfSkCn4SXgjBtZXN6AC++uKbv3RLMOUxm/wSOm1zF4 ylXcyPrtHj2qHIB84uxSIV4gC4aL2Prn2oVbEngdzCls8k48h7CDSImfdFwuWr+GiR2E/d9i87M nLBhExSIJK72H0blq4vpOf8q6/HY5qn1isr7TElHs7WQ1piiK+mDUstOVFUmAYcYqkeYQhtC2Ev 9knN2+SdREuCeR2OyGf97PUFEAi2spBs9H9CjxELK4+ZpkKWmA3X79rn2j+S5zzA6hXwvMNsnnt TBMM7GF9pfR6nPVe+BR66SUaO7iztr6QNSaUx7gwhbNc9DWDnANaNza0ylUpnIaqLQ6rCAycjSM uay+u4od2w9rV/TOdm+pqBhw48N+VEBqoAGBl8rMuHo0ypZ56vigMSmvcJ4g+FnaX44CLx7pfWr MWA/kWxszQ/SG4Mf+h X-Google-Smtp-Source: AGHT+IE6Tu6wufrIlj+Kudc31D3OvoV/icWKSCI7R614I9GYVkGOYOO+IfrlAxI3vaqnE2V0vypq7A== X-Received: by 2002:a17:903:22c5:b0:245:fb83:25da with SMTP id d9443c01a7336-2462ee8dcc8mr203216505ad.22.1756293792214; Wed, 27 Aug 2025 04:23:12 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:11 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:37 +1000 Subject: [PATCH v2 03/11] rtc: Add new rtc-macsmc driver for Apple Silicon Macs 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: <20250827-macsmc-subdevs-v2-3-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros , Hector Martin X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7121; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=fFYNx5MTaxomGmqTFhn5OXWgUInA1frn00iHExvU3h4=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjV9LEg3D811Ofwr5/LdmH1FWr66Mis4ZHNOC9XNV tsy8//vjlIWBjEuBlkxRZYNTUIes43YbvaLVO6FmcPKBDKEgYtTACYyxZThf7bzYwOFO0V5nHeX TGIT8e7SZNBdebLoTKf3xf8dTdsKXBkZPqVdjFbdPMOoz/rc47pJko+PrRJtiDktuDD/UdQuHV9 ffgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin Apple Silicon Macs (M1, etc.) have an RTC that is part of the PMU IC, but most of the PMU functionality is abstracted out by the SMC. On T600x machines, the RTC counter must be accessed via the SMC to get full functionality, and it seems likely that future machines will move towards making SMC handle all RTC functionality. The SMC RTC counter access is implemented on all current machines as of the time of this writing, on firmware 12.x. However, the RTC offset (needed to set the time) is still only accessible via direct PMU access. To handle this, we expose the RTC offset as an NVMEM cell from the SPMI PMU device node, and this driver consumes that cell and uses it to compute/set the current time. Reviewed-by: Neal Gompa Signed-off-by: Hector Martin Signed-off-by: Sven Peter Signed-off-by: James Calligeros --- MAINTAINERS | 1 + drivers/rtc/Kconfig | 11 ++ drivers/rtc/Makefile | 1 + drivers/rtc/rtc-macsmc.c | 141 +++++++++++++++++++++++++ 4 files changed, 154 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 56aabfbc2520749beb9dba235f8e86c15e17b7b6..5d53d243dc9abdf1db5865f8e6b= cddbac3eafebe 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2422,6 +2422,7 @@ F: drivers/nvmem/apple-spmi-nvmem.c F: drivers/pinctrl/pinctrl-apple-gpio.c F: drivers/power/reset/macsmc-reboot.c F: drivers/pwm/pwm-apple.c +F: drivers/rtc/rtc-macsmc.c F: drivers/soc/apple/* F: drivers/spi/spi-apple.c F: drivers/spmi/spmi-apple-controller.c diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 64f6e9756aff4a1f6f6c50f9b4fc2140f66a8578..d28a46a89c85e6b30b402aec155= e8972ed2aaa8e 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -2068,6 +2068,17 @@ config RTC_DRV_WILCO_EC This can also be built as a module. If so, the module will be named "rtc_wilco_ec". =20 +config RTC_DRV_MACSMC + tristate "Apple Mac System Management Controller RTC" + depends on MFD_MACSMC + help + If you say yes here you get support for RTC functions + inside Apple SPMI PMUs accessed through the SoC's + System Management Controller + + To compile this driver as a module, choose M here: the + module will be called rtc-macsmc. + config RTC_DRV_MSC313 tristate "MStar MSC313 RTC" depends on ARCH_MSTARV7 || COMPILE_TEST diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index 789bddfea99d8fcd024566891c37ee73e527cf93..bcb43b5878a562454986cbb9ab8= cc45cec248dda 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -93,6 +93,7 @@ obj-$(CONFIG_RTC_DRV_M48T35) +=3D rtc-m48t35.o obj-$(CONFIG_RTC_DRV_M48T59) +=3D rtc-m48t59.o obj-$(CONFIG_RTC_DRV_M48T86) +=3D rtc-m48t86.o obj-$(CONFIG_RTC_DRV_MA35D1) +=3D rtc-ma35d1.o +obj-$(CONFIG_RTC_DRV_MACSMC) +=3D rtc-macsmc.o obj-$(CONFIG_RTC_DRV_MAX31335) +=3D rtc-max31335.o obj-$(CONFIG_RTC_DRV_MAX6900) +=3D rtc-max6900.o obj-$(CONFIG_RTC_DRV_MAX6902) +=3D rtc-max6902.o diff --git a/drivers/rtc/rtc-macsmc.c b/drivers/rtc/rtc-macsmc.c new file mode 100644 index 0000000000000000000000000000000000000000..05e360277f630f3368b2856aade= f1f2b96426c37 --- /dev/null +++ b/drivers/rtc/rtc-macsmc.c @@ -0,0 +1,141 @@ +// SPDX-License-Identifier: GPL-2.0-only OR MIT +/* + * Apple SMC RTC driver + * Copyright The Asahi Linux Contributors + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* 48-bit RTC */ +#define RTC_BYTES 6 +#define RTC_BITS (8 * RTC_BYTES) + +/* 32768 Hz clock */ +#define RTC_SEC_SHIFT 15 + +struct macsmc_rtc { + struct device *dev; + struct apple_smc *smc; + struct rtc_device *rtc_dev; + struct nvmem_cell *rtc_offset; +}; + +static int macsmc_rtc_get_time(struct device *dev, struct rtc_time *tm) +{ + struct macsmc_rtc *rtc =3D dev_get_drvdata(dev); + u64 ctr =3D 0, off =3D 0; + time64_t now; + void *p_off; + size_t len; + int ret; + + ret =3D apple_smc_read(rtc->smc, SMC_KEY(CLKM), &ctr, RTC_BYTES); + if (ret < 0) + return ret; + if (ret !=3D RTC_BYTES) + return -EIO; + + p_off =3D nvmem_cell_read(rtc->rtc_offset, &len); + if (IS_ERR(p_off)) + return PTR_ERR(p_off); + if (len < RTC_BYTES) { + kfree(p_off); + return -EIO; + } + + memcpy(&off, p_off, RTC_BYTES); + kfree(p_off); + + /* Sign extend from 48 to 64 bits, then arithmetic shift right 15 bits to= get seconds */ + now =3D sign_extend64(ctr + off, RTC_BITS - 1) >> RTC_SEC_SHIFT; + rtc_time64_to_tm(now, tm); + + return ret; +} + +static int macsmc_rtc_set_time(struct device *dev, struct rtc_time *tm) +{ + struct macsmc_rtc *rtc =3D dev_get_drvdata(dev); + u64 ctr =3D 0, off =3D 0; + int ret; + + ret =3D apple_smc_read(rtc->smc, SMC_KEY(CLKM), &ctr, RTC_BYTES); + if (ret < 0) + return ret; + if (ret !=3D RTC_BYTES) + return -EIO; + + /* This sets the offset such that the set second begins now */ + off =3D (rtc_tm_to_time64(tm) << RTC_SEC_SHIFT) - ctr; + return nvmem_cell_write(rtc->rtc_offset, &off, RTC_BYTES); +} + +static const struct rtc_class_ops macsmc_rtc_ops =3D { + .read_time =3D macsmc_rtc_get_time, + .set_time =3D macsmc_rtc_set_time, +}; + +static int macsmc_rtc_probe(struct platform_device *pdev) +{ + struct apple_smc *smc =3D dev_get_drvdata(pdev->dev.parent); + struct macsmc_rtc *rtc; + + /* + * MFD will probe this device even without a node in the device tree, + * thus bail out early if the SMC on the current machines does not + * support RTC and has no node in the device tree. + */ + if (!pdev->dev.of_node) + return -ENODEV; + + rtc =3D devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); + if (!rtc) + return -ENOMEM; + + rtc->dev =3D &pdev->dev; + rtc->smc =3D smc; + + rtc->rtc_offset =3D devm_nvmem_cell_get(&pdev->dev, "rtc_offset"); + if (IS_ERR(rtc->rtc_offset)) + return dev_err_probe(&pdev->dev, PTR_ERR(rtc->rtc_offset), + "Failed to get rtc_offset NVMEM cell\n"); + + rtc->rtc_dev =3D devm_rtc_allocate_device(&pdev->dev); + if (IS_ERR(rtc->rtc_dev)) + return PTR_ERR(rtc->rtc_dev); + + rtc->rtc_dev->ops =3D &macsmc_rtc_ops; + rtc->rtc_dev->range_min =3D S64_MIN >> (RTC_SEC_SHIFT + (64 - RTC_BITS)); + rtc->rtc_dev->range_max =3D S64_MAX >> (RTC_SEC_SHIFT + (64 - RTC_BITS)); + + platform_set_drvdata(pdev, rtc); + + return devm_rtc_register_device(rtc->rtc_dev); +} + +static const struct of_device_id macsmc_rtc_of_table[] =3D { + { .compatible =3D "apple,smc-rtc", }, + {} +}; +MODULE_DEVICE_TABLE(of, macsmc_rtc_of_table); + +static struct platform_driver macsmc_rtc_driver =3D { + .driver =3D { + .name =3D "macsmc-rtc", + .of_match_table =3D macsmc_rtc_of_table, + }, + .probe =3D macsmc_rtc_probe, +}; +module_platform_driver(macsmc_rtc_driver); + +MODULE_LICENSE("Dual MIT/GPL"); +MODULE_DESCRIPTION("Apple SMC RTC driver"); +MODULE_AUTHOR("Hector Martin "); --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 D6ED5342C92; Wed, 27 Aug 2025 11:23:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293801; cv=none; b=BjVvwKBRKuiqDxKRnrH6oCW9BvKTTQkYx4bmUMiheY/g6L4MX+fYh1+gsHrEmQsc7YEK65ZTNSUWNVqyfDNDBzDT42Vi2lmxIeKCDjKGX+aJ4baV+z4bHHGcc37mYa0/LlyhMydRocQV/5dhQqCl+e3G4sQdNby55hGXs6jcaYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293801; c=relaxed/simple; bh=VOrW2GfzJb6imZqi+U2s8G3s2QEeizLHqMoRRpb/nIs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c2tdFCDkW6FdliTJDkJBPRkq28zvrwnj0DgoMsbzwTe9CdpnUSVqdNhaDnoii3gR9xcFV9T1bo5mEGuosrnXBGOjicQQwFtY8jDOM1iV9KxxhNyyeZ7wBoCsYDgPPNWw4P5cm3NYIvY+UDBi5qImJ+V5BmjSXMfVp0ix7Bc1XCY= 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=j/ytBtNS; arc=none smtp.client-ip=209.85.216.53 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="j/ytBtNS" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-3253f0c8788so5603162a91.0; Wed, 27 Aug 2025 04:23:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293799; x=1756898599; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=VRHVnpg9jOOLhSqBOjWKSbJGnSs0q1UyU/4Pw3oBr3I=; b=j/ytBtNS4meIzRKho3vJ8kVan/qIIlEl8bGdDsNEDvG2fzctpjOJT5XfR21+vDpIkc J8sY63DDAQ6/yaa+TgoBaVFboMSfX+warCcakZvojbouCPrr+dpui5EkbaVbNh5zyxA/ GUj7k3lSRNb+t7MoVf00NuTdBCntZX3GXSe3M2vbi4d5YOfGy00lBhVt4C9MqWlixicv oFXIP6j4AXJG8mcDwKPXLAuE33Uk+yGI5FqxGyctzFXaRThsH2ebQDWQS9ATYN85jdxn T6+S3v+MP+Ohfewc/XVvjgkXMq0GKUA+yfW66GPT/CKVFoAgEv3zsKpggWfw/VtlzdR8 qIdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293799; x=1756898599; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VRHVnpg9jOOLhSqBOjWKSbJGnSs0q1UyU/4Pw3oBr3I=; b=aT53kcqkNyDmDKOUawzirkVz4t53xU4K9BzTJntjQ2LkGoGphMmM8FkaB3NuKr08le aTZOzm+e3Otc9mJUJ1CkkKDfNw1CfDYc8ejxiPZ/ij8PsBDHFS1U09iDBrJuKzIyxSs0 yAVDius5hNz9C1Mw76paUA8vi0qThx6lSsGS9IzGKekIZ2Wlkni+2/WowFopjQONRccI 5K77N48hycqHfG2Kjhn1e07+ivYzaYgzu6l9LGTWOova0ji8biNXowh159cvrbKou2Tu 2R9mToYPyGbevLu8nCQXFS8EuoBp5RAQ3KlH7RKqUjRpe8FQFDYsAoC9C6bG6CTkmUOG 1yVg== X-Forwarded-Encrypted: i=1; AJvYcCUuGED5tnUjRL0p5qcTAPzmcaqB+qAhgMn5nq46t13YMBOEAqF3GbO7Lxd7Ye94+uSv+2wMc53eWarxWu0=@vger.kernel.org, AJvYcCWv9su+FYLV7nZ/FOz3OAQ1wedhGY4T0yv4MQkIgdHvc5ZMwzOGNsVIV7tajWJnyZkR+UL0TgyGczB5@vger.kernel.org, AJvYcCX1KT2G78fct05Y7Df2vSxWE4iEuUwo8YLZVoh35o65gbgNjJdWPAukpO36Qt0rrt/q3uEJYzlzt5Nx1ge9@vger.kernel.org, AJvYcCX5MN8KhMIGimUUhseP1Jxgc5o2gYM8A4aL283ykaMWpIjPz6rv5U08XVpDuxVfREGmshOGeZ5W7mvs@vger.kernel.org, AJvYcCXazEgTO8B9SzPMG3YYC2Zk6iufrGtwj7r2lEcAbh1UXK3+9fKxPIlh/TUGsusmZQNueZlF9kNL9HI5sek=@vger.kernel.org X-Gm-Message-State: AOJu0YzjU3zP7mpTup/yINHP0KJK4UH1ss3HeQcVs+fksYcjK+Ds6K9z mXOhRYTvOIucB2KpIvnhE71Ctxq0/6m0IOvREo1RMPVgrlT8r+fF2da/ X-Gm-Gg: ASbGncuALfopzKoUMMB4Bo2r1/s5TnK726ludQbl9//8hjicVChJ+JHVx6Z2NDKw8NG 20KltVpyaYFF02iev1spwlkx2t2B4QzUv4qm6sPUsywDUdk6CWe//cqlSpVcyAXEYNOI0uG4Oob ftlCVbatQ2KRsU1pj2oSB2XmLmRp34KfVFIFA2yLWwmbRQ2uHUnmsDUO5n0UMO89xp8RnVBOt6t vjUJPeos2sNhA3YQ/RwUpJncECY+rVnzrKP8EvNTUveOUI1Iiy9icM84AooIznTRAqvSBSQGLNk KmYj4xm0PCXaExdHc6yVXwCNavcllN6pP7VsqEB20gOTCni2N4VdgHlksI6Vue5XnmeMfxTnDeH WePmYcHzcDewhfw9X3frnDHiqmNTIA8UsduD0t21pSB7MzmMMkxFlb60dVWNk8aZN34I4hDP68t jQbjOaDFqKHOxnuM5i0NNdkLmYQJ8= X-Google-Smtp-Source: AGHT+IGazgBF7dBdHwX3f8CSjkteviIi1P6yshCO+mKyTVKYMXEQPnfM8dJAfOCjG9kzcJT1WvLKrA== X-Received: by 2002:a17:90b:3e44:b0:31e:ebb6:6499 with SMTP id 98e67ed59e1d1-32515ec135dmr27101965a91.24.1756293798966; Wed, 27 Aug 2025 04:23:18 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:18 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:38 +1000 Subject: [PATCH v2 04/11] mfd: macsmc: Wire up Apple SMC RTC subdevice 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: <20250827-macsmc-subdevs-v2-4-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=761; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=VOrW2GfzJb6imZqi+U2s8G3s2QEeizLHqMoRRpb/nIs=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjW92MB4c0NY3kzza2ESkqr5ug7N3ff//Q3gcdhkG GrodOBlRykLgxgXg6yYIsuGJiGP2UZsN/tFKvfCzGFlAhnCwMUpABMJ2sXIcCBlW1rgMjN/5znf ExM2rF4ZczxhX0kf064y0Yd5wdN3RzIyTJ2y3PDT9O8aRz79lH238vDDxEsncws9+a+wr25iuuT 8nwUA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the new SMC RTC function to the mfd device Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- drivers/mfd/macsmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mfd/macsmc.c b/drivers/mfd/macsmc.c index 870c8b2028a8fc0e905c8934c2636824cbe5d527..59be894460d33afa75492763088= 1532b548b7ad8 100644 --- a/drivers/mfd/macsmc.c +++ b/drivers/mfd/macsmc.c @@ -47,6 +47,7 @@ static const struct mfd_cell apple_smc_devs[] =3D { MFD_CELL_OF("macsmc-gpio", NULL, NULL, 0, 0, "apple,smc-gpio"), MFD_CELL_OF("macsmc-reboot", NULL, NULL, 0, 0, "apple,smc-reboot"), + MFD_CELL_OF("macsmc-rtc", NULL, NULL, 0, 0, "apple,smc-rtc"), }; =20 static int apple_smc_cmd_locked(struct apple_smc *smc, u64 cmd, u64 arg, --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 B5C9B34F460; Wed, 27 Aug 2025 11:23:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293809; cv=none; b=mq3XaexGoFhGpCKuX41eBHEtS0Z1iXATj1n0Ab27Q7/1VDKplKB1wxzkWjXQlpChudTfPQveOdbQL6rbCHyQoymxOuC9OzKvOWqSDl6nVC5uY2nRVsndq6sFf9gsMYhtNj28Gfv/81qC4YJd/9AWQfYbjnPtOt80UVF4MeJJ4x4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293809; c=relaxed/simple; bh=bEa/Ua6OoRE01kzYuA24h+PazDQmfn9JOqcck/W/yQQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dHvdock3ARab2sNT+Ss1QfifVLqjBwWJl+24x9FZUu3EGJs9wRkn/3VL7tzJ+zvr/+1ckU6mOtmAON4C4SDVcdys6NOHcPLNx/J2mqN0Ms7NczSGS7AFP6KvDkLJw+i4mf404HwPiOqtzRjJPt1eCATDw0xNyGkOUtxkrefU5hY= 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=OQSumqot; arc=none smtp.client-ip=209.85.216.48 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="OQSumqot" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-323266d6f57so7124775a91.0; Wed, 27 Aug 2025 04:23:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293806; x=1756898606; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=W/yMtRIwYpCS3FRY/xCcmZAIHSdt68lNOWKyz8RD2cY=; b=OQSumqotDjy3spQVmJcP/PAzA+di4JEOU5yfooEtgCSuB6txHeo9VKq6FoEOxvZ98K DTjDQgUeG26Z84aBb6YXc+CI0UxKa7XkA88m2C3JgvDmserSUzIr1F2HyzaJUYkYODTo B0Jysbx/GNraVznYjBI0MKoV7AxsxAyh9TTsU/n2WUuZYzXN7jmrT4GJKjVJAL+LeA5L NrroKoExGF+QxgQmaO8Nu5sub4oCIQviAjERnA8QP+p4om6Ueh/Mu/kO92Ie7GK8y5R9 xf57Mjp5rZ9IkHQNipP09oeEbpjctfGb/7ubduINIcNL94uY+m0vUOgDPRkmkqNV7Rhv tFSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293806; x=1756898606; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=W/yMtRIwYpCS3FRY/xCcmZAIHSdt68lNOWKyz8RD2cY=; b=QItqYpQB3xewqaUz6q6zzXTik/AjIMU4vlqmzIxkPcTD9n9UuGOPsnAUnzElSMOTwS QKGycBX6NxNzg5iiyM3Si2NnHEbC+LdTHZ5Fn1dFCHszuqV5DoRJsMh5Pf+0K2MYCHsT D76wQ3DUaJ0/3GM4+Z075weyzByarYNKqFwuq3cTi1u+EwEITL3s+RXdqZ58PKm1J6Ux vVDfl7mbSJK7aeMoUnUId3Xz+a7MXmNqTrmQ/v0zFofwULmtAx80mCYGiPIbRcQFNjLw IOgb4ZVNbrpI8m/rjpw0F0vYa2tD+KIGDSe7+2+bJnu+bNLUNVqZInsZ8cL4BniPa343 V/Pg== X-Forwarded-Encrypted: i=1; AJvYcCUFpuc5On1JhSlRe4rklrXNwCyQkxwmpMk2n8aUJrRJg24n9LEZglt39i7SxPH+kWnfqBddm/labqczf/0=@vger.kernel.org, AJvYcCUGk+k892CQzRBqbF7Xg9jGGtYIKPAJeGSkcJcnSr3272S6xqs+hZBIcTSLlwIMBFvNGaszhMs7TGh6@vger.kernel.org, AJvYcCUMm7eSJk6P5As+jhXLduHrHaVOURl2Fl7qpMOWXtCRqJ1vAIQvrhwgY32NB7dp4i/Cp5ncvWkmDEs5KL/K@vger.kernel.org, AJvYcCUvEvCDufvR3c1HjcmlWiHgkvyhLVpgdBZga8FyMuXtMhsNwTFiX2ysc8quMV1ZNWaNwy7ngCVuEsVtv80=@vger.kernel.org, AJvYcCWTpqI4QemlzVGNxKTFrhiBOmJDy0+jdEtcoAButzfJKvlmPzsEmjzVvsjo0a5gpA3HUSUS9KdwZ1r1@vger.kernel.org X-Gm-Message-State: AOJu0YzTi00EsHR+oOVXu8u7aPUkPiAB0oV648Fx+ghV/DRyPgSMAELD rJUYh2IMCZn2baQzRtEkuKSY1xvBIOgs0S7NDEFiErnbNaVZ6CHXM6Nx X-Gm-Gg: ASbGnctxf2AFs5f68eYAJO3oV6mlZePJVGLJMEG74FQKJSyMBj7DmiTF6A2YCaV94It YAJoPsp74B+xEwAMNQ7Kj+YIXP1qqTYCGFrPPdFHVZ5Ssn25LtpZ+P5m+5T0lRY7H2RZxrjFXRb KzLivKXK9sZ/Zfcvj3FgJdxP5Erji5IPJrUy16pwu/rQb+AdQfGVv8CgdY3vS/9aoKRme5YgzC5 cc6551bxo1G+wdCFlQspTZPxMMYRTjxpBJkU38G0xRWjDi27wbmcgrZxDmo9QZp5Fdm9cZYR1m2 jE/nTGigOkhk2qUn3vc/AurFKfJ2jhLc/t3eA1kF+4s4By/V1kSTzp+n17gDxQ/tOwdEPwcOdLC 3XNoyTjMnktICxaxjBF1BoBo1+WdS3yxSpodCPzk1ybmvm0t4CfBoHXy6bIRZhWX5lycXLX63Go 0/F0phS52FPCelqt2/kONWDFVg92o= X-Google-Smtp-Source: AGHT+IHoFbGnaqPzMC/TTVBB1OetuqJEDE9tmLGqVO5EXJsENq2tHS9TlLptytkscz26wzxxGoSgGA== X-Received: by 2002:a17:90b:2f47:b0:31e:cc6b:320f with SMTP id 98e67ed59e1d1-32515ee3cf2mr21769165a91.5.1756293805847; Wed, 27 Aug 2025 04:23:25 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:25 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:39 +1000 Subject: [PATCH v2 05/11] hwmon: Add Apple Silicon SMC hwmon driver 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: <20250827-macsmc-subdevs-v2-5-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=26998; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=bEa/Ua6OoRE01kzYuA24h+PazDQmfn9JOqcck/W/yQQ=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjVtzXrGdy4jvPFr/9P9UbvduP06axeJlDi8u8+4Q C03deeajlIWBjEuBlkxRZYNTUIes43YbvaLVO6FmcPKBDKEgYtTACby9Qgjw5+ti/TVTx15lFhj vJhzraCi84+pQhOLE9+7Vf/acXOikwcjw5npzcHzkkL21Zjt6d1e0v0q3Sl2oc25H7PetJs9LIq 15wUA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The System Management Controller on Apple Silicon devices is responsible for integrating and exposing the data reported by the vast array of hardware monitoring sensors present on these devices. It is also responsible for fan control, and allows users to manually set fan speeds if they so desire. Add a hwmon driver to expose current, power, temperature, and voltage monitoring sensors, as well as fan speed monitoring and control via the SMC on Apple Silicon devices. The SMC firmware has no consistency between devices, even when they share an SoC. The FourCC keys used to access sensors are almost random. An M1 Mac mini will have different FourCCs for its CPU core temperature sensors to an M1 MacBook Pro, for example. For this reason, the valid sensors for a given device are specified in a child of the SMC Devicetree node. The driver uses this information to determine which sensors to make available at runtime. Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- MAINTAINERS | 1 + drivers/hwmon/Kconfig | 12 + drivers/hwmon/Makefile | 1 + drivers/hwmon/macsmc_hwmon.c | 848 +++++++++++++++++++++++++ 4 files changed, 862 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 5d53d243dc9abdf1db5865f8e6bcddbac3eafebe..2eb23522654dd050262eb06e077= 587030cc335aa 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2408,6 +2408,7 @@ F: drivers/clk/clk-apple-nco.c F: drivers/cpufreq/apple-soc-cpufreq.c F: drivers/dma/apple-admac.c F: drivers/gpio/gpio-macsmc.c +F: drivers/hwmon/macsmc_hwmon.c F: drivers/pmdomain/apple/ F: drivers/i2c/busses/i2c-pasemi-core.c F: drivers/i2c/busses/i2c-pasemi-platform.c diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 9d28fcf7cd2a6f9e2f54694a717bd85ff4047b46..1ca6db71e4d9da32717fd14487c= 10944433ada41 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -1164,6 +1164,18 @@ config SENSORS_LTQ_CPUTEMP If you say yes here you get support for the temperature sensor inside your CPU. =20 +config SENSORS_MACSMC_HWMON + tristate "Apple SMC (Apple Silicon)" + depends on MFD_MACSMC && OF + help + This driver enables hwmon support for current, power, temperature, + and voltage sensors, as well as fan speed reporting and control + on Apple Silicon devices. Say Y here if you have an Apple Silicon + device. + + This driver can also be built as a module. If so, the module will + be called macsmc_hwmon. + config SENSORS_MAX1111 tristate "Maxim MAX1111 Serial 8-bit ADC chip and compatibles" depends on SPI_MASTER diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index cd8bc4752b4dbf015c6eb46157626f4e8f87dfae..80fc8447aff15b3b8e8583dc755= c8accb3b6a93e 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile @@ -147,6 +147,7 @@ obj-$(CONFIG_SENSORS_LTC4260) +=3D ltc4260.o obj-$(CONFIG_SENSORS_LTC4261) +=3D ltc4261.o obj-$(CONFIG_SENSORS_LTC4282) +=3D ltc4282.o obj-$(CONFIG_SENSORS_LTQ_CPUTEMP) +=3D ltq-cputemp.o +obj-$(CONFIG_SENSORS_MACSMC_HWMON) +=3D macsmc_hwmon.o obj-$(CONFIG_SENSORS_MAX1111) +=3D max1111.o obj-$(CONFIG_SENSORS_MAX127) +=3D max127.o obj-$(CONFIG_SENSORS_MAX16065) +=3D max16065.o diff --git a/drivers/hwmon/macsmc_hwmon.c b/drivers/hwmon/macsmc_hwmon.c new file mode 100644 index 0000000000000000000000000000000000000000..e44ea357870238aa0b38d7b674a= 6c456271fdf0c --- /dev/null +++ b/drivers/hwmon/macsmc_hwmon.c @@ -0,0 +1,848 @@ +// SPDX-License-Identifier: GPL-2.0-only OR MIT +/* + * Apple SMC hwmon driver for Apple Silicon platforms + * + * The System Management Controller on Apple Silicon devices is responsibl= e for + * measuring data from sensors across the SoC and machine. These include p= ower, + * temperature, voltage and current sensors. Some "sensors" actually expose + * derived values. An example of this is the key PHPC, which is an estimate + * of the heat energy being dissipated by the SoC. + * + * While each SoC only has one SMC variant, each platform exposes a differ= ent + * set of sensors. For example, M1 MacBooks expose battery telemetry senso= rs + * which are not present on the M1 Mac mini. For this reason, the available + * sensors for a given platform are described in the device tree in a child + * node of the SMC device. We must walk this list of available sensors and + * populate the required hwmon data structures at runtime. + * + * Originally based on a concept by Jean-Francois Bortolotti + * + * Copyright The Asahi Linux Contributors + */ + +#include +#include +#include +#include +#include +#include + +#define MAX_LABEL_LENGTH 32 +#define NUM_SENSOR_TYPES 5 /* temp, volt, current, power, fan */ + +#define FLT_EXP_BIAS 127 +#define FLT_EXP_MASK GENMASK(30, 23) +#define FLT_MANT_BIAS 23 +#define FLT_MANT_MASK GENMASK(22, 0) +#define FLT_SIGN_MASK BIT(31) + +static bool fan_control; +module_param_unsafe(fan_control, bool, 0644); +MODULE_PARM_DESC(fan_control, + "Override the SMC to set your own fan speeds on supported machines"); + +struct macsmc_hwmon_sensor { + struct apple_smc_key_info info; + smc_key macsmc_key; + char label[MAX_LABEL_LENGTH]; +}; + +struct macsmc_hwmon_fan { + struct macsmc_hwmon_sensor now; + struct macsmc_hwmon_sensor min; + struct macsmc_hwmon_sensor max; + struct macsmc_hwmon_sensor set; + struct macsmc_hwmon_sensor mode; + char label[MAX_LABEL_LENGTH]; + u32 attrs; + bool manual; +}; + +struct macsmc_hwmon_sensors { + struct hwmon_channel_info channel_info; + struct macsmc_hwmon_sensor *sensors; + u32 count; +}; + +struct macsmc_hwmon_fans { + struct hwmon_channel_info channel_info; + struct macsmc_hwmon_fan *fans; + u32 count; +}; + +struct macsmc_hwmon { + struct device *dev; + struct apple_smc *smc; + struct device *hwmon_dev; + struct hwmon_chip_info chip_info; + /* Chip + sensor types + NULL */ + const struct hwmon_channel_info *channel_infos[1 + NUM_SENSOR_TYPES + 1]; + struct macsmc_hwmon_sensors temp; + struct macsmc_hwmon_sensors volt; + struct macsmc_hwmon_sensors curr; + struct macsmc_hwmon_sensors power; + struct macsmc_hwmon_fans fan; +}; + +static int macsmc_hwmon_read_label(struct device *dev, + enum hwmon_sensor_types type, u32 attr, + int channel, const char **str) +{ + struct macsmc_hwmon *hwmon =3D dev_get_drvdata(dev); + + switch (type) { + case hwmon_temp: + if (channel >=3D hwmon->temp.count) + return -EINVAL; + *str =3D hwmon->temp.sensors[channel].label; + break; + case hwmon_in: + if (channel >=3D hwmon->volt.count) + return -EINVAL; + *str =3D hwmon->volt.sensors[channel].label; + break; + case hwmon_curr: + if (channel >=3D hwmon->curr.count) + return -EINVAL; + *str =3D hwmon->curr.sensors[channel].label; + break; + case hwmon_power: + if (channel >=3D hwmon->power.count) + return -EINVAL; + *str =3D hwmon->power.sensors[channel].label; + break; + case hwmon_fan: + if (channel >=3D hwmon->fan.count) + return -EINVAL; + *str =3D hwmon->fan.fans[channel].label; + break; + default: + return -EOPNOTSUPP; + } + + return 0; +} + +/* + * A number of sensors report data in a 48.16 fixed-point decimal format t= hat is + * not used by any other function of the SMC. + */ +static int macsmc_hwmon_read_ioft_scaled(struct apple_smc *smc, smc_key ke= y, + u64 *p, int scale) +{ + u64 val; + int ret; + + ret =3D apple_smc_read_u64(smc, key, &val); + if (ret < 0) + return ret; + + *p =3D mult_frac(val, scale, 65536); + + return 0; +} + +/* + * Many sensors report their data as IEEE-754 floats. No other SMC functio= n uses + * them. + */ +static int macsmc_hwmon_read_f32_scaled(struct apple_smc *smc, smc_key key, + int *p, int scale) +{ + u32 fval; + u64 val; + int ret, exp; + + ret =3D apple_smc_read_u32(smc, key, &fval); + if (ret < 0) + return ret; + + val =3D ((u64)((fval & FLT_MANT_MASK) | BIT(23))); + exp =3D ((fval >> 23) & 0xff) - FLT_EXP_BIAS - FLT_MANT_BIAS; + if (scale < 0) { + val <<=3D 32; + exp -=3D 32; + val /=3D -scale; + } else { + val *=3D scale; + } + + if (exp > 63) + val =3D U64_MAX; + else if (exp < -63) + val =3D 0; + else if (exp < 0) + val >>=3D -exp; + else if (exp !=3D 0 && (val & ~((1UL << (64 - exp)) - 1))) /* overflow */ + val =3D U64_MAX; + else + val <<=3D exp; + + if (fval & FLT_SIGN_MASK) { + if (val > (-(s64)INT_MIN)) + *p =3D INT_MIN; + else + *p =3D -val; + } else { + if (val > INT_MAX) + *p =3D INT_MAX; + else + *p =3D val; + } + + return 0; +} + +/* + * The SMC has keys of multiple types, denoted by a FourCC of the same for= mat + * as the key ID. We don't know what data type a key encodes until we poke= at it. + */ +static int macsmc_hwmon_read_key(struct apple_smc *smc, + struct macsmc_hwmon_sensor *sensor, int scale, + long *val) +{ + int ret; + + switch (sensor->info.type_code) { + /* 32-bit IEEE 754 float */ + case _SMC_KEY("flt "): { + u32 flt_ =3D 0; + + ret =3D macsmc_hwmon_read_f32_scaled(smc, sensor->macsmc_key, + &flt_, scale); + *val =3D flt_; + break; + } + /* 48.16 fixed point decimal */ + case _SMC_KEY("ioft"): { + u64 ioft =3D 0; + + ret =3D macsmc_hwmon_read_ioft_scaled(smc, sensor->macsmc_key, + &ioft, scale); + *val =3D (long)ioft; + break; + } + default: + return -EOPNOTSUPP; + } + + if (ret) + return -EINVAL; + + return 0; +} + +static int macsmc_hwmon_write_f32_scaled(struct apple_smc *smc, smc_key ke= y, + int value, int scale) +{ + u64 val; + u32 fval =3D 0; + int exp, neg; + + val =3D abs(value); + neg =3D val !=3D value; + + if (scale > 1) { + val <<=3D 32; + exp =3D 32; + val /=3D scale; + } else if (scale < 1) { + val *=3D -scale; + } + + if (val) { + int msb =3D __fls(val) - exp; + + if (msb > 23) { + val >>=3D msb - 23; + exp -=3D msb - 23; + } else if (msb < 23) { + val <<=3D 23 - msb; + exp +=3D msb; + } + + fval =3D FIELD_PREP(FLT_SIGN_MASK, neg) | + FIELD_PREP(FLT_EXP_MASK, exp + FLT_EXP_BIAS) | + FIELD_PREP(FLT_MANT_MASK, val); + } + + return apple_smc_write_u32(smc, key, fval); +} + +static int macsmc_hwmon_write_key(struct apple_smc *smc, + struct macsmc_hwmon_sensor *sensor, long val, + int scale) +{ + switch (sensor->info.type_code) { + /* 32-bit IEEE 754 float */ + case _SMC_KEY("flt "): + return macsmc_hwmon_write_f32_scaled(smc, sensor->macsmc_key, + val, scale); + /* unsigned 8-bit integer */ + case _SMC_KEY("ui8 "): + return apple_smc_write_u8(smc, sensor->macsmc_key, val); + default: + return -EOPNOTSUPP; + } +} + +static int macsmc_hwmon_read_fan(struct macsmc_hwmon *hwmon, u32 attr, int= chan, + long *val) +{ + if (!(hwmon->fan.fans[chan].attrs & BIT(attr))) + return -EINVAL; + + switch (attr) { + case hwmon_fan_input: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].now, 1, val); + case hwmon_fan_min: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].min, 1, val); + case hwmon_fan_max: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].max, 1, val); + case hwmon_fan_target: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].set, 1, val); + default: + return -EINVAL; + } +} + +static int macsmc_hwmon_write_fan(struct device *dev, u32 attr, int channe= l, + long val) +{ + struct macsmc_hwmon *hwmon =3D dev_get_drvdata(dev); + long min, max; + int ret; + + if (!fan_control || hwmon->fan.fans[channel].mode.macsmc_key =3D=3D 0) + return -EOPNOTSUPP; + + if (channel >=3D hwmon->fan.count || + !(hwmon->fan.fans[channel].attrs & BIT(attr)) || + attr !=3D hwmon_fan_target) + return -EINVAL; + + /* + * The SMC does no sanity checks on requested fan speeds, so we need to. + */ + ret =3D macsmc_hwmon_read_key(hwmon->smc, &hwmon->fan.fans[channel].min, + 1, &min); + if (ret) + return ret; + + ret =3D macsmc_hwmon_read_key(hwmon->smc, &hwmon->fan.fans[channel].max, + 1, &max); + if (ret) + return ret; + + if (val >=3D min && val <=3D max) { + if (!hwmon->fan.fans[channel].manual) { + /* Write 1 to mode key for manual control */ + ret =3D macsmc_hwmon_write_key(hwmon->smc, + &hwmon->fan.fans[channel].mode, 1, + 1); + if (ret < 0) + return ret; + + hwmon->fan.fans[channel].manual =3D true; + } + return macsmc_hwmon_write_key(hwmon->smc, + &hwmon->fan.fans[channel].set, val, 1); + } else if (!val) { + if (hwmon->fan.fans[channel].manual) { + ret =3D macsmc_hwmon_write_key(hwmon->smc, + &hwmon->fan.fans[channel].mode, 0, 1); + if (ret < 0) + return ret; + + hwmon->fan.fans[channel].manual =3D false; + } + } else { + return -EINVAL; + } + + return 0; +} + +static int macsmc_hwmon_read(struct device *dev, enum hwmon_sensor_types t= ype, + u32 attr, int channel, long *val) +{ + struct macsmc_hwmon *hwmon =3D dev_get_drvdata(dev); + int ret =3D 0; + + switch (type) { + case hwmon_temp: + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->temp.sensors[channel], 1000, val); + break; + case hwmon_in: + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->volt.sensors[channel], 1000, val); + break; + case hwmon_curr: + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->curr.sensors[channel], 1000, val); + break; + case hwmon_power: + /* SMC returns power in Watts with acceptable precision to scale to uW */ + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->power.sensors[channel], + 1000000, val); + break; + case hwmon_fan: + ret =3D macsmc_hwmon_read_fan(hwmon, attr, channel, val); + break; + default: + return -EOPNOTSUPP; + } + + return ret; +} + +static int macsmc_hwmon_write(struct device *dev, enum hwmon_sensor_types = type, + u32 attr, int channel, long val) +{ + switch (type) { + case hwmon_fan: + return macsmc_hwmon_write_fan(dev, attr, channel, val); + default: + return -EOPNOTSUPP; + } +} + +static umode_t macsmc_hwmon_fan_is_visible(const void *data, u32 attr, + int channel) +{ + const struct macsmc_hwmon *hwmon =3D data; + + if (fan_control && attr =3D=3D hwmon_fan_target && + hwmon->fan.fans[channel].mode.macsmc_key !=3D 0) + return 0644; + + return 0444; +} + +static umode_t macsmc_hwmon_is_visible(const void *data, + enum hwmon_sensor_types type, u32 attr, + int channel) +{ + switch (type) { + case hwmon_fan: + return macsmc_hwmon_fan_is_visible(data, attr, channel); + default: + break; + } + + return 0444; +} + +static const struct hwmon_ops macsmc_hwmon_ops =3D { + .is_visible =3D macsmc_hwmon_is_visible, + .read =3D macsmc_hwmon_read, + .read_string =3D macsmc_hwmon_read_label, + .write =3D macsmc_hwmon_write, +}; + +/* + * Get the key metadata, including key data type, from the SMC. + */ +static int macsmc_hwmon_parse_key(struct device *dev, struct apple_smc *sm= c, + struct macsmc_hwmon_sensor *sensor, + const char *key) +{ + int ret; + + ret =3D apple_smc_get_key_info(smc, _SMC_KEY(key), &sensor->info); + if (ret) { + dev_err(dev, "Failed to retrieve key info for %s\n", key); + return ret; + } + + sensor->macsmc_key =3D _SMC_KEY(key); + + return 0; +} + +/* + * A sensor is a single key-value pair as made available by the SMC. + * The devicetree gives us the SMC key ID and a friendly name where the + * purpose of the sensor is known. + */ +static int macsmc_hwmon_create_sensor(struct device *dev, struct apple_smc= *smc, + struct device_node *sensor_node, + struct macsmc_hwmon_sensor *sensor) +{ + const char *key, *label; + int ret; + + ret =3D of_property_read_string(sensor_node, "apple,key-id", &key); + if (ret) { + dev_err(dev, "Could not find apple,key-id in sensor node\n"); + return ret; + } + + ret =3D macsmc_hwmon_parse_key(dev, smc, sensor, key); + if (ret) + return ret; + + ret =3D of_property_read_string(sensor_node, "label", &label); + if (ret) { + dev_err(dev, "No label found for sensor %s\n", key); + return ret; + } + + strscpy_pad(sensor->label, label, sizeof(sensor->label)); + + return 0; +} + +/* + * Fan data is exposed by the SMC as multiple sensors. + * + * The devicetree schema reuses apple,key-id for the actual fan speed sens= or. + * Min, max and target keys do not need labels, so we can reuse label + * for naming the entire fan. + */ +static int macsmc_hwmon_create_fan(struct device *dev, struct apple_smc *s= mc, + struct device_node *fan_node, + struct macsmc_hwmon_fan *fan) +{ + const char *label, *now, *min, *max, *set, *mode; + int ret; + + ret =3D of_property_read_string(fan_node, "apple,key-id", &now); + if (ret) { + dev_err(dev, "apple,key-id not found in fan node!\n"); + return -EINVAL; + } + + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->now, now); + if (ret) + return ret; + + ret =3D of_property_read_string(fan_node, "label", &label); + if (ret) { + dev_err(dev, "No label found for fan %s\n", now); + return ret; + } + + strscpy_pad(fan->label, label, sizeof(fan->label)); + + fan->attrs =3D HWMON_F_LABEL | HWMON_F_INPUT; + + /* The following keys are not required to simply monitor fan speed */ + if (!of_property_read_string(fan_node, "apple,fan-minimum", &min)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->min, min); + if (ret) + return ret; + + fan->attrs |=3D HWMON_F_MIN; + } + + if (!of_property_read_string(fan_node, "apple,fan-maximum", &max)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->max, max); + if (ret) + return ret; + + fan->attrs |=3D HWMON_F_MAX; + } + + if (!of_property_read_string(fan_node, "apple,fan-target", &set)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->set, set); + if (ret) + return ret; + + fan->attrs |=3D HWMON_F_TARGET; + } + + if (!of_property_read_string(fan_node, "apple,fan-mode", &mode)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->mode, mode); + if (ret) + return ret; + } + + /* Initialise fan control mode to automatic */ + fan->manual =3D false; + + return 0; +} + +static int macsmc_hwmon_populate_sensors(struct macsmc_hwmon *hwmon, + struct device_node *hwmon_node) +{ + struct device_node *key_node __maybe_unused; + u32 n_current =3D 0, n_fan =3D 0, n_power =3D 0, n_temperature =3D 0, n_v= oltage =3D 0; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "current-") { + n_current++; + } + + if (n_current) { + hwmon->curr.sensors =3D devm_kcalloc(hwmon->dev, n_current, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->curr.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "current-") { + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, + &hwmon->curr.sensors[hwmon->curr.count])) + hwmon->curr.count++; + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "fan-") { + n_fan++; + } + + if (n_fan) { + hwmon->fan.fans =3D devm_kcalloc(hwmon->dev, n_fan, + sizeof(struct macsmc_hwmon_fan), GFP_KERNEL); + if (!hwmon->fan.fans) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "fan-") { + if (!macsmc_hwmon_create_fan(hwmon->dev, hwmon->smc, key_node, + &hwmon->fan.fans[hwmon->fan.count])) + hwmon->fan.count++; + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "power-") { + n_power++; + } + + if (n_power) { + hwmon->power.sensors =3D devm_kcalloc(hwmon->dev, n_power, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->power.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "power-") { + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, + &hwmon->power.sensors[hwmon->power.count])) + hwmon->power.count++; + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "temperature-") { + n_temperature++; + } + + if (n_temperature) { + hwmon->temp.sensors =3D devm_kcalloc(hwmon->dev, n_temperature, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->temp.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "temperature-")= { + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, + &hwmon->temp.sensors[hwmon->temp.count])) + hwmon->temp.count++; + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "voltage-") { + n_voltage++; + } + + if (n_voltage) { + hwmon->volt.sensors =3D devm_kcalloc(hwmon->dev, n_voltage, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->volt.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "volt-") { + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, + &hwmon->volt.sensors[hwmon->volt.count])) + hwmon->volt.count++; + } + } + + return 0; +} + +/* Create NULL-terminated config arrays */ +static void macsmc_hwmon_populate_configs(u32 *configs, u32 num_keys, u32 = flags) +{ + int idx; + + for (idx =3D 0; idx < num_keys; idx++) + configs[idx] =3D flags; +} + +static void macsmc_hwmon_populate_fan_configs(u32 *configs, u32 num_keys, + struct macsmc_hwmon_fans *fans) +{ + int idx; + + for (idx =3D 0; idx < num_keys; idx++) + configs[idx] =3D fans->fans[idx].attrs; +} + +static const struct hwmon_channel_info *const macsmc_chip_channel_info =3D + HWMON_CHANNEL_INFO(chip, HWMON_C_REGISTER_TZ); + +static int macsmc_hwmon_create_infos(struct macsmc_hwmon *hwmon) +{ + struct hwmon_channel_info *channel_info; + int i =3D 0; + + /* chip */ + hwmon->channel_infos[i++] =3D macsmc_chip_channel_info; + + if (hwmon->curr.count) { + channel_info =3D &hwmon->curr.channel_info; + channel_info->type =3D hwmon_curr; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->curr.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, + hwmon->curr.count, + (HWMON_C_INPUT | HWMON_C_LABEL)); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->fan.count) { + channel_info =3D &hwmon->fan.channel_info; + channel_info->type =3D hwmon_fan; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->fan.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_fan_configs((u32 *)channel_info->config, + hwmon->fan.count, + &hwmon->fan); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->power.count) { + channel_info =3D &hwmon->power.channel_info; + channel_info->type =3D hwmon_power; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->power.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, + hwmon->power.count, + (HWMON_P_INPUT | HWMON_P_LABEL)); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->temp.count) { + channel_info =3D &hwmon->temp.channel_info; + channel_info->type =3D hwmon_temp; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->temp.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, + hwmon->temp.count, + (HWMON_T_INPUT | HWMON_T_LABEL)); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->volt.count) { + channel_info =3D &hwmon->volt.channel_info; + channel_info->type =3D hwmon_in; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->volt.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, + hwmon->volt.count, + (HWMON_I_INPUT | HWMON_I_LABEL)); + hwmon->channel_infos[i++] =3D channel_info; + } + + return 0; +} + +static int macsmc_hwmon_probe(struct platform_device *pdev) +{ + struct apple_smc *smc =3D dev_get_drvdata(pdev->dev.parent); + struct macsmc_hwmon *hwmon; + int ret; + + /* + * The MFD driver will try to probe us unconditionally. Some devices + * with the SMC do not have hwmon capabilities. Only probe if we have + * a hwmon node. + */ + if (!pdev->dev.of_node) + return -ENODEV; + + hwmon =3D devm_kzalloc(&pdev->dev, sizeof(*hwmon), + GFP_KERNEL); + if (!hwmon) + return -ENOMEM; + + hwmon->dev =3D &pdev->dev; + hwmon->smc =3D smc; + + ret =3D macsmc_hwmon_populate_sensors(hwmon, hwmon->dev->of_node); + if (ret) { + dev_err(hwmon->dev, "Could not populate keys!\n"); + return ret; + } + + if (!hwmon->curr.count && !hwmon->fan.count && + !hwmon->power.count && !hwmon->temp.count && + !hwmon->volt.count) { + dev_err(hwmon->dev, + "No valid keys found of any supported type"); + return -ENODEV; + } + + ret =3D macsmc_hwmon_create_infos(hwmon); + if (ret) + return ret; + + hwmon->chip_info.ops =3D &macsmc_hwmon_ops; + hwmon->chip_info.info =3D + (const struct hwmon_channel_info *const *)&hwmon->channel_infos; + + hwmon->hwmon_dev =3D devm_hwmon_device_register_with_info(&pdev->dev, + "macsmc_hwmon", hwmon, + &hwmon->chip_info, NULL); + if (IS_ERR(hwmon->hwmon_dev)) + return dev_err_probe(hwmon->dev, PTR_ERR(hwmon->hwmon_dev), + "Probing SMC hwmon device failed\n"); + + dev_info(hwmon->dev, "Registered SMC hwmon device. Sensors:"); + dev_info(hwmon->dev, + "Current: %d, Fans: %d, Power: %d, Temperature: %d, Voltage: %d", + hwmon->curr.count, hwmon->fan.count, + hwmon->power.count, hwmon->temp.count, + hwmon->volt.count); + + return 0; +} + +static const struct of_device_id macsmc_hwmon_of_table[] =3D { + { .compatible =3D "apple,smc-hwmon" }, + {} +}; +MODULE_DEVICE_TABLE(of, macsmc_hwmon_of_table); + +static struct platform_driver macsmc_hwmon_driver =3D { + .probe =3D macsmc_hwmon_probe, + .driver =3D { + .name =3D "macsmc_hwmon", + .of_match_table =3D macsmc_hwmon_of_table, + }, +}; +module_platform_driver(macsmc_hwmon_driver); + +MODULE_DESCRIPTION("Apple Silicon SMC hwmon driver"); +MODULE_AUTHOR("James Calligeros "); +MODULE_LICENSE("Dual MIT/GPL"); +MODULE_ALIAS("platform:macsmc_hwmon"); --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.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 0C5C034F463; Wed, 27 Aug 2025 11:23:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293814; cv=none; b=mn5IWt5cLaudZiDE2SxhrGl/EE4+cJmbRBQt3I9TKSh99iQEYkklMxREXF8ZMW7H09s1A8o9sE8TLQwS4CwMOATXewOACjanjfkIHtJqFTqG3NFJX4JAUJH7Xx7lhVUGSkm1H2vBTHjoT5hHXTiGloiB2iT95K4gF6/dfg0HlnI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293814; c=relaxed/simple; bh=MzVBIMhZBV0HKkjqFJuByEq0RXCQQFero/TsgkVgPbo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D0XeJgGjy7TlmsLGQQnuTPdhCc6N8pZU1ZBvm5YokVgVfAwTPLaQdCvInoAOn45fA+hpROOYZdib8KlYfHKpCMccFvQGa7+8WfmdpvkR+dgJVph35Cbyncjr/3cuYmDwv6N1FMQA+MGsvCUHj7FvZoDNsUZI65EHzbVwlXu+5XI= 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=VtFoYtPZ; arc=none smtp.client-ip=209.85.216.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="VtFoYtPZ" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-3256986ca60so4435864a91.1; Wed, 27 Aug 2025 04:23:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293812; x=1756898612; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=LG7aBav28TifE54xitzYyiUVJ1+ZLQf1Whcw7hJdaHY=; b=VtFoYtPZ34SPE0juMHKDAKTBOHZikGkkA8PIfsSTzvcA3NUWk5WNYKSdHx+rGI9Bpq QGaz37+2ZEo8mpJcoaJ/Khgl5Hp71jE4FX5vURzeYWxOnFfI7Ue7by7VVlAR/nZ9nuJB 4Oz1jvc4tPJ4f48/6SnUOb6INYGpyPe+c1Z3a84aV3fxtbQlYGTnT7AdwnadUPOlKE/b kyvBFCREeIWfE+yy6Vn0/qxrOdpoq3nkatuZvARoucuyOIFVc5OCxgbsARUW1g6xRcaq 9WUP0qoPYF5pUnX+wjgum6tmgX1VbEdY1lE7k3ChnxMojZdANI5ejZQY3ij9VIMsolW+ ognA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293812; x=1756898612; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LG7aBav28TifE54xitzYyiUVJ1+ZLQf1Whcw7hJdaHY=; b=o7dDZ7rwv7HL6doRr2M/bC4znyKCj3pzJngEm7fK7MGGVjrV/OQV08OsQ+RbnHGY7p EbgXrLF7LZvZEH1z3s9yUoT2A7GQ0Ro7L+v+tN/Mj5gjf+HGWFOlZiAIITOJYEzY5lR3 x213eBYDswJHFiuS4gLoHD75V1GANuFJyvM1lwdzcqra/dTruI16ziOT4VeD04D2zzqX DScGJGoPAantDYAPPdAZaZq9IRzPQC+ch6yAwKPJic1uKvUJCKbKsmZ9Yov0HqbXwCcf 7XwYB1KUXGQwnzBTzsd4jGY2ZBEanQCfcP4R8IDpz0JMXHiA02bm07PNPsXofxBG/oDT QaWA== X-Forwarded-Encrypted: i=1; AJvYcCUagAiIjyU/Wos7SDef3Y4hKS/Hbk06TXNSTgZutXoJpCa4H4t+IBLyQ5duhX6X+roymmTJcJKv10GokJA=@vger.kernel.org, AJvYcCWLciIJedwm2fyLwZaLxPAb4iwfGvV+FCDsbfh363FB1MwMpXPnoMHVyRNN/2Uckd69mcIn5fksk0Am@vger.kernel.org, AJvYcCXVWlBAe+8pfuCACddvp0ac65+jAN5EqPym9gtqX1k3NWWS7t8nQjlA3rShy+2+uvdTRkTmlLqsgztQ@vger.kernel.org, AJvYcCXetjIdaRXtpdQ7WOsbizs3xJ8QXdPVRH5SARuSvQRcnHilKki8Gi+7sdtu04P8RPIsLfnp5/kimivG4Cwq@vger.kernel.org, AJvYcCXqeDcnvq3pjz6MUuCcbJSUuq8gzHkBwyjC6rOrmSkRGK9b9JE+Vzf91N+UfBjQ2nFhWJwl9XrNE39S7Ck=@vger.kernel.org X-Gm-Message-State: AOJu0YyEOE0REb9RNlMgkfzyC7Ao+ZZzLxZ38qoR5xpkDjORHNzNx2j1 e9dZaQIerYQk33qJr3No5cU8Lp/5xTONzvli5OMdXEGAeANQpuR+8jwk X-Gm-Gg: ASbGnctyviiRIC5Yi+pxcsxktETyC7nvW++oBHAMBcPxNW+Vbcw85XY+qEG6k7cbJ7V xp/IIVCnlItEVJGWbvhdKDfB2Y1tPitfMPyaqP494IFEaZXKExkH+GukaXloE/VTX4JldFUoEpM U3T2Bi++3mnbAjFeZJwWWXOinKgfNqIu31F2jPIvAGegI/eOpZAIIvYbzZlGqbERGuvEzG+bafI WOeBIBUQT3oBECUwY1sl6X0QaWenD+gemEB8Lpfl2u50kRrA/3JSkDn2tT0I5w7IKzjse0zFQLN H5LNPrufpEh+njiDaJy1G6aGjiwHbkWi2DLe8oAWSKMlmjU1Rd1yQ8J6h8paziPsAMtHzMowy68 9wmrWyU5OajdPIUrW5ZmnkDRv+rCabDjBQa0IFCbC6+3qXznbpsd+TfmfH6RUgGdn3GguqKYsD2 HCsr43jXVNR87PFS47 X-Google-Smtp-Source: AGHT+IGiOxv9V6MjUF8W3nBziWAzOujTYr/YcybLHLky8CSMlEhB3V6Q2vxGNJMmePXDcxETbRO/Dw== X-Received: by 2002:a17:90b:4c02:b0:31e:ec02:229b with SMTP id 98e67ed59e1d1-32515eabb9bmr25336674a91.20.1756293812432; Wed, 27 Aug 2025 04:23:32 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:32 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:40 +1000 Subject: [PATCH v2 06/11] mfd: macsmc: Wire up Apple SMC hwmon subdevice 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: <20250827-macsmc-subdevs-v2-6-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=758; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=MzVBIMhZBV0HKkjqFJuByEq0RXCQQFero/TsgkVgPbo=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjVnT/rJIPuE60z/BsMkY5Gacx1BZhKGvuYro+yPT 3c5xTS5o5SFQYyLQVZMkWVDk5DHbCO2m/0ilXth5rAygQxh4OIUgIlosjEy9L2TsF6fId9yp/VY El/Q7mvv1uUbH3n+v9ni/KuPixomnmRkeBJt73vIvPNu2Z010ltm2P91mTn3zzOJQzuOfT/6kqn IgRUA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the SMC hwmon functionality to the mfd device Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- drivers/mfd/macsmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mfd/macsmc.c b/drivers/mfd/macsmc.c index 59be894460d33afa754927630881532b548b7ad8..286dc150aa6cfdd6d29f7690942= 78daaddabe7c3 100644 --- a/drivers/mfd/macsmc.c +++ b/drivers/mfd/macsmc.c @@ -46,6 +46,7 @@ =20 static const struct mfd_cell apple_smc_devs[] =3D { MFD_CELL_OF("macsmc-gpio", NULL, NULL, 0, 0, "apple,smc-gpio"), + MFD_CELL_OF("macsmc_hwmon", NULL, NULL, 0, 0, "apple,smc-hwmon"), MFD_CELL_OF("macsmc-reboot", NULL, NULL, 0, 0, "apple,smc-reboot"), MFD_CELL_OF("macsmc-rtc", NULL, NULL, 0, 0, "apple,smc-rtc"), }; --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.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 51D6A350D55; Wed, 27 Aug 2025 11:23:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293822; cv=none; b=OVRHHVOX6A2NBcr6IWOA88RKJWdTKUnmPUhGDSGlwpzlo2x5DS4z0otmjjWHlrMs5JNwpQ6cZI2V7GEgNAjd4z56840HmC0JvsjQNj27ViHQLbAKy3GWfaIxUKqrlynC15p1wnoyi6Zm8IRiN6C7gLV8UOp84LhrA0kKlWqxeJo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293822; c=relaxed/simple; bh=aUnhkhc25O58Fa5YqFoMV6tmixZgQOKzbHMDZifR9M0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=m5TGf9m1xNbt91z016qZEdbAN+kVhGQiF9AZESxsy66/vViAwvnkhj063TVg/cL7ULFUDzTKvmNi9Dtccs2jHzw+JY4Ar8UNvqeKpOIp8wUuMxhRZbT8chC6jFEjoZP9a7PJlzzKE3Vv2rWb/ngm6r//nIZsa3NFhWqoLmohPvs= 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=m/nBBTdP; arc=none smtp.client-ip=209.85.214.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="m/nBBTdP" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-24626e06f04so43801935ad.2; Wed, 27 Aug 2025 04:23:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293819; x=1756898619; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=nwFBAcqDyw+S573uPLSPlKVhyOT8QYSk9uAcEnyCHgg=; b=m/nBBTdPaxeprFvTx/X2SYqwW6qnemyHf1JyRoQa/A0MXSohGMHL30ma0mt5fY1djb 9cf9pEm7GcUScw/PL42XDHMWKcp6cc8ARQ5ErbvouNVirBeTHLSdWjMY7KfVbe8QphaV jZ7oeYK9RxxL5ZfRFjjdDJ/QMjMNs/pTxXiGVmAQ2emPbkN/YSHs7bTvtscDDoF2RM4r sttR8BGRUwXzaNkQvFAy8YKIMyXe0837oSGfkUJcU/eJGDlyzQh6+6MBCwYQ4NsyDH9S D5zH0+tEdyQeqX3OxG1C0AFnD5uB9vnA0mVgWKnhyJPn7d4hX6lYxbjJ7NoBvon6905V 8cIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293819; x=1756898619; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nwFBAcqDyw+S573uPLSPlKVhyOT8QYSk9uAcEnyCHgg=; b=qePpn5UJ91radsAFqQJq+hXaG4AO0Hsb4I1ZIEaoKwdIZcg6ps0K024Cs31psRGpZv GSHHGr0Trh5HGfZJOsjVxeOUJmjquSIGzPwycVMmcXIUoNblskA0OKQp5xBc427OpEkN lAgTiDOblapTHP+yVwb/qRWTtTRdR+bz/eE+YGJoB7STMwZ1hfRba4Hp3i+fVBzQDg18 eYhpabbKXzmW9zMd8ehn3DeHUFtTxR9YbxJdgh0UhIVt1OQfOEUqP3bjl2qClS2kt0xn Qq3GfX47eUBt3dy9g/ub1e0Iip2Gdv0vhBovah4eAlFnuynEjBSaLpSs3Y61ydvJBOqZ ijbg== X-Forwarded-Encrypted: i=1; AJvYcCUciFzS5kRLMoqZW/SoHQLQmZk31KAPd+wXyWm7lGCSIuQS8MARE+OEfFtNDeEIzSvAhfFm7ZYXG7kmXtr7@vger.kernel.org, AJvYcCUfcTlK5SWS6zCDEQbstUS+TAsBUWKpubwmHBHIjTeKdtDa5JDY76g+2vlYtaKeDZWvNpg+hYq+OegMG60=@vger.kernel.org, AJvYcCUy+8tzAJyG+YFTWuOdnAlbC+Tk5kbaKSknuoOrG4RmxIUHnmvUn6CX2quJRUcJjdv7omorQBp6A8zEdyk=@vger.kernel.org, AJvYcCWmxj7bQVMHWcpvhoB3AuN9OC5cdq7LookSQmuZg5+hHeN2MxV8kVqrOyQpzKrgbpjNafeUSjKs3T49@vger.kernel.org, AJvYcCXHfF9dMXsn7P7AwNfp+RlGLQ6uEkXDUJRLvp+ik0ao9rpSOa2d2EnMpgstulCA6z+wXKh8FTdUMJbz@vger.kernel.org X-Gm-Message-State: AOJu0YzB+gkBd0Kn9YWCIA1T7/zmY2Y/VTba9obmyndZeeybM4/PuCnB I8HX7GioL4tbik6zuNbfumrzz/QxI0Fm37zO562WuBNruYziktTaav6z X-Gm-Gg: ASbGncuSYrTMWp6gdTE550znhNCp5XdRcfoiEB5JQMvQXRb/1lIRb9sYIiMwhnyrP6M n6jECSuhqr2elS5X3K+FREAb6ttPM51WIuc/eWBvBDnMQjrBVe2l9KYL7uZ5kQDUKyU/S4U9/a5 2n7Vci+RvapIfZ6qEczeAH+hC/OhYLy8kyhnvdc5TlDAgYQEhHaWjlvb1MS0/PSSrZziePb+p4w VEKLTP0Jkg3tlrsOF+qr1nAb9onCDgx18K/36rENwoRLOgOqBqwcp0YNOzbWl3i6gyfLFMRNM3j C6t5UqjLtfDgJTFKSgutvgirIcle8NH3ZKTFhMhdH/NXvzxFzAPyBA6dEzI3EesF20D8XKlFD5B 1VAR/Xq78hSbrmOy8kc66DlMP1VxNQntycK1NuCHplQ8xMRH6sHdoNQRwL8LdgvjtsLEUI83AIM rSZXaq3lvWl/roupiQeAO1LqrSZO4= X-Google-Smtp-Source: AGHT+IFJaHVzCNRC2Yngvs+SjY+onmdAmALaD5W/5FLvmbcKLAz64u5tbi8pbz4jZXP8aGLhEK2vxg== X-Received: by 2002:a17:903:228f:b0:246:61e:b562 with SMTP id d9443c01a7336-2462f1d5493mr247040625ad.59.1756293819391; Wed, 27 Aug 2025 04:23:39 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:39 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:41 +1000 Subject: [PATCH v2 07/11] input: macsmc-hid: New driver to handle the Apple Mac SMC buttons/lid 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: <20250827-macsmc-subdevs-v2-7-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros , Hector Martin X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9195; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=svsWxCO/igBOuKhszf8mGDGeWre4rxAc9E2zZQZ5XiQ=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjW/2qQR8ZqPOafC+tE/P5PH0WetvN4qxElfeyHg5 vru7YOejlIWBjEuBlkxRZYNTUIes43YbvaLVO6FmcPKBDKEgYtTACbi/5WR4UrfG6MzTrVZj3o/ iF22sl7iX3r5u2r3hu13Z2/xsi2bdpyRoU30lZpSpnCG60354nnJLTIFigH1dvIGJuxGLz5s3NL JCgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Hector Martin This driver implements power button and lid switch support for Apple Mac devices using SMC controllers driven by the macsmc driver. In addition to basic input support, this also responds to the final shutdown warning (when the power button is held down long enough) by doing an emergency kernel poweroff. This allows the NVMe controller to be cleanly shut down, which prevents data loss for in-cache data. Signed-off-by: Hector Martin Co-developed-by: Sven Peter Signed-off-by: Sven Peter Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- MAINTAINERS | 1 + drivers/input/misc/Kconfig | 11 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/macsmc-hid.c | 209 +++++++++++++++++++++++++ 4 files changed, 222 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 2eb23522654dd050262eb06e077587030cc335aa..b3b5220fcd0d4bbef67613c8ee9= afa880c0aa45d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2412,6 +2412,7 @@ F: drivers/hwmon/macsmc_hwmon.c F: drivers/pmdomain/apple/ F: drivers/i2c/busses/i2c-pasemi-core.c F: drivers/i2c/busses/i2c-pasemi-platform.c +F: drivers/input/misc/macsmc-hid.c F: drivers/input/touchscreen/apple_z2.c F: drivers/iommu/apple-dart.c F: drivers/iommu/io-pgtable-dart.c diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 0fb21c99a5e3d1230d7f40f99e0c2d360bbe80e8..a430c50e7f63f245bba56bd5260= 26ec7901cf821 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -961,4 +961,15 @@ config INPUT_STPMIC1_ONKEY To compile this driver as a module, choose M here: the module will be called stpmic1_onkey. =20 +config INPUT_MACSMC_HID + tristate "Apple Mac SMC lid/buttons" + depends on MFD_MACSMC + help + Say Y here if you want to use the input events delivered via the + SMC controller on Apple Mac machines using the macsmc driver. + This includes lid open/close and the power button. + + To compile this driver as a module, choose M here: the + module will be called macsmc-hid. + endif diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index d468c8140b93da5bb537e8a3baea2b90e7bb4229..95b8ebbb9ebbe6f3afc9db724d2= ebeba1d75d1a6 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -51,6 +51,7 @@ obj-$(CONFIG_INPUT_IQS7222) +=3D iqs7222.o obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) +=3D keyspan_remote.o obj-$(CONFIG_INPUT_KXTJ9) +=3D kxtj9.o obj-$(CONFIG_INPUT_M68K_BEEP) +=3D m68kspkr.o +obj-$(CONFIG_INPUT_MACSMC_HID) +=3D macsmc-hid.o obj-$(CONFIG_INPUT_MAX77650_ONKEY) +=3D max77650-onkey.o obj-$(CONFIG_INPUT_MAX77693_HAPTIC) +=3D max77693-haptic.o obj-$(CONFIG_INPUT_MAX8925_ONKEY) +=3D max8925_onkey.o diff --git a/drivers/input/misc/macsmc-hid.c b/drivers/input/misc/macsmc-hi= d.c new file mode 100644 index 0000000000000000000000000000000000000000..c7cd56e5c17f08936cc623f7d36= 90f27e05012a5 --- /dev/null +++ b/drivers/input/misc/macsmc-hid.c @@ -0,0 +1,209 @@ +// SPDX-License-Identifier: GPL-2.0-only OR MIT +/* + * Apple SMC input event driver + * Copyright The Asahi Linux Contributors + * + * This driver exposes HID events from the SMC as an input device. + * This includes the lid open/close and power button notifications. + */ + +#include +#include +#include +#include +#include +#include + +/** + * struct macsmc_hid + * @dev: Underlying struct device for the HID sub-device + * @smc: Pointer to apple_smc struct of the mfd parent + * @input: Allocated input_dev; devres managed + * @nb: Notifier block used for incoming events from SMC (e.g. button pres= sed down) + * @wakeup_mode: Set to true when system is suspended and power button eve= nts should wake it + */ +struct macsmc_hid { + struct device *dev; + struct apple_smc *smc; + struct input_dev *input; + struct notifier_block nb; + bool wakeup_mode; +}; + +#define SMC_EV_BTN 0x7201 +#define SMC_EV_LID 0x7203 + +#define BTN_POWER 0x01 /* power button on e.g. Mac Mini chasis pressed */ +#define BTN_TOUCHID 0x06 /* combined TouchID / power button on MacBooks p= ressed */ +#define BTN_POWER_HELD_SHORT 0xfe /* power button briefly held down */ +#define BTN_POWER_HELD_LONG 0x00 /* power button held down; sent just befo= re forced poweroff */ + +static void macsmc_hid_event_button(struct macsmc_hid *smchid, unsigned lo= ng event) +{ + u8 button =3D (event >> 8) & 0xff; + u8 state =3D !!(event & 0xff); + + switch (button) { + case BTN_POWER: + case BTN_TOUCHID: + if (smchid->wakeup_mode) { + if (state) + pm_wakeup_hard_event(smchid->dev); + } else { + input_report_key(smchid->input, KEY_POWER, state); + input_sync(smchid->input); + } + break; + case BTN_POWER_HELD_SHORT: /* power button held down; ignore */ + break; + case BTN_POWER_HELD_LONG: + /* + * If we get here the power button has been held down for a while and + * we have about 4 seconds before forced power-off is triggered by SMC. + * Try to do an emergency shutdown to make sure the NVMe cache is + * flushed. macOS actually does this by panicing (!)... + */ + if (state) { + dev_crit(smchid->dev, "Triggering forced shutdown!\n"); + if (kernel_can_power_off()) + kernel_power_off(); + else /* Missing macsmc-reboot driver? */ + kernel_restart("SMC power button triggered restart"); + } + break; + default: + dev_warn(smchid->dev, "Unknown SMC button event: %04lx\n", event & 0xfff= f); + } +} + +static void macsmc_hid_event_lid(struct macsmc_hid *smchid, unsigned long = event) +{ + u8 lid_state =3D !!((event >> 8) & 0xff); + + if (smchid->wakeup_mode && !lid_state) + pm_wakeup_hard_event(smchid->dev); + + input_report_switch(smchid->input, SW_LID, lid_state); + input_sync(smchid->input); +} + +static int macsmc_hid_event(struct notifier_block *nb, unsigned long event= , void *data) +{ + struct macsmc_hid *smchid =3D container_of(nb, struct macsmc_hid, nb); + u16 type =3D event >> 16; + + switch (type) { + case SMC_EV_BTN: + macsmc_hid_event_button(smchid, event); + return NOTIFY_OK; + case SMC_EV_LID: + macsmc_hid_event_lid(smchid, event); + return NOTIFY_OK; + default: + /* SMC event meant for another driver */ + return NOTIFY_DONE; + } +} + +static int macsmc_hid_probe(struct platform_device *pdev) +{ + struct apple_smc *smc =3D dev_get_drvdata(pdev->dev.parent); + struct macsmc_hid *smchid; + bool have_lid, have_power; + int ret; + + /* Bail early if this SMC neither supports power button nor lid events */ + have_lid =3D apple_smc_key_exists(smc, SMC_KEY(MSLD)); + have_power =3D apple_smc_key_exists(smc, SMC_KEY(bHLD)); + if (!have_lid && !have_power) + return -ENODEV; + + smchid =3D devm_kzalloc(&pdev->dev, sizeof(*smchid), GFP_KERNEL); + if (!smchid) + return -ENOMEM; + + smchid->dev =3D &pdev->dev; + smchid->smc =3D smc; + platform_set_drvdata(pdev, smchid); + + smchid->input =3D devm_input_allocate_device(&pdev->dev); + if (!smchid->input) + return -ENOMEM; + + smchid->input->phys =3D "macsmc-hid (0)"; + smchid->input->name =3D "Apple SMC power/lid events"; + + if (have_lid) + input_set_capability(smchid->input, EV_SW, SW_LID); + if (have_power) + input_set_capability(smchid->input, EV_KEY, KEY_POWER); + + ret =3D input_register_device(smchid->input); + if (ret) { + dev_err(&pdev->dev, "Failed to register input device: %d\n", ret); + return ret; + } + + if (have_lid) { + u8 val; + + ret =3D apple_smc_read_u8(smc, SMC_KEY(MSLD), &val); + if (ret < 0) + dev_warn(&pdev->dev, "Failed to read initial lid state\n"); + else + input_report_switch(smchid->input, SW_LID, val); + } + + if (have_power) { + u32 val; + + ret =3D apple_smc_read_u32(smc, SMC_KEY(bHLD), &val); + if (ret < 0) + dev_warn(&pdev->dev, "Failed to read initial power button state\n"); + else + input_report_key(smchid->input, KEY_POWER, val & 1); + } + + input_sync(smchid->input); + + smchid->nb.notifier_call =3D macsmc_hid_event; + blocking_notifier_chain_register(&smc->event_handlers, &smchid->nb); + + device_init_wakeup(&pdev->dev, 1); + + return 0; +} + +static int macsmc_hid_pm_prepare(struct device *dev) +{ + struct macsmc_hid *smchid =3D dev_get_drvdata(dev); + + smchid->wakeup_mode =3D true; + return 0; +} + +static void macsmc_hid_pm_complete(struct device *dev) +{ + struct macsmc_hid *smchid =3D dev_get_drvdata(dev); + + smchid->wakeup_mode =3D false; +} + +static const struct dev_pm_ops macsmc_hid_pm_ops =3D { + .prepare =3D macsmc_hid_pm_prepare, + .complete =3D macsmc_hid_pm_complete, +}; + +static struct platform_driver macsmc_hid_driver =3D { + .driver =3D { + .name =3D "macsmc-hid", + .pm =3D &macsmc_hid_pm_ops, + }, + .probe =3D macsmc_hid_probe, +}; +module_platform_driver(macsmc_hid_driver); + +MODULE_AUTHOR("Hector Martin "); +MODULE_LICENSE("Dual MIT/GPL"); +MODULE_DESCRIPTION("Apple SMC HID driver"); +MODULE_ALIAS("platform:macsmc-hid"); --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B37FA350D5E; Wed, 27 Aug 2025 11:23:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293828; cv=none; b=BPNYRjlGBeFc5W8iG/9SrDgzHJSxifLtHkTSjUX8/ffw5QbIMY4dCF5Eut2HwfUk2EYN2ugXsY0tGJmDT7nt8nEpIwXrzgfLzXBkJ7zWuWgkFtoipLapFpX9ytAFFlViVdCj0x/qPjMyeVdpAwIpJLN3h6Yy2OFtxGdOJqfAnF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293828; c=relaxed/simple; bh=xCTwt54W2CQBJO75F2Lvz2paGIMG/Mf6mnXKlTqhQ4M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=erYVIal19DR3XnUtyfGcGSgHvanVUmm8aizDb+CStZGJXVjH6/twoTptJAQdJn/PsjB2bWp3vY5cQuWWE5oMZihvLOXuY/spb6k0kvpVRBl7uTmEaf2pY4MV/1+S5GHbtIJwxwGUsjIHv+CFrQkrckRsLmY5rbxMawVEzj8FDTc= 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=V+A2dlTn; arc=none smtp.client-ip=209.85.210.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V+A2dlTn" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-7718408baf7so3590955b3a.3; Wed, 27 Aug 2025 04:23:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293826; x=1756898626; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=z529y29TIOOGxyh61oY2BQwbjfmwK/ol2lbcYwZ434w=; b=V+A2dlTn7Rrupqzuhe/VJddCFThUre0miaNsIfW5PYOnLg6ZYkxKEFFDVONf1P9YIZ GkvvZoLqWcet2iYf1u/5eLOAiVCANDQla9veV9e67tLuV3CfnfBi9Usk1GUAZ/86GkNV eE7l145KtXcRejjW6ausTEHQGxDJ1uhClnBoWxPW8SOWcejlcarx9oLFnTIr+jDdyTjr it5J/UikozrIXDbVtOqWXVuq1qvBthgajXvcpgcXdjOyvkqX3z9rfzx+hXzA1ELi1wBU J+dvY3NIp+yXAHrNzYK1zL2zTeov1KI5xqqIVhPHReXAEhHL5c9YKEMioxavEhzJ4FMw SSFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293826; x=1756898626; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=z529y29TIOOGxyh61oY2BQwbjfmwK/ol2lbcYwZ434w=; b=DoEZ8wPQ5eeZE5RqrwZzNPbtPOuopPuFcwrOWfm99PiF3c0OmPv6Obie/DHkXEmcgV EnKhdfEFdCJ/n8ojIJrU73r3eFYCfMLXbP2owd7RXnQMLIpRbdo+lric+zVgVjBjyafz U48AfEE5p6hmMjL4k796l6FD28mCQcwgKuq6KcI34QMYSOuYuP/z6ErQaCa8tp6UI7gv Uanv4FChOaFsTLaZpMa+kcYgnxLMJFHupwW6GhXGMuV8tjdBxhKFyumH1ytGmtBxJR35 DxjlLnw7vP5kN5O2qvSZKEqn4a9ROnl4s5cfsSYku8o/oVZSuPUInjOcpMMPha5a8Zrc bh6Q== X-Forwarded-Encrypted: i=1; AJvYcCU85QbwDC5SmLcCs9dWhwrDXD9unF+GKIqu868yTRBZH+e/hrMp2zOy/dSdmgfbCXSzR1tg13xMxpgoj/Q=@vger.kernel.org, AJvYcCVsXTzl9He6zrQ3gQRD+6B4LqAf7i5E4AzBclA7li/Es6bji/ZC4a7aJtivaJPTLdO8BNcRlf5FjSTkG0tA@vger.kernel.org, AJvYcCW00h5kpxFpoLhTi2s50eNqeSDt6lpDxeI86dRqW2yZZtJvh6ycNDsRolvPiN+Asp4GGj1O6M8kYmvEDg4=@vger.kernel.org, AJvYcCWGV5vl8J7WQctmAIbiGL1RfMNng6IlNjRKEnuH/Ld9ssy7WswS0xf7Lt5d+CJwl+WbEnLZjYf5qKSh@vger.kernel.org, AJvYcCXkIr8xhfOjDWnRHuD9Boc2K9fUDRpYE9O4ji5y1Et2ugMdYoPLy6b4q2Cl4Tdu7o7a5bp5akd83SOA@vger.kernel.org X-Gm-Message-State: AOJu0Yz93YDHjPmTz0NqWiAi+VPAOJhi0fTjyEczfuU3CyBejbP5Iylc AFHnOVLVuBLxGWHf6SF8DW+WQsvcE4fEp4nSDi9/5gyKJmHXPAydCJBK X-Gm-Gg: ASbGnculYm6qymG3vYETlNgnHY+9fvGoMlA7Fqig2EmqeEWo5gv6+pTMocuQ0DEYryb Z5OM1yc9kYNzdUD0mHkE+eeMkSKZWNWdhHxaanC8/eqojoBm26dfgLDFaEwH+njTxUG/jYGF5JK Y1anlaXKuyDh8CN1ZITB5/HXddpSA3RBpqv94+RQS/hj1IVIekg3VXJGb8RRlxnENKJrNYvn3hG nDIT41mfgCiIHFphvieYmQFp3yTh1/pB/D0LzBI9ma0U79Jz8XVXuoTtcYsdxTorJ1vqZlO2hyq CbVoAzaXBNt8fHMhjOrrhrxnMOc5Cfzv6QJO7P1Co9P4F0AyY1rvmaHyzyKMfUb+vZ8kvcTPV5S A7CvDwVtwEFJXIBUTYvtLCNzEuUsYwj/Vpfjp1KDXdy3D/6I/BaHtc27egI/fLWxqbtfxWq0A82 dn34+w5uHUThOAlEeO X-Google-Smtp-Source: AGHT+IG1I34LBUT0TKwrF5NX7fXsjRB/PM9YKtCnoAQa/Vc6sojIb33NnLwLORwxlipIekaFiHkkCQ== X-Received: by 2002:a05:6a20:72a0:b0:243:15b9:7660 with SMTP id adf61e73a8af0-24340d6e2ddmr30868600637.58.1756293826022; Wed, 27 Aug 2025 04:23:46 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:45 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:42 +1000 Subject: [PATCH v2 08/11] mfd: macsmc: Wire up Apple SMC HID subdevice 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: <20250827-macsmc-subdevs-v2-8-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=747; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=xCTwt54W2CQBJO75F2Lvz2paGIMG/Mf6mnXKlTqhQ4M=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjVrS4q3nWUJLd3+9z83o8Gb9w8fnvFzvL7gvVyM+ PLnXb4HOkpZGMS4GGTFFFk2NAl5zDZiu9kvUrkXZg4rE8gQBi5OAZjIN2FGhktv57J8Yqkzq9oQ 5RByS8mkQ6ZLSuX01I/+idKtkRcitBkZPisUKE+Zo3y1/VqA0Mon/Xapaf3bOKWX5m7ivGOp3jS NDwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the new SMC HID function to the mfd device Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- drivers/mfd/macsmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mfd/macsmc.c b/drivers/mfd/macsmc.c index 286dc150aa6cfdd6d29f769094278daaddabe7c3..893fc47d62b2c956d966d184189= 5a3fa2b9a3005 100644 --- a/drivers/mfd/macsmc.c +++ b/drivers/mfd/macsmc.c @@ -45,6 +45,7 @@ #define SMC_TIMEOUT_MS 500 =20 static const struct mfd_cell apple_smc_devs[] =3D { + MFD_CELL_NAME("macsmc-hid"), MFD_CELL_OF("macsmc-gpio", NULL, NULL, 0, 0, "apple,smc-gpio"), MFD_CELL_OF("macsmc_hwmon", NULL, NULL, 0, 0, "apple,smc-hwmon"), MFD_CELL_OF("macsmc-reboot", NULL, NULL, 0, 0, "apple,smc-reboot"), --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80F0734F490; Wed, 27 Aug 2025 11:23:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293835; cv=none; b=uHsrXqj5Cs1NUVHaemBUoZ3DYtyUB/6pMbp+Ff+s6vC4L/tYYORlIPRqphVR3M1CuIpgr9q3B1Mv07DkDHKEY4QRWpCijoDOhXYOQZIUilijUMn6JE0faNl9iLUhAfaVSJ4xx4WMBNxbIGk8IJ41x3pYaOSo96zr8XHURSSN8TY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293835; c=relaxed/simple; bh=AMId3i8H8OBZdoaStosH/aFpEZPyxqzEbX2+87IwfLw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d5/dHhLHOAOd5FZrAAsH8pq/p6NEZrWtDyUGalYxVpcHXsJsi2OXwnNGmDuEV8nLR1lfYCSjZyWJzGqgbMDJAXfvQ/v609T4/MEHzl6EOdu1p3pwjvJxNhu8j+jbaHLQ/481jDnWH9lLwQT1e5BBiJGzVmD3jhQVaRt27c9JPy0= 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=Tmtj8fUq; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Tmtj8fUq" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-76e4fc419a9so6245711b3a.0; Wed, 27 Aug 2025 04:23:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293833; x=1756898633; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=oLR320uivWEsvQHsql0GANw87zZYqq4o9nWMA6bfLUg=; b=Tmtj8fUqF6Q6ytlrdqC7TgvjUv0EB8PvpUNJRlX7OKR4N1dUnr+fS2Eq8XfoUtPDwY X505vrRAu42Szv7o5SIyE1HMudhUO2Engvs+aRGp3Y28HXW2mqINRbmampCAdTtO8dEe 14ogUjZ/7AxFtE+2MccZN8sHOyr+OKAA1mfSwWkBvMzDRLXRuVQ1OMLHwClfRj5fSNCB qg5ql/pzc19N3O1d5duuWoQKuohMw8f3nl1Duo2ZQpi/8Ba2M1Ds0cuT8+1K39t9k1hO kCEHdUJP/x2qD56d+MzSvIXXafJB+r/aje7LQ2Ca0GRV1gbtUEZjS36bFXuVbwq9xfTe y5TQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293833; x=1756898633; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oLR320uivWEsvQHsql0GANw87zZYqq4o9nWMA6bfLUg=; b=XCRNJDU7dT4rRCgqsHs0FALRz+J4PNFXPhqrCxDbo+lXFOxJNnIGVYzUJDH1PCw8cl Csqo02QHaJJp8uAkaeGLguBSkMBs9APY11PWBx56S10HD8rCpHhqD/AM5W3kKkLRdhqY bRfwG6VOYsmr99vvkujIAVv5Ye868YLyKQKIJEwQWWd+eDohgCLJZFLvhw7e3XRKqDK2 Wez/j8+WjIGqAyFGEwTK5y3kUEA8f0+s7n7EBBgL3AdGet94qiW2TSVw7qU0hhP1oySL NTg1d/rOhpdELQs6Zgkz0Tjudovi48QG0QssmmvhtuerTIB/qcbMR1ilQVf36xB6g0ck WrtA== X-Forwarded-Encrypted: i=1; AJvYcCUkTJgt8xo1MwGchE4qKLtkDn56i5g1E8MObiX5DpINdYZB2jr1jQjEaExUoRHJAM8sKWRaXc8WFiv0Fuz1@vger.kernel.org, AJvYcCUp7J0EYUjWs9GEMZUvrLg6H+wck04jTr068XUYOAoc0/RaWpTolbPCsN0Ssyaja4Fs66pMoQq+aZ+yxRs=@vger.kernel.org, AJvYcCWS3OLP3cabpXy8Ten+No7LeuDyrk1p5iXH1MuSh5EAA08/Mu7nzyMUusDEG0CAqGfuCwhkWAJxQzJE@vger.kernel.org, AJvYcCWV/dSoNia+et+75rhZ4j24rq+mhgLbXdLnV5qtm3flnalG11736NuVwohn9zvjlmeyrQ2Oi9wexY32@vger.kernel.org, AJvYcCWnRb84fJUyO4RVXXshKAAoAlwlwqVozgXn/K8eK7LT1yxCRUkSk2YLeO3GmyA7mNpG3xpLVe+T3OFeGvQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwSHA0yn60HX//rH7Kw0FmmpkjzHM9ZxMwsXjrgZGxl8HuCtwWx dZ2I+NLvRQ9+LEoSzNzlG5t4RwVaZPamHiYOuYmhcTwD86yZQkzwofRd X-Gm-Gg: ASbGncsZKWxG8AtVhBm7IsH5Nv3t57/MoajSUTwtFktRFFftKvEJL0p/tndWUGE8W+V veWK5pOxIC+CSydQYQYAB8KFLjDBBDnUg2G1J8DurFMBMsLv69NlK1cCuPJAHuxzNT+NNpl+UWF ZfatFi6+nkaNMdBn42OLHwQVRvKirLr3hgNf/35302bewgZsOJbyQTKSiQZF0n4MrIXkZG9LajE v0V9vR6q8poPhy6U1KVsF6c4bN+JpxOVIdjqKVIsSdo56Y3us+u/R9q9CpUvJnd9RVgmJYFG28k pSE0b5YeDrqjNHn8P2QCU54+qVfuQ35uKIKx8k9dDT5NUj601FsDQyrGgmDQ0QSL2SCbwsf7KzY kIK2LNq43mVeXNEGsKT0xnqpnDGzxoQCMzagbCss1BLz60vX1zYwnJCiFB1/fejULBU7CDF9/m7 u9dcQ20irASbrQVDuL X-Google-Smtp-Source: AGHT+IHfA23MVka1pim5iO9MIi/hUTPNfKxTfEhzgcBOMzsCRxhk5FUuT41RoiPAGs19Y4m9Q2CLXw== X-Received: by 2002:a05:6a20:3d1c:b0:23d:c4c6:f406 with SMTP id adf61e73a8af0-24340e06848mr28004504637.43.1756293832695; Wed, 27 Aug 2025 04:23:52 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:52 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:43 +1000 Subject: [PATCH v2 09/11] arm64: dts: apple: t8103,t600x,t8112: Add SMC RTC node 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: <20250827-macsmc-subdevs-v2-9-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2246; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=EiTtOkgByvBW2d6W0dQC39cvCK54i0Vicx+v7DF1xC0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjUfqK9yNp7KPavVUfxa7HWRk22b5T/YBDZPkz4gs WH+q0WdHaUsDGJcDLJiiiwbmoQ8Zhux3ewXqdwLM4eVCWQIAxenAEzEM4Lhf2nCvY7aB58Uv4v6 T3+7ce3SvVZX7+sWrFhSG/9s4Z76PbYMfzjfembO15MyPnt89Y6Q3f37jqjL8hRx+joxb9V9lPh sMzcA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 From: Sven Peter The System Manager Controller of all M1/M2 SoCs supports the RTC sub-device. Reviewed-by: Neal Gompa Signed-off-by: Sven Peter Signed-off-by: James Calligeros --- .../arm64/boot/dts/apple/t600x-die0.dtsi | 6 ++++++ arch/arm64/boot/dts/apple/t8103.dtsi | 6 ++++++ arch/arm64/boot/dts/apple/t8112.dtsi | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t600x-die0.dtsi b/arch/arm64/boot/dt= s/apple/t600x-die0.dtsi index 3603b276a2abcfa6a730f58d5c6b9914f22f00b0..f715b19efd1679e5cd384a967d6= e2a7c261ee679 100644 --- a/arch/arm64/boot/dts/apple/t600x-die0.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-die0.dtsi @@ -44,6 +44,12 @@ smc_reboot: reboot { nvmem-cell-names =3D "shutdown_flag", "boot_stage", "boot_error_count", "panic_count"; }; + + rtc { + compatible =3D "apple,smc-rtc"; + nvmem-cells =3D <&rtc_offset>; + nvmem-cell-names =3D "rtc_offset"; + }; }; =20 smc_mbox: mbox@290408000 { diff --git a/arch/arm64/boot/dts/apple/t8103.dtsi b/arch/arm64/boot/dts/app= le/t8103.dtsi index 8b7b27887968741b745651e5133dffa7d8d20f6d..59f2678639cf47f469dc699c0ec= b5b9e50a45ab1 100644 --- a/arch/arm64/boot/dts/apple/t8103.dtsi +++ b/arch/arm64/boot/dts/apple/t8103.dtsi @@ -916,6 +916,12 @@ smc_reboot: reboot { nvmem-cell-names =3D "shutdown_flag", "boot_stage", "boot_error_count", "panic_count"; }; + + rtc { + compatible =3D "apple,smc-rtc"; + nvmem-cells =3D <&rtc_offset>; + nvmem-cell-names =3D "rtc_offset"; + }; }; =20 smc_mbox: mbox@23e408000 { diff --git a/arch/arm64/boot/dts/apple/t8112.dtsi b/arch/arm64/boot/dts/app= le/t8112.dtsi index 3f79878b25af1f7760088aa552589494d67347fb..6bc3f58b06f703ed79578e89a03= 0929a18d57796 100644 --- a/arch/arm64/boot/dts/apple/t8112.dtsi +++ b/arch/arm64/boot/dts/apple/t8112.dtsi @@ -919,6 +919,12 @@ smc_reboot: reboot { nvmem-cell-names =3D "shutdown_flag", "boot_stage", "boot_error_count", "panic_count"; }; + + rtc { + compatible =3D "apple,smc-rtc"; + nvmem-cells =3D <&rtc_offset>; + nvmem-cell-names =3D "rtc_offset"; + }; }; =20 smc_mbox: mbox@23e408000 { --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.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 1D4D6356918; Wed, 27 Aug 2025 11:23:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293842; cv=none; b=ieBMdO8nGbxj4JAbBq75K2mQ5qweM/yX+BvzpBzBI5z57T+tPksHDmKGJnLS15OvyKz+j9xo0836IBrs8lemwWOkn0m6cLz8EY55jTIdfuLzsNR+L8Vyj5wCTG2t2qvb9b8CAXklR62P1IY8TUf4AnHt2ZIywK6sfHa80x2FO6c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293842; c=relaxed/simple; bh=Z3EXP1oVeh319IixHdWS8udDApNWGWy/kj1Vo/lfXn8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZJc6lFLlR+B6DHcLh/OpkKfbleP+sTIAdkTxmVpcgn64WwdrEILfoU+SS2rZziziyYC6pghgm1bAt0dBaqvoFqA2avqZxnSjFjd4OPtPIJKumWRQHn4D1CJyXdb8Qd7xmT+3tFgpQtJzJnRTA0IwsusuAQ2cvNRLVZZva/tuOog= 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=FN1lOhQ1; arc=none smtp.client-ip=209.85.210.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="FN1lOhQ1" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-771e4378263so2762602b3a.0; Wed, 27 Aug 2025 04:23:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293839; x=1756898639; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=WT7vuW0qUznHG/v/TvOsEbv5pheChsn5Mb8ce2CH7oc=; b=FN1lOhQ1Hw5fG0qinMFN+ArlfGoqDh9BWpPG/+b0W3I+CJ4eQsOWlAKSlGwaaNUUM2 W7sAkiOP+8isHajA1GUb5nxcj9Wjz0N8MVoxkQ4F3sA/hTxeNRO9+ST04+SgDhYfbV7t K6M/5n36PhVX6fUdnv6KyalL6owOdNhVbt/MtI9lRe7KU0q4GS4pWs3+3SalFPC2j59E vbR/bUw8CjnRzUAzj3j2nb/qQeFGQuIHwYh+w2OpJ39kLQFFV6u2rcmX4qA3RQKD4msQ F+xL56j+udXSeS1vqy6wJ5T8ejGUsr0UVFIp3+PyqAu0rdLaB8zxqkCQubZMkz3GSdoR 9DBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293839; x=1756898639; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WT7vuW0qUznHG/v/TvOsEbv5pheChsn5Mb8ce2CH7oc=; b=E+6/bvdCdyC1u+rImw7FxvUU9/svlw9G6hhmd4L6/EfqUnBHa5jSYVFJoTaPwdtblz GT3130rWZzG5iW3b6CfIBl+tLVPX6jXMlvHP/dKaSFNzCA/un2JbMTDgqM9pmgJZ0qz5 FL62GovL6lYXSFC/2Dp+3wmcjQL7OzqNVwGUSsFt/UNoosaMOr/MSGAoJquSso4qttaA EEshztuTXG14dlXmcVUVY80OzWSPDNarOdm1tLGTKLffYT2lan1f6sLurbj8Bb3D0kRR eEYblGaM1Ds1X+VL5wJjjIXtuTE2JCZ38cVg464LxKH3oMu7FCl0Ag9BuM3FfyN7E6b/ o6Eg== X-Forwarded-Encrypted: i=1; AJvYcCUKIJNj0xGbdYieReXbaPiKkU4sSzbUpDlT96S5zMOT/BPydw9EE3PDc3pxzsxAffdKUBgc8Qv+7sMKWeM=@vger.kernel.org, AJvYcCVczvn6N9a9HLiLv6SBfD9QktbRJXAzPSHI+Qqksj1j/Ru1z7VWn2rceJ3HQDxJsKXt1/C/WglnqOj9@vger.kernel.org, AJvYcCVhHGHp40+LY2dgflTzu8L0sn/+xpZl3hC1EXKBCS3AjIZbjNWqnAf6HdTepGf0VAnLXDyo8svv22Dx@vger.kernel.org, AJvYcCWiaySCcVFTb/Jp7j8FQMzx6e/Y4JeB9K28xz8dvcxKqXfm/Qe/m0B84rcj+evz5DVVMsWm+O8iuGskGyqD@vger.kernel.org, AJvYcCWwZSlYvz/A5mBsV0glqGl1/7ph+woTzFRgQz5zQ4ufcl1zFMHuyqIpT3t5VxmMrUhOHByLzBdMSp+bRD4=@vger.kernel.org X-Gm-Message-State: AOJu0Yzl4j0Ji1ySevGUHQjGnFjYKYNvlWpqgNddcVpj/1MFTajAbKzx 9WFraucfQjjdM9v/nsJ45bWS6SAhZ6uF7Yfi1iE67yJbdOlxBLy4MPhU X-Gm-Gg: ASbGnctUIn6smwYBkgI6AgSWHXZpCJmIo068RN/t2y+2llLxtlX8m8wANF0mi5Miq4I 2gZNq1fwDm/UUqp4Gts12D5xAtAVQxaRzA03cTqCpJqr5frUJbISgIExBX0kfq7gPu7Gd8ANCcZ q/Ha87VJTBm/VPuQPZkxe4p1jXl67Md/WgquRiMqkU7CXbsZyJi60vRxN0FaJoGycDy5LgnZyaW NSS0xXCEL6S24/ZUBpMYa6bjoHhT8R8OBsl/gZfanNI15zh95Na/GYjAzgq6A0zFFkKJp106uSv KQ+2zt0s8KXKJrRHpFAXKXKj97LFVp89cEfPHcIy3e16Hpj8Q+tF9S5vJ/V8yG85YtrU5EfGreK IxQxSgml6CPesdwuIDQzHtuB0ErcsNnF1SurA5AsJ6cRxvTnhcoCjANjKjW7fKlzLM/7webkxKV yNmwVrG2oq3+/CCXhK X-Google-Smtp-Source: AGHT+IHcxdwpHkhgx4bx6bhCCrhmDPbhWf5p9x/BFk1Qsu0LkH89VOH4xmT8ZfSWgNKLsJylxiDZxw== X-Received: by 2002:a17:903:1ac6:b0:248:614c:b8ca with SMTP id d9443c01a7336-248614cbc2emr74240555ad.48.1756293839333; Wed, 27 Aug 2025 04:23:59 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:23:59 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:44 +1000 Subject: [PATCH v2 10/11] arm64: dts: apple: Add common hwmon sensors and fans 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: <20250827-macsmc-subdevs-v2-10-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5045; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=Z3EXP1oVeh319IixHdWS8udDApNWGWy/kj1Vo/lfXn8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjW772R/fPBE58YpzUVnanXkNGvM6h+v9QhJrJoX0 erR9DWgo5SFQYyLQVZMkWVDk5DHbCO2m/0ilXth5rAygQxh4OIUgIksl2D473I3yzi8O72BMZbd 7MfEY2c85P5Gqk7UTp2zUVGptp9lDyPD/Tjt3Y/zf5r0HU2Q6bvscmfhNFe/7jNlfRk8nuu3npV hBgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Each Apple Silicon device exposes a unique set of sensors and fans, however some have been found to be reliably common across devices. Add these as .dtsi files so that they can be combined with any device-specific sensors without excessive repetition. Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- .../boot/dts/apple/hwmon-common.dtsi | 37 +++++++++++++++++++++++++ .../boot/dts/apple/hwmon-fan-dual.dtsi | 24 ++++++++++++++++ arch/arm64/boot/dts/apple/hwmon-fan.dtsi | 19 +++++++++++++ .../boot/dts/apple/hwmon-laptop.dtsi | 35 +++++++++++++++++++++++ .../boot/dts/apple/hwmon-mac-mini.dtsi | 17 ++++++++++++ 5 files changed, 132 insertions(+) diff --git a/arch/arm64/boot/dts/apple/hwmon-common.dtsi b/arch/arm64/boot/= dts/apple/hwmon-common.dtsi new file mode 100644 index 0000000000000000000000000000000000000000..bac4e44d3f9892fe8ad04125e47= dcccb2bcf57a0 --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-common.dtsi @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Hardawre monitoring sensors expected to be found on all Apple Silicon d= evices + * + * Copyright The Asahi Linux Contributors + */ + +&smc { + hwmon { + compatible =3D "apple,smc-hwmon"; + + current-ID0R { + apple,key-id =3D "ID0R"; + label =3D "AC Input Current"; + }; + power-PSTR { + apple,key-id =3D "PSTR"; + label =3D "Total System Power"; + }; + power-PDTR { + apple,key-id =3D "PDTR"; + label =3D "AC Input Power"; + }; + power-PMVR { + apple,key-id =3D "PMVR"; + label =3D "3.8 V Rail Power"; + }; + temperature-TH0x { + apple,key-id =3D "TH0x"; + label =3D "NAND Flash Temperature"; + }; + voltage-VD0R { + apple,key-id =3D "VD0R"; + label =3D "AC Input Voltage"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-fan-dual.dtsi b/arch/arm64/boo= t/dts/apple/hwmon-fan-dual.dtsi new file mode 100644 index 0000000000000000000000000000000000000000..f81047725de473b85d8f337af63= fa10d3aa827a0 --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-fan-dual.dtsi @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * SMC hwmon fan keys for Apple Silicon desktops/laptops with two fans + * + * Copyright The Asahi Linux Contributors + */ + +#include "hwmon-fan.dtsi" + +&smc { + hwmon { + fan-F0Ac { + label =3D "Fan 1"; + }; + fan-F1Ac { + apple,key-id =3D "F1Ac"; + label =3D "Fan 2"; + apple,fan-minimum =3D "F1Mn"; + apple,fan-maximum =3D "F1Mx"; + apple,fan-target =3D "F1Tg"; + apple,fan-mode =3D "F1Md"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-fan.dtsi b/arch/arm64/boot/dts= /apple/hwmon-fan.dtsi new file mode 100644 index 0000000000000000000000000000000000000000..ae5e1a54b6b780ff880ca0a39bc= 2712d8cbafbe4 --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-fan.dtsi @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * hwmon fan keys for Apple Silicon desktops/laptops with a single fan. + * + * Copyright The Asahi Linux Contributors + */ + +&smc { + hwmon { + fan-F0Ac { + apple,key-id =3D "F0Ac"; + label =3D "Fan"; + apple,fan-minimum =3D "F0Mn"; + apple,fan-maximum =3D "F0Mx"; + apple,fan-target =3D "F0Tg"; + apple,fan-mode =3D "F0Md"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-laptop.dtsi b/arch/arm64/boot/= dts/apple/hwmon-laptop.dtsi new file mode 100644 index 0000000000000000000000000000000000000000..227dc5065bb2b74d9699019b71e= ed90501e1b4b1 --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-laptop.dtsi @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Hardware monitoring sensors expected on all Apple Silicon laptops + * + * Copyright The Asahi Linux Contributors + */ + +&smc { + hwmon { + power-PHPC { + apple,key-id =3D "PHPC"; + label =3D "Heatpipe Power"; + }; + temperature-TB0T { + apple,key-id =3D "TB0T"; + label =3D "Battery Hotspot Temperature"; + }; + temperature-TCHP { + apple,key-id =3D "TCHP"; + label =3D "Charge Regulator Temperature"; + }; + temperature-TW0P { + apple,key-id =3D "TW0P"; + label =3D "WiFi/BT Module Temperature"; + }; + voltage-SBAV { + apple,key-id =3D "SBAV"; + label =3D "Battery Voltage"; + }; + voltage-VD0R { + apple,key-id =3D "VD0R"; + label =3D "Charger Input Voltage"; + }; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-mac-mini.dtsi b/arch/arm64/boo= t/dts/apple/hwmon-mac-mini.dtsi new file mode 100644 index 0000000000000000000000000000000000000000..6344deff06ebb9c1b0fbbf6b986= db879eb5f19cc --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-mac-mini.dtsi @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * hwmon sensors expected on all Mac mini models + * + * Copyright The Asahi Linux Contributors + */ + +#include "hwmon-fan.dtsi" + +&smc { + hwmon { + temperature-TW0P { + apple,key-id =3D "TW0P"; + label =3D "WiFi/BT Module Temperature"; + }; + }; +}; --=20 2.51.0 From nobody Fri Oct 3 18:10:16 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB61B3570AC; Wed, 27 Aug 2025 11:24:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293848; cv=none; b=l2F3BmMX8ez+RTpcmve8SjLAc7kFdpR5Ww0qO3aZkHVBtj7WICKwInKXgDCMY2IcflyYB0pjpy8pMNPm9To2NTfaf+zxRkGaZC/A0WDOv9hQlhiniM+bp379ph+RSaqMZUYfnyEynUZGaRFqz8r+64D/iGmP/TV3qMukhRZzGXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756293848; c=relaxed/simple; bh=5hVOIbFNhGdk2deyyP87QpYIGvupinnZhOGdw/+Fj2E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MQeHL/RK9IZQPP9863p0RR1VPTThxKitrPVCwg5sPKu6JNjwjqiRhONtQT2vA83xysj7Gp1ETiy8ffV3cdc+W2ZzI7VuDW+SIULAvJ7Y1OlfemBF7s93KPjV0C2867ewgOQjJUXQNKXsB3gzV0RTKl9tTSRpO6orzR5DCvwegbI= 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=W2mLUzas; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="W2mLUzas" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-244582738b5so61677245ad.3; Wed, 27 Aug 2025 04:24:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756293846; x=1756898646; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=EAV1SA7tmKDs0DFNYAv2SnCbmS2lL2C7TchccWIUu1A=; b=W2mLUzasRXNp/dnUbM+cPn+ccSVA6+Y8O672eCn821uX6jxUDgf7oyMHSE1iPNGOKU +JBcSpAs1vjiMccrCYdLVv3byoyV8ty0oQZOBsAk2oebMBR6L7v6pSSF/CzIzvMNuA5w fSyGaV7tNfQCl/R6hDhdG1UViLfZNrAPndnxLTkeBXDSLIMq/2gORguJuqb/MHlxUY3F /jEqU0acCc41ZnFFuRNhDwBAbh6M21DM4aPSUbqU0gIxL6CwTjUmT7+jygb62wIV0/5T JBQbhIAWYcnduszBj2cLCeNrh+dd8y6c4SmKH3S8y0NGLEksfQvgeXI2JqC03zoFw/mS OWzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756293846; x=1756898646; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EAV1SA7tmKDs0DFNYAv2SnCbmS2lL2C7TchccWIUu1A=; b=KDG2b7JHh1m4aZYHjpLpqyUk9HJ2ioBD6PuAps+lUpmZOHGCm0ObHItoIcLEmTlvU3 4oUNEBtfZk1JykQvhlkzxOil85FbaSz+xHaJ47HrCLprFXeDs9U0flltzB57MKkt7C9k zKTP9TQzpqJMbF4Dp+Hyfzkjjbaa8JtsEsh5lMJtmTi65bZgTj4XCI3POM5eik5ja2nv XvpIeKC4iips1VPvVStJapKmcp098J6F4giySr94U0X/JT0WqTv2HlEZbOvb4YkP24PI CVKp/+Z5/C02xeMdVGgLl2P17mijShQHxt/MfawqR73/ctRE1woccmpfVBibD7gq5I3B LnxA== X-Forwarded-Encrypted: i=1; AJvYcCUH3C/F26Kf7SeCSnCY3b5Pn3W97Jo5galSEhZUGAGytqiCRclET+I24601hOD21LKT44UIaL/CXR7olQ0z@vger.kernel.org, AJvYcCURMsaaPnQw3nuKEEbrmb+CgsEhJWON+9rAI8g60GMK0Tlc5y6XSuflJ6UUOl1lz0KJIXMNAVHVZ4YelUU=@vger.kernel.org, AJvYcCVPKI4OE7PU0VpoCnasnii4XbN8UXYT8rBkC2MoeqpKWeI3ZPmUQn9Sv0XWbt+UN9u9SIlmmPl3aCV7@vger.kernel.org, AJvYcCVqpK0TfBwiCb2vaFDNAZmxXiHGRnMf7BINVwIchdgm2Zv+t88mpCa06FxxFvwCcD5nUULUb4Vyuxjj@vger.kernel.org, AJvYcCWadScwqwWzM+q9qgTG2I+fT37C93//eOUlPejuguyLzcT0AHl4MqrL/w1yJQaK6IPFN8Bx/cQrNhwt/VA=@vger.kernel.org X-Gm-Message-State: AOJu0YyUXF0P3i416P9aj5g2Jew9a+ifu+Fx29DE5U2ixsrj+tsdDWk3 OKJD4YstBcnQtp3qC1TuM/SAuQVERNah8eI05U+WAWYCLmn8Nos9GAiM X-Gm-Gg: ASbGncsKx5X4afMfAAsmC8Hi725JJBqD1MQoTj8hrDLa6x5USGa9O6ECrpb/+a/gdGJ DkiB7iTpqJAqlupNrafJbWgx5N6blobm1NzO8GgWiX11nvamsRrH2sMRaadWAOLzexOizjThVhi XNUONDvR4ufSToYrUg0gDGQ5VoTokUJUw36r/q24Zdj7Kt2xMXGC9j5MdAHu+eDLWdQVteOCPP1 XrOgq1w8VeSPL/BfGugTSpY+viomDWDkuC53jRof11x1O5HLwDMZYoEvMp1QAX21IVCWmU8v7AY wqc6nUTn+SoYN/F7Wv2eUIeXtlpYxkkCqbRUyhHEg/uSyrQ1M7EfJhQUXJDH3Icl9xKzOULy8IL h8kgX4HadS+QU2HuuYBXRlvwg6xMAAz+yalU44mc6uf4Z0uVlzyFjTLmbWEhmXoq3mgQR6e2UL/ WvNeM+Y7PCa8xrj7FB X-Google-Smtp-Source: AGHT+IEgqB5UiBHU0abrKFQK8xQrwcte6KMuII6oePpzWrjYXeDJ609b+w/zvWBMeHhWli3+DXh1nw== X-Received: by 2002:a17:902:e888:b0:23f:df56:c74c with SMTP id d9443c01a7336-2462ee38734mr223696675ad.14.1756293846078; Wed, 27 Aug 2025 04:24:06 -0700 (PDT) Received: from [192.168.2.3] (2403-580a-80ed-0-4835-5a07-49e7-f115.ip6.aussiebb.net. [2403:580a:80ed:0:4835:5a07:49e7:f115]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3276fcd6232sm1819708a91.16.2025.08.27.04.23.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Aug 2025 04:24:05 -0700 (PDT) From: James Calligeros Date: Wed, 27 Aug 2025 21:22:45 +1000 Subject: [PATCH v2 11/11] arm64: dts: apple: t8103, t600x, t8112: Add common hwmon nodes to devices 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: <20250827-macsmc-subdevs-v2-11-ce5e99d54c28@gmail.com> References: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6874; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=5hVOIbFNhGdk2deyyP87QpYIGvupinnZhOGdw/+Fj2E=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBnrXjW3saep7c58/zbWu7Anl9fX5H7Ae7033Zo9z+Wyv B+EZ3zrKGVhEONikBVTZNnQJOQx24jtZr9I5V6YOaxMIEMYuDgFYCLFexkZvn5dzJQv01djKj5F oXLZZeFJz6ZHLdwnWLn8a2OnfmVoNCPD58bYlucFCRJGX8Vcz+gzazKd3FyyQXlN8YVji943Hgj gBAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the known, common hwmon-related SMC keys to the DTs for the devices they pertain to. Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros Reviewed-by: Neal Gompa --- .../arm64/boot/dts/apple/t6001-j375c.dts | 2 ++ .../arm64/boot/dts/apple/t6002-j375d.dts | 2 ++ .../boot/dts/apple/t600x-j314-j316.dtsi | 4 ++++ .../arm64/boot/dts/apple/t600x-j375.dtsi | 2 ++ arch/arm64/boot/dts/apple/t8103-j274.dts | 2 ++ arch/arm64/boot/dts/apple/t8103-j293.dts | 3 +++ arch/arm64/boot/dts/apple/t8103-j313.dts | 2 ++ arch/arm64/boot/dts/apple/t8103-j456.dts | 2 ++ arch/arm64/boot/dts/apple/t8103-j457.dts | 2 ++ .../arm64/boot/dts/apple/t8103-jxxx.dtsi | 2 ++ arch/arm64/boot/dts/apple/t8112-j413.dts | 2 ++ arch/arm64/boot/dts/apple/t8112-j473.dts | 2 ++ arch/arm64/boot/dts/apple/t8112-j493.dts | 3 +++ .../arm64/boot/dts/apple/t8112-jxxx.dtsi | 2 ++ 14 files changed, 32 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6001-j375c.dts b/arch/arm64/boot/dt= s/apple/t6001-j375c.dts index 62ea437b58b25ca649e20b1072b4d835bbc17d3a..9e8c4107e65d8dc47ad2ad99af2= f436613c11d8f 100644 --- a/arch/arm64/boot/dts/apple/t6001-j375c.dts +++ b/arch/arm64/boot/dts/apple/t6001-j375c.dts @@ -16,3 +16,5 @@ / { compatible =3D "apple,j375c", "apple,t6001", "apple,arm-platform"; model =3D "Apple Mac Studio (M1 Max, 2022)"; }; + +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6002-j375d.dts b/arch/arm64/boot/dt= s/apple/t6002-j375d.dts index 3365429bdc8be90b63c8051822243d897854ab27..b62cf16d6b73e74c3d9116730b4= 4596be2a89ea0 100644 --- a/arch/arm64/boot/dts/apple/t6002-j375d.dts +++ b/arch/arm64/boot/dts/apple/t6002-j375d.dts @@ -48,3 +48,5 @@ hpm5: usb-pd@3a { =20 /delete-node/ &ps_disp0_cpu0_die1; /delete-node/ &ps_disp0_fe_die1; + +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi b/arch/arm64/bo= ot/dts/apple/t600x-j314-j316.dtsi index 22ebc78e120bf8f0f71fd532e9dce4dcd117bbc6..2cb38861c3855e31c9b8ab66fe6= 9b818c381c604 100644 --- a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi @@ -121,3 +121,7 @@ &fpwm0 { }; =20 #include "spi1-nvram.dtsi" + +#include "hwmon-common.dtsi" +#include "hwmon-laptop.dtsi" +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t600x-j375.dtsi b/arch/arm64/boot/dt= s/apple/t600x-j375.dtsi index d5b985ad567936111ee5cccc9ca9fc23d01d9edf..7e551e8660c9c2b51f021b11886= 80c5cce9d2951 100644 --- a/arch/arm64/boot/dts/apple/t600x-j375.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j375.dtsi @@ -128,3 +128,5 @@ &pcie0_dart_3 { }; =20 #include "spi1-nvram.dtsi" + +#include "hwmon-common.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j274.dts b/arch/arm64/boot/dts= /apple/t8103-j274.dts index 1c3e37f86d46d7b5d733717b47c4b57dc55e1201..f5b8cc087882d6bd2b0f4f27118= 44d2a0fa8b604 100644 --- a/arch/arm64/boot/dts/apple/t8103-j274.dts +++ b/arch/arm64/boot/dts/apple/t8103-j274.dts @@ -61,3 +61,5 @@ &pcie0_dart_2 { &i2c2 { status =3D "okay"; }; + +#include "hwmon-mac-mini.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j293.dts b/arch/arm64/boot/dts= /apple/t8103-j293.dts index 5b3c42e9f0e6776241bf746d3458766e44e3639a..abb88391635fa048c196d0631d9= 0405519ddd178 100644 --- a/arch/arm64/boot/dts/apple/t8103-j293.dts +++ b/arch/arm64/boot/dts/apple/t8103-j293.dts @@ -119,3 +119,6 @@ dfr_panel_in: endpoint { &displaydfr_dart { status =3D "okay"; }; + +#include "hwmon-laptop.dtsi" +#include "hwmon-fan.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j313.dts b/arch/arm64/boot/dts= /apple/t8103-j313.dts index 97a4344d8dca685708aff136af92a1b316f3c3dd..491ead016b2193f123f4ded9dad= f85ebf37cdc7e 100644 --- a/arch/arm64/boot/dts/apple/t8103-j313.dts +++ b/arch/arm64/boot/dts/apple/t8103-j313.dts @@ -41,3 +41,5 @@ &wifi0 { &fpwm1 { status =3D "okay"; }; + +#include "hwmon-laptop.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j456.dts b/arch/arm64/boot/dts= /apple/t8103-j456.dts index 58c8e43789b4861544e20c717124ede3327be010..c2ec6fbb633cc6aeec2322f295c= 054998fbf08cc 100644 --- a/arch/arm64/boot/dts/apple/t8103-j456.dts +++ b/arch/arm64/boot/dts/apple/t8103-j456.dts @@ -75,3 +75,5 @@ &pcie0_dart_1 { &pcie0_dart_2 { status =3D "okay"; }; + +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j457.dts b/arch/arm64/boot/dts= /apple/t8103-j457.dts index 152f95fd49a2118093396838fbd8b6bd1b518f81..20e85612ae70c116cab788f2c03= f5a7d76cb19be 100644 --- a/arch/arm64/boot/dts/apple/t8103-j457.dts +++ b/arch/arm64/boot/dts/apple/t8103-j457.dts @@ -48,3 +48,5 @@ ethernet0: ethernet@0,0 { &pcie0_dart_2 { status =3D "okay"; }; + +#include "hwmon-fan.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi b/arch/arm64/boot/dt= s/apple/t8103-jxxx.dtsi index 0c8206156bfefda8a32c869787b2e0c8e67a9d17..f711af410a2edf7587ff091e195= c5cf243dc8a34 100644 --- a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi +++ b/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi @@ -92,3 +92,5 @@ &nco_clkref { }; =20 #include "spi1-nvram.dtsi" + +#include "hwmon-common.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112-j413.dts b/arch/arm64/boot/dts= /apple/t8112-j413.dts index 6f69658623bf89ce73e3486bce504f1f5f8003f3..500dcdf2d4b5da698ee0798f37f= 624ff70e7b9f0 100644 --- a/arch/arm64/boot/dts/apple/t8112-j413.dts +++ b/arch/arm64/boot/dts/apple/t8112-j413.dts @@ -78,3 +78,5 @@ &i2c4 { &fpwm1 { status =3D "okay"; }; + +#include "hwmon-laptop.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112-j473.dts b/arch/arm64/boot/dts= /apple/t8112-j473.dts index 06fe257f08be498ace6906b936012e01084da702..11db6a92493f367cfa64be5e844= c80e99bdd325b 100644 --- a/arch/arm64/boot/dts/apple/t8112-j473.dts +++ b/arch/arm64/boot/dts/apple/t8112-j473.dts @@ -52,3 +52,5 @@ &pcie1_dart { &pcie2_dart { status =3D "okay"; }; + +#include "hwmon-mac-mini.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112-j493.dts b/arch/arm64/boot/dts= /apple/t8112-j493.dts index fb8ad7d4c65a8fe7966f5541f24f03a379143cfb..a0da02c00f157a0e667b26aebef= 9157636b14ecf 100644 --- a/arch/arm64/boot/dts/apple/t8112-j493.dts +++ b/arch/arm64/boot/dts/apple/t8112-j493.dts @@ -133,3 +133,6 @@ touchbar0: touchbar@0 { touchscreen-inverted-y; }; }; + +#include "hwmon-laptop.dtsi" +#include "hwmon-fan.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi b/arch/arm64/boot/dt= s/apple/t8112-jxxx.dtsi index 6da35496a4c88dbaba125ebbe8c5a4a428c647c3..6e54c1fb097e8f72cb4fb37e491= 893a7e3d7e6c2 100644 --- a/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi +++ b/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi @@ -81,3 +81,5 @@ &nco_clkref { }; =20 #include "spi1-nvram.dtsi" + +#include "hwmon-common.dtsi" --=20 2.51.0