From nobody Sat Feb 7 21:23:44 2026 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (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 398A2151991 for ; Sat, 25 Oct 2025 00:25:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351905; cv=none; b=KmZ330iaqoePwSORV8f+4PPhgj+beyeNJdg4JFtYzSPXeVVDsDwDpPK11MXryB+vYV8aicc5z+xFkGABswMeoQw2e1cvAXB7hpsxVXwq7GSaY5CT7Y6f8UjUtukrSqka3XnrRIJjG3FlZfPzrjC+6mrYgnvBJHuM92CmxTK9neU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351905; c=relaxed/simple; bh=doc6D/qsvutmJbzXvdZDYSYz0ZxXLQM+iyKROYiaouk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KLqMyB18Ay9W1yxX9OScc5PkKwmiAFkxX5XNdeCA4XnMTWIddCbjy+2p3kn/QEO68Xfj3+u4oiF0ELUdYGh0Xb5O4IqTDArMTK1nnIUh5+3zNBwfyWfrodVVU4aJtUrtPsuBHb+19LZXG+hrXbQx4FfjyhqcGghp7d9/qaSBXZY= 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=DpGam7Tx; arc=none smtp.client-ip=209.85.215.181 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="DpGam7Tx" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-b6cea3f34ebso1909251a12.0 for ; Fri, 24 Oct 2025 17:25:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351902; x=1761956702; 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=Wae5anKN9hvFHOBxJWNDxfF+UZ1MN51bIQyhwDOYr8M=; b=DpGam7Tx91C3uwnzdqHANFynSeEaPGgVqstnUk4slv0fq87EaP6eGvTyPSaZSKpwoU 8lty4dwHo8cAtxbVwYDzNIZwXOwTmKoPMvabSn0/whEWCTT9Fl2eBb3Q6QQEtdTSfH5+ vpyasGtXqN8U+3XEiQGzE6nXAEg9xfJAdLvoOTY/tjlwe4InBVi02H+f7QLp/gGc3H6R lJAlaued35/Yyl++Hr66tacDWlZG2KomI8MXxYAtVCstUwIb7G6dOAf3zTln3BgI6gaS i1QOTrgZ8Zwdc+ZEiw75xo96Klo/CM3C4/RPJ9BJzeqIYP+DlJxFo09c5vBAYx+fpvNQ KIYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351902; x=1761956702; 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=Wae5anKN9hvFHOBxJWNDxfF+UZ1MN51bIQyhwDOYr8M=; b=ZY5A2wMDT05lmRHLcjLXd8GSOyqNUFSWIOmSNXhWtKK3y6YlgPPjr3N4pmHqjVpTRp Ksr5WQF24gpHvgUuaNo82A7tS2JXYS70lRrBKiorT8pk0df99jhI8TYb7tnG2gQUp5SM eoweSZF932CksBVXqoZ1hehxxfk+6ePOW064xaWilO8MFo6lgUn78tnXCEq4PjgPbqNG sY6icGFU7S0de/+o4foCIhYLC1c8jsHmlLjGCZbMoo7cyolAYxmSko+6K62YoNUg93Ev GDp6GrhVl3GDzu+TBM5YEBkpGBhuE3IlYWI+Yzpzh1uXu5QQh/IO/IwYmhplFeVWVU56 cayg== X-Forwarded-Encrypted: i=1; AJvYcCU4Pq3AqG0tTVQgOBETey3D2Pwd+1x6Ilg+iIcrWvmiZHbL1vMDSmusANwLQltzHX7Iwy7SpKGUaPFpUEQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwPc60eanG0EJdcm76wFOTpxB83/6cJ/0SL8ABH1YFIP8DlvjeZ pkSkp1pWtDaLzsQEPLTYU4SiYRIAyT/gotjrQx7Jn3nn2/iuImNB1q6a X-Gm-Gg: ASbGncu/umBSDY/J1Rpvx6FVaIUDzf6v0Bd38Qh5WGMnciAotIAm73zU2Q4Z+Jfd5qs QxLbAMjlyL1zng5lmIXcTwZymKISonuU2myqG9ZlOf1x/49wTbqLqpeBoKjjV9TaHZfV7BWBqWY ayjFkBfHx4zxcLocZL9Dc+EC20FTlGLx0j/EOK1NOt2oKRfDrcBKXH+DeDy22yv2LpVVpLu0vyB rcitC6Iyo5v/RThsiYIXaOGKKGEv3uCutZlJQ2x2pSgeTBS8u4dVzBhM6ymF475M4Yg9a9usaKC JpGJ8s94Ls3dtF8WYho/5or6CTUj7tPxYeeTHsic8Ofc7j0fuXByc2v2LaNBW98fJ8LlaBidCJt EjrX/2fELtprSCSpyfL1XqThP0ozVwWhNzWG23AqVVQoYd8VxQKCNyOjKqG03L2563KMO0f+7ex V4M84hGvN52r/YTzA8592vepfGZt7Yp4bzWT8DoCoaazQo9ha8+6dZ/3mDdQYoyRMBS3gqOfWz8 gK0LUMK/s+P+694iNOR/C0rw8M6UbL+Ja1a17sY386azvsG6evKTg== X-Google-Smtp-Source: AGHT+IFEqmXz9bRiukdYngtpXwv8pFo+7VapY1AMW8bk3PUTqtg9ECS2KTxI+6Fj45sxyikhlb2EeQ== X-Received: by 2002:a17:902:cec7:b0:269:8edf:67f8 with SMTP id d9443c01a7336-290cb27f40emr370038515ad.52.1761351902363; Fri, 24 Oct 2025 17:25:02 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.24.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:02 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:32 +1000 Subject: [PATCH v4 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: <20251025-macsmc-subdevs-v4-1-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org, Mark Kettenis X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3352; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=mFOSrinm6mR52T1DXQZDpIdEAeTd/TshZKSbr4XqCgw=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM5KOUU19IWnm920k5nipVbb7c99zz1Ye9FD1RWXL bg5V1p2TGRhEONisBRTZNnQJOQx24jtZr9I5V6YOaxMIEOkRRoYgICFgS83Ma/USMdIz1TbUM/Q UMdYx4iBi1MApnpmICPD/JeKQcuVJpTJ5a0VO/JY8PkWXavfna5xi4x7tfR/GthfZmQ4vNRKL0n +VX/I1WCGLzziV2SPLPpV/aN1bcasfeJRCZ94AQ== 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 5429538f7e2e..0410e712c900 100644 --- a/Documentation/devicetree/bindings/mfd/apple,smc.yaml +++ b/Documentation/devicetree/bindings/mfd/apple,smc.yaml @@ -46,6 +46,9 @@ properties: reboot: $ref: /schemas/power/reset/apple,smc-reboot.yaml =20 + rtc: + $ref: /schemas/rtc/apple,smc-rtc.yaml + additionalProperties: false =20 required: @@ -80,5 +83,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 000000000000..607b610665a2 --- /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 b45db73e55df..745d85b66365 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2435,6 +2435,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 Sat Feb 7 21:23:44 2026 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.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 634E818C008 for ; Sat, 25 Oct 2025 00:25:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351912; cv=none; b=OrKP5ryTaCak0WWfbRfyrMOuE9HKbut1TTSFR2H7GFr7Cp1RpYg3CqtkbRIu5LDMP/DiHmFKj3FgO7uJFvksw6YxAhcWwUse90MCooY+HFNxTMmQEqPfj5siLUFCJyUm8jZ+zbe465IzVsarkDw/ZqSBOusD24ihSrI+HnXE3GE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351912; c=relaxed/simple; bh=QLglMo5Tzt3fMQq9JyCYlBLgJC3+XwEd/tCVV3EfeJY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=da816wMYaJxnVDKt0EmzZGaV5WiJJGULfokDDmHaQy/Dz3ixeP75zIx+Qri4y20aVAzo34tui1V46SQ9JdguC+R3KwZnbmn1jZ4ZKv5ofkc8Ix2xY80G5Ou/AbUMSei8A3Msr172mx6s4IKV7F/gV3YCgphXCB9Zy6O+oO+7DDI= 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=adTc72gj; arc=none smtp.client-ip=209.85.215.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="adTc72gj" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-b6a73db16efso2403775a12.3 for ; Fri, 24 Oct 2025 17:25:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351910; x=1761956710; 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=uwfidYGuKHgshH134+IxmWFS70+GCQaswxiZDtAJyWU=; b=adTc72gjS7H5RMgMlV/CeAu6QJpntVP0fjbmeObn3AtBj2B9CVpbSyqrBdV3JcVsXE Zs7ZhYQw4ln2EV8En9pQdCdK2UqgTD2GfHZ+JYHkkcCMW8D/jRZ9BpwKTMric1irJufH rGJDV/OavrxU1nZy07RGk0h7lLvJVIVVHuaGGYBaoPwkp1ofV01+nXaV0+9O7KAJMni3 IbfMTAecz3xMQPi6cuE4j+UgTzTQuC9Ju5YEnNVSgQM2mxXr7Qc+/NCB1BGyli05PtmM qbhwS3CcQInRHT29sfScwchm0BXrE83Jx/BDWgRjTLBxsuseMK4W7q0h6+9PvSSWh38r Tzeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351910; x=1761956710; 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=uwfidYGuKHgshH134+IxmWFS70+GCQaswxiZDtAJyWU=; b=nHpkGsbtXD2miS9+PbGk/aNIlFlkzEv8RpwvLKA+Slj2npNtXp0gbTWnIqoJz1KjMK 1fu6iiONey33RITC31mhUSsqY8MYZbWa1rgnfCtuaOJT3+F5AxO9cWr/RJyxqrHHnk/B bkbxj3F4Lrb13XqbKBWv2Ol96AqNRbe+3ro1Nd6o26kEGTxl30ulHeMvS1BeFM5Iv/yQ gA9xoECvjyIpsiXkgVRBvdAOddhfJWn6FRuy6x87ltAYUh1hYdkF7v9Ur9oR6WuhEvfu ya8FslDFJKu7oAHeswo4aUiIg9xingV6W4LV+RRyGhZ4Tl+ps7vvsWvIAv/F2Ik4vXVq qS0Q== X-Forwarded-Encrypted: i=1; AJvYcCVdWy4VG3/EIgGIOqK4rRhj+hv3prXB9L3jUi0c/qE4Oulyg6aJpUVVgWzSZb85o1mm5BGqAavAGr3K63A=@vger.kernel.org X-Gm-Message-State: AOJu0YwMBebPpoLHeRBb4x0Pw8bjT9HTskQpZnXe7R5vqqzAqcBDMHC5 z7v8x+lOGDjscjQwUsjx9ouqPC27EQTTGSIqkCXpYHgsxZE1r0YT0unlYep1iJi7Lh8= X-Gm-Gg: ASbGncs38MA+nCKVND+rlDhodNJhaxNn+aV6xCGi3a4AHjQh7/LEZBRhzeho1rg6ovC Ogiq9/kX9Twzs22qHh5rWFamLDGPuUf/zjBdL0TAJaAxwEcr5ue8zm0S/4QI/oMbaXbTf9/LJmb Wvg0x10x5aOw9PkUQpGfJhw7prJEYA803uF6dtJ3nM0retzBWq9DhJW7U8HGw8cfLq9XH8FbP1w pUtTVhJfuv5V7F7yXC+ALCnNqxF22Z77wdyVnl369yXusAG0fHxuRNS50O1I22GG8fQllXC1Xp9 qSURJZJ+W/ktgpQYWrtlS/3XTesSkm3xkXpbFBZD2j/Y1LJxmJtrdqp9H5kFUnJTJTLi3J/l9kS dJ7iBrvm/nXGAeYu8IIywKuHQr8Mcv/mnklddNpJly2C3DdIkWvy5eMj1w3evCtLxOPT8VLb4Fe +iYkMH0tVRF7E+Q1LjboSip587w+/CS7kazvp8MQ1Duyv6xUH1AF9ob7j6iVtPYxpJILJOxaG97 ujxW0XiniomfwpdyY3mj7K5AbeE3KLYbBAxO+3bJAuzdaJCHz1EVV+Dmvm5c+sXBEghoe2WoDo= X-Google-Smtp-Source: AGHT+IHw9sGrmw3gIagphERDqgFYOOfKGYJBT/zaK0hILzkn0QI5qiwyyeZwL/Ik3dMeZqMZWF0mQw== X-Received: by 2002:a17:903:38c8:b0:270:4964:ad7c with SMTP id d9443c01a7336-2948b95c6e4mr49579925ad.2.1761351909745; Fri, 24 Oct 2025 17:25:09 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:09 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:33 +1000 Subject: [PATCH v4 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: <20251025-macsmc-subdevs-v4-2-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6691; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=QLglMo5Tzt3fMQq9JyCYlBLgJC3+XwEd/tCVV3EfeJY=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM4q+J7ufcBmuzj98x6LMhmZc/P4XtedWXA2xiB7v u3yNvb6joksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFSrbWP4wzWnQJ3/LdfVrP3vRf/NUVHi6vxwNqziYOEpzwzFzKSpfxj+hz/xWWa aG1zR/LLciSfa2dRHrmafmfw3ueVLOi3ckz6yAAA= 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. Reviewed-by: Neal Gompa Reviewed-by: Rob Herring (Arm) Signed-off-by: James Calligeros --- .../bindings/hwmon/apple,smc-hwmon.yaml | 86 +++++++++++++++++++++++++ .../bindings/mfd/apple,smc.yaml | 36 +++++++++++ MAINTAINERS | 1 + 3 files changed, 123 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 000000000000..2eec317bc4b3 --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml @@ -0,0 +1,86 @@ +# 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 + +$defs: + sensor: + type: object + + properties: + 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 + + required: + - apple,key-id + +properties: + compatible: + const: apple,smc-hwmon + +patternProperties: + "^current-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + "^fan-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + properties: + 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 + + + "^power-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + "^temperature-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + "^voltage-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + +additionalProperties: false diff --git a/Documentation/devicetree/bindings/mfd/apple,smc.yaml b/Documen= tation/devicetree/bindings/mfd/apple,smc.yaml index 0410e712c900..34ce048619f5 100644 --- a/Documentation/devicetree/bindings/mfd/apple,smc.yaml +++ b/Documentation/devicetree/bindings/mfd/apple,smc.yaml @@ -49,6 +49,9 @@ properties: rtc: $ref: /schemas/rtc/apple,smc-rtc.yaml =20 + hwmon: + $ref: /schemas/hwmon/apple,smc-hwmon.yaml + additionalProperties: false =20 required: @@ -89,5 +92,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 745d85b66365..10f4c0034b5e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2418,6 +2418,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 Sat Feb 7 21:23:44 2026 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 60EBC18A6A5 for ; Sat, 25 Oct 2025 00:25:18 +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=1761351920; cv=none; b=Sz1tzAAv0he1wYclpIkYn6qu56zjXPmDe21WexxwEXfc9KtxzyBprXqnB/+8y+jRTrN6t0LDzoxcywCqkcFFtOa9UjKTKhSC6+PZtq/D70BgMQOHJgRTy7bI2o9gOBMxiMsM7et3dVuILxkrNW+FZJrr+7LmApZzJIcvG+pI00U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351920; c=relaxed/simple; bh=STfTCmac9Yu0j7eiVhtHMDKv6NipIWLHTlXOi1zHZmY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b5OrDadrotwCqrqOzrKj9E6D0PCsID8GTcMLSV2QexB5gs4Y3SG0sz3dYR1FXWHj4OYc4TXQPoC0ZXWSRv2fxG/5jqdufkaFsozlICbiO+jJjAINYq5FbDPoUCtLnSSV9WxTUzommlUIVd7g6mDQjdgbeO7uK5BnXcQVA5AOx5Y= 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=XUpZdpHx; 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="XUpZdpHx" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-290a3a4c7ecso29364495ad.0 for ; Fri, 24 Oct 2025 17:25:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351917; x=1761956717; 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=LpjDHQIYIRylJPTB3diZWWrLmxC+Ub3kw5EOc9yYTqo=; b=XUpZdpHx4cLMT70PLNXc7mBZv6DpDyN7wE54TTRyzySWg2ZwYuZRRI4K8yQG6rQeOG 67ClP3lr7YJzN1bAzwH1h/SLAG8DjBjjPvllI1vInnb2IPKym7USMMqWm3ray4Okm9Nh qemqydJTS29Hpji4I/utbtNUW0XT2pOBQ3n74oomFu3rkesf1uGRuYvShvLQEM//5Uiw /WOgfYT8yYIfb2eAbtqog/zMivY9rkQbWAdmewTxlExhcOG8qv1UbnCnXBOoD/QjMhse Qf79W1m5t9e37AjiZcCe0mErWq2CCQicRq0HIdpTCWhO/bNb6FWGPvpja9MwwFIzOHiB NUyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351917; x=1761956717; 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=LpjDHQIYIRylJPTB3diZWWrLmxC+Ub3kw5EOc9yYTqo=; b=ZLe97qW3U3GpDYt2cW3coY6ME63ixtQSUW5yea9njfTvdqNvLZf+H2IIgvVL8HGyOh rizBdq4AOwFRQLeBHVKkbuo9QxgbHxGkTjldd0bOYLC2WdQCF1oGBRQCxBjphzh04YNl +IYW09EqsN9NdKPBJGZ3m7pfcc/MxpwXYMMyJWmIUPO6AvFH+babO3BsYnvEtVCjhuw7 9VAVwJBup9Ugy6URq1IwwJi+444NyOwsHdqtcP9n4lQ3ACH89IHEvgB+ZHHWoPgRhYpE ydLrqNgZLxFQma0MT5JLdcZ5rabqpxnzcziczB0Fcs9iysVTqdgFhtbU6AQ1AIKNHHXg gheA== X-Forwarded-Encrypted: i=1; AJvYcCWe2DMCKEDTjUPAX7G/tb3DG0dRhIWNshprTeWfklVWQPZw19TMPzPn1ctUYNQPSuJ7YwIKJHwO+qabUCY=@vger.kernel.org X-Gm-Message-State: AOJu0YzzOzWRk3iXaoVyoVJRz8JtyUkLNGeN15u8vmscfi/Ecj3M9LQI 4XhkTGhKT5W7pQPitV8gVcEQfIniJ8MJO87R1sQ6j4HA8ZTQsnXwsOJu X-Gm-Gg: ASbGncuMXHyaqyo+o0U45AeqRoMf9QOElm8RWWbMTJeVLV1KQ+GcB1j2h8ChuiK4W/9 7IuS9b5ayWPlqK+r+L1Kd0EKLuFFBdsFzlpeEIoUX/QiSJ0e1lbR1yZyFBiUfG3VznGaM3FbX2c 9To8QUj3TWbM/zhhFaV8maViJRwD6b8xp9pkeyQP3SFD69gAA+kVOM3NrTSXWpdSK9BE9aOqj2Z KJzJmpd1S0N2BviE5eOnCcpPmO48+VUov3P6ssnaZDZokJcINQ2+bpSqkuqdWnrkzUYq8j1vxFF 2nffXkcETlOh7qJPuFLeNKExciG7N5WIlkvMMU46/V6lCBylWJjp7YZR4Gw+6tuD/R/SODYOB0u q/2UrxvrFjO3FKDupLeJUz0ho9GyTTZtWiAkKykx+qaFIb5TRKUnEPhqhvRfs1FD8JC9BeMXS0P 0B4v6+i5Bq4bJeC9S0VGA6UfV2JL90Gu3jVcXVl/Sh0xFcFKHjduusDAinJFITSmvY7fQT9WzYx uBy8IHNMkzyqm4OBe54D3AQjmoMu3jnPWYOJm3IaJgjHOqn3HQVcr2HN0Aax7Lu X-Google-Smtp-Source: AGHT+IFvT7pNHTbj5DmC5yeORCKubjL7ZVBJx6hFhUmbeqmG4NbiAwaY0R/f8Kd7Jj5Yxiy8PVThtw== X-Received: by 2002:a17:903:8c6:b0:28d:18fb:bb93 with SMTP id d9443c01a7336-290c9c8968cmr397545735ad.7.1761351917386; Fri, 24 Oct 2025 17:25:17 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:17 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:34 +1000 Subject: [PATCH v4 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: <20251025-macsmc-subdevs-v4-3-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org, Hector Martin X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6897; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=obg0EdYz2H0oIXhGRk+CbCHk2jpdlqeTG6wlPWzOz4k=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM7GJFixFJx7YVvhW3ybT7RodoPFG06v6tOf4m0jJ rtkXWPvmMjCIMbFYCmmyLKhSchjthHbzX6Ryr0wc1iZQIZIizQwAAELA19uYl6pkY6Rnqm2oZ6h oY6xjhEDF6cATPUBPoZ/WrkvHWZucfqgOo2xS4dpbtol3vmvtbS8XDU+1/G6qhUtYvhfpDF9kdC FGzmCF7g+uezI7PA7dX1ZtVGa4aH8OOMCwXpWAA== 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 10f4c0034b5e..3c6322872dd1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2460,6 +2460,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 4a8dc8d0a4b7..e165301d4abb 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -2078,6 +2078,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 610a9ee5fd33..32083bd5bb81 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 000000000000..05e360277f63 --- /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 Sat Feb 7 21:23:44 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 9E3C91465B4 for ; Sat, 25 Oct 2025 00:25:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351927; cv=none; b=lkRz7rn6DYisgn8zPoOQN/GiYE8BTtCOqRfqi69Ti4Yc5Gb+Ss+tYbIy+J2f/O+3kByOIW0L6HwkHTeq5GSBiKWgpl80l3lUYOfmt6W9jYMxm+0EV/bc0dRmdQwpvCehFgh2rAGHYPxemfzW/uExsnpiFPpXPUjlfs6K+jGXnPA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351927; c=relaxed/simple; bh=DIjn1i6LYuHnBLhKvNWo/fynkhJW/iU4X0uf260tH6w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OFXWtZEhbU5xa5YzspT9+SqsmvFI5M6nduxbYmSJqAgccUIyqvBzBXSdTEm4hpJp5QNB5WMa3nolwCf3WxEDXhAYxsJ4RK7BLPZfHVL6KitLfV1x8ovXoZdPQE6Ffp6YSWQSLTnJUi0DhKGgJtubHHSPz4kqH6ZZEXrTx2srkUc= 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=bynZe1Dl; arc=none smtp.client-ip=209.85.214.181 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="bynZe1Dl" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-27ee41e0798so36516585ad.1 for ; Fri, 24 Oct 2025 17:25:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351925; x=1761956725; 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=U3l4kEjsdDE6a6BGdSar9SEMlVw0yVffjguWwMFXN/4=; b=bynZe1Dl3wixpsJtZ5VraFHDvtNdkXGPDfRyGHiaZkV3UsRltVmZxze860+P2hFbs8 QiEkcmuQUaYSNG72BMx3NLzy5KfBcN1j9NMmxMxNYkTYKcabEvIqjms5US19S9Yhm3Nk vxPKJm7lDV0gkBdPal5BAIObYytjZUVfTnLb9uZSyBWoWrtkDvy2eFX9VPE4KKE/GyMz seESTLnVgqgNUjms6kcHE3anx7xvcMfw75ElTfyWKBxn6GJBFgXtuZk5ve/bbOKBtzk4 lPnQNKN/AFj813dosBNiylXs58hFm0hd9CtEk/A/DE0upKPZDTnPTYnsEmhi9ByBdmHB B5pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351925; x=1761956725; 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=U3l4kEjsdDE6a6BGdSar9SEMlVw0yVffjguWwMFXN/4=; b=XSDYfl3lkM+d2g1PGv+vADrLCQY3RRkjcKvuq9dfIP9bEjH91trvqUVk0MtquCLFQn KC/PEv5/xFTw9myyqlXEdf7UQ70DvcztQOaysHyrxblIhLkgf8R+mhFHhRr7RkjEJYYE 61QRLosHzvdunstEtWx294QdtofrIY5NBe+iWUc9KVzS3O+RYTcV1OHHScZYUE4owCsS LWI5x+OX3TPPR9sS9WVWyBlLIRSZ2zA646xz128qu1EOVdpoiCeIgOxKuvkyDN14tZ6t ECuPgYlK3KSmVsbXqRgmqkAFWYzJJnrW1ydZutA+4oC3GNVvKWFh8Lv7dTCqmch1ObdY x9Jw== X-Forwarded-Encrypted: i=1; AJvYcCWkCPnTZDppRSuvxQLdQ5eENzfsoQhk+zC4LEaga79VQuDR0OpZvuTqHMlnMEeqvOZyMKN+oXDGLrOatj8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy6NzagZLhHtr9WQSWVoz93GBOp8QVa3i9du/GZVm12aEhYQxqz h6pKvULv1YtGLbfNf57OZRANMq0mG+BpQVyrGati32+OoZe/rLezOYCs X-Gm-Gg: ASbGncs3BOYu25vYIhZSVAl8P9dkUaF10YyV08ilRvyC7z5N/7LPIZpRtpSp5Zmtwfd BiPtBdJRGfuBmHvyyZ8E4P70rxBXzxiI/iGG9OxzrZkDVq9KHu7SSBqdEMQ8PWj3YaC/v6E3rEW eEMbJETS+iRacYcU2gBoEShjSF89UikR4muF2HC+QZu/0dJTrONKXWOebYURibWHr849vny4ygJ 5S1THyJdqIGGucD/1CwkQdpeEJFCLKCIz3dZn5PVRFioip0zbIa9CCCTsT7Kq4C3xUS1yu8p1xq iGsJQB/Szd/dIsufMhM1D9DC5VVYg1dQOllNtSMX2UmRgUdQCc73b631tDGT9pULTLWXaTQ6SZP jUFWiIawqGRG+MsMC4Qbb3qfZwqKARovCsQqThpUT05044JxvIiv9V8NAIdGUjnhr5SGzJ9Aa3y q0koPJ9o1Jmpdoo3O3folnx8DXZCQJeC/qNCDC+bQILIPXJ2JsUSBglk+eR/cwT/fAN84yxUZGe L4MyJVNPRCw9bqNVVdskI19RDc5o+2qQ2jPpNLUMFI3awL6CCkLs5CeO7u8x6fu X-Google-Smtp-Source: AGHT+IEcAIrM5gDLd6A2M9OWpDkFvdgMAQWlJmHHcjPPAuvS+4wY77QHgPJLW5SNNNq/wEEOrEct6w== X-Received: by 2002:a17:902:dad2:b0:286:d3c5:4d15 with SMTP id d9443c01a7336-2948ba3c6a1mr49230345ad.36.1761351924748; Fri, 24 Oct 2025 17:25:24 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:24 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:35 +1000 Subject: [PATCH v4 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: <20251025-macsmc-subdevs-v4-4-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=747; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=DIjn1i6LYuHnBLhKvNWo/fynkhJW/iU4X0uf260tH6w=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM66XLGLz/n50Chebub0Ao9Nf53uT3wfl11dXS33N 9x2ymOzjoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFSfMmdkeDBb4PWe+6s0vbok5oTvmR4jwlY+maPo+DIp1m2PikI7LzD8d963dV/ l7GSLoMiFjx35q83EPmxqWT39yQmNyVyhhrPc2QA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the new SMC RTC function to the mfd device Reviewed-by: Neal Gompa Signed-off-by: James Calligeros --- drivers/mfd/macsmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mfd/macsmc.c b/drivers/mfd/macsmc.c index e6cdae221f1d..500395bb48da 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 Sat Feb 7 21:23:44 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 0953D1465B4 for ; Sat, 25 Oct 2025 00:25:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351934; cv=none; b=RPx9XKXTIoUztzU1Xls+WHdCRaCZhrQ+82YkMcApWbCvC9ol8c6qZ/6wdurm1fXiNmthcRlBQk1PG3N4vngpWM+JyCqZt7kq4d0bK/aqBx36sGy7gkRjXsvYMnOBgxSi+K7nN3HrZ1QcHqeTi5J5IStiCE4kXb5Gf40OW9wTEyc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351934; c=relaxed/simple; bh=DV+93RqA20zYsiZVil2ilvoMWgypauFCp2tp4wJbtLo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PO9HB8TzxoKQSqYL4sgMPsI7yOMlZi76HX5+a6P7DBRC3Gs9++HHiggxQpdrTVpnSnuF0pSUoEHa2E5jgJ9Ish3URRyj9ynYAI78pwASAj9sIspPDwWGg4Ys7fpdHzlKyYfeGv5MMpY4dh2qd4dJxBOhTtAvs8YB4damfs0hMmc= 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=HLlZF60Y; arc=none smtp.client-ip=209.85.214.181 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="HLlZF60Y" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-27d4d6b7ab5so38851305ad.2 for ; Fri, 24 Oct 2025 17:25:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351932; x=1761956732; 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=yg5EzbqpAhrvR1YouHoLR93Qim7L8FFl5LtkM7LFT7g=; b=HLlZF60YKSxUJ+x1g16WArTv8b4FzBd5ac0WL7yqUU3mktlj8KqvC1RncFfe0Q/yAp mlvuKsN40DfbXfC8KRbbjMyxrEqOfiAakxSQiQ84bIW96HszAKfQwHbHi+Bjia1nNRwX VNcyOZcJjK+X60Ipefu9bU4qmhT315nFlwjcXrVj15o4u78CyTfqCy9Nc/GTi9QscNpJ OcMSgbKHSB75iPDP3F7HCJhSFXqzuf7/dzmXymK0icrFwLCKtV8Z4DKEYDjP0vLpHiMJ HJfIx2wtKdMmTVCOGdCRzRF/uTrEWyAHFIdwDlpu69Q03BAdKvMP7mY6Z8PcUFrxiscE 498A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351932; x=1761956732; 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=yg5EzbqpAhrvR1YouHoLR93Qim7L8FFl5LtkM7LFT7g=; b=cEB9W74AVXiYw6RqcyMiBFm8nauYrJFNfbUxjJbVoO64+oyj3ckmuMsZAaYBsIFH/o xkfeOdD/NoxUum/jtJi/1zqxQqeqT6pt2oqMWLEpOmKSaeqwUbBT0/UfJ5kOr+p2TZH5 QjAO94Sjuew3o/3f8l/7gbVJbgBgaKUb+PQSdykh8vtflWjvZeM8RXV785vu1ybqc8UZ mCjvE114pL9z/2rmJljQXR2Jq+TePf/nmD8jcYhH20ipy/xDe/SBjCF7jgz/JhcdwrBy 8ewG2SQpTYX+9dNgFVVBG9MHn1VdkeNSceDDYveddbDES5lddnGvV+GEXc60S00q1idN 0bcA== X-Forwarded-Encrypted: i=1; AJvYcCXqc9Bdbns6OwdjILwOYBfombeogw/TEH9YwBUhnK9+UyWrFEZOdbfvqLR0LZ7FB7rmORs8VcKM0rOjmb0=@vger.kernel.org X-Gm-Message-State: AOJu0Yyki2BsoE6iVgfLNuVNscRc3OgoM08IF1PI+Uq+AUK85m0lguGt dG8QsTN9m6nFs9iX+wCd6jL7OP08e1aACRHRP9R1993lQ/EAn9tYM5Ni X-Gm-Gg: ASbGnctie9vs7fRgXoELZGRLk/W1J9Rf0wA0QLjtU1OTC22L0RfcJRhmUCxBXZazXsS 6YEis/35v0nCX9aCIcFl+uNSYbuRTIk+N6FrTgYSXaTD9oSqw3IUFIKUgANlK1XvjwXjoVCD4cC V49EJTKW7rQZqDXe+Nbx2MndwkwlEgcNd+qWMhhcCduEC9tGM7U+/N23PhsRfVmFIDwPdTlso5E vdnxhzQra51kuTsxPZSxGYrMjwmTQp20HGuR56K7/hnI1SrhexVjww1P0HBb6HzaMev2P6PwlPX UDAPgd8dU5LjHS7GkiRXpCuYO0J0RY74XybyMgCoxtEmao+XOXGLsRF+sH6bOJuNvLvx4PWzAW1 H0WkT2JZNPFeN0V6LE39S5Zpl5Nnnrz1V0cavF0vrqkwjqiBHe5OMrzgKqA4ylfnbTq3WtghGfP AYvUUn+oQ3rJsE092qOzh5hOUBDHLe3Vh7ERw3vIBTwlmTuboqqoea8TeLfCSpIYc4S+DF7qb+s AlRktS01K5Zsf68XI8h0m13HbOp6BGR2rsIh9+tq+jlN5c4QS1nww== X-Google-Smtp-Source: AGHT+IEmYwFaqV8z42kKVpm+csA5lgwwLVTZWeE7isuCiwv14jZl51eAVuMpwZ1A5qrZNvfHQofXdg== X-Received: by 2002:a17:902:ce81:b0:294:918e:d230 with SMTP id d9443c01a7336-294918ed5edmr33375155ad.56.1761351932492; Fri, 24 Oct 2025 17:25: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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:31 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:36 +1000 Subject: [PATCH v4 05/11] mfd: macsmc: Add new __SMC_KEY macro Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251025-macsmc-subdevs-v4-5-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=876; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=DV+93RqA20zYsiZVil2ilvoMWgypauFCp2tp4wJbtLo=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM7uT5j/5uLhmIJrXj0R4mce1dxacTk7SWbXtmDFt k1TQ7V0OyayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKhjrGPEwMUpAFNddpvhf8lXBsaJthzWLl7P+442dhqmB2rFujvXrvAzjZq0s8yAn5FhY5v2Wqd 9hjPq9/XOutZTeMc+OfwDH1vU9kDLgg1Mbzh4AA== X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 When using the _SMC_KEY macro in switch/case statements, GCC 15.2.1 errors out with 'case label does not reduce to an integer constant'. Introduce a new __SMC_KEY macro that can be used instead. Signed-off-by: James Calligeros --- include/linux/mfd/macsmc.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/linux/mfd/macsmc.h b/include/linux/mfd/macsmc.h index 6b13f01a8592..f6f80c33b5cf 100644 --- a/include/linux/mfd/macsmc.h +++ b/include/linux/mfd/macsmc.h @@ -41,6 +41,7 @@ typedef u32 smc_key; */ #define SMC_KEY(s) (smc_key)(_SMC_KEY(#s)) #define _SMC_KEY(s) (((s)[0] << 24) | ((s)[1] << 16) | ((s)[2] << 8) | (s)= [3]) +#define __SMC_KEY(a, b, c, d) (((u32)(a) << 24) | ((u32)(b) << 16) | ((u32= )(c) << 8) | ((u32)(d))) =20 #define APPLE_SMC_READABLE BIT(7) #define APPLE_SMC_WRITABLE BIT(6) --=20 2.51.0 From nobody Sat Feb 7 21:23:44 2026 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.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 26D2A19F43A for ; Sat, 25 Oct 2025 00:25:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351945; cv=none; b=k/RUIXsCQ8A5w0Sj6JSfAMHxQZ4OgBXA7Hh0/ZXZF/A0bZcZ+h3C2T/wyTH7OmVLxZqJFjh6b33hLaNxezHMyYNh5q5BcqHjuu1Lo4GURqvmYcwoUnwTb8H5zrlqQor8g32ywEbWKrEOb5uoHyj739PryqOsJwxzO8YfrpLVvMA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351945; c=relaxed/simple; bh=Jp/X4h/fhqkiR40VPrDp4Sc6frpyMoA1B2YPx3MetPA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e+Ae6lmPJuJ74Ez23dnbnjQOZepWy3S6hkPiUcQ7gfff/CIqUUCs0OXMyC2HQRwNWjuWcCWJhcNQhEewQVfwzrSPUYBqxUSzPvcyKTZEInjlgW2cOx+iDl8J66PfaL4ZkteYz8NqtLiOiH5ZW2prlh3u+LlIXY3Mkj5+JGPEsCk= 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=Jq2IDoK0; arc=none smtp.client-ip=209.85.214.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="Jq2IDoK0" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-27d4d6b7ab5so38852905ad.2 for ; Fri, 24 Oct 2025 17:25:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351940; x=1761956740; 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=98Z6Y2DLvkYEdEhSPHKjG6k/fltdgY1Gg5/1IUmFZa8=; b=Jq2IDoK0tDw7VwXkCdkddLbWeb1nwJsgVv9AI0y0owTecGtJCVeoTxamuNe+9bbVKn XLd+4Dl7ULJjh5jm5KiGqS9j1b0ekB3qjY1PsalnMlE8pD1IC+a1Ucierb/B1tGCIT8k Bb65s8af+d3WFek1Xr6o5N5JjsO3pw+U1550fLNE5x8NAddiyqkunng3imddFtR0+f4U 3vPjgtpgpigiNpo/YxNaAajGn1Db06m0vrcddjBLXHhPkl+FCcPXZjOBuPYnPvMhYcql yWyKvUhYVkeCmVICXWvlpuntGBBRAmA8DronQAthW0JFyfNmQjKgm5tj8W/HCwqK031G VK3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351940; x=1761956740; 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=98Z6Y2DLvkYEdEhSPHKjG6k/fltdgY1Gg5/1IUmFZa8=; b=VXx1uxyj4yWEQPkqU6u/5StBLKWnlWK3lAJVMSurQFa4UU9ny9B96gSn2VK5yM0CyX iKIsBPFzTWFhTTT3SFvv0D70ZuCe8EMAxOrLqLQIMNljYdKT97wR0ZfTniLY3ZNCkkP/ 7UrEp1fKbWdeMRxrrxkNK1fB3WNP0e+0rLw0Sd+SMk/XrlmDYnARbXbKITY1FnL4sTO5 IDleZsEgGZ3rpJZmqolUH413yVqXVsEnJ+mVE1U09liejPoL7jWlbttGAhVuB3gm4hGX WDLWBJXIZ8yut9WtxsIzYSAhxstd4oNS+E9aCs+T9sUjDASWA5lFuBreF8OUErgVs6kv dXbQ== X-Forwarded-Encrypted: i=1; AJvYcCU3VB/GPoE8nK9zWkc7vB8KAPZb9SBRznfiTNmEcyWfisaaV3fvbFGiOtLlbfl1o3US0MPwyVErnB5lY3Y=@vger.kernel.org X-Gm-Message-State: AOJu0YxKRugQvIv+MAOeQyVpXlZVSEvL7UNLv6m4hLarRpfJeuZgxaP/ YUn+ibp5QW2dKswkA2Z5LgLRTBgDqpl20ys+friV/VA7CpzIBdS/w+cK X-Gm-Gg: ASbGnctsgS9piTUkVfFXZIQgLPp0+e4Fvi9eUkJ3+9JcAl6sriqbtmax1nnyjl5T9Hs r1yTByE/kM6MQE/jyaULNaA+8XXHClNj6FRqbMN+rxSIXBREgmgsjvalXh6+lKdrpsvpT9lLw6I K9Iiknsnw99F8Lf7bPbszI0NGgPoUUG1TezSYBdpDMY9WdkCuCaGfsUtv+fkG5HCL//Gr/JZcFi 7nBni2/afUtzZSIjqFTMUEEvI80XiB6z1RVZ7z0f/r1yi+Ct5kQq/JkShYXx9wvHqQoGPhGIFUx PRb9B19uDevq2JSd/io66Lne1QeHmB08YVnmTdm1xxKhTv+Paq7PmQrIljJWv1jMi7TLjte1w7Q WMUVpjUSrHyayGkbeLBD4tOZJlAWiU3tAyFmMspvyy/EnL5GG6mLpB4llq6D1Rgr+dPw7zMCi8W wi9WXcgeNMoBSonfD/3LJ7USt6C/7fqboO+dKpXCl3xCEBL48GWBDczEDWBQyGPjmruhOVYsDss lS3BvCeeoHn3cpm4D8M9PNskmnLfyxqa1FzmLrcc0jKTk3ewBrwAnlW+TEIdbb/ X-Google-Smtp-Source: AGHT+IGNambLQ3Qbf6pNFcis13dHu6dC75uSLf1afWG2SSeIFLBHshVxqzj6f/XNqtRxFIRxXP4+nA== X-Received: by 2002:a17:902:8696:b0:290:ab61:6a4a with SMTP id d9443c01a7336-290c9cb6289mr248080405ad.13.1761351940153; Fri, 24 Oct 2025 17:25:40 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:39 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:37 +1000 Subject: [PATCH v4 06/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: <20251025-macsmc-subdevs-v4-6-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=29182; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=Jp/X4h/fhqkiR40VPrDp4Sc6frpyMoA1B2YPx3MetPA=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM5WlG3MK53/P94rY/Zi61N9j0JmfjyvGG3yy+vUi UKjHuVbHRNZGMS4GCzFFFk2NAl5zDZiu9kvUrkXZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNQx1jFi4OIUgKm2+sjw35WPlS05gYVt6zuVuTWpHM/z7v9Xfs9YXLrq5oH2EsEZ/xkZNvOurnw 2a8ULOY5Fr52a5hQp/jJ8HHlY79YPvxPJzBLpvAA= 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. Reviewed-by: Neal Gompa Acked-by: Guenter Roeck Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros --- Documentation/hwmon/macsmc-hwmon.rst | 71 +++ MAINTAINERS | 2 + drivers/hwmon/Kconfig | 12 + drivers/hwmon/Makefile | 1 + drivers/hwmon/macsmc-hwmon.c | 851 +++++++++++++++++++++++++ 5 files changed, 937 insertions(+) diff --git a/Documentation/hwmon/macsmc-hwmon.rst b/Documentation/hwmon/mac= smc-hwmon.rst new file mode 100644 index 000000000000..6903f76df62b --- /dev/null +++ b/Documentation/hwmon/macsmc-hwmon.rst @@ -0,0 +1,71 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +Kernel driver macsmc-hwmon +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + +Supported hardware + + * Apple Silicon Macs (M1 and up) + +Author: James Calligeros + +Description +----------- + +macsmc-hwmon exposes the Apple System Management controller's +temperature, voltage, current and power sensors, as well as +fan speed and control capabilities, via hwmon. + +Because each Apple Silicon Mac exposes a different set of sensors +(e.g. the MacBooks expose battery telemetry that is not present on +the desktop Macs), sensors present on any given machine are described +via Devicetree. The driver picks these up and registers them with +hwmon when probed. + +Manual fan speed is supported via the fan_control module parameter. This +is disabled by default and marked as unsafe, as it cannot be proven that +the system will fail safe if overheating due to manual fan control being +used. + +sysfs interface +--------------- + +currX_input + Ammeter value + +currX_label + Ammeter label + +fanX_input + Current fan speed + +fanX_label + Fan label + +fanX_min + Minimum possible fan speed + +fanX_max + Maximum possible fan speed + +fanX_target + Current fan setpoint + +inX_input + Voltmeter value + +inX_label + Voltmeter label + +powerX_input + Power meter value + +powerX_label + Power meter label + +tempX_input + Temperature sensor value + +tempX_label + Temperature sensor label + diff --git a/MAINTAINERS b/MAINTAINERS index 3c6322872dd1..79b9f40224a9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2440,12 +2440,14 @@ 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 +F: Documentation/hwmon/macsmc-hwmon.rst F: arch/arm64/boot/dts/apple/ F: drivers/bluetooth/hci_bcm4377.c 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 2760feb9f83b..d6e9e39d2762 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -1174,6 +1174,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 73b2abdcc6dd..f9c049ce9124 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile @@ -148,6 +148,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 000000000000..1c0bbec7e8eb --- /dev/null +++ b/drivers/hwmon/macsmc-hwmon.c @@ -0,0 +1,851 @@ +// 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 + +/* Temperature, voltage, current, power, fan(s) */ +#define NUM_SENSOR_TYPES 5 + +#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]; + u32 attrs; +}; + +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: + *str =3D hwmon->temp.sensors[channel].label; + break; + case hwmon_in: + *str =3D hwmon->volt.sensors[channel].label; + break; + case hwmon_curr: + *str =3D hwmon->curr.sensors[channel].label; + break; + case hwmon_power: + *str =3D hwmon->power.sensors[channel].label; + break; + case hwmon_fan: + *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; + + /* We never have negatively scaled SMC floats */ + 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('f', 'l', 't', ' '): { + u32 flt_ =3D 0; + + ret =3D macsmc_hwmon_read_f32_scaled(smc, sensor->macsmc_key, + &flt_, scale); + if (ret) + return ret; + + *val =3D flt_; + break; + } + /* 48.16 fixed point decimal */ + case __SMC_KEY('i', 'o', 'f', 't'): { + u64 ioft =3D 0; + + ret =3D macsmc_hwmon_read_ioft_scaled(smc, sensor->macsmc_key, + &ioft, scale); + if (ret) + return ret; + + *val =3D (long)ioft; + break; + } + default: + return -EOPNOTSUPP; + } + + return 0; +} + +static int macsmc_hwmon_write_f32(struct apple_smc *smc, smc_key key, int = value) +{ + u64 val; + u32 fval =3D 0; + int exp =3D 0, neg; + + val =3D abs(value); + neg =3D val !=3D value; + + if (val) { + int msb =3D __fls(val) - exp; + + if (msb > 23) { + val >>=3D msb - FLT_MANT_BIAS; + exp -=3D msb - FLT_MANT_BIAS; + } else if (msb < 23) { + val <<=3D FLT_MANT_BIAS - 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) +{ + switch (sensor->info.type_code) { + /* 32-bit IEEE 754 float */ + case __SMC_KEY('f', 'l', 't', ' '): + return macsmc_hwmon_write_f32(smc, sensor->macsmc_key, val); + /* unsigned 8-bit integer */ + case __SMC_KEY('u', 'i', '8', ' '): + 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) +{ + 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 -EOPNOTSUPP; + } +} + +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; + + /* + * 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); + 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); + } else if (!val) { + if (hwmon->fan.fans[channel].manual) { + ret =3D macsmc_hwmon_write_key(hwmon->smc, + &hwmon->fan.fans[channel].mode, 0); + 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 struct macsmc_hwmon_fan *= fan, + u32 attr) +{ + if (fan->attrs & BIT(attr)) { + if (attr =3D=3D hwmon_fan_target && fan_control && fan->mode.macsmc_key) + return 0644; + + return 0444; + } + + return 0; +} + +static umode_t macsmc_hwmon_is_visible(const void *data, + enum hwmon_sensor_types type, u32 attr, + int channel) +{ + const struct macsmc_hwmon *hwmon =3D data; + struct macsmc_hwmon_sensor *sensor; + + switch (type) { + case hwmon_in: + sensor =3D &hwmon->volt.sensors[channel]; + break; + case hwmon_curr: + sensor =3D &hwmon->curr.sensors[channel]; + break; + case hwmon_power: + sensor =3D &hwmon->power.sensors[channel]; + break; + case hwmon_temp: + sensor =3D &hwmon->temp.sensors[channel]; + break; + case hwmon_fan: + return macsmc_hwmon_fan_is_visible(&hwmon->fan.fans[channel], attr); + default: + return 0; + } + + /* Sensors only register ro attributes */ + if (sensor->attrs & BIT(attr)) + return 0444; + + return 0; +} + +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_dbg(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_dbg(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_dbg(dev, "No label found for sensor %s\n", key); + else + 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 ret; + } + + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->now, now); + if (ret) + return ret; + + fan->attrs =3D HWMON_F_INPUT; + + ret =3D of_property_read_string(fan_node, "label", &label); + if (ret) { + dev_dbg(dev, "No label found for fan %s\n", now); + } else { + strscpy_pad(fan->label, label, sizeof(fan->label)); + fan->attrs |=3D HWMON_F_LABEL; + } + + /* 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; + struct macsmc_hwmon_sensor *sensor; + 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-") { + sensor =3D &hwmon->curr.sensors[hwmon->curr.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_C_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_C_LABEL; + + 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-") { + sensor =3D &hwmon->power.sensors[hwmon->power.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_P_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_P_LABEL; + + 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-")= { + sensor =3D &hwmon->temp.sensors[hwmon->temp.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_T_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_T_LABEL; + + 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-") { + sensor =3D &hwmon->temp.sensors[hwmon->temp.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_I_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_I_LABEL; + + hwmon->volt.count++; + } + } + } + + return 0; +} + +/* Create NULL-terminated config arrays */ +static void macsmc_hwmon_populate_configs(u32 *configs, const struct macsm= c_hwmon_sensors *sensors) +{ + int idx; + + for (idx =3D 0; idx < sensors->count; idx++) + configs[idx] =3D sensors->sensors[idx].attrs; +} + +static void macsmc_hwmon_populate_fan_configs(u32 *configs, const struct m= acsmc_hwmon_fans *fans) +{ + int idx; + + for (idx =3D 0; idx < fans->count; 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); + 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->f= an); + 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= ); + 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); + 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); + 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 parse sensors\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 sensors found of any supported type\n"); + 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_dbg(hwmon->dev, "Registered SMC hwmon device. Sensors:\n"); + dev_dbg(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"); --=20 2.51.0 From nobody Sat Feb 7 21:23:44 2026 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D30C1DB122 for ; Sat, 25 Oct 2025 00:25:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351949; cv=none; b=HVVgW4Ca36joqaDGVOvnlP1E0MoxJxh2hVqXwv2XjVBFHvYw7jEa8s6j9Ia+Chj9o9aOXAJMEOqyf5/d26hOnlCNoWGrkMNpGqdhanotpGhMYO8bx3CnrQQD6CeMrwi+LHIR8MpqELt0jf35Mrl8X37NkCIwgE+DT85VvNum3NU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351949; c=relaxed/simple; bh=EBXsHgi+TPtnux5Mjfvq3s8Tobe6+wN+A1W9K6WofCg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LV281+07quwFy8z5/SLmsJsNyj6FVCn8LHxEYeAKbRbZAO12peNHtb+ct0PbjXaeoO15YTjoPyfTdTn/U8C/4nSCDLRz7uYXR2ruvMs1U3nC8diEgb1Lo+80pmTjU2FU4MwjRo1tBQ43+Q7fqxxBennyuX4EYPIVXWDs+2k5WCY= 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=nr1KreK6; arc=none smtp.client-ip=209.85.215.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nr1KreK6" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-b6ceba7c97eso2434797a12.0 for ; Fri, 24 Oct 2025 17:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351947; x=1761956747; 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=vfRZW1u7QrD8wKs/E/qokjfPak76+Jqb1NI8oZKYmR8=; b=nr1KreK6axEXyVC73WTwFJTGtK33UrYo4xZYW/eqhFqFnUxcVxba/IEtJO+g1pEmIh ak3NIV1pVy+Yqz+osd1NxfvDcnqKTb2CFelydd2ET3xabHuRXLbAsNI07EPMt4bfpBkE 2jkENDtCc7zlF4zMNqokX+l7Rt8UEke433ts1qKPTvYjHqHIC3lilN9WXJXvu1ahhF4s ZkN1SYR7BibKOhbK32kYuyuJ7HM7L+T7rrcDfj0FjKGstYwRO00mMYjT+RsWGCdIbTyR MUyeT6chfa/9b6AbQu6nyycgB89rCNNfSZ6vPMj31FVr2S4+vdm8hd7MCx3Tuylt9Ysx Va9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351947; x=1761956747; 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=vfRZW1u7QrD8wKs/E/qokjfPak76+Jqb1NI8oZKYmR8=; b=mLRxhAqipe2lOnxSMUNpGvdR4uOkQKMKX9pAO6FaMZKqmRmzHRzOq1hDER8XgBIhhL 6TNE5Buse+rwz399VQrfMhm44QVAktI8iFbqywyV1EzxRjcG7TYaZV9i/Zx/34ly2RzR NjPfAoiwMzS91EUL/+JxNJnKvi9AmGC9N4e6AlQ9LqAZVnsY0SNXK6NKK/vBkIKcIJcp SN/PmaEqrSclBjyDFzYqaK93JhGY7fgHrwdnqRmBuwzeEFv2s1sChQwA8X4qkt+KdXY7 mmz0bfQbNJbjm6/GerfIarqqVMwl/pbDLlWZb7UR+ZlJsA3Mti8jEXbjckhR++k0ibfR jY7Q== X-Forwarded-Encrypted: i=1; AJvYcCXg7FgHXCH6gvyFPYgVTsMwT3PXEJV2YxDl111/PyptibMvH+MzCgkqhj6Wa0LQ2eHDt69bTgibxw4LcrM=@vger.kernel.org X-Gm-Message-State: AOJu0YyIz9SF4c1JP+ZkNVo0C/S7NZjr5aZK7Kb2030SPkecfjQRmVaG +uNUO34ynJnHiyrN+RJWgIE8KTx6UsX2Bn7g6oz1ZfuVMCbPhHNAqvya X-Gm-Gg: ASbGncsTAZ6axOqpwQO5rSDuLBKXZ3XBtj/LGIWQfqNB0UmdO0SUzcecLO8XtLZLcFd Bvkta+qqV4xTmfNcX1c3tgHvVL/S7E9fmLaoF6qMF1KNiSLOHRUPpI57LCbDSDsq9Jj3KrDk5XA +KrHITGrt/tqwLoX3KngtHXtHTPS43ZJFVt8aMXSBKAT2UvTE/+7AzBdd0ad4uIlMEzkOpmRS44 nfweNRAnzkrJ+sedU1+0cIy+1yfyYWzzlje8ie9yMp7InMzcFD1dUpYRy6OuEVulwOcnb/dbIkD /3MyN0DeCICxLNLvSnaNCSGDQyejsbDyNDPxETIpe7r2dWbJE/GRMD7Rh4w7cWuqwVSwD4xCk5P bWBeR+8zV73J7Kxk4vlDgxJjlkBekefyfeW9YEHIVo+6hPKgJ2ppb1m3x40aG3T6HFX8g6FoxFj tujzmxlEdUnRtIUeK4sk8+mB4IosrhVMwNFdfbhTuPMNwqOjF2AWwJbT2zLkq7J/rKMxFKQ6uJb uiUC0bkcfQAXZK6J3wlDvh7D8n/tr/w0wMNkHyBQohQx1gMhBx9d+jCqSkGQr1H X-Google-Smtp-Source: AGHT+IE7b7WlJg8PMfCez4BRWP01L89M03XHDqmXIAUdqR0o0INVIyz4n2FlGNeMHwcTEVAj8jvj0A== X-Received: by 2002:a17:902:ce12:b0:267:a55a:8684 with SMTP id d9443c01a7336-290c9c93abbmr330781785ad.2.1761351947512; Fri, 24 Oct 2025 17:25:47 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:47 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:38 +1000 Subject: [PATCH v4 07/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: <20251025-macsmc-subdevs-v4-7-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=744; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=EBXsHgi+TPtnux5Mjfvq3s8Tobe6+wN+A1W9K6WofCg=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM7tvHxyY2mQfvkOj2Ou1b+lL5wt2qeuPnvBRX51B rNbl1QLOyayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKhjrGPEwMUpAFNdv5aR4VLggrKHBVUNC5VEVaVC98ZfZxOt6Jh45+IVmwlNsr23dRj+Z+7eV7D x+NRGVakE1ehjKc+n716bd2HBjQL/Jt/QqBk9XAA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the SMC hwmon functionality to the mfd device Reviewed-by: Neal Gompa Signed-off-by: James Calligeros --- drivers/mfd/macsmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mfd/macsmc.c b/drivers/mfd/macsmc.c index 500395bb48da..51dd667d3b5f 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 Sat Feb 7 21:23:44 2026 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) (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 BD79518A6C4 for ; Sat, 25 Oct 2025 00:25:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351957; cv=none; b=TqiZu9wmyx4tjh6UtChJjyjpdwUcZ9pTR1TnwGo3rpmiUB/MptnHqmRe1M5kUu/2+VyLj3ZVWNYy7nLNFujd2lGg56cHxP3+w0smh924Yq/k/nexsLqjbmHIxQz53Z1cMDgCrx0Nb9Ae/s940cbOoFt2DTwaL9fdrXBuCgd82FA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351957; c=relaxed/simple; bh=qbCgnMd8T8fdXEJO2Sfs2UTF6O0r3HOGLEUAM6nDpUA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oziZdO+QD8wUEXGPJoPjf7SA4x5ccdj6qOOJy2I7qhFt+dVSjSX9hGvEOS5SDcz+8XUYwxf3SFRX7/HU5hF7uTg3UMDTikWsY5m81m5tCoZJhxM89LZp5PAAy/4moPzdeigDfDbvWEcjReeTZVzwVkK14Z59RNfhMpkEqMM+zhA= 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=aNufhavN; arc=none smtp.client-ip=209.85.215.174 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="aNufhavN" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-b6cf1a9527fso1540385a12.1 for ; Fri, 24 Oct 2025 17:25:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351955; x=1761956755; 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=Jbni90ydB4IruupdlOayfvTBYH/WF8pKT326sjNamOY=; b=aNufhavNBkE7oMPc34KxxC2Z1ve2HsZT6RnoyHhBaoJOGgXPz5McV0kQzyczjLmZun QfQPbxygy5fkDsIMtnoZbrrJX8DxX2ukVSREeANuH0um2r6zh5KzzJ1guMMUBh9SvUCs Jo1HfSaSBwL7h2r+i2l4173bQBSse+N4AKnJLe8KdtT28zpj8tLg+FWwSZMnz7j7QVst mB/jREaY1DK5vXsQuW/Hcv0VY83/DS4cZeTz1LLIdhhtFolfLG80raPx8wyZ6DqW+BN9 Y19nGWy3soqV4Ud8Rkp1ADXzsxWwqFhaTnNGLfmfsSwoB21437v7ldMhnme0zEfu1C+F umHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351955; x=1761956755; 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=Jbni90ydB4IruupdlOayfvTBYH/WF8pKT326sjNamOY=; b=tPWXzJiNhHq8DuTpGtDoqyESLXEuvbkqkrHnmjnIdFv5Aw6/OQyEWIm1aZA63g2VD4 Oeafh+mhuF3ciNFtGxupFRAaAycNGuIr6mxhiycCQ+V0G6b1wXc1Gwp5KkyT4Nal4WEM 7BUtehbk5AngDSbgo93WKOS/3NFxqXcUlpcAFhDs2DBoBUt1CuyeDtVZbm5wWEfYYy2E oqYXOrj/uudsUTWV013hMx4DM8EpSkD8mPLzANkziAzJeK5UvrWM41YFMKZpgpk8oRe1 Ot6lE0UTwgXtYwjKGFj2gyUk7rYh1BXLMRMThOcxA0AYeRkpPXRPz+wyqE5luiBINiNS CsLQ== X-Forwarded-Encrypted: i=1; AJvYcCXuwHG6qGmO07Qbw2c/3g4rOdp9RpMxJm/xPCvmlnrDORt6iR//TvP3D/Q649OcvJ62ULtjpsrLtesrrus=@vger.kernel.org X-Gm-Message-State: AOJu0YycXrPhApQwlxAXOEZctgT+puesvaNF53FVPVlP5oTC6Pltggej XvoO+Vj4d0SVpjgydpd9l/HdQeuWUI0PMZlfr+GaTyeMAVhSGImq1Lah X-Gm-Gg: ASbGncs4kjgXuB11daygH7aaGVq2pgKc/HiyCRUqrncxAtykEG/irqK5KJjz2t60SSb ptI7277/73Pxix50h+K3DTM4e61mIzKLoWg+XUvofwyahYKFxzCgDyMnHTvZwlxEqva8nFxn30o n5+QMo/4S0Wtj43EgHjdqi9iT7XLYyAS8g5RTeQafTfHR73bVrwf438oiyXHJVM5Aw2t4b+JY4C 5L4XWo0N+T8cAGHbRzwTIgAR12AAey1rwBM518IavNm2mirLGlrrPdI7KmGGmHSv9BS+yJKA1ot cfMUEOE2xlrWx0ewJD4UQvKLaIs1OsK/31Hza0nxZAjeEWLa4m2WeH2PxtbRoClKDMfUtZWr0rk Ur8wjWzk34J0E+whOdU/YbfhgnCi2wwJ/ni9momwGZLP9QZH9vN+kAJMjpCq4hR/ibgcyFOzdfh qPGy5C2pKxSRvOTwT62O0JLcwKPdO+4WvOPNIcv904iF1mYUJQY4JJ8TFuc1caPvViJXnrj7e5X RKJpkT+fm+U3oLSG1S1t0/Ix5HQS1lnPNWyCXY+XN3D1JKUrwApjHg73aTlGDit X-Google-Smtp-Source: AGHT+IFPwqPsvtz1bsOUWAwwIaLr2lL/5o73zsh+qlU6l48owjh2dJ5ayQCBQIwjefBR+9GAkjlBfw== X-Received: by 2002:a17:902:f705:b0:294:9132:75d2 with SMTP id d9443c01a7336-294913289fcmr29825465ad.25.1761351955121; Fri, 24 Oct 2025 17:25:55 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:25:54 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:39 +1000 Subject: [PATCH v4 08/11] input: macsmc-input: 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: <20251025-macsmc-subdevs-v4-8-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org, Hector Martin X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=9156; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=rPeCGfdEO5Pface1zsJfI5Bq+ssOoaIL0E4UGeysAXE=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM7Vsm/YljVRKbzuukhK8LVF+1NEFjaIP9ltdM3DY X1Rd65vx0QWBjEuBksxRZYNTUIes43YbvaLVO6FmcPKBDJEWqSBAQhYGPhyE/NKjXSM9Ey1DfUM DXWMdYwYuDgFYKoPLWNk2M7MofIle/bUKA6+F7s+p19b2ta31tDgLJsei8Kj0JplDxj+2amFyl7 ZofNfbDXjTO7EJ/dy5lk8VF7c09EQspMlbb0bEwA= 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. Reviewed-by: Neal Gompa Signed-off-by: Hector Martin Co-developed-by: Sven Peter Signed-off-by: Sven Peter Signed-off-by: James Calligeros --- MAINTAINERS | 1 + drivers/input/misc/Kconfig | 11 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/macsmc-input.c | 208 +++++++++++++++++++++++++ 4 files changed, 221 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 79b9f40224a9..e8283f127f11 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2451,6 +2451,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-input.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 0e6b49fb54bc..109660a1a5d2 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -981,4 +981,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 + 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-input. + endif diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index ae857c24f48e..480a0d08d4ae 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_INPUT) +=3D macsmc-input.o obj-$(CONFIG_INPUT_MAX7360_ROTARY) +=3D max7360-rotary.o obj-$(CONFIG_INPUT_MAX77650_ONKEY) +=3D max77650-onkey.o obj-$(CONFIG_INPUT_MAX77693_HAPTIC) +=3D max77693-haptic.o diff --git a/drivers/input/misc/macsmc-input.c b/drivers/input/misc/macsmc-= input.c new file mode 100644 index 000000000000..d35322856526 --- /dev/null +++ b/drivers/input/misc/macsmc-input.c @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: GPL-2.0-only OR MIT +/* + * Apple SMC input event driver + * Copyright The Asahi Linux Contributors + * + * This driver exposes certain 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_input + * @dev: Underlying struct device for the input 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_input { + 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_input_event_button(struct macsmc_input *smcin, unsigned= long event) +{ + u8 button =3D (event >> 8) & 0xff; + u8 state =3D !!(event & 0xff); + + switch (button) { + case BTN_POWER: + case BTN_TOUCHID: + pm_wakeup_dev_event(smcin->dev, 0, (smcin->wakeup_mode && state)); + + /* Suppress KEY_POWER event to prevent immediate shutdown on wake */ + if (smcin->wakeup_mode) + return; + + input_report_key(smcin->input, KEY_POWER, state); + input_sync(smcin->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(smcin->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(smcin->dev, "Unknown SMC button event: %04lx\n", event & 0xffff= ); + } +} + +static void macsmc_input_event_lid(struct macsmc_input *smcin, unsigned lo= ng event) +{ + u8 lid_state =3D !!((event >> 8) & 0xff); + + pm_wakeup_dev_event(smcin->dev, 0, (smcin->wakeup_mode && !lid_state)); + input_report_switch(smcin->input, SW_LID, lid_state); + input_sync(smcin->input); +} + +static int macsmc_input_event(struct notifier_block *nb, unsigned long eve= nt, void *data) +{ + struct macsmc_input *smcin =3D container_of(nb, struct macsmc_input, nb); + u16 type =3D event >> 16; + + switch (type) { + case SMC_EV_BTN: + macsmc_input_event_button(smcin, event); + return NOTIFY_OK; + case SMC_EV_LID: + macsmc_input_event_lid(smcin, event); + return NOTIFY_OK; + default: + /* SMC event meant for another driver */ + return NOTIFY_DONE; + } +} + +static int macsmc_input_probe(struct platform_device *pdev) +{ + struct apple_smc *smc =3D dev_get_drvdata(pdev->dev.parent); + struct macsmc_input *smcin; + bool have_lid, have_power; + int error; + + /* 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; + + smcin =3D devm_kzalloc(&pdev->dev, sizeof(*smcin), GFP_KERNEL); + if (!smcin) + return -ENOMEM; + + smcin->dev =3D &pdev->dev; + smcin->smc =3D smc; + platform_set_drvdata(pdev, smcin); + + smcin->input =3D devm_input_allocate_device(&pdev->dev); + if (!smcin->input) + return -ENOMEM; + + smcin->input->phys =3D "macsmc-input (0)"; + smcin->input->name =3D "Apple SMC power/lid events"; + + if (have_lid) + input_set_capability(smcin->input, EV_SW, SW_LID); + if (have_power) + input_set_capability(smcin->input, EV_KEY, KEY_POWER); + + if (have_lid) { + u8 val; + + error =3D apple_smc_read_u8(smc, SMC_KEY(MSLD), &val); + if (error < 0) + dev_warn(&pdev->dev, "Failed to read initial lid state\n"); + else + input_report_switch(smcin->input, SW_LID, val); + } + + if (have_power) { + u32 val; + + error =3D apple_smc_read_u32(smc, SMC_KEY(bHLD), &val); + if (error < 0) + dev_warn(&pdev->dev, "Failed to read initial power button state\n"); + else + input_report_key(smcin->input, KEY_POWER, val & 1); + } + + error =3D input_register_device(smcin->input); + if (error) { + dev_err(&pdev->dev, "Failed to register input device: %d\n", error); + return error; + } + + input_sync(smcin->input); + + smcin->nb.notifier_call =3D macsmc_input_event; + blocking_notifier_chain_register(&smc->event_handlers, &smcin->nb); + + device_init_wakeup(&pdev->dev, true); + + return 0; +} + +static int macsmc_input_pm_prepare(struct device *dev) +{ + struct macsmc_input *smcin =3D dev_get_drvdata(dev); + + smcin->wakeup_mode =3D true; + return 0; +} + +static void macsmc_input_pm_complete(struct device *dev) +{ + struct macsmc_input *smcin =3D dev_get_drvdata(dev); + + smcin->wakeup_mode =3D false; +} + +static const struct dev_pm_ops macsmc_input_pm_ops =3D { + .prepare =3D macsmc_input_pm_prepare, + .complete =3D macsmc_input_pm_complete, +}; + +static struct platform_driver macsmc_input_driver =3D { + .driver =3D { + .name =3D "macsmc-input", + .pm =3D &macsmc_input_pm_ops, + }, + .probe =3D macsmc_input_probe, +}; +module_platform_driver(macsmc_input_driver); + +MODULE_AUTHOR("Hector Martin "); +MODULE_LICENSE("Dual MIT/GPL"); +MODULE_DESCRIPTION("Apple SMC input driver"); +MODULE_ALIAS("platform:macsmc-input"); --=20 2.51.0 From nobody Sat Feb 7 21:23:44 2026 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 AF4661C7012 for ; Sat, 25 Oct 2025 00:26:03 +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=1761351965; cv=none; b=hDsZPqwnEXBoaKxAQBt1SvhLZyHu4NpdQUCmVvC5NZ3Gabl1LlL+JIDrOEnALhU4Hke0SCj4y9MKK2VqpJDXLsvcoZNog7WSyt3TZnx3Kakf7S84La3mdZ+6CQni8yP2nh4hhvsitslcNpl3yoMcqBBVIZ/f9CoAiWviB70bn8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351965; c=relaxed/simple; bh=9CvGSj3k52YgdYK4J0MHeIq2HkIZQxGeUJahNJ19td0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OnzVE54FGaW4dYANi3dEz/zEloB70hXGBdEzkR5rLLVF7A820I8wnIOR2wOUQ49M7gKXBPJMybL3ADY4OL0N2dZM303spgr4CoGlLiHLS9kKIXjj4Xmfa6AWpJVyB/qH8fAl7pRJoNajAu9YizCJ6ZtVFYIv/DFhgYClMV/JPbQ= 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=m4nrRPYA; 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="m4nrRPYA" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2698d47e776so21891905ad.1 for ; Fri, 24 Oct 2025 17:26:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351963; x=1761956763; 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=6CiHvIx4iCcyVz9XM+n+OAI2ebsG3UALzSjgEuG0sIw=; b=m4nrRPYAqpvCSL3yZqRfzxNRxGeBAaJ2TXYKZDbuT43XN5SXQI/ymCC9VrLWsE9nDH MsiBtK+gZrxEDoXb1NTsXjdoqa1b0mQvN5kF1oCn5pdlJJIO7zxG/JAZdz2bd55le83R 5Xc8ESFPlC7704BHUb0JgT8nnZACn3r5ElSTk0cCATWSK6sjDTYbw61tUNxqAznyzVWJ eJuB+uTmLwwMh7nQGpPbxDgd9aWtAPGiz6d6tetmS/Y0NFXqNElfro9V+L/xnl83FAwv 4rhx2ipnVzXGxl+Slmk3vPa4n/jFUwMK2uTxYFNZu4CbaZ5cloh3SBR99Rh+jkv99Tav 2wyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351963; x=1761956763; 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=6CiHvIx4iCcyVz9XM+n+OAI2ebsG3UALzSjgEuG0sIw=; b=W0eMjTqQmNRg4FripN3e3gGd8pD+7l1Ge6Xj5NiJSS4g6Fka6hgREHqMf/vQDzNmgU Tm7JoS4GSGjVTMlyJfMUT2AnekiaFhbGZwKTr8MmE/h47E74YNCoc5lIS4R6FlddAzVT k3QSWQDiwZPXyE0Nc8OtLnbVvkn2F6CqNybD4hsyVhlbgsfbVyFZ9Vu+rCaPmVLEy+sp mTNvwXfd9qvKnbJ1wDPfvw3Q27m9mcei0l67tdS/y9yKxOEZ6k9wX72IVKdS3C+QDFF9 MIpCyvpBJIk82YBnOv6C6FFkyWX6h0Rup1aCMIESTZa7EwJxPwI9YyCP/OD+Wkey3FLf nZ/g== X-Forwarded-Encrypted: i=1; AJvYcCVFQbS9/+lFfJL+RpCvd9Nls3qoIHA08tmsDXdjC4+KcAuRFx92qWFTzN5AC6qkJ8+gCnuppdhpyK/8Xeg=@vger.kernel.org X-Gm-Message-State: AOJu0YzoQU03aG8IiMwFgMpuRICCMVzm6yVOzQ8t6L4kYHGQo4bHyHMh SaSYtBgFfL44CYJCQT8zMy4GRsiytAvYvhExrNkX3Rg/HppPuDAO74xA X-Gm-Gg: ASbGncurHlYRRfESzj+qhlUUEzZdyp3NcxsbZdzf7Yp09IKogCF/bN8TYf1rDGJpYNn UfDMm2Lt/pZlANlucnozRpBMP/xwqhkzhIZ8sA0geOeinvyxuNAq1LCKIZgdv6IWepmiyda1ZA6 cZdNZa5+fmW7WrHm9PDvrJdE2Xo8/Mk4PsXxMe6Ylwq2CezSYwXJTdAQY3KuEXgm7IibvbOrTJm mUmb94tE19BU93aQ50gKbAwDySeZvkdlVC5tNPYnckWjzBMPQxkKE0OY3UJYeI6tua3Mj5JGuQ3 rBJ5+XIJ9lPl4dnHBhZ5x6qD7AwPeWUiBVXm78J2be4WBlT3bXWiStuJg38Dhp+YRlcHkLjRlbE +NcOi7e47/3uo2xG3MA1NahUMHMl7B5Axej/ulCRROdu6MEFjbWVk1L17uMmeCf4zbyaWRRPtUk AxuwmzFDq0LyAeo0E1Ixo4FE1eMxz4h+KMlCzAnTaiuanUtbrB5ZN4aWmo9F5od3uA8LlRUHH88 174sJwjSbVun/VSpNILYnswwFyl6Um1PWJTL4W/u4o+1J2/PsQ4yg== X-Google-Smtp-Source: AGHT+IHSa7MdO+RyudQ13l7ZBDW5YjuDQoXfBKNGzygwW/8ijBbpH54bUrATc3DfIp5eGwuXkgv2HQ== X-Received: by 2002:a17:902:fc44:b0:26d:58d6:3fb2 with SMTP id d9443c01a7336-290c9c89697mr387774495ad.12.1761351962920; Fri, 24 Oct 2025 17:26:02 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.25.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:26:02 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:40 +1000 Subject: [PATCH v4 09/11] mfd: macsmc: Wire up Apple SMC input 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: <20251025-macsmc-subdevs-v4-9-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=737; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=9CvGSj3k52YgdYK4J0MHeIq2HkIZQxGeUJahNJ19td0=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM4d3hJqcNPewfPwlleiK7fkXZLhtVltl2i2UGbKY wMxq6iQjoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFQ32DP8D1tQvEl5SoUQr3Tpeel9LQEufdveGjjeWpK55erOQgadQ4wMBy1+6wZ LhiSptYttjWV5voFZ8fr10xZCNt+PsEww+B/ACgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the new SMC input function to the mfd device Reviewed-by: Neal Gompa Signed-off-by: James Calligeros --- drivers/mfd/macsmc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mfd/macsmc.c b/drivers/mfd/macsmc.c index 51dd667d3b5f..3b69eb6d032a 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-input"), 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 Sat Feb 7 21:23:44 2026 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 C766819D8A8 for ; Sat, 25 Oct 2025 00:26:10 +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=1761351972; cv=none; b=MThk/gthfhXxYwIfwR2i/CwzWPJZqrb0CTuojG2KoBjoj+qjkt4fk6xPfP47G2uQMuZFhum7wISzB+T4EAjXc4dGM5ehcH8CG8of2Q7beQtQtdwrvPMWDxDI+QCqJnEUaHIUz9C01LGd/nf+XM+yDfFRGmm4liWRHrJE3CezjGU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351972; c=relaxed/simple; bh=aj4aVwNnkYZP/VgOnJhsAwtvL4XTAa/u4ZaKgBAEh3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bEULTv8hU8ubW+VvNL1yXioE1imumogShHzEQnjaYV5DTCiXr+CP/M4to8SjFDtbaS7lF+gGs11Q012b8fkqnQOvfRqLP2dMAmNOUbBq7CkU+6ClrVKI/w1B+bfdhQ6F/KFQ0JSc5ehLZVtFLMvk0O1t6xaMGu/ZuFLG4Qdq1Y0= 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=GcQvV3mY; 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="GcQvV3mY" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-292fd52d527so28777055ad.2 for ; Fri, 24 Oct 2025 17:26:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351970; x=1761956770; 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=U5nftmpeMNxILQOhfvmkuo3ny/kYcoPK9w/ov0DMU2I=; b=GcQvV3mYF7B79ax1rkdHGufwtMG6W9dGQzFord+OUpGkacoQg0jN7nfbKNXE521E6U R5nRPNDkFT1U8CwHl45pZVVxU9AEmeZs2pUQitf1SGSqtPuIsXFCxHUxV5cLuPnHPG2l hxQW9UzQIymVogSH8cJYMpz1MWDxqjby8jQZwwu7DAt4q942BqC0BHm12mK6S7G9jvYo 0SHhBkyGWjCTg227X5bAcMd9reMmYnXaWxpgohsE7iseuWWzyiOa6haUiZUCa3eIaZFP 7QijLqNcSpB7KcRnOP9weLpKxCpm799XtiTbJj3APAUW28RMXlBn2SR1RmemD0BHDQCm 0BxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351970; x=1761956770; 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=U5nftmpeMNxILQOhfvmkuo3ny/kYcoPK9w/ov0DMU2I=; b=axqPnLChcLjhxGHrAJFqy/ySDYQi7KwRUP0UcFeC43VMQbVd2I9C6xlvZqD81N1Bk9 SFwn29wOIAShjxb4hXwpy3cqIHZ6oMVK+mB7bE+8bCP99AAyg2hgkyCRJUsoDqoBgnmj vahFiZAx09R1M1bS95qOVOprTyRbMgSruaYD8RSYZiBUPJayQKmDn0NzyB6bS4MzuQZN 6pJ2T7DOV9lIagrp6/oxu1WU7ML4rRAOHp3lKRNuWawmkYqL2R55rPGOPVqCEPIAh2Uh Fs2d6aFLx30HkZBq0aGM8DO+tIhKNzco8GOfh3SnzHY27FJIX1Q3yg5R5A+b8C5Mdb9h F+9g== X-Forwarded-Encrypted: i=1; AJvYcCUccOVFPhwNQkifXdXukKDHaFH3Bi0jKcqL93h36xAdA7N1BbyRvYAsYc9iVTiRZ1/WoLBsl55TRS9D7ZU=@vger.kernel.org X-Gm-Message-State: AOJu0YxEU/CaqIkyQY94s9GLPl6Yb3J7XbDTndF3ixrIjWW491oRU7nI vzvBe4J9v8M7BJo+U5xdQDwLgVNy4czUeW7YGHE9Slr8JMcOlxGs+4qn X-Gm-Gg: ASbGncsQCJPQAwqIRy12ABTH+i8rMLrzdprWrDKhXRuRP/RaVZaFagKU8ar+MFjOYmA fpvDK8O093+lIigPzf/tUrI4wgWvAvXoLMnR8jO6iMUWk/32TazCdB/uFZfh14qYAn0/KPVHVb6 ie4SkjRe9OXP8rCNDXI2KNqRQs9D/PAMLJzWMUAfBvHUJtB4Rtbk/1gKZQheCcto1wLo2WLE8cj dhkxMZ0MQkdFAfLsDZ/mDRMZwPeK14PBmEjR+IMRf2w0Fekok1tAvBXY8x6HT6o9YT/UHpyB5yv i0jzWQytf2LSOcfLGmb8iZbXXCTdiSdSvT7bX4PpimWGPqTUygzWEJlVDoBFGZQ6WZMLMFPWWgx kK7o0k/68yuHFSqNKQco2CElKiddxY4H1G+jSHFBX6V2EMzRjgzQepqcW5G5sWrx39TWd5CrqTU PCFmAH2jUIRL89Xndsh5CKQ0oqnROzg1AdvpHu+o2umKziOxDUPxeHw7VjdERUmoS9WbIkvE2vf I19WzZJUIbBC5vubfeRelqC7VM4mrEfDEf4j0jyG+S+kcsyzm88Ng== X-Google-Smtp-Source: AGHT+IE8KakcB5GHMGG8ECARmltmRt3k8h0a0+JIbETOJrnh8ND1oGT/dCjWnKYo35ORe4+xL9/X1A== X-Received: by 2002:a17:902:db05:b0:269:8f0c:4d86 with SMTP id d9443c01a7336-2948ba5b73cmr48845065ad.53.1761351970277; Fri, 24 Oct 2025 17:26:10 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.26.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:26:10 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:41 +1000 Subject: [PATCH v4 10/11] arm64: dts: apple: t8103,t60xx,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: <20251025-macsmc-subdevs-v4-10-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2689; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=2GQnZlbwDgkFgLSJTTlkgGVtMUC2q8Y46wlmJNb88ZA=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM59fOHE8XGD1q5TTvfe1J0p3i1UNPndGn9/d7OLU d1ZTR9rOyayMIhxMViKKbJsaBLymG3EdrNfpHIvzBxWJpAh0iINDEDAwsCXm5hXaqRjpGeqbahn aKhjrGPEwMUpAFNteIiRYdmlmbkMnxU871/kSnOszjRcPnf5/0tbq3w+nJg8l2vSeQ1Ghlvlif/ yF+yz+2l6ZbLx3N8bhLcfEPusO+nlav2A3Ss3neQHAA== 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 ++++++ .../arm64/boot/dts/apple/t602x-die0.dtsi | 6 ++++++ arch/arm64/boot/dts/apple/t8103.dtsi | 6 ++++++ arch/arm64/boot/dts/apple/t8112.dtsi | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t600x-die0.dtsi b/arch/arm64/boot/dt= s/apple/t600x-die0.dtsi index 3603b276a2ab..f715b19efd16 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/t602x-die0.dtsi b/arch/arm64/boot/dt= s/apple/t602x-die0.dtsi index 2e7d2bf08ddc..8622ddea7b44 100644 --- a/arch/arm64/boot/dts/apple/t602x-die0.dtsi +++ b/arch/arm64/boot/dts/apple/t602x-die0.dtsi @@ -121,6 +121,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 pinctrl_smc: pinctrl@2a2820000 { diff --git a/arch/arm64/boot/dts/apple/t8103.dtsi b/arch/arm64/boot/dts/app= le/t8103.dtsi index 8b7b27887968..59f2678639cf 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 3f79878b25af..6bc3f58b06f7 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 Sat Feb 7 21:23:44 2026 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.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 B0F331A5B9D for ; Sat, 25 Oct 2025 00:26:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351980; cv=none; b=epHqYwmMOihpI9Yr6BAazmngh/vjLGmZHgTrzvaRAApq+E8S4GjiNVXjBbEUzMav40AylflarwDfAr8CnnNcMUix1Uxj++X70nbHeQ0+dFuLhThh/7Gpg+NXYt6lxD/iEJQtij7wUFkDQbb95alcU95pGbnkZLzHkzOHYT8Mod8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761351980; c=relaxed/simple; bh=blO0jMZ91jZxBecLz4sUiPaIn/+wJXxedrkceCauWAw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZSoYEPZ/KfYL8Y1TCluXkK9PUnPuFVeuxPmbdW4PaoHdL/iKryJhUDgYmyj8lFk3pzjPqgpaO0UmUCwodQj5Gb+Gebmyfjmqo0zy3En7yKBAut5VFKgxY/pGaUKQsCG4ocuPdmwco55s4dmoW7DvwLmd2tGldq6CZnuqcinVe+U= 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=ScnbX1N7; arc=none smtp.client-ip=209.85.215.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="ScnbX1N7" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-b6cee846998so1744812a12.1 for ; Fri, 24 Oct 2025 17:26:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761351978; x=1761956778; 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=kkS8UOCQav//ZpV9v8yuH2eqFYmItpXNJVXoQev0J2A=; b=ScnbX1N7cF76T6D3KuBeL5GPQoSTGfajw/rAoiK2uR+t6bSb74us8dPedJOxY60MqM QzWh91AavTTY4YLF/r1wfoeqv8Tn0cnN5RHH4sM1pB9Kz+1mE4TDOv7Mfwb35+6ni1aj Kq27m55Gy56GHIPMuGfmeWt8S/SR+r8XRWHQYQF7lVs8F+ZKl2mk8qRt1Ela/iQNvndq h8bkToyIbW9W9fa7Kn+rtucY+hHFgnI+b+YwCCD6Y8dz5AXLjx2ni3xsqDRUFhsSXQIL QwCTLgPsNv5zPrrufi7oH1dOTU/OezVOeb/qv9IC2WblGFCh45Ni/quD2UGdaFdVC4bq hYMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761351978; x=1761956778; 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=kkS8UOCQav//ZpV9v8yuH2eqFYmItpXNJVXoQev0J2A=; b=FaeLt5F50bngf5fYfWBUFJXf9axmDn1mkZwZloGNYstP1Wm5pLDT6Mmm4dwLQz3/R5 uJfZFISiipc2gsuJ6wPm0e9mFQlECD+ZtObCJoGiSyXZVb6q9dNFCyx0FrOTd3wVXKNu ayRRFlKIznHeSjbQQPvLfvW67lms3XxhyPjXeAflOlfo2ZWoV4sMByWMkqT0M2koMvqJ rSsY8MRHoEOpKI66kDhUFEHEHcNiruKPQeABvC0Y1qbTp5QKAGwcVnaE0VEQW4VOEw1P SHc25mvmywjVl9zXzYGgTPjcgmJKFNuW06tRc57KYtBel2b7L97DBImzm2izEeTexvlp Knxw== X-Forwarded-Encrypted: i=1; AJvYcCVJlSzjaccgMOsYrqSbFntX4dqtkeSaXBg3vor3IYxo7Nukg8oam9ax6/Nf3M+6Of4PyPFThk5IGJk1BTg=@vger.kernel.org X-Gm-Message-State: AOJu0YxiSkKXf95yzzyKWhtQDuGog8HeS9fat+raEwQ90UN5TmiMMuQv zMKE6tPrn+VLuuuGm/dqWXRmd3esAfdP3HQhA9a0rKhOIeA7D91ZMlLY X-Gm-Gg: ASbGncs03DTb9HmYa0mUGFP946FzqtYSG+ZhjNNPpRLVNx29YiFH3GpQ9TkIqJ/rz+I xKsWGmOVzespSaZWVimivyAqY6dFVhpU08rlhbhWIFcRuSmg2WxF3JAKGRHO6zr5ZrhGUrVs0jF NCIBbWIKrS1heDnzPKGgT5yDUuQqJUyKS8Wk5t2p2bEACuBpLe+QKxOunwuBo4Nvvn87KBa+/fc NYsyZAFnVNK2L3+iZL607640acwoIjyBHkJ/9SLvR42ShA0XmWZjZzOrkGXCfAgOJohIiYWOBsS FWYj1VLOR8vuapKrSCSkf0qoEgpuuo/0CVXNzRcq2pZsYm1f3FyQcIEG75bAzs3xer4lUt+tcVz 937LTUP+q3sVMhc+DsG5Gut7VizhBtXvOO6a5OxO8RZORJeZ6haL2bYH2993lmpKA4ZfMBBuW54 IoSWfKL3iE8lgo0Z4U3EIgLGcBj3KkVkLFfDHJQiZqIq8uzYSQzMKLCKwnGHNk+tPD36GzItrhn nn/LFObp8ERZtQbTsRCLvEXOnbFhhoyru+F1JRc2UQVWDAe4RhycG+/TmDWnL9M X-Google-Smtp-Source: AGHT+IGOu3EpUwvujctPCXvjEmK+q3G8/dQmcFYBpX4Ta2DfxH67IAV2pAsu3KGnKv40D5KuTb8qCg== X-Received: by 2002:a17:902:ef4c:b0:290:7803:9e8 with SMTP id d9443c01a7336-290cb659d58mr388130335ad.48.1761351977650; Fri, 24 Oct 2025 17:26:17 -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 d9443c01a7336-29498cf3f4asm4728885ad.11.2025.10.24.17.26.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Oct 2025 17:26:17 -0700 (PDT) From: James Calligeros Date: Sat, 25 Oct 2025 10:24:42 +1000 Subject: [PATCH v4 11/11] arm64: dts: apple: t8103, t8112, t60xx: Add hwmon SMC 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: <20251025-macsmc-subdevs-v4-11-374d5c9eba0e@gmail.com> References: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@gmail.com> In-Reply-To: <20251025-macsmc-subdevs-v4-0-374d5c9eba0e@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 , Jonathan Corbet , James Calligeros 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, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=12033; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=blO0jMZ91jZxBecLz4sUiPaIn/+wJXxedrkceCauWAw=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBl/JM7NX7i5PnQpE4sAq9oPDuOE1l/XbP6dn/B1U/bBH qYJFspeHRNZGMS4GCzFFFk2NAl5zDZiu9kvUrkXZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNQx1jFi4OIUgKl+cI/hf8T+bF3hducsiyCFlicxltXrln188HLj1C/uGeJV04KzaxgZptyILJ5 8W2X6G7aizNq7Mse6E9e9cS2cvcb/fE6QeXcvIwA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Apple's System Management Controller integrates numerous sensors that can be exposed via hwmon. Add the subdevice, compatible, and some common sensors that are exposed on every currently supported device as a starting point. Reviewed-by: Neal Gompa Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros --- .../boot/dts/apple/hwmon-common.dtsi | 33 +++++++++++++++++++++++++ .../boot/dts/apple/hwmon-fan-dual.dtsi | 22 +++++++++++++++++ arch/arm64/boot/dts/apple/hwmon-fan.dtsi | 17 +++++++++++++ .../boot/dts/apple/hwmon-laptop.dtsi | 33 +++++++++++++++++++++++++ .../boot/dts/apple/hwmon-mac-mini.dtsi | 15 +++++++++++ .../arm64/boot/dts/apple/t6001-j375c.dts | 2 ++ arch/arm64/boot/dts/apple/t6001.dtsi | 2 ++ .../arm64/boot/dts/apple/t6002-j375d.dts | 2 ++ .../arm64/boot/dts/apple/t600x-die0.dtsi | 4 +++ .../boot/dts/apple/t600x-j314-j316.dtsi | 3 +++ .../arm64/boot/dts/apple/t602x-die0.dtsi | 4 +++ 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 ++ arch/arm64/boot/dts/apple/t8103.dtsi | 5 ++++ 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 +++ arch/arm64/boot/dts/apple/t8112.dtsi | 5 ++++ 21 files changed, 165 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 000000000000..b87021855fdf --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-common.dtsi @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Hardware monitoring sensors expected to be found on all Apple Silicon d= evices + * + * Copyright The Asahi Linux Contributors + */ + +&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 000000000000..3eef0721bcca --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-fan-dual.dtsi @@ -0,0 +1,22 @@ +// 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 000000000000..fba9faf38f4b --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-fan.dtsi @@ -0,0 +1,17 @@ +// 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 000000000000..0c4666282a5c --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-laptop.dtsi @@ -0,0 +1,33 @@ +// 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 000000000000..f32627336ae7 --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-mac-mini.dtsi @@ -0,0 +1,15 @@ +// 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"; + }; +}; diff --git a/arch/arm64/boot/dts/apple/t6001-j375c.dts b/arch/arm64/boot/dt= s/apple/t6001-j375c.dts index 2e7c23714d4d..08276114c1d8 100644 --- a/arch/arm64/boot/dts/apple/t6001-j375c.dts +++ b/arch/arm64/boot/dts/apple/t6001-j375c.dts @@ -24,3 +24,5 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,okinawa"; }; + +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6001.dtsi b/arch/arm64/boot/dts/app= le/t6001.dtsi index ffbe823b71bc..264df90f07d8 100644 --- a/arch/arm64/boot/dts/apple/t6001.dtsi +++ b/arch/arm64/boot/dts/apple/t6001.dtsi @@ -66,3 +66,5 @@ p-core-pmu-affinity { &gpu { compatible =3D "apple,agx-g13c", "apple,agx-g13s"; }; + +#include "hwmon-common.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6002-j375d.dts b/arch/arm64/boot/dt= s/apple/t6002-j375d.dts index 2b7f80119618..d12c0ae418f7 100644 --- a/arch/arm64/boot/dts/apple/t6002-j375d.dts +++ b/arch/arm64/boot/dts/apple/t6002-j375d.dts @@ -56,3 +56,5 @@ &bluetooth0 { =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-die0.dtsi b/arch/arm64/boot/dt= s/apple/t600x-die0.dtsi index f715b19efd16..e6647c1a9173 100644 --- a/arch/arm64/boot/dts/apple/t600x-die0.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-die0.dtsi @@ -37,6 +37,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, diff --git a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi b/arch/arm64/bo= ot/dts/apple/t600x-j314-j316.dtsi index c0aac59a6fae..127814a9dfa4 100644 --- a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi @@ -131,3 +131,6 @@ &fpwm0 { }; =20 #include "spi1-nvram.dtsi" + +#include "hwmon-laptop.dtsi" +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t602x-die0.dtsi b/arch/arm64/boot/dt= s/apple/t602x-die0.dtsi index 8622ddea7b44..680c103c1c0f 100644 --- a/arch/arm64/boot/dts/apple/t602x-die0.dtsi +++ b/arch/arm64/boot/dts/apple/t602x-die0.dtsi @@ -114,6 +114,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, diff --git a/arch/arm64/boot/dts/apple/t8103-j274.dts b/arch/arm64/boot/dts= /apple/t8103-j274.dts index 1c3e37f86d46..f5b8cc087882 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 5b3c42e9f0e6..abb88391635f 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 97a4344d8dca..491ead016b21 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 58c8e43789b4..c2ec6fbb633c 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 7089ccf3ce55..aeaab2482d54 100644 --- a/arch/arm64/boot/dts/apple/t8103-j457.dts +++ b/arch/arm64/boot/dts/apple/t8103-j457.dts @@ -56,3 +56,5 @@ ethernet0: ethernet@0,0 { &pcie0_dart_2 { status =3D "okay"; }; + +#include "hwmon-fan.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103.dtsi b/arch/arm64/boot/dts/app= le/t8103.dtsi index 59f2678639cf..f1820bdc0910 100644 --- a/arch/arm64/boot/dts/apple/t8103.dtsi +++ b/arch/arm64/boot/dts/apple/t8103.dtsi @@ -909,6 +909,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, @@ -1141,3 +1145,4 @@ port02: pci@2,0 { }; =20 #include "t8103-pmgr.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 6f69658623bf..500dcdf2d4b5 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 06fe257f08be..11db6a92493f 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 fb8ad7d4c65a..a0da02c00f15 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.dtsi b/arch/arm64/boot/dts/app= le/t8112.dtsi index 6bc3f58b06f7..c4d1e5ffaee9 100644 --- a/arch/arm64/boot/dts/apple/t8112.dtsi +++ b/arch/arm64/boot/dts/apple/t8112.dtsi @@ -912,6 +912,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, @@ -1180,3 +1184,4 @@ port03: pci@3,0 { }; =20 #include "t8112-pmgr.dtsi" +#include "hwmon-common.dtsi" --=20 2.51.0