From nobody Sat Feb 7 20:40:32 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 7F0F22D9EDF for ; Tue, 7 Oct 2025 11:17:27 +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=1759835849; cv=none; b=DzzLon8+IJmAi4j/aoItVMeaDdHyI2MRy/HiB+mesurBwIMPmE6WrRYzFIETiNMlDRBTlxf1AGFnVaV19M4wQNIO7zyoFAB+6Synz3Dg1jwqTe/AeIh/Gb8sx1Z0/tljpm+Q4IdYyRwZ2Bu5dO1sRQHB07A5xaNnrebxNnrV900= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835849; c=relaxed/simple; bh=doc6D/qsvutmJbzXvdZDYSYz0ZxXLQM+iyKROYiaouk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ki05SHAPERMvmB01vFEh5TtJiMA3qGuIaOggqmI+wCzsa7GFILr0elgDwC64OdNjOBVPQUpitHvyM3udWyXf7cdqRVbY0Lrpnp7IhQoxwyEx++lxY6mHhnX4XbZlh6/E7aVRAjzrWnUix8gOTHyXT9ppwmcbxYVqB9rAOGP4bTk= 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=KYBH3HH+; 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="KYBH3HH+" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-b6093f8f71dso4023822a12.3 for ; Tue, 07 Oct 2025 04:17:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835847; x=1760440647; 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=KYBH3HH+7C+9XtJq+ei87qEBhzeYDF1fyjlcZv1D9vKzLp5uVNT8kqe3aX4XYphBw0 B19bNN2uHydat7igSwa1S+NXKVgStZm5agyCZaWlVTcac9vgUUxLxhNZ6aZVtg0/bief gWFOYZYWfUA4HvQX/goAwCPeBZQuSLv5aw5DK0nivchfIpo+y4rEOYK1rH9LJPEktiZf REovMpnQYIuhSbdjtuHhoiHQZn0CksKqzerF0yhOinAjX6uYnFcUblI3fulX5SNNaBhP sya/BdfbomccBzw3i7VUizL93Sxnhp+KVEeaJE4ZZ+JhubYtNXMBcNlLs46Uohd+iMrx m82w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835847; x=1760440647; 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=T5xKCE+H5jM7MJgzG7EMv8P2f2RFX/fXFlsxdS4VmZhxNcnwaFh3o+OXemeAkbOL8N XZnFxZJOjT1EGistkGjXVHn6K566ScCEL9WwILHQ87OJ4d823ASmgpSPmwGvMKFiEMkO LIy80Onotw1xCoYjhtldzTnHpOBrqBrYCM//WuxISxMQXStGo8jhen4X3Fn3HArr0q7I lSIrQs5vYU9hUeEa7BJsJlLOqgSkPHYYloMqHb7Nllk/pt6lBpsCYQhXjBaePBdCkxCZ l8JwVXRPSqBwwpoIX+ar7qzeJXIB20zFXdwnqKFmCoC0fJws7RErfJjmmb4tonRu9pz7 z3jA== X-Forwarded-Encrypted: i=1; AJvYcCU2C8XSpiAcG8HOqr19wKWKXhwBbEgYA/pgdDrhTrX+XSNwJzd99SZR9suoI6+KXDr407TW/mg/aVCy+f0=@vger.kernel.org X-Gm-Message-State: AOJu0YwT7DFFlXbpHN7h9Wn200Z//xkpYXR74UIB119Qfsd/ywvQB9Og kY4uLPjKGdxkjrBhaG1S0Gf8/ZzHdeqyEzjJoSngmi+lEgbr6+0pEVC3 X-Gm-Gg: ASbGncu95uzJ6rGWmHI8w9lWrQ+SBPSYH60HwUOhikeAZ9ptJddDbfEMKCLsdeglPGy A1WOrtXmMl2fW7tV7bJyGo78g8xMGWRufii0p469djDmQ/bc5UhOq3KgnI7B8JYE1y+x0XcxTZV sLTonSghTc59iyN9FiL5xoBbecU5UlhGbPTPkmhY9kNtdiqXDVRgOkK7FqJ1URDLzuJjZjlGU5i 40pJJHVDLdJApW2JGgAWUwhanx95XV6keKZ7u1NEw3jKy6LDTTdvLwx+DjLzkBqHFu65xNIwweU SBRyTjdZtS+KR3AmBsQwG7NI3VaBrkORFjUYsrikNikvJK64cQJXKXyp84p1YOcHDJ1QDHNQ+HK beQoLYt1Y94Ini1zLtEbxHs6SNj6gZqHH0m2bPicKrwP4QNzCkYTyRSVh0RO6c4HpH9a0ywesEJ rsGHbVVf4Rfrx6s0GjYkqn2yPq1kq1aHpTFLXZ95bwzwcvQsNNj2jh X-Google-Smtp-Source: AGHT+IG1/90ALl9Mh5f9pXLacMmG46KttwU7NHyQlkZh6ZDWb9gcUbDfJoG6/1tlU82jvfGzXcd/lA== X-Received: by 2002:a17:903:2409:b0:27e:e96a:4c3 with SMTP id d9443c01a7336-28e9a54423bmr206081935ad.14.1759835846628; Tue, 07 Oct 2025 04:17:26 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.17.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:17:26 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:42 +1000 Subject: [PATCH v3 01/13] 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: <20251007-macsmc-subdevs-v3-1-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm1xdA/gnmZ+44Kh2IUJTdH+HyTemF9jmuURksUgv miFAfe/jlIWBjEuBlkxRZYNTUIes43YbvaLVO6FmcPKBDKEgYtTACbiv5zhD8+iukt/cr9KVxVI f541I+h7vctLgXnBV0/e/eRWMmvKiUuMDF/LG37N9Xz0pudB47fOyN/J/A5Fzhu93opzNfzgT09 1ZgcA 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 20:40:33 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 139212D97BF for ; Tue, 7 Oct 2025 11:17:34 +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=1759835857; cv=none; b=VYtXF1ISp9eNWuspxezMiLxcAS5EWuoUqm/EXQyHdRzoL7OD6dSjAK/C5TEYU8xDX9yfbSNS2eCtzmKsxTLZ1GWqNLoOLjPbD+d2bzvA3EYuMGtUYKAA8JfF70Q4uMT503ZWze5Ljgd5Jdo3URfSHVQAJXgYTBrlqvHT/FZWe+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835857; c=relaxed/simple; bh=laVpP74gTzMbo2qrGHUEyEkSlszTpZA5CERei0FVY5s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lskkWVWBxQN6h8HidYE1I3y2bNrTaduz9e9MxhZ3PT6Trc0HNrfHYfJUMgoUfB+vf66poNZd9gn6EGO6855KJ8rIzw2gKxJLmpH1+htt9datfpYRQ3X8BsaZSs2Z9bnl5XDmsvDsXzywB41UIgvX3/rahEWxEMIx9PcJlsy1pSI= 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=XXN7HPGj; 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="XXN7HPGj" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-b55640a2e33so4561393a12.2 for ; Tue, 07 Oct 2025 04:17:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835854; x=1760440654; 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=ati20Ylz/khRNYG15B4+E/fLC+jK8mAaQ816iOPHxo4=; b=XXN7HPGjjYYMwfGCozDPIbDomS38KWTaisHM9ZQA/dVpVmuMGfZ9axBs5DZT6lNI48 vuPSaIWUTW+4AfC2vvyMsAVoW4LJAgkUojM7RWX2c5TpzEXG9D4I/6OQCcNlzh7TYKhI Z0Gxbi8YhYKptw4UCOfjkrVwcF8Wb3IqofB5bI3IEcHqpWueNvoOwWBPheM5FCu8XOtW wIsukkmSHOdjyi+/tOCPe8jyP/enhxomUwseijK61goaz12tDniIycX+IMmq8yX0UdC4 o2r3CTH59OETkrO8wsGz2FTnY2+5IkcfnYq60PcCHQxph3YtdxRYQJoXJ/je8w9lrszI iC3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835854; x=1760440654; 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=ati20Ylz/khRNYG15B4+E/fLC+jK8mAaQ816iOPHxo4=; b=b3ue8sYDxfTJaOkM35vlI6QBY0ZWUFs7/qCZU16i2W8uZTW9ijtL5ia46Z4mPV/4p1 8fJPvF9/50g1XdEoHc9vX7qG10cSJReESR8iEsbTk8caHKPbD7aRVl8EMOuUoFPnxql6 niRp1Kp2Bx0HX1f5bfTTglFWqZB9Pf8egosZJ5pZH67FLLBbdW/wpo0/Z69IdOpYYJ8w vAr7ct8GVKDHXMHVLXuLlQlf1R0vE9F6ifCZKeFnLlJJ9LqqIOquVlpPBz9KUIYoXlQI cxW7sauAh3QIuyE6lGunqcVhwmPyvNJEpvB7eX8H5h8KeFEq7YWk16qoeouUS/5ql3/Q xyDQ== X-Forwarded-Encrypted: i=1; AJvYcCXLuDn/l9+b/ACB2ymN7HbjbGCh5ChWiYtVHXegPaqR0VINWeROciqb07tX7dwg+h4roTHsw4jbh0BiM88=@vger.kernel.org X-Gm-Message-State: AOJu0YwqNMLYMdVNZi555E9vkWKxesq/RzH254H2APKD0zwBS7vYIUAt sxTbEL0M3Pt/3LFzPSiA21UAccCzwXqE1Mbioj2Hvby4G3L1BVvsQC/Qv4CkbV7D X-Gm-Gg: ASbGncuHAVmrsuP/15bqwQ4dDqJo2kP7WCRIePI1oElIg2WI/7UlUJOXRLt5cq1txmO L1KrMyKpAXfaM0wsKbq2KVVoc6OwNtgbieaZyF0wgO5awd1mQldW4J7Add/5SDCKSnouuHWTztI s1+d/2/mXNHO0vATD8OfTbCnHC7wx49gL5UivQYOOaIGGtrHziH9D1C/TkqEkOyT7IPw19pMlEk vsHLt9AgAEMPkpe0ovsiqDrIAmqzCizgcrihh6Z+g80hgvgCyJNzCnRIHL2VwH3hx/LV6B9ZUC4 E8xOQ5ZmKw3Jar4CG6lfZltKUSLhlztIs0e3/zmBmVHYtfa5mEhLhOQtjE3uNxwTyLA9FMsXlfo CMLOem/PN84RdNWDtq/hCy0g/8kRiJKuaUJRZvJDnM7+KQ9adP+dFIkNiqfPbYu808pGR6HXfbP 3KF/8plPI838/f6Pa7jPVS8bvwd6LEJO3GVw26PNlxYg== X-Google-Smtp-Source: AGHT+IEhXXBkgS53UtOPSU9xv9VmoipHjlFpFVZVBxm49fBbGCyRWBRrkT0xdjC0nLzp6fPABCn6yg== X-Received: by 2002:a17:902:d50e:b0:269:96db:939 with SMTP id d9443c01a7336-28e9a6b0dcdmr219162705ad.58.1759835854077; Tue, 07 Oct 2025 04:17:34 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.17.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:17:33 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:43 +1000 Subject: [PATCH v3 02/13] 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: <20251007-macsmc-subdevs-v3-2-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=6641; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=laVpP74gTzMbo2qrGHUEyEkSlszTpZA5CERei0FVY5s=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm3lO6Wf/5I7V2qC1Ml9R6Ydsd7NdJ59yXP/soyL+ 24UKrJrd5SyMIhxMciKKbJsaBLymG3EdrNfpHIvzBxWJpAhDFycAjCRGR0M/xTu2asYrrj+vODf srBTN445tcez9GjOXjBtZcEitRPzX9xgZNj0a8/XzrTaNUGh7DKPxFMffmFw4LbqyX7tE/jHczH PKhYA 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 Signed-off-by: James Calligeros Reviewed-by: Rob Herring (Arm) --- .../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 20:40:33 2026 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D2FD22DBF52 for ; Tue, 7 Oct 2025 11:17:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835864; cv=none; b=nhZb9kiDrNw3a4++QCezGS1FbL3q7RmWbGrMkXHQRfKCgXJfyflJSW5L6dhTq8iGtU6b7X13raH4sycfPkr7J1FQmxRm5HYHggqq9SvHLgh/5rN+4IV3DSPMn6dscZAjbXv1faFKMz66eQSqAdTphgV7IH9uyGijgjiV0Sr0n7k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835864; c=relaxed/simple; bh=STfTCmac9Yu0j7eiVhtHMDKv6NipIWLHTlXOi1zHZmY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bYJXr76QxQXNAoJ9yOkRJ5l2BsTEaVJEv852d7KkCJHZrXJkTVJbGjtg5GkFjaejs97CO89DvKYsX7pdtyS2WsTA9i0uCGBjPvVTK3XuyjR+i5hgutypALXKdhfUeTbibp3axwoVDsWLfCiMV3CqbPItfRQUv89EQtIPWb0gZdM= 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=adjbSx6C; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="adjbSx6C" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-271d1305ad7so95000555ad.2 for ; Tue, 07 Oct 2025 04:17:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835862; x=1760440662; 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=adjbSx6CDGKKeF0WW1uzJELON+0u6F1zBfvlFxuIBBp8iv7poZnuN6nsk7EY92UotW OUAjgLnZ4LQv8CV7accfLya8riiij0H6G/doktCyLxG6d5FP3PxKuRMg6FaWZqHTqtTF 5Y0S+UmXlh/YyQHXHsErYijJ3YOrd3vrEhyRQYZHaiNKZvDv1psV4Xj6WG224LUM0HtD j1jsLBPO5gcs1P1RkeydGRDt+Go35/TqzPRHZ+lCcgkNNOQLv6yhlTBjXDzCLrkiu9mS YUnSfSBjJGowBA43RLs8elZHg0/fmSjmBxWLe3rX6h5XMQ1nlybopViYA0yhLt9zLzCY aUdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835862; x=1760440662; 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=ZpiNkVIwfuj7ElcG48vv/kRuPYovyRzRuYniSLov7ZtL7HyL3OwmQj5FwzzX1EXtw1 n7IMJ1GeWR4+Lbh8ukPslqUPaBj29I2QoEj++NbuyJKVx+5laVgDiUaly1DXXYNcMPw3 TgOLSxHibFXsxKtaiLkZoGMw0kA6xbo6ss3JbNkDDLX495G80GfWAe7xxPYmqm5bbdSh yOr2ZOFGAb+gcpzA0X6wzqlxxwKgW+uIqTyVTLMykuf6YFFDhGXpKkodxQlpbjXmapht ag0Te49q5Tr1BQf6vRQMehHvMiJ/nFTfhPr/GL02XydNcqIxub2lht7AxZkWDUlj1YSY al3A== X-Forwarded-Encrypted: i=1; AJvYcCVMC+qdKDKjNXzukBIjyxeZuQbuUqo0WIetXe69HI9uhd/hHxzGmTbK7IFPK2PsgnVxL/b8Z/XtXbkM+Aw=@vger.kernel.org X-Gm-Message-State: AOJu0YyMoJqyecMd0XARIPQsOdnwHmY4BjPYBuNcvp6NeX+GE/wpkw49 g2EMXra+DlJlJPmikin6e5x/i6VUzohEGrN4+BjqCaA/J8mtxi7K4jmV X-Gm-Gg: ASbGnctUYzfgCrlvF9xKTZi4g4XSJJ45VOBzZeGf3MRH2OEZjzmOzt795M+y84MLBHt SqOokQyR6g7FK9nQRGNATYLHv8BywRaZdBFaUrUhhInaWFTi3u6C9twi47tSAj+cDEllO/ZMrbe 6iDuPUkYYGxHEP9xrahazx6TGymMcUHH2VEpZUMo4DgVUtF6AIC+8j3P5qyelM0W97/ulpLbbIR 2ekOuc7aIkzdWHNd+pqtEm9mTzKQCQR+JTR0jzZBVtgyv9jBy4z/wJGLJt/TWaYsmxiwsV+OIC9 S4HEyNuljZ39QPWsfvkxPhwjlAHRUeAGIqoLLPpgbnbjA+89x2a+baBRs4E2vDoHifOSzh+5msh 2Bi9y5/WW+xkxq0TsYbDPIHNl7fBD08HeweU5wgomP4HHxkmJROt3hbCy4IXB1ERK88ubuGlN1L by3ggBv4NGsfyM7B+K/bYFLeI0KmSuk8r1lX5oNyyUiQ== X-Google-Smtp-Source: AGHT+IH2MGclpEKmpnzhNPVlqAkunsjPIqO+5MZS7JiVfsyBDGAzpzxIXF50V8FUhMFMK3Q92eBLHg== X-Received: by 2002:a17:902:ccca:b0:25d:1640:1d59 with SMTP id d9443c01a7336-28e9a564e8bmr172191395ad.8.1759835861807; Tue, 07 Oct 2025 04:17:41 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.17.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:17:41 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:44 +1000 Subject: [PATCH v3 03/13] 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: <20251007-macsmc-subdevs-v3-3-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm01OR+Q+nPX/JDXK1leXleUvuurp+EgcGjxddUKp +yjfFO5OkpZGMS4GGTFFFk2NAl5zDZiu9kvUrkXZg4rE8gQBi5OAZjIwb+MDLPdFUS/ijz3e9VY 4uIt+lFRxsru1oOb1cfm8iTf/ql7p4aR4V2kxxXp+5aZnP+llm/awCj3ROfbhDl3Jp3j+x7h+DT wJjMA 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 20:40:33 2026 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.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 176582D978D for ; Tue, 7 Oct 2025 11:17:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835871; cv=none; b=Qe37xxhrO9yYyc2Rzo+GFAuUbdpnHpq1ucqZeORe9FpnkByPwuPMr5xPS8s/JbrHoIdJ+BUCsDRrhnCMx73nYI1Bu14O+9CJ6MgSN9CRl42HJFR8oFM1xgA+jTRKS5kFbJIQ6lGH0yFm5EpohwG+gbGFtnzkA44b1/q7Exerhi8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835871; c=relaxed/simple; bh=DIjn1i6LYuHnBLhKvNWo/fynkhJW/iU4X0uf260tH6w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cC+lL+HvgK9e1rUFGS6JzzCAR+OwlCxXdg/zyOofPztMVAT2APhE6/YD+EoqV5LcWASIW1cOL9akc/xVHLt5GL2nHdif4kYbR4tmhjtf+wn1mPnPYNp+3TxKmsOLqsIspOYxeejZnu4utDoSKfrQFPib9xMCxsxOGIvlylTqQPU= 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=d0dQyHuI; arc=none smtp.client-ip=209.85.210.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="d0dQyHuI" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-791c287c10dso1525864b3a.1 for ; Tue, 07 Oct 2025 04:17:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835869; x=1760440669; 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=d0dQyHuIUHlob4TsU7gDqxAIBq9R5NjRCkbpWhP8MuON1i025sgILsq7FVzXDydZOh qPWPHNS2FG6m6bxnf+vPmjL73DWhMAWFaF+bhcYhyP/mCV/zpnBseRomqkNHjT2UXGqg eiF317QRgTCb5Tr6QwAhxiGXlGe5PzzjYNpnXtYMK4P3361A2GrNNKOrC4PPOR1DPw4S CHEyZpbAMbPEcnoFI7qvcqqtKJPtkbZDBVmBzW7FkBC9/zDdH6yiPmfxv4S957pPOgGE r9l3QIkvKRN2EQaUjJqxBfeUVwV77Kj4z2bBVfDXkSWT+vw0L/9RyTjkIbQX3aNPGk4X SnWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835869; x=1760440669; 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=hoMARmGD1D72QpFMi2MPr975C5Mf3pwE8hQEn4NRQ+sIxfVtXkZV5RD/8u96Up8Mlo R/fb0AssBa9jDJ41TtOdewDiax4S0kfz3VIskoiXFnwW6mrm+NX/JoaRugn/6Y6mnxDD wZDNwgoqsyr3k2yEwEvM85efdv+i9qy5u6s/W0lZ7ai9lq0J/KfQmoVZVpHoiZLafFir icSJW8OtZcSdQklc5Sy+w+ON9uFjGfrRd49TUIQhNRAcfNzQr3+nDn6Jzsnn9O4kVVIv Xev4z3yJ8JJpgYG9qwDRmQr1CE4z7N0/xeNP39No+haiKqZwW78iy+Gnv+YdH2GWGxV9 11CA== X-Forwarded-Encrypted: i=1; AJvYcCX68cQr9gAaRNegBjC/t+3DU7tebxfZ5rDhlrnRk+Z5RrxROd/YBQxfS6er8KJWz0PyRtbtEG+zN7gUBzE=@vger.kernel.org X-Gm-Message-State: AOJu0YzkSgMxOZBufSp9sXu/r++woRFCq5Pji8Vm1RIBkUWlSK0Ny/7t Ye9V8V5mF9jsPSarvpwR/eGsIqlCs2UfnPSjyXnm7eFG9EImeyVqicTv X-Gm-Gg: ASbGncv/njx11lQdqUQoF4tZXkcDPWsQSQFfGUt5vUL/6DT+PmS4T2w7LKUAYK/6nO2 Ea4cm2AQabMoHmtCeFvcenXv9+gphcjdGejyzntC264mbNtPXDPG1STisEdolxGvIImOnRnQF8B 3jUCdLjNk7bIn6OBlMVaYywjSdrPfSJfywyvRd7n1MjNdJYqXYmURcz/xIKMCg2pHEXG9jhJQ61 dzPoCp4WZu5+jzVKZePZqBhzmGnLpz1PPxtevMNKz1wYXZTvxwhfZ/DFOxuLEZsqExGOdn5NxpM j5JDK6MlwqvCOlib+SW+6ckggYv858sZnYaOX8Bw6X5PSpNlrzCtqbBJTlhF+2WeunGF5K8dwnX ABg3FWzVFc0692mfn6UC3AO/Jhz9QCHngTyAvYMQnGiLcvZ5W2MrkGSXFqDshtqq/takNCZOGgW obG8A0lgmxi87qx1wnQX5V1oD+Pr5k2XvuvUyw353R3g== X-Google-Smtp-Source: AGHT+IE9i3oBNg1pFLD6d8BUkWX8cKqHfuFNCfFyKAraBK4jd7pEhvOYjoDhX88W2UnS1BhGRC1x1w== X-Received: by 2002:a17:903:384d:b0:246:cfc4:9a30 with SMTP id d9443c01a7336-28e9a61a7c2mr170446145ad.35.1759835869301; Tue, 07 Oct 2025 04:17:49 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.17.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:17:48 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:45 +1000 Subject: [PATCH v3 04/13] 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: <20251007-macsmc-subdevs-v3-4-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm3dXJ9ryLp7td3nvHxlMaf7RhekWtXnO+6u1a+c5 mTokmDRUcrCIMbFICumyLKhSchjthHbzX6Ryr0wc1iZQIYwcHEKwERSZjD8z1PXCHr/tatuyhNH TSNzgQlHajhkjBo4Ti3YVCZ8YAHHfEaGlXw70kPW1837I/xvyoyIUz7S/9bkft76bqvHpKeZU39 /5gEA 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 20:40:33 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 7643E2DA765 for ; Tue, 7 Oct 2025 11:17:57 +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=1759835880; cv=none; b=qzQguco8epwH3iM6D+m6fWBf80R0Eapqyvwqo6ggd2AwYSMN7VxFm0QADNdorI7y0tLIrK/xrOWSy4FAhujtic08xAA262hCNxr+fQgXElBASvin3vevVonBDq6yZUnKp76L5rSX3Plvn5+gZKiE8MjvEECZKKRp0Fd6QtmXR1w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835880; c=relaxed/simple; bh=DV+93RqA20zYsiZVil2ilvoMWgypauFCp2tp4wJbtLo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iMPGDOz6Hy5p1PB2gGCPL0riTwSaYA6IqeRy+biBBN6XDjuQjsPqfXvT0lHm2RdrPJMxn51B1+MWvTJgqUIGig2wpcEhec0qsD/HRjML46befMh2C7+dRo3H/yx/OZO6nwExRaB+phOYhqi4kIuaIslzYteuu+1Dr0vU6Rgo9Yw= 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=mUFUxkSq; 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="mUFUxkSq" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-26a0a694ea8so49021825ad.3 for ; Tue, 07 Oct 2025 04:17:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835877; x=1760440677; 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=mUFUxkSqbSQEfXHlUsLbFkpFN8+XU8CW4GlZ37fbIHB6iLr8aVOdUYLI9SEiZu8WSd Y+AHyERc8kaO2WLCNKplotSNN+FhDTpsoallFUf5EY4PBQu+PRhsAWJQQoJBrt+XGhGx XTJAvzY2tJiVgoqUex9zRPKAeSOPdAKB1UZJaGfzm9l6PJMjFI8JORgRhBaXbUOC3PJZ 8QqbtMVq4Wm0L24jVBf3qZjJ0dgCHuWsn8PHceYjKRsluLphzmkknXF3vzfLhlQd8yqR 5KCNm77rTc8YhwuNuuVil1CPpzwGqH8msXiRC8lHbyM+THdujOjOYxYRMSKnlLDFvc97 9JXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835877; x=1760440677; 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=nx9Ojfz+qQBDxS6wW94+CbAMbikLgiLL4+QVlz7nv7KXAYdQhyN8OFoCXJoWrvMf6w fd8bfmuJh6ppui74KkrWj1IIf8nD1aNyNIT3eV//4h3m3o4r/p6RAbjECRy5tNGmyUaA HiPc1kDgrnvbZ4QEeGrW2xF1q5L9wlMe3UgB1MUAag+vjwdZVLyaGxaCineJK+5U/OJ0 FenmN0EwZ/6LEA+/hhkZhNOc6euUdFCvPY308X9jFvJKI4H5MhsIYiD4F6Z9yhYdp/rA OTijdc+P06an9yDeStOOQZQ4Kyy60PBNXmebbXmGmiLfqLfQwg73dMq8knxJdC6G88s5 jJ4A== X-Forwarded-Encrypted: i=1; AJvYcCXvsuH1R86+lVmDG+bzZ+NEAY3ofKe8SdeDFFRxqQ0u10w17YSMHmF4iwiNXfi3Jn0VFLhQjTSYBIR4RH4=@vger.kernel.org X-Gm-Message-State: AOJu0YyW5Q+gefHURYzThA4FVMlM0trERTD0OLWsXWmy0WhxdVOexx// VO4fTZgTirY31VvTZ8fAF6q3YNsUpEvafB1+HQLEUH5pm8BWVFXmQ/Eg X-Gm-Gg: ASbGnctrnSWn3oG8PNGA7wxA0hQtlkoxwCVYWX6ipKFqKaKNo3/+5KIyG5IytbPPWIc nbsXr/6OyK13C5PAtesPfdoT0qLfUMeduOpeQ7i/b8PuNHVGHlVPYeEnDAzGKJOXnsI22Q6d71/ WxwndLrOVpcrdvBepDZOo06bqG1Ki41dV2MxadP0TCb08u0+V7pHiAMYWtZCp4Kzl4Yixl7AyI9 vmVFwmg5Rq9Soz0bPBEbVdwY0ZkkBGQmiLMe8SSQgbL16eoVulRScQ1XpPf3ru1xpwwojb3bzb8 R/tILQSpW6mqF8uSDSx7WxrTLlk31mAekX1rJ3F/0hUp/PjCeDK/nrZoIXPRNlzumZ0gamOhX7t gBxjQcY7hb6O/0Cb8cgQ6hogYvHOMN6KmFrOxt2qNahxZ/q25LdRg4WUu6ytyYdYPtcqMqlHe1v /3NZmJnQSEbZPqVZtDeyoVazhbWukLbqd8YNknEBqtxQ== X-Google-Smtp-Source: AGHT+IFRXYX/j0MXYIPWCiTWR10pwTbuC3G1F7eZBn2sHdq/jwsyEH4FFhVQSAeDU8eQ2ogOkSv1Jw== X-Received: by 2002:a17:903:1103:b0:262:661d:eb1d with SMTP id d9443c01a7336-28e9a5cdcf2mr198695115ad.1.1759835876672; Tue, 07 Oct 2025 04:17:56 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.17.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:17:56 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:46 +1000 Subject: [PATCH v3 05/13] 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: <20251007-macsmc-subdevs-v3-5-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm3tcZkTMG3aVOZXVXxrFpwS+56WuPRU0ayerHnnf S/v287m11HKwiDGxSArpsiyoUnIY7YR281+kcq9MHNYmUCGMHBxCsBEwl0ZGf6qs+5+wnVo5xOL A7YzpstdY3508FK26vvLGpci7afbLF/P8D982frPV3QKvQ49zZfh5tEvMbh03DUz4Z/8M4mWRZv 2XOEFAA== 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 20:40:33 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 B34A92DAFD5 for ; Tue, 7 Oct 2025 11:18:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835889; cv=none; b=YiJcPMN/O1wkrRWfdMO5VZYPP+t342dufbu/BbTgopPOt/gL3Bp5cyF0OeoLPuKyzy9tqtSAs0PvFFABkdXoEUkBgNIFt9l1ZnHEDSgA8qlZHZNQ293p7f9vWlQQzvkqDnCBVd9vNu3+ASN8mcYmru34Hx+5NnIowNP4wOzLm5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835889; c=relaxed/simple; bh=h/PKPwiUfxDOo9D8jyv/CS5fEqiLufy2vdgBrrEgxeI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ay5dndLGkBBpV7aRac4p4N5eSvSoD2seWdlMLaV5K8P8B3GxSD0Yt6QdVEbB+ohtFxnq+tQKO1kWpFS1e7+XCK9Lu3gVxJc+vk6637cSz5yml2M1VYtvNI+a+BHKuhi5fTKBIRHLPA0lBe+rvmjs+Bbk6+GVJKcGeD5ZnDrdhXw= 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=P8kFWSJL; 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="P8kFWSJL" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-271067d66fbso60629365ad.3 for ; Tue, 07 Oct 2025 04:18:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835885; x=1760440685; 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=sq/0BpYL71Sxq56qUXZJ5IPCHK/yQdm5JHwTK5bTFU8=; b=P8kFWSJLad0Ui5Ac9fsptsbOZU9p41anDzcUMiqEBRVn71xyna62YltdSXDKPzUc1E x9+6fu3fOZaT/+BG0ecWEWEhUW9CltOsjuyEvO3JchEdXfjdAgGBE07CxT1LSjdXLpxS 4x1LXTunpSCJQexI9lF62oUxE+ELUNGEvKD4w9EV7tmXZagiPF3aqOzSh7/gEJOU+6jk xDRVvNBQMVFsSkYcgTbs4XWoKvH9UTku2d/1xcNv65pnBUL9NY70vy7rMD/tUFti+53I BU9Q8m483Mpb/5woGk4dgSfyI30qV7eU5hsWvavIBZDHqeGKvov0yvSVEZQRav1TzBnr /1lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835885; x=1760440685; 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=sq/0BpYL71Sxq56qUXZJ5IPCHK/yQdm5JHwTK5bTFU8=; b=G0SfbNbFZW9hX77S7L1raKlkpuB+rmEccehLMx34DUBtlt4AigeEUHm5tZnCf7Y3wc X0ypu/iiUOh1vIlJYYmQLjD6n05fXbRuWhUFIm+2bhNzjslTAb4k36mlasDOLFuXdUe3 1G6umbaDlRAR1eArcbTnJDA2y6rdC/ftXbs7B1khOhopsBMxYMlWH7RetXGBfjXd3ViS VXdC4Mjm54H0dnrz89K6aH3kHzD6gY5ee8WCipberf2FwydGoLUoaRtA/mM4mkeWGN45 7dymxbWTv5sThAOMH4pXSzkiqDzP1DDWh2Z4DK8Mm4n4VrqojPDfXBjgjFOHfOYzHtqh z8ng== X-Forwarded-Encrypted: i=1; AJvYcCWsLhAhRbz6tMw05FO9Hq0hu3kg46vhliS5ix0CvWPAQ7qjwbEWjV80yfz2WYfxOUzDKsheDIcDTWdhnuQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxQCG9Eya696UwjWpx9LFmahIisvWFKUF4oPgx3MIREWa7Pt2GH N4e+3lIAS8vvBxF5mY/GWrk1dATquxpg6mgd+MZMXgEioqs9ltRfovUP X-Gm-Gg: ASbGncuV6Svg/UYmPg9therk9FJYOKQGkDxQMbxS+UyM7YEE/zv9/6Mm9p/shx6V20E kdiEedRzxrA9K5zpAJAnpWpzaReT8XhoU7L3aGZzXOVk695wA6iA0jU9rxzCSemdtvwjLLPQ+Eg VrgTSSbtM83wLLUzYTpn4QLtJzO9LFcWWfFJ3O9YmD3ZSfBV4k3BG8zuSRsITm+T7QcRyuJQur7 NPemRLQ20L/4iX9tf5jDpWCoaGHNRWkxooRzkISTkxLi3JTK53VpXfa6m7jws1n4JAD83HrJ0Wf 6ZqZ0vDL6YVPwZQCIAaXbXPHmh0F7JkgaToSONQTRY2FwJo7rKXsEZWBJ/J0FwngeiZRZaUdOw6 n3k7THeIiXCeO8Yf/qTNnZAWjFZ0aqKhUALxqsHU5Oi+UmVrOyQbr5xFmRxE8OO16I5LeKlWBnL JHdRXAyOOedkJYDe2mdtoDRTFEw4JbMaevWOSr1EL5H8lXIYp3eQt/ X-Google-Smtp-Source: AGHT+IETJIaOhJ/njGsNI9Kjvw3q6zS+QZN394dkT5fP/d1RXiMcMLVNL6D9mAcSUlxlFqf/3bMWgA== X-Received: by 2002:a17:902:cec6:b0:270:ea84:3242 with SMTP id d9443c01a7336-28e9a5ea065mr242751165ad.15.1759835884304; Tue, 07 Oct 2025 04:18:04 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.17.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:03 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:47 +1000 Subject: [PATCH v3 06/13] 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: <20251007-macsmc-subdevs-v3-6-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=29110; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=h/PKPwiUfxDOo9D8jyv/CS5fEqiLufy2vdgBrrEgxeI=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm2NVS0oPOd6Raz75F6X1P/zRG7rMbvscHsze7JWP 1enm9WEjlIWBjEuBlkxRZYNTUIes43YbvaLVO6FmcPKBDKEgYtTACYi7s3I8JTpuWjv1XuiM04/ e2UkW1AgKfb3Vl1ZEfPFR+Ff0leGqTIyXGzxktxkb7RhSe6U3GNx943j1rC8KsudfX+XjOqymwt 2swIA 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 Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros Acked-by: Guenter Roeck --- Documentation/hwmon/macsmc-hwmon.rst | 71 +++ MAINTAINERS | 2 + drivers/hwmon/Kconfig | 12 + drivers/hwmon/Makefile | 1 + drivers/hwmon/macsmc-hwmon.c | 850 +++++++++++++++++++++++++ 5 files changed, 936 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..342fe3a5ff62 --- /dev/null +++ b/drivers/hwmon/macsmc-hwmon.c @@ -0,0 +1,850 @@ +// 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 + +#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_info(hwmon->dev, "Registered SMC hwmon device. Sensors:"); + dev_info(hwmon->dev, + "Current: %d, Fans: %d, Power: %d, Temperature: %d, Voltage: %d", + hwmon->curr.count, hwmon->fan.count, + hwmon->power.count, hwmon->temp.count, + hwmon->volt.count); + + return 0; +} + +static const struct of_device_id macsmc_hwmon_of_table[] =3D { + { .compatible =3D "apple,smc-hwmon" }, + {} +}; +MODULE_DEVICE_TABLE(of, macsmc_hwmon_of_table); + +static struct platform_driver macsmc_hwmon_driver =3D { + .probe =3D macsmc_hwmon_probe, + .driver =3D { + .name =3D "macsmc-hwmon", + .of_match_table =3D macsmc_hwmon_of_table, + }, +}; +module_platform_driver(macsmc_hwmon_driver); + +MODULE_DESCRIPTION("Apple Silicon SMC hwmon driver"); +MODULE_AUTHOR("James Calligeros "); +MODULE_LICENSE("Dual MIT/GPL"); --=20 2.51.0 From nobody Sat Feb 7 20:40:33 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 778412DA74A for ; Tue, 7 Oct 2025 11:18:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835894; cv=none; b=nysbZZpI5TaQXlQpbFeRaeX/LG15/7px7OfCy4T71+FbvzO1ifkQ2rs0iPkwiJqVcRw5o2MA0Y3IBaxmf2wZuzO5PNAK9Z9GpK3T2k7+c/THNBYYhn6UNVbNsOaLQ6RZjTbH3rolw0VlJAQqp/BF28JAMEYMHn4lFcqrJWOpiz4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835894; 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=eGMopSM0PcMXxNNuoZ9e0+8VSqlVHLWZJwyLCf27dfxeHNm0aRID7EnppSxqGcDBVdbYKuSdbb+U1mvchVKrn/9ToFdXLVi+RNE6JaMp4jOe5y9kQa2GRjNXNhDE4zcHwqD/HObTWrUVhPXVDPQKuy6Bc+etg5Tui4FowKroH78= 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=Y3g79q2R; arc=none smtp.client-ip=209.85.214.171 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="Y3g79q2R" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-27edcbcd158so79429505ad.3 for ; Tue, 07 Oct 2025 04:18:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835892; x=1760440692; 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=Y3g79q2R3sTwjmbtS6j1kGagio7GsvlTL3JjcMezmmd2BPDZXaSIh0wYudVsmWWL6P XnDZb3g1VeBi1JYWZzoeZC2+BG9nuqzkREQwpe/APIv5IwXMM9+cBuqoZwSzoOBkkYxT r8hjDnHNLhl0nshZ/E492MPsB4i0PXCKlXvf6ESDuBH+oEmzgGiq8Im0EjjVwIcrMNd4 2AUPvTvdigr0WsvEpJRhvML+PWunikkSCvqNAbUEeDd+V0bbBr7iB2wv8TO7sjfnwhIX iFap+nohZedl2KAY/WcLCdYpG/GIJ3OCkfcwcjzDmeujsMB8b9oW3rfDsUIsO7cNTD5A vNIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835892; x=1760440692; 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=kWgOzGJKfDQliVlST0iivmpcjfHWc3lY1SouLGO/Z7g+rODxUsjFUEMG4qf8XqiL6x BnUeteOOZVBzYyv2HpxgRGXAXdpwpy8zOXW89xCYixxxrrVJx5xLuX3B3ErhfwhIjdJ7 GBsyEBmLLtG6gjsSRk3/Et7gfqSiUtD9Deku3FyOx9iTb0zQjc2eDAIJzWPmGcSFvq/3 O8xwb/4jjsIimCl5q3QQorM5f2FeJFQe2/C/a7OwP9p58alqoPG2QuY7OBE7FI8MvumB tp5YXlXFPulAeQeogWOtftGGooCutBhiQS8uQ9YS15p7ZlS24E+aRIMrR82L1v3OpqA3 XUJA== X-Forwarded-Encrypted: i=1; AJvYcCViB4mXiOQn6rxOzH1r+W3AttII8cpQcZNcJsdQT0ixmUoxLn70yyCm3zPQOCaiFvg8SUcpbAJPoBJ7+Zc=@vger.kernel.org X-Gm-Message-State: AOJu0YzlbqDTk11m5z6PM5F1dReEIN4FV6uJOqGPjxwPOTG5Fr4Oj2HJ B38S66UNI7Dkr+yti/3ro/zAna/fULPFDiQI2yHacXC2QWZHXRKt/1+5 X-Gm-Gg: ASbGncszHSG/+bwVEsEg1E5A29Q3HoYc7hiedUlryyfswixRisKkeK8/NGjDMPO+yVJ +X9wI59EHmIVgy33WB5W/gU8F+GCbXa5KXvKzkSIBrf6ESyhhipP/vWOb778/I85xKCGO7XMIzH 7J6I+9IJolQjfwYlFmlG5ShTNS0PN6ToZTXaT3039CGiyd/UYlyfX+Pr8AzATmjOH1SFICVZPKs 2DOSQHGp1xamPfo6U2YhSwhxMOYcLL6dp4uHA9q7IRayMiDfjDpy2D7eZN8PF2g0QmBKReTElHj 5kZGfnHX3iOhJdF5Xf3Pym2aaYmEdB2dymtEqm7j+2iOdPRj7OxMUnUqUFmF6pFt0kCWW5xZKOo 85G/sSlX7UgdwWvJ/Q9ES8flxBMAsmiUXlbzcPt7YdPIaWPLvlIblQO7pQbMkaAxZPdusJCt7R+ c8egRqe2wQ70nqJkFWip7xQNN/1YDY7le2iJ8pBQq/6A== X-Google-Smtp-Source: AGHT+IGtobxlQxOmzElmeLrz6XbtLmYqUVeHEzRkuSFLIl/0CLj9uRwuwV2m/uCsqAKd9lcGvF8YVA== X-Received: by 2002:a17:902:ef0c:b0:28e:cc3a:371b with SMTP id d9443c01a7336-28ecc3a3963mr25458815ad.57.1759835891715; Tue, 07 Oct 2025 04:18:11 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.18.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:11 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:48 +1000 Subject: [PATCH v3 07/13] 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: <20251007-macsmc-subdevs-v3-7-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm1dVi8Ud3Oy5Jr9b70ezTox1bZcTX7RxhNtd28es 6nxv3nxUUcpC4MYF4OsmCLLhiYhj9lGbDf7RSr3wsxhZQIZwsDFKQATWanJyLC3I+z5shiFivn/ fhV4mitU2Nmznvq/6W5DGuupxz6KdRsZGX6JH93744nU5dT2JfGTeufsYWn+etDq6ZXeTB6t3T8 s7TkA 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 20:40:33 2026 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 712C22DCF61 for ; Tue, 7 Oct 2025 11:18:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835902; cv=none; b=HaQVfAsXoNQdmjQVv8DhK8ujON3emHnGUFYwQfbOvH+5b9vOQFiLbqvLbNsAtyGQn5aAQoM41STZtusrRSXpCyVczrEhBxKa3rfeP8SY5lJq5mrWqY3F2ffZGkeioDr2DDpDwMK/SaBJ/SB8gQQ4Jl6yG2C6Sv6trbOx+qVORJk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835902; c=relaxed/simple; bh=KDSJK1hK+2MjMUGKNuhBBlRGQhDqmhOz6GlEutnac40=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XE1IsZPHO8cogoILjZxOBAWeB9WnRyqYNikoOqRfkrnXjTwe4vrjpsku3yZgQjxq97k1xxdnXbcMIE7fey9Ykmy/uCPMS4dMHZ34TG22hJmpztpS16zmRhaLU3tMyIVKGkgMPOtRxk52+DZE+4BBdnX0WdanlFDo5XPITg485zE= 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=l63rTnYQ; arc=none smtp.client-ip=209.85.215.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="l63rTnYQ" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-b550eff972eso4126631a12.3 for ; Tue, 07 Oct 2025 04:18:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835900; x=1760440700; 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=igoCCgnZ/X1DMDEVudEaDJx1Zu4lUx4Hg3bpipB8g7I=; b=l63rTnYQwxvF509PjQ5ezBiaagMIyqxa9mH46t7Dn7CzgOU5OseXLebf40VHNgHTj2 Wl28SdQFnOksssOR4Ih677QrV6xa5RZOVHUcL5b0sex6moiw1xHEB307CTsmSsr2n5NE xoYClHrV6iipXMq/Zb6RmbeI4PwWkp3+8p9/bLciRDD/C4rBYbn+81yjgmwtKg+07IC7 SShXtnrB7+oIeeXIkLCZ6ROUgwYWSZ7/O231jQbHmg2q6B7UYqcsSk15tWnIQpRDk8vk zNHqT544pLSPdSaNq1e6M0dsdPwMN5IRTGg7P1i+td6lWR6EGlOsDPXnyucqyk+0/8JD 873g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835900; x=1760440700; 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=igoCCgnZ/X1DMDEVudEaDJx1Zu4lUx4Hg3bpipB8g7I=; b=cKm2estojtOV/JsM6AWPu9cvDysOEDOvtH/v6tXe/Z6tHWZ6dVq7XQVx2sYTvgVyCV KnSboeZvM8lbfFBlyGjZlJwyUwVkroYJm3Cg7FP0nVRBJqbIEyNBujXwZUjdgqBlpWH5 LzVyeUau5XFxJCGAnu8SCEC0bYQslyG1xkkAYLhmnNVeE1wW5CH47ExCw4oeuLti6fY5 C4ly2tV7w6LAlnhTbxqoIenxHd3VgVM8GTNHeX3N7Psohx3YAp12VugKbnZ1jCdADoTG xf383LhNQHKjHQLyT/YohDwlFlpfGzjZ3S45SGzacnHauaWCkz7qfn7PqHof6jTMP29t j0fw== X-Forwarded-Encrypted: i=1; AJvYcCX5ZWtJr4y/Ipk72CXo4SRdHSalrPZaep3CNPoZU9SobPrXoCkbwHytDcEC4CCxgWN/oOok6uDQRVItRIU=@vger.kernel.org X-Gm-Message-State: AOJu0YxUUenTCoUjQDDCoerc5pR2QFuQ4dNGQ+teieaxBKT0ryEDaQDH 7GBjU//BehFhMWIUUNmI0gCpoq60lN8pKj4wyppnTxAR8FeKgsqYPN0S X-Gm-Gg: ASbGncsiDr3RgNTgolFeuOl3hA3jvypLnToHuS6KopNw5Ii3QPpKC3bS0584+rozsoH TlVLUCCVF44TfAQjew1j2vlsf5IObN+YlPIJJGqm6mmmYaCXQ5xKeHV8yi1odcPy3hBddVGzq/Y J6+gqGASRddjl2Fp3ddJ1PgZk2hnM+9IlbH0USbybaqrRZNkPKNQTpF27jSMVO/2acFWkSJ1GsN HtI0Po72jpIB7eEmvLHtV8G/Iso3jNsGTmzZKUWJIjkkffGS6JgIp6AjCRYVUFZcSdhWeXy6eAT osoxX7KV4zTiw9e8n6oFNgnJ9mzl8g3O6qa27LnmI3B0lTlMHQ+jtPWWvjWUCH1bZoks5/EmJQo 22mJ38VGFuSIixsr6QqAgvwVOyjT6TVViImfYPfu7A06nlLEbCn4Bhmduw/NhJ/3Rn7Ce9QUJfy nqNM+57pbDBBYk797pRgDoCp3XzoFLSTQH58RFZz+fKg== X-Google-Smtp-Source: AGHT+IFI5v34OHkG+BFkCWyO6dCr2DH0coMDDT0kpNcUl4tnkMlzQd9Njd2Uvgcn/+fuwyD7FqS6SQ== X-Received: by 2002:a17:902:db0f:b0:267:af07:6528 with SMTP id d9443c01a7336-28e9a61a842mr185808585ad.35.1759835899767; Tue, 07 Oct 2025 04:18:19 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.18.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:19 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:49 +1000 Subject: [PATCH v3 08/13] 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: <20251007-macsmc-subdevs-v3-8-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=9033; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=N7YD7RNasaiUaTxPQY55v7KHLaj7T+3xfqua/vl4ebg=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm372yWfIr7EStiIpe5H49ZohcOnFcKm7dF1KF64b MO8RU+/d5SyMIhxMciKKbJsaBLymG3EdrNfpHIvzBxWJpAhDFycAjCRaRkM/5MmnX2leiyf03vj Zv/kkutl2Q0Buk+TZqXOVF25+8SaC9GMDGeM3tTP9JrH97y0SLSlJcJzfV3EEfbUA/a+8x9MV+J t4AQA 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..5ab8a4729e0a 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_INPUT + 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..ebbc7dfc31f5 --- /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 HID events from the SMC as an input device. + * This includes the lid open/close and power button notifications. + */ + +#include +#include +#include +#include +#include +#include + +/** + * struct macsmc_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: + if (smcin->wakeup_mode) { + if (state) + pm_wakeup_event(smcin->dev, 0); + } else { + 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); + + if (smcin->wakeup_mode && !lid_state) + pm_wakeup_event(smcin->dev, 0); + + 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, 1); + + 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"); --=20 2.51.0 From nobody Sat Feb 7 20:40:33 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 E5DDC2DC780 for ; Tue, 7 Oct 2025 11:18:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835909; cv=none; b=GifUYy1MF6q83yruUpkZmvXn+bHVb528bdH9WK2KwD1qH0YsE91IlpfvespgLY16MubdOe+A6KN4mkhj2G9t7rA6GXFx8B0HdUJoG8FXrkM1579I3g8nkl8d3Y8hF7jISVRrUkQkhECx9CXIQc2gpNXCin59j4hxQK9XRtYb6s8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835909; c=relaxed/simple; bh=9CvGSj3k52YgdYK4J0MHeIq2HkIZQxGeUJahNJ19td0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qtrUMTsqipEq7yVaqwdR4GDVcciYZTI4Gozap0hoYhwa/xFTsp0m7DKmPFOa8uQf98fMm+NI8X8mtd6YAjKCCETp20R9Ylyp957cmbyIuDTR7jG2BVXxbmCjpGavYUFM1llugQQbIC1pwEGoslVyxXfpV8eSZkGMClPp0UEtQIo= 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=b+jnj6UO; arc=none smtp.client-ip=209.85.214.171 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="b+jnj6UO" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2698d47e776so49388775ad.1 for ; Tue, 07 Oct 2025 04:18:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835907; x=1760440707; 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=b+jnj6UObutrWihY5DzYo1hdQkb4zq9q0OX1jft9AfFJJ7TnzslKEHnAVHzD6SaPy9 NS/nacyK7Q1ldGnj4NT+KCtLJovbQoY32F6OxS2OTYegbG06gREre1s9hkDzIz+OKGmb gTVJ103Hi64t82XlsMCT3hOn2v9AT3Irpjd0HHhk577ICYA1rL3Pmh3Y5DEzUGhs4oc6 XlRgsFm1oT0Qf5lsEXdq10vqnUVs9znH5xZ/ltk48nPRLv+sxGKgYxOZP0vJMBztUXeY ARIYeKMT0Rz6Y1fBVTuzv5jdX87t9QZ8IyE6zYxeBmQHoILrXHvmHP675tmP7nDbcEh7 Q0SA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835907; x=1760440707; 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=hceNR2PgY75pYaP4xunxPXuKBykqkJzsiZdQ6RyZGZdn8a9cNkctdtc6Mzqm59iVFk 3zQKIKNDI2+4jtl1giZBlWx7ieuA4PGIIUZNtc1i3Yu52dBWsGJ9KDg3N9RJl3VrM7Ej alhZVnC+3TfYl7g7Mwz1s6C7GK7FIDPi/yL25Z+nNOidiZWGRyTfJ+Q/bzVfUt+dhvhQ xBCGN5m9aIImq9E0s26zFi7QWmdUEEReUMGHU4oEjpD8/sfXqJSZpnKW43hBR1YviQaa HJ2dQ0quJWLJ3RsLPMlbhoi6SSPI6xEkJmw8jVWeyiDo8sOg9xQ5LXKSnpWmcaobavvI 4Qyw== X-Forwarded-Encrypted: i=1; AJvYcCWn93tZnGrV/SXhq1wMZshhRGLXENwZEH5aVeXwvZzs31Vy1DWOGkgK1srbnN1fSv8YPZY9P4AV+ZiXNoA=@vger.kernel.org X-Gm-Message-State: AOJu0Yyr+e5ufsnZLSyk8HZqbiDcoQ5jGjJPndhMG/Jzg/9vd5HJU3Lh mHmrWdLBTJDjCzz0Colyw8AxGWWV0x1e8iUVwcAO82Mpzjp5E4LtYUqc X-Gm-Gg: ASbGncvX1wpI9IlqWCB0rxOLQ6BYN6O9y7EIfe4dzAcmFk5T0+O/OJkrEY6AV0VXFNz 1Avi8WVt8fUoQFuyfnJfjHhGv3/xlTzlScKMStIyiXFP0fsJh1Y/4GNCbcUO1DAfN6T8JrHbzYG NKZcj/nveqihNdBKBO7j4sTkQ+sjEbEuHO+0Pf/zwUTfUPfhqPp2aCeqKFXj+a5Dm1O/frIX9bo WhW9ow1n4ZIITopG/wNchEbcfcgfci6n6T/tX/4HTSHtCe+oDaAznjP8NdscvMeDHocEytBF5Y8 NCHCLHr1JVHl+szrOlhZeNsM8Q655zswIGEx940UMOfcmImDYryWYmFJaHE5hM9gwRl54s1bRXb b1vDrieizcxGRdfCzyksGfbmTViGPvBso78hlavZM1M2rUNod82/VUy38IYXZ5FEhJAO4AfPrJJ iFAZ8427GJb36TiCWgq0EskU8oDW++CKreiobSsSoYYQ== X-Google-Smtp-Source: AGHT+IHQowcxR6757+GlLYRBHRpFuOKwNlnMD9n4eoDO0fw6pZm/bFX4pWpzRYdC3fx/Hl4yuHMEZw== X-Received: by 2002:a17:903:2411:b0:269:6e73:b90a with SMTP id d9443c01a7336-28e9a5f9e35mr217258715ad.15.1759835907147; Tue, 07 Oct 2025 04:18:27 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.18.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:26 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:50 +1000 Subject: [PATCH v3 09/13] 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: <20251007-macsmc-subdevs-v3-9-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm3bdvpC9h7ukB/rRA8obS89f9hMtfzQ5LZlU/1yf m/m3NIwuaOUhUGMi0FWTJFlQ5OQx2wjtpv9IpV7YeawMoEMYeDiFICJlK5j+F/ecz513768gKhX oQt1SgQCP8Zw/Du3t4Dro0n/rujl184y/JU0nKG83EgjvuMO9/Z7PNYWE/aGVTK4N/ksY9ifXeX EygsA 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 20:40:33 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 4128E2DC790 for ; Tue, 7 Oct 2025 11:18:35 +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=1759835917; cv=none; b=HrWbu2ZPabhGbxpYaLA5nKg4Cq1/SQsvKJhmV9PZ/exRPVC+zMdl8boiav82bUZNiwU0vylgvQrwWp/V8ELw0rWJOpF7wyKJfm0WXBA0v4M11oN3JD6ybMOhdFtEW7VOOEh2uYDBwZ9h0US+ygmIauUpTabyTcYPa1n3lLL5Brs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835917; c=relaxed/simple; bh=aj4aVwNnkYZP/VgOnJhsAwtvL4XTAa/u4ZaKgBAEh3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JHHsSZ1EhxNir+QfQXr8ASVQbVrJc1IDjqJsxP6nMDR3aqNffdR9v6Ihm2qGhL5zJ1ppooFW1OFw/iEdy1Z2OcEdFWgOhjdyURnX5PAotagn6oagENSbP38iaTw1Wi79a2lBMW8xmeMQ0OfhRikcT5QlBN+QL8CDoc5ldAd5e4U= 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=NYlzwupD; 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="NYlzwupD" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-26983b5411aso40384395ad.1 for ; Tue, 07 Oct 2025 04:18:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835914; x=1760440714; 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=NYlzwupDGThZRHDRSJ0IzlInDTU1jpda9LFB651lWtvVtPAmrq9fftwnNnj+eRDorM yZwrHpLjr8nVBFhbVu1UVS5auim9ijYrlm4hcdA78VZoNgKhI4uIlFB0phQVp58Jj5C2 zgt9sCwdwgvkKKvG+7yUChG1Ly4xMkVkma0XaicEwAk+otAZOmJ8idSRDPlmVLjHQCf/ Sj1tWu7xB0vQFPCOeLQWHVKazaL1Tz2+HoAQvLoyRe4wpYwZy7EfWq4mwIunnc9KD5QU eihl6r8dH+xJqOGRbNpLgU9lX460sC79OTbF8dT+T5Z0geQgPwYwRybBpA0DZ5tEF+fJ cyJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835914; x=1760440714; 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=JjFYQ/MWHrdCgESJwOYnYLrdmZtUe4wD1KDg1LLJ+QpAF9k664Jyd75nbZL5onrDmJ qIgc/DFQOM9WVLtOTx5EduucKc3n4tPzKHZWDxmNap/Y/yZGctI8ipUk2ab5WY3guJby 3riinBb6PryxfPDtIkWG577Ki8xpD56BDrlu7rmX6y8VFvHYWgT5cUDgFBJm9Lct7/Lu 4dkaqnyrM5Ohwy7BSwHb+DAHwQP20izsOs7ff1es/TYQYAKKHbBojncnVv0YRLfZyni2 GYV+qIMxR1cRxOmq05fBS3CVReTxGIfXUPsTloddPLVL0JvZUKD+3+m3490PpOiYuX51 R/DQ== X-Forwarded-Encrypted: i=1; AJvYcCWPEMuUr+9wpko3MonrtRo+b0B9eJi0MAN8xnbVH7uff9yh08C5D33lEMInvWHhJOWwgr3MY0qruVvuQZU=@vger.kernel.org X-Gm-Message-State: AOJu0YzFoVLZECIafQ/YyR41CCMzehepH2Vt605IaABA2qUteh/0t4Xc 6Ev0MxEENhHODeV8la9+C1+0s4vYFSa669dHqZGWrDHU2HFAmJCylZMr X-Gm-Gg: ASbGncueMGtE9ytiRGktvN89d7bqyqUzUW73koRGJMUI4O7wY96IuFhoUrdXeYLjnF+ 6nGPt2hmrfc7Lj5s/nBvmnPpsmf8y7ymycKrR2kXHKl/ARwpHpMGj2Hr3kR3a1jJLL0J+ZBbGwN 84xp9WXM4XWKKTvZBC3AzxUsbXDD7HLlCl61VmCvN2S5q7gtev22T/eo1Rgqd73iReiIlNqzGOd 4TQe+N9mzVp2TLSEWTFbklqzf4322aJsTCGEk6CBnNz666LB0O6y+M+vZKIyiVQ2bV866vB58yI BPt4hHr0eBWPbOWR6GY7avCfFTNnGT1KrGygsddsXjMDxamZytGkB0V5ExMVYJtl2Tt9H5iX/ui DuC45PCJTj+dPatLnbtcy9eiWJv4cL6hlUvt/BFX7A6YAdzVDHith4I0FEmGVV/pRGiIIvASfBU uS0DfAJUtivLJ1lfnShR2t3EVDmZcrafMBBy9Q7RT+RJQZb2rirhsH X-Google-Smtp-Source: AGHT+IHuJHgjXCw9R80/D5o7z6w5Ge8vVPTT5vKpu+uAH8PzOw9lXkX16l4ogNuFgD8KvHrVNOpLCw== X-Received: by 2002:a17:902:f60b:b0:269:ed31:6c50 with SMTP id d9443c01a7336-28e9a54efd7mr198564635ad.10.1759835914522; Tue, 07 Oct 2025 04:18:34 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.18.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:34 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:51 +1000 Subject: [PATCH v3 10/13] 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: <20251007-macsmc-subdevs-v3-10-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm3z/bogMmDmvGmNrrUnyxbdOaX5PtCls+l3jMPhz 6cmtr+Z3lHKwiDGxSArpsiyoUnIY7YR281+kcq9MHNYmUCGMHBxCsBEym8zMsxcaGsZebPXWOLh Jk2m5un3M9certhx625ak2LGK/uJp9UYGbZ/4zg+d7f2xsAVRRMqPC6XTBVXf9Vx57Yo4/bqpe0 89gwA 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 20:40:33 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 AC94D2DC790 for ; Tue, 7 Oct 2025 11:18:42 +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=1759835925; cv=none; b=jT9rxlReW9lbgkAbzYHl0C4PxKM4RzGnZf8cn8ZvoCWaGwAb/CH1aiLxRZlvGfaHPjbqlf+/XJIi6SV1FYrJKX428/ZMG7rl9wNxhF1K9fI7poJo8O1jNUotxJWePuf0OwuO/P+LwMx4SSDO1ISDT0waxH4F/irPFl3Df38x3no= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835925; c=relaxed/simple; bh=l1N1qUSs7aNQur915ZEPIIc8ybGkzYfyM4nn88B18eA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lAoBP+IHWEovnE9kgFq/x8447g/79mHbuVbDG0uil4a1cf9NK/bs6scjmKdDbc3qSWcb/r7MXBYn1/uTgJ338ppN8sD+sOR/iePzk/kmg9U9+K3HS5MewEA6jWvLSHwv+K6UCsFNhHu4LZFK9Rm8N2lTcoPDNo/IdDXMUaZF8x8= 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=Pw1ycah2; 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="Pw1ycah2" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-b5506b28c98so4313290a12.1 for ; Tue, 07 Oct 2025 04:18:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835922; x=1760440722; 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=5xSjj3Iwg14xHIfiMziIXjcapcCofRPyKMdiFHmwd9k=; b=Pw1ycah20Hc6dyibu10Bo6Df40KVcFkHwtBDcZkDyV7NB3mKcBt5WgEpPfn6BP1u8I Ae1O7D1Bpo2el/z4y4rOygtWBu3E5NJFohoYOJjdLUlGK1mUOHz25AIJk3zIVWBxydLA 1xJB/Dw2j0iRIvWrGGMAwJ2thTJP8/N2MF5J/G2KV30eQXcDqRXUXLntZ4wsTK7g2nzw t9VrElW8Ie9HfHNYsJE8kmI+b3sLSdIDXgE8k0tTKM0L7J/l8SKwJr/IzmyqqSDv85ss lC4IDoIxMm1PRy9sd+JrOtNLsttEbe2ze7kJyL9e71z2AjvA/23TncWIbTrWLOTKOj/Y WRMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835922; x=1760440722; 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=5xSjj3Iwg14xHIfiMziIXjcapcCofRPyKMdiFHmwd9k=; b=F/LBWCPpsBa/Ovm7mXDYXRS8xcFT2qRQu740RO67AKef8pV08/nYyX2JJrqlk9Cd/0 V3Amt8XGQNZtrzfiQVenWMOtOQG4yzAEAdVRHvY1QPKI4Cp1Y8CuKgMT1alLtyx4RmDN NhmrPgu0RWYSjV82AaS8VChjRWc18/YVPgbKT4/C9SjGXsafUpxmYFJpVFGdDDij01WB YoAkgp5+IHfcTXm/27tSXCK433RIAYCQ0kFP5FuzmAX1fgCGiO/IjSdIk3k2yl+/nT/+ qlriQClz+FcVZrSkAzcuRS7lE+Sgppvzshy6nLj/JJ9OtryF8dL43u2ZMxnh572ksb4o XcFQ== X-Forwarded-Encrypted: i=1; AJvYcCVsj5+OuC9gQfkSAUZXAGfzoLZHAIUCr2qdUeswYtpzIRSWb+4wa2UUGDLFNcMA9vFqLHRajltBcN4CLzc=@vger.kernel.org X-Gm-Message-State: AOJu0YzLUH2oY++czdzg+x51lIUe/kz1QRu8Sk/+ilQxj60hi+jXxXas UhDU9QyG9fZWsMS/raXjM86aV9hDkF/5Dk0DdmyG4ktzAEQ2BJyskN74 X-Gm-Gg: ASbGncsviJkFOokAT8IlfpQt7xWLgXEJmsGH7vh97Sxk3+d9v86/zAyMig6YnagLtME v3QO6ffRFwgoKVucW58BfuZbyysMXYyrE3YdXyRApvoo334MUyeAwiijk5y6m9meB1G2xuvWCgk 3pA/x2dmNft9DjT9CbYzxY+8v2rTyw9NWCOazdpXBKCSpGqiFZruK6HPkfvTbvQ/a/b4PGWSNaL gV6oIMcmAsf4rxFhZRihfTRZLx54aBjseomkBoZJrCat0bsxcpoIa9ktWWoc9sLnLgbXc+HfDeF YR3415ggFglM7PqC7Px5lbQD5WIfQBk2Qd7gup1q9JEpNCwOxlAU9vGJASWV5qgJwsTljdmvfrq gethHMf1sQKIrI9g61zwCY9Rg6FLIax7QnieRxeTNpLY1qxRzdpSCQBKVI9VQlHwJ4qziaAWP+v LvdKK0tS0YBaMIp3dKi0bWGBRlNVWNNY2PMngafGeUqA== X-Google-Smtp-Source: AGHT+IHQhWG4at6c4CSv92k3Kc2ZO7qLCe+WK+3iGElAPZoi7Z/HUsioUEndvALrS7T+2HHEi3fTMQ== X-Received: by 2002:a17:903:2409:b0:27e:e96a:4c3 with SMTP id d9443c01a7336-28e9a54423bmr206134295ad.14.1759835921894; Tue, 07 Oct 2025 04:18:41 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.18.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:41 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:52 +1000 Subject: [PATCH v3 11/13] 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: <20251007-macsmc-subdevs-v3-11-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=2496; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=l1N1qUSs7aNQur915ZEPIIc8ybGkzYfyM4nn88B18eA=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm1b4qq69Uht7n7+Jkm98m/LRPVem4gxb5O6ar954 s7df7ZydpSyMIhxMciKKbJsaBLymG3EdrNfpHIvzBxWJpAhDFycAjCRqZ8Y/mmfN0l8cGTT+/aj HGrv5p1WYI5+xXPz5b3Eb+qv5wRNCpvLyNB8WqqikeUrk3D9m6SOk5mMvzVf6f3cW964bnHO3/P 2XiwA 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 and compatible in preparation for the sensors that need to be described for each device. Signed-off-by: James Calligeros --- .../arm64/boot/dts/apple/t600x-die0.dtsi | 4 ++++ .../arm64/boot/dts/apple/t602x-die0.dtsi | 4 ++++ arch/arm64/boot/dts/apple/t8103.dtsi | 4 ++++ arch/arm64/boot/dts/apple/t8112.dtsi | 4 ++++ 4 files changed, 16 insertions(+) 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/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.dtsi b/arch/arm64/boot/dts/app= le/t8103.dtsi index 59f2678639cf..78eb931d6fb7 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>, diff --git a/arch/arm64/boot/dts/apple/t8112.dtsi b/arch/arm64/boot/dts/app= le/t8112.dtsi index 6bc3f58b06f7..5a8fa6daa00a 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>, --=20 2.51.0 From nobody Sat Feb 7 20:40:33 2026 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EEB592DC790 for ; Tue, 7 Oct 2025 11:18:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835931; cv=none; b=truD9Q2OYFQjSAD+c+l58p6DKQJTAzjPVPY/86aQQG8NS3r/Zyjuo1ByU4RxV42UrID5fr6HCiAnLKmPrPAN2I0Ugjor/hGaTSn1igZjBfpv+kjNmCS0wKRUp6d1wMY+5CoP8OsLp2q4NLxqL4mBs1Hh5HxN0R7vZ8pDMZlX91Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835931; c=relaxed/simple; bh=d7bQy0SdounSmC8jpi+/HU+WJQIYNBZC5J2m4z/NNDs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UJM/r+6axAzehv7dvZckHy9fXzB8wxOejyutJdYHSEv9/NcLGwVXiSEg4kdu5inFZqcRZVw0CykutMw7x+YfriSbPkJ0mus4SA7ipTwp3uaU+3ReOgsSoEqI8oCnQwaEcUVnK+M/AsME5w+QTSZuTrSCYpC3Ibkc3wysH4nxcaI= 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=IXse/G7O; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IXse/G7O" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-28e7cd6dbc0so69932575ad.0 for ; Tue, 07 Oct 2025 04:18:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835929; x=1760440729; 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=kCAPdNKXJAJcEkJcDhcjdf1sPz5hSUw5MgyKkZ0p1Mc=; b=IXse/G7OjAjjoaKZnkQvJeLMVfl7FkTN0yhp5SRUDwysOjobeeg4eDmPe6SZnpkMJL yrJlxpRf2QwZ4kyoUWMYxtdS2fxTejJnbkIQGvZLgWxaanSBXpNIO2RAQcPYMY0ESena RPp6tin8rZ6XdGxuXWM185bLicckcw/Wc5662lfTTirznz5epS6iDgIeKAcT7QsdnWb/ +QvFkiq6xrJVGsQtlvCdFiLZXNOAsRN8w3+bmOKFbAlZScowyUArWsGB++7quwa+wvYW OIS3vp6YaYVRcZNzCd784LKW9hkz6YqjBSWTHZntkAcNcYhF1wygW9cj6yxR1NIlF8zT /nLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835929; x=1760440729; 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=kCAPdNKXJAJcEkJcDhcjdf1sPz5hSUw5MgyKkZ0p1Mc=; b=CmdAGZUJjKa0yrtd0LCU2+zbUG/yrM8/0FAUk4GrCpN7MhQxxOyPzMmZRAcSQcjQ5N sILL6hOWp8EFIfQydfFAcDD488AGMkY4CVX6hIfLZzV5F8b/37IKxjXXahBWnPids4ft ey/NQP77TSUbN+A1/Ups7jKKWBR9iRsl292fbtFpEnwV9b+3TfCstu+2QDH8wZ43lXZW xhU0j/Rpiw39NLLlUr56bHYA7qTm2EFJyP+ma0wksWubeYPJtNJnfj9j5IlwGta+Drs+ dXOCGrK1j0HpTM6sh0FUt6s0nPl/yLOt4czkM/kndNNr67y62gncK5AD23YvQx+Be7Bn 3WDQ== X-Forwarded-Encrypted: i=1; AJvYcCV1I1NMojNb6Jpdo5NfCkRT+6iBf8qJSkaXl/aPi2MBNrc/1VA9U04WUZoQjO3TdzFLxJPU7LsFOl772ko=@vger.kernel.org X-Gm-Message-State: AOJu0YzfA1OV48p5iqp/MSW5PAKCGUSWkuJDF4bxCEwym4mSORpXhBwC 9pNjorKcukvsF2r1L6vQv2jiPhS59i0UF3dgRnFvAlfnODcUnTvfj/1x X-Gm-Gg: ASbGncuG8U3oJalYBsIUYa2AW+HTlyFXX39WMD9vZTPXh6yjyQP/2bjhSnUqiMhLG+1 fWE0wzFhFIfg30J87JlSZ8GLfOoE+yinfchfXWxOGVlHO76ApgbwgX8TuZuHsf9lTNcIo6h2iHR HOm0UqWc3pv7Gbp+vTjLgN2SYg4vqQPHUaBz3vsourfmkxA5fJ4yYs2z6XqQ90pWUsIL5miNn3r zrq1+W5qpNll+ztVyHiSBtS4toRDS4C7VzqpAOpbIDkzcaFPnIcTeMX/M2wgSjQ9WjGTqSUhQnG OP8NRfRXw3xuIqR1n57Xim8xUM5bHtYtyuPcXxzq1il3mqFpMntkErp2rYLC+c6uzkVgwlTquxF JAhp4YlLuxu2DRiMA/L00ISAo0C0H7m0Y/9p8dnGJWHFijV8GlaJpzL8XX9xwNTO6NIQVw5N9DG yqQ8xcM2uxPxMztgkDfrXzQnWkhxg3Yrv3kgUWiZWwDw== X-Google-Smtp-Source: AGHT+IHfFdoMlBoIXqzrWMT9RmZo5vW+Dn8SIHU12lJcuw3hvHw9CkNL5y/ftl9SyGp75w6luvCUCw== X-Received: by 2002:a17:903:38cf:b0:271:45c0:9ec8 with SMTP id d9443c01a7336-28e9a65686dmr167161655ad.37.1759835929326; Tue, 07 Oct 2025 04:18:49 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.18.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:48 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:53 +1000 Subject: [PATCH v3 12/13] arm64: dts: apple: Add common hwmon sensors and fans Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251007-macsmc-subdevs-v3-12-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=4644; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=d7bQy0SdounSmC8jpi+/HU+WJQIYNBZC5J2m4z/NNDs=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm3LiQyNvGA56f7Tw3ofdhvf38exui6Qd2ZZ0GsJM cfHe4qEOkpZGMS4GGTFFFk2NAl5zDZiu9kvUrkXZg4rE8gQBi5OAZgI3zmGX0ybfr9c12HOyzdR lD19cV5cu0XH3u1lk2e3K6S8nfH9ejUjw9GXqVc38Hw9UmHNLjNJbnL7Qf/VE1flNosUSi5c8Pr 5byYA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Each Apple Silicon device exposes a unique set of sensors and fans, however some have been found to be reliably common across devices. Add these as .dtsi files so that they can be combined with any device-specific sensors without excessive repetition. Reviewed-by: Neal Gompa 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 +++++++++++ 5 files changed, 120 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"; + }; +}; --=20 2.51.0 From nobody Sat Feb 7 20:40:33 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 62DC72DFA46 for ; Tue, 7 Oct 2025 11:18:57 +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=1759835939; cv=none; b=VJejNG/XkKk3bymScPOID+i/suW/i5kRuW2UwicPL3g02OHCci91u0fhgvByr7LCtWLZHwsOMeG4ufEYmgQqZIsbbr4W7mZ1gVO2k+wRFieUhsQp0ILRKZqibHCXJf3fpW7wJAdH7QxgU9T+8ZjGsdIKJcMUjaPCohMy1s3jr4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759835939; c=relaxed/simple; bh=dMA8ghWVekTunsVu7XOstdzBbwszG1Yq/dFfXRCf/bk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kvYikquy7zY+rTYHEsY/cPxrRUsBOcSiG8N+PA3k+jgP6gemKjo9KDRuEHzchqVDmzg2x7cAn3+8bse/+WCntNfgx9K0tk+Hu1pWRCPE++8VxaU40wdClolprJGpuPFYI2igmHi3NLkZh/e+YW9JdCTcWo++Ik8m9iUXreFxTZc= 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=asc6xbGE; 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="asc6xbGE" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-27ee41e074dso66422145ad.1 for ; Tue, 07 Oct 2025 04:18:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759835937; x=1760440737; 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=Dw9cqHmtj+JTcT9542JQD/91O64sVk3+jyfqTVqzQ4Y=; b=asc6xbGEOXI2vrbwGk2VCUH6HD60XmuUffxJQK3ChlrcazaNsDv8fJEyq8osKWgkG7 Y5GWBSJq7V4LhpjixQSpvXePbo5o1un6icvPvapWn4VCgYaZQ700ZnNR9YZtBl/+xrWf K7IujnBO4/+vo1+YVcTyaVEMegk4jGpsBf/FDy8iTLzs9DWnIQTCvHrva/ee7tkCdnmJ o0b4Y5+LQYyKx41j6qzI2kgecNf5mQ92Yr+gkJiMOMvugFLFL7dg4R8BhnvoGpY4UKWv +ExdogmbZtuDPw394mC66mwZdVaGPCM66f44I3dh/sULRV9PlwzARIITnUgLPTomi4NU ACEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759835937; x=1760440737; 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=Dw9cqHmtj+JTcT9542JQD/91O64sVk3+jyfqTVqzQ4Y=; b=kwif47DCfh3mpsWsE3hu0NLsT9zcdAMYo8En4DPW7nnUc9nIXN2CTSyuITGyIdKqij hpHzkT0aEieLozBRsPj1wa0Bkym0yeyeGkwx88WayhyNB9YmzRzJwp7KgrrLDZ2yKBya Jc95Zq1I+0t9cKi0zFoIFRVKENUF2oDSkw4q7DSBYVWtnE+nVZ/rleM7RgejHVem0TuM N22rdkeLh+2O3Bdbn4PnWx56HVERr53oU320dt+JxaCUW8wC2sPUIOUSHnU9KmEyJJ13 pmxFzKRvrRau4uQ3EQQCdbRottpue1bx8pGPyTGy8VSeL1nasME8JkzYcsiYNOAomDMo pNig== X-Forwarded-Encrypted: i=1; AJvYcCVBWivNAnZq1ZPGcgpoyMExSKjudeqe/tE6s7RZ7dQQI2ZPUdfZZUjwAF7QYY+kohgDIaH0+5mlA5aIJMU=@vger.kernel.org X-Gm-Message-State: AOJu0YzATiayyDhG6YMqIwAzSE/fJijtSWt3QVUmN+hToC+ORHsiz1IX qp0ShZWHIJMD0X8KfwETGUKRTFuSQFspWqex7X9s+MUOoQSH37huSZPP X-Gm-Gg: ASbGncu0Y+X8hozdzqjkJ8nljBAfIql+ikRRkIfwx3mRFw+x6U5WZP1BIlR9jZak+yE 9lhXelWvPqFPtMJkatonNJwh5CKS6uFWdJQ57p2SLnzAxIwhlo7Ti7FGS53qL2qWsld6erO/XeH ZSmtGTx4+0V/93032371JFXjtX5F9BqoC4gkG5rMaKj2oz20RHJc/pOjhpOSiPqGp/vR8FTUoOO RXpAoeEWF/5oUq9ShrNYADvY7MDoq2PKlG1ZLsGz+mSpeGn3zM6pVEVACKopXhM2jirKD1qoXe6 4ylN2GvcLVyWPHaLOLdvyL/TVmGyGXtSdORMaPqy/q6pjtCVx9Nsm/rJfqxg7FmOqY+l0GAQTOZ E6/0W91PGIriRDQv0XAYreuKF9omUdUzQoSuWUA4P1x8c79kxJ4VubM4fKZl6pt8keVvc69ZmhL K1wU+Yj3fN/KuCT5ACsEpcSWajyFtE/guKoPL/SWMQVA== X-Google-Smtp-Source: AGHT+IHC2LNmC/xUFVcWeK3yLywWA7GD9fZRA7+m31c3Vn2k7x7olct3JnOgC1orGXTqxPOFEWB82w== X-Received: by 2002:a17:902:ccc8:b0:28e:80bc:46b4 with SMTP id d9443c01a7336-28e9a664f0dmr175025365ad.55.1759835936684; Tue, 07 Oct 2025 04:18:56 -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-28e8d1d31bdsm162509045ad.94.2025.10.07.04.18.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Oct 2025 04:18:56 -0700 (PDT) From: James Calligeros Date: Tue, 07 Oct 2025 21:16:54 +1000 Subject: [PATCH v3 13/13] arm64: dts: apple: t8103, t60xx, t8112: Add common hwmon nodes to devices Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251007-macsmc-subdevs-v3-13-d7d3bfd7ae02@gmail.com> References: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@gmail.com> In-Reply-To: <20251007-macsmc-subdevs-v3-0-d7d3bfd7ae02@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=6022; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=dMA8ghWVekTunsVu7XOstdzBbwszG1Yq/dFfXRCf/bk=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDBlPvm3jY15w+v9irk9rkrp+zvDZ//DCl5UBk87+iv7aZ ZqqumjV+Y5SFgYxLgZZMUWWDU1CHrON2G72i1TuhZnDygQyhIGLUwAmcm0Cwz+bGSzX5RgmqjHo y5znt+T57zzd66/K5hWSYuwTrSqWRDsyMrzjnabz55ZC+PGlEjuNczkDOffPrNJIyZ3CKOV6Kfp fGy8A X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Add the known, common hwmon-related SMC keys to the DTs for the devices they pertain to. Reviewed-by: Neal Gompa Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros --- .../arm64/boot/dts/apple/t6001-j375c.dts | 2 ++ arch/arm64/boot/dts/apple/t6001.dtsi | 2 ++ .../arm64/boot/dts/apple/t6002-j375d.dts | 2 ++ .../boot/dts/apple/t600x-j314-j316.dtsi | 3 +++ 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 | 1 + 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 | 1 + 14 files changed, 29 insertions(+) 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-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/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 78eb931d6fb7..f1820bdc0910 100644 --- a/arch/arm64/boot/dts/apple/t8103.dtsi +++ b/arch/arm64/boot/dts/apple/t8103.dtsi @@ -1145,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 5a8fa6daa00a..c4d1e5ffaee9 100644 --- a/arch/arm64/boot/dts/apple/t8112.dtsi +++ b/arch/arm64/boot/dts/apple/t8112.dtsi @@ -1184,3 +1184,4 @@ port03: pci@3,0 { }; =20 #include "t8112-pmgr.dtsi" +#include "hwmon-common.dtsi" --=20 2.51.0