From nobody Sat Feb 7 08:44:21 2026 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.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 315D130BB98 for ; Wed, 12 Nov 2025 11:17:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946264; cv=none; b=n5AX5gLaT2B+h7PC5Dj70vyU6gMPFk5AL+fntsPyg++6HhihtTMwhrNEHtRSCg/lMfC4qmfgJvTXVuVCAIUCfRxm7HYDdryRZk7eXQA51hOXnpYAzWV1vlCZD+cFNWQyKXljyM/W6qe3vmtClhptBSN0/0EGC+gbRib9Y15WmdY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946264; c=relaxed/simple; bh=Ys2W7bVXS/rMb7lzjzuNB+sgh7O/1vg8ds/1vxXK880=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sSF0qBiYn6UWlLEPEjjYhSj0NgZmAoOOKReWKbV4Of7ph9oKoR3+qT+T4982IXLkxtPvWp6fMrwfBs73614pHkVLuzdFH7gf9O9WE/ztdnZO/LQN+I12tBrivH0tDrcBbe47E6vtwVFDnPU3kN0J7PnS40LTkVY8ruaZpXxAqow= 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=DUSRk/W/; arc=none smtp.client-ip=209.85.215.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="DUSRk/W/" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-b55517e74e3so668053a12.2 for ; Wed, 12 Nov 2025 03:17:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946262; x=1763551062; 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=LgbjWrvK8elb98wH0NVYO1wkwh6HfRo9teorVSr5yAE=; b=DUSRk/W/7kxoQPlXuFGKfdyz1kBDZleJTZrsizgg8H1XB7tceYe+rzWa2DmcsbPAkS DNmbKhhOzX5NTnLiwqo5gM6b4LU6WiiFS3LOT0bCcYuNaYWYI+Xe/YR2pmGDIw7cd+y6 dr8JOSJh7DVcyCVZDvILlysESzw5ck9D6tD1jCTMcX+IKe8OykwZ5nWKFp6wDOet2aKN euTXx96qkemvzmHu0YkrAigsxDCP2Ar3dxEtuyOORyhXsNtkFDlmvZvVUTelwQPLjeDa M+YPtUQFJU7TiO9FvKpdobOXHXEs7xjK7RMDtLyJ72ra11hDgM3xr5s7zrTzKSu4+VLB fvvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946262; x=1763551062; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=LgbjWrvK8elb98wH0NVYO1wkwh6HfRo9teorVSr5yAE=; b=v+/iNerEDtvB8hGc1wgjAXGNGYQjjQT9yNgLKGubydE/CGOCDLvs6jJh8xiEs72YTR CdQY+7Mvhw/NzvgPCj3N/SGP8qMU3jWHrjASmOhyWV2JPuUvq6BEhlBck3LM6U0PmaPG w/WOgLm5Y8UjUnrU/ogrzI/YzsULZpawISaPVhvVUoJnO1SmkKL+Vt5JyTzhhFNCNfXe TKgkWNpAF6gAlQ1tewrwNnGIRAwH4yA9Au1UWKlYCJjr9sQKjrXqTKLIu4CPc2WeVAlr fnSd9wD2ETEKmP/0qWCHyXOmvENa+jfJc593LmjJajiP1BWcnLeUYtj6W9p3cl0EWzXE bwyA== X-Forwarded-Encrypted: i=1; AJvYcCVI6G1Ryyu6OEtWKNefU0N4QySS7cI+9xNZvYEHEO1ufaolWzh2UGye/aNflmhMyivDka/IUPHZ8YSgMPs=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5C477xYr1BJP5Dh6Jg7l3oUsc1SuzqVaKya/80ISChh6W6NfJ X3kPPaNcgOELc7DbLcf5CIKOH0Wrs51vByztN+CbFkgpBF8oSNGZITkZ X-Gm-Gg: ASbGncvhAtHuVFAtFenNDILfMDonXUBsdZFENj6QxDP/enn8q3++rrKZtjkH+MKb2C6 BRsorykHAASWS4frfIYqLp2t7lsD7irU6FuJN1auOUvqsC7p3xomZN/5qpctUwACGF3NvKXhzFP Y/aM6z/8Fim1H9HEAeRT5pF+Ir0UAw0cF2Q+Alu6jfYz3TfrzTArRr8mVSDfVV6uxLZ3Fj0byKr LigQA0RxjT3nr+AU9Snri5XCiCpNHFM0cl4fUEMvlMQtxrxtaHahsMyni9HGfXG0i0q6ftCLYmV p7GNCEXhx32OZO+FN+Ickf7lMbtZr/41YtOyBq17UYh2kALD6DOcfYtToJ98ylmB5c6qjTNoZaV sJOEccuzdfbEcjZ6SuTKFL3fD1h0YWcuIoo+il+RzFx8II907LA7Zcdvz9rGlHRUxhEjrVQJHdx buLgN4cazLw1EBVrEI2gDiaTwex5AAlAV1wSUVJbSeJPzQc++KiKLBlUxae9r0OJyn7cx+5re9R Gx3pyJrk8qsMqXgInDG1Oa7z9pGya5nfaThFuFiKd+LE6vace3kgJA= X-Google-Smtp-Source: AGHT+IHzzKGS6ukPiu3qZhs2xy9KjVsM2L0MFpMuDNYIYeYdSYNgHuNotiH+CMNMtQb/4PcLQUYTDA== X-Received: by 2002:a17:902:dac3:b0:262:9c4:5470 with SMTP id d9443c01a7336-2984edc800amr35769115ad.28.1762946262292; Wed, 12 Nov 2025 03:17:42 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.17.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:17:42 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:47 +1000 Subject: [PATCH v5 01/11] dt-bindings: rtc: Add Apple SMC RTC Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-1-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=5rnjjuFINxFZvoBYoUd9LjmfgXR+dmJkDEVsibGRKy8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUce1qazTeLmfLnTij+44+21Ts/axefvRd7jOmBRU 6pv9ja2YyILgxgXg6WYIsuGJiGP2UZsN/tFKvfCzGFlAhkiLdLAAAQsDHy5iXmlRjpGeqbahnqG hjrGOkYMXJwCMNUs3IwMU197tywX5rA+6qDHltJfezFg8be1XbntnS9kApWe7Ds4keF/nM3UDPv tslv37N+8xk+vWWvFol0ZHk2ZujrVi9y4D0xiBgA= 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 f0c8b85baa6b..51942a9a9b43 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2439,6 +2439,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.2 From nobody Sat Feb 7 08:44:21 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85E143064AB for ; Wed, 12 Nov 2025 11:17:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946272; cv=none; b=Rsjej335XwTN5tGRYrhapwamwbRKay/AVpfAC/4NDPQDFlhyxwt3CDskIBFooHVd3sveGjfo9pZfUdU0xI+z5UM/qm65HBquvgE1Bui4wF//p6VJ1uDWLPlRnLgbwSwFF05f3Q0TWeGtjcbU7V8pn9SCf1eV4v+ie1M71pY+y3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946272; c=relaxed/simple; bh=Og+R248Mw+N/x4bdlpMygoz9hBtddXEvmLkGHdBckw8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LbtxQlw+9wu9g6m0I9rnx+fnKaJ6uwwcXamqXY7Z+HPQpolZr+Mz+9OSQAXW00R/4YXheI/Uhr/LjLvN9r+XdNTg5JhgCpNwUQmLPeEPf1mcNUZyWm2flTU0tAMy9dPzJ4O0KjAckL+ExNMZrXu3xhzpSaWkazWniW67sDKqTDM= 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=G11dZuTM; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G11dZuTM" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-29808a9a96aso6867355ad.1 for ; Wed, 12 Nov 2025 03:17:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946270; x=1763551070; 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=EcQKV8dklg9rY1tNFTyIjTMJUni5UotcTYsuT0Sfofc=; b=G11dZuTMeTVQsvtAmiUhZkH3qL+fajWdORzQUbNYf1bSsOl369TJb5InK0PziPN/PH 3Elxk6hTL6Jgk4NmjD8FU/uTLr4xNbDtUqCoZDkelS1QCEeWLY4hlpIOANQbOZ1E8fYS iIUg2VtDWk5ZCdYxvRnGPAKOKgXUwcibmSsrOpymoOZHc3zkJwqeSzhoLgw0Npg10TJ5 IiKHzHnawdGjk5ACIyHHuHseanCYlZectPHplPddenLfBgEGlM7aDYe5y9WQumt2SZSE EipBPaQjqi1RkSmZ3k+np+tjUzKVH5SRiH92gsdzuaNxBhjC7CZSVXZaTudBHlrzC9Dl ekDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946270; x=1763551070; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=EcQKV8dklg9rY1tNFTyIjTMJUni5UotcTYsuT0Sfofc=; b=EO3cfL1blXKNLYEeFvZXwqvXtedD+fHfXV8SAghOAXAWcJBNBMJoj9cFwLw+yzJaPf IvVliWoQqjxOwGTD2YtDPvJB/qnL+q0tINzYLnem8PsIn1skc/BDtek8FSSVXm5x0SYH 1tYMWGl1aMlwCGRlpFqXvKXq7GYPETjMT3GHJoFr9apKvT/uCcWiElKwtAhiAVzSKHMW S88HdRrgs1xXUgpMkPZKqN15/U5OAGWObd5xwZDGG9UihK3kP8zFVHCm8cWWiSaL/j23 rdHqkJKwDIP7LGIWj5HN/2lzJUhfmkmCCIMBj0NWlVE6YbiwxXkSnWucfzT3LbAr9r+1 8VDQ== X-Forwarded-Encrypted: i=1; AJvYcCV/hwVf8CE55jDOOR33zc3ggZO+rtt48m+3v4J07vE+HQwlT5+2XwiJF1hP61FhYh0g824Pc2BS+8BwIHE=@vger.kernel.org X-Gm-Message-State: AOJu0YxBaDu9ATiYT62tLrqq1H6kAR/UbIntyuRWvA9fDC62uP9v8pnq ut+W12dgVlm68jy+cNuxHtznOAyhc3qaB4N0rtLl2cD+fQgPqaldAWMV X-Gm-Gg: ASbGncsFYKdfFYmqU1bR6GDrkXHfBiFXqiBwJsauLdwBboDy2qyAq65eTFWncdiWWPt NjSrBeITXSvnPEXCeMigACgA49jpCJX8yBQGngtzMx4l4tXpbGdWbm7p8ywuWBOI/HtfWN3CfWl 31Qw7aBYsUetGKoNM5SPd+LXbRP5JH9Mq2niYX15jN+ogCvo7ldDoz4fm/ee8xRf/0Da2Fy2Ivu Or2lxItJkF4S/i3nRzL/+QOV6UY53I+wkEDLu2H0jLzNMysIyXdc7J9dyoTJoir3wTYDNgeSTWA Q5VO7ae6Y1/b5dNyd1bBoQNLzHod2UBCIwcti2yIk1p8hMO/of9ZLYOM99dku/Lk2rCDTJWn6Em yXjI4klFexzUooBQ0f8vsoHPYeDKOcQCqepMidcT2zRsJoX/7uXXdwY5x5miLpG7/uel0fftfkG ay4giUV3duyo0WQ4CArv1P/vfgGLkklXskDfBQqaZijvbnnFQOOcIWPL/ptKjzGZUf8bJ0GCHHD FHvdkz3lzQMUYK86Kqg7sdSuGM2yUdGc9n566pZAZyJbcwSQVDL2iE= X-Google-Smtp-Source: AGHT+IEXmYK5Jd6abgmEKislEs51qPiJZZI8VNvYAfzYqeue6GeNd3Jr4Tt22dAg51SwyR7UXd8g9A== X-Received: by 2002:a17:903:988:b0:298:5599:3ab0 with SMTP id d9443c01a7336-29855993c04mr5637195ad.16.1762946269736; Wed, 12 Nov 2025 03:17:49 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.17.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:17:49 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:48 +1000 Subject: [PATCH v5 02/11] dt-bindings: hwmon: Add Apple System Management Controller hwmon schema Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-2-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov , Jonathan Corbet , James Calligeros Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6691; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=Og+R248Mw+N/x4bdlpMygoz9hBtddXEvmLkGHdBckw8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUcq327e6qDKYjd1f5/N1//5M2TPPpi34eCd1B3BV SGMRz7ZdUxkYRDjYrAUU2TZ0CTkMduI7Wa/SOVemDmsTCBDpEUaGICAhYEvNzGv1EjHSM9U21DP 0FDHWMeIgYtTAKb6LxfDX7l3yuf5LWtbv7z78sJzr0akisWWxSfNO5dVvL/M+3r3JC5GhilGl9c 5XGyQ/uax+qzWq8Yb2Z7/JGfM2vOz6WD94l33ihkA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Apple Silicon devices integrate a vast array of sensors, monitoring current, power, temperature, and voltage across almost every part of the system. The sensors themselves are all connected to the System Management Controller (SMC). The SMC firmware exposes the data reported by these sensors via its standard FourCC-based key-value API. The SMC is also responsible for monitoring and controlling any fans connected to the system, exposing them in the same way. For reasons known only to Apple, each device exposes its sensors with an almost totally unique set of keys. This is true even for devices which share an SoC. An M1 Mac mini, for example, will report its core temperatures on different keys to an M1 MacBook Pro. Worse still, the SMC does not provide a way to enumerate the available keys at runtime, nor do the keys follow any sort of reasonable or consistent naming rules that could be used to deduce their purpose. We must therefore know which keys are present on any given device, and which function they serve, ahead of time. Add a schema so that we can describe the available sensors for a given Apple Silicon device in the Devicetree. Reviewed-by: Neal Gompa Reviewed-by: Rob Herring (Arm) Signed-off-by: James Calligeros --- .../bindings/hwmon/apple,smc-hwmon.yaml | 86 +++++++++++++++++++++++++ .../bindings/mfd/apple,smc.yaml | 36 +++++++++++ MAINTAINERS | 1 + 3 files changed, 123 insertions(+) diff --git a/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml b= /Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml new file mode 100644 index 000000000000..2eec317bc4b3 --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml @@ -0,0 +1,86 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/hwmon/apple,smc-hwmon.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Apple SMC Hardware Monitoring + +description: + Apple's System Management Controller (SMC) exposes a vast array of + hardware monitoring sensors, including temperature probes, current and + voltage sense, power meters, and fan speeds. It also provides endpoints + to manually control the speed of each fan individually. Each Apple + Silicon device exposes a different set of endpoints via SMC keys. This + is true even when two machines share an SoC. The CPU core temperature + sensor keys on an M1 Mac mini are different to those on an M1 MacBook + Pro, for example. + +maintainers: + - James Calligeros + +$defs: + sensor: + type: object + + properties: + apple,key-id: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: The SMC FourCC key of the desired sensor. + Must match the node's suffix. + + label: + description: Human-readable name for the sensor + + required: + - apple,key-id + +properties: + compatible: + const: apple,smc-hwmon + +patternProperties: + "^current-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + "^fan-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + properties: + apple,fan-minimum: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: SMC key containing the fan's minimum speed + + apple,fan-maximum: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: SMC key containing the fan's maximum speed + + apple,fan-target: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: Writeable endpoint for setting desired fan speed + + apple,fan-mode: + $ref: /schemas/types.yaml#/definitions/string + pattern: "^[A-Za-z0-9]{4}$" + description: Writeable key to enable/disable manual fan control + + + "^power-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + "^temperature-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + + "^voltage-[A-Za-z0-9]{4}$": + $ref: "#/$defs/sensor" + unevaluatedProperties: false + +additionalProperties: false diff --git a/Documentation/devicetree/bindings/mfd/apple,smc.yaml b/Documen= tation/devicetree/bindings/mfd/apple,smc.yaml index 0410e712c900..34ce048619f5 100644 --- a/Documentation/devicetree/bindings/mfd/apple,smc.yaml +++ b/Documentation/devicetree/bindings/mfd/apple,smc.yaml @@ -49,6 +49,9 @@ properties: rtc: $ref: /schemas/rtc/apple,smc-rtc.yaml =20 + hwmon: + $ref: /schemas/hwmon/apple,smc-hwmon.yaml + additionalProperties: false =20 required: @@ -89,5 +92,38 @@ examples: nvmem-cells =3D <&rtc_offset>; nvmem-cell-names =3D "rtc_offset"; }; + + hwmon { + compatible =3D "apple,smc-hwmon"; + + current-ID0R { + apple,key-id =3D "ID0R"; + label =3D "AC Input Current"; + }; + + fan-F0Ac { + apple,key-id =3D "F0Ac"; + apple,fan-minimum =3D "F0Mn"; + apple,fan-maximum =3D "F0Mx"; + apple,fan-target =3D "F0Tg"; + apple,fan-mode =3D "F0Md"; + label =3D "Fan 1"; + }; + + power-PSTR { + apple,key-id =3D "PSTR"; + label =3D "Total System Power"; + }; + + temperature-TW0P { + apple,key-id =3D "TW0P"; + label =3D "WiFi/BT Module Temperature"; + }; + + voltage-VD0R { + apple,key-id =3D "VD0R"; + label =3D "AC Input Voltage"; + }; + }; }; }; diff --git a/MAINTAINERS b/MAINTAINERS index 51942a9a9b43..6e5e219c5fe6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2422,6 +2422,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.2 From nobody Sat Feb 7 08:44:21 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02C013064AB for ; Wed, 12 Nov 2025 11:17:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946280; cv=none; b=S9D+808bSWPPQAORe7wn2KvooZjkJ6sovVDLNCRehU+CORsNIjGdG6I/YFOFHbtwIWGD9W21fR0d/9CBThrH9Ie26tFVTC3cNRZrAMAxxTmaL2a+OzNKN8f+d+iYx62vacU1i1A5WX0LDMEqaqIEYE9fuR6FZ6vxiPH7EUYzu0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946280; c=relaxed/simple; bh=sYEWBWdnlvpiIQxKF1/00/Hh5yUTD1kxVuE5ma/88Xk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pOM8OB/wSVu5yadh0VfZvPfwd9Td3wcgeaSrJsPJ4aqRwiTtW3SOw40r6W+uAYs5e2ujUfJgeyqAoDyOhN+Gg6rKk0lV+HiAhR32yLhIVvTRRtpLrEIh4dmyOFRz5Vw9b1PFN4AXWNPc+nVnxpboFw9cuOm+5RWrw9Zjz4mITrU= 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=Pt9wg/C1; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Pt9wg/C1" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-297d4ac44fbso4655255ad.0 for ; Wed, 12 Nov 2025 03:17:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946277; x=1763551077; 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=3U72yXoy8URZJehSyBgGHubHpkITsAXeWW6E7/w/5P4=; b=Pt9wg/C1AjXTopPwczff6S7ETOrX5qqOto7OuuXWgJIOa0naz+08J9/adx35EQ74jN AhnyG/OD5e3abU/slZANz6G7M1qSMw16YrhTuIvcm4VwXLJJfDWT6uMgqAGK8NQHXOkq /gx3iU7k9MfqJL+j50Tgzbq+mPjwRIoEYXOrdQg2p5zV4ZChrjjGi2NSqocaXBm+Ncqk iS7YTthBFcSlkmnL1nQIEI0hZwGttFfDkHTMHj3Oik0s9WKJzuGe97X5/tD90lXV0TGG JYLpmaI062uXYtjaxht7Ra2M8djMgxFH0f/8/F8dRgN1m4FwgUL6z4lE/e0O5wg/1xsa wWTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946277; x=1763551077; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=3U72yXoy8URZJehSyBgGHubHpkITsAXeWW6E7/w/5P4=; b=t0/gVudlxiQRGOfi75e7DkqSUAzZtWwJefuyP1dwK41hKlQL6T2Cqm5QzAwKB3QRLa jJZLVa7VRwJ9siIjyEB1CSDx6AoL/dOrHbynh24qT2zhqBELXEKLbnQjY/tSEcqHHZEi TxHXnvM0W1Qzw3J9yz+0rK922aYRXUjAC3Kru6rDA1kT19AVj72jvXldkTn1uFdBx+GF dkKHPUsat6TfeXCTopJcNMJN0MCq4AJA1rrMbmDUWpwSHzm9UiknetlZZWRz3uyyVKML XlbT0fazwMLkeemsfE8pKqZtQesqQqQXdq5a3MQFw1R5z+wcGLLPhQyB5nPFXSxR9q4w BsJA== X-Forwarded-Encrypted: i=1; AJvYcCUH92CtQE49We8jxzzDhYadpHhCwm235gOuywe5KoHl/YyRXhT+KM2rcTVbcMRP8MvlYlh+8TcxIHbqmaw=@vger.kernel.org X-Gm-Message-State: AOJu0YzBujsxMpzN0P6wQrJOrQOIXal9OyZfRnfrPuMjLAHGbJ7OzozK fFTOICroY5+U3f9Qbimd4lfU3USaMYIhNkrYh4D+26OXbNoE9DZb0cdq X-Gm-Gg: ASbGnct5RxzaGyKby8T27OgJayIbMVIfF/02Y9bgZf1/XMXC4r2QoFFqMcBMav7yAZs uTzwsU++8caB5zjqxCktYg3zJHXB1MtfT/mCn9VBaf0LpIjeNnI/NQxaf5WiEJVeM+bnhLVy6bl /GhunJ7ccPD+hm+gIpyAHK5yW9YGJn0bG2XwUxZWq3NNhZZGwPfKQgdbM4MhVVzykIO8bf42IVX lQj1u0xBKPKnpJgwy2iWqrFwyvteNj8BH/DWLlLVmc5VsHmSrIlNyVOxq8gQQuMS8xiHYnyh7PY /NCEGlxrmy8AyKtRC+PRMd8uiq6+N9T43Um7tiyVy01vQ6CP8W5bSEEEeLifvcSW/sZSRQ6BTmM k8yS9s+5BbLGwESHN5k4Yy4VH53+bHKj5y7+9hMA7M8Oy9/rEKC0n7MonCQzxIhtKKjeeYZF2JR km3m7Rzl2VUk2t9n01+jBhdS2JLWHFEhG8DIOzpIAP7UDAaDS8J9t1kfwbm82ZwC1OOtEMWNE4C uUWj++nmzJJAV1c2sgaSwgII86QxSgdL0K7KpC55dxOrfzj200MCWH4ReZDC4wi7A== X-Google-Smtp-Source: AGHT+IFuHm/8uBRLakD4dqGqWgYIv8jGlgnxHYKXY5Xa9zy45I0fwjvsmUDrL+MrrEoBjOhkIEbSVA== X-Received: by 2002:a17:902:fc4c:b0:297:f39d:90c5 with SMTP id d9443c01a7336-2984094a5c7mr75156335ad.24.1762946277403; Wed, 12 Nov 2025 03:17:57 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:17:57 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:49 +1000 Subject: [PATCH v5 03/11] rtc: Add new rtc-macsmc driver for Apple Silicon Macs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-3-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=6867; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=JF8fPy7WCsEZI5w3lDmHu7AY077U0hzX/PAUVsnziAI=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUf6qjfx3bX13OPaHsl+9DJf7Lzzk/oXr7fZLMzOb NYwUc29YyILgxgXg6WYIsuGJiGP2UZsN/tFKvfCzGFlAhkiLdLAAAQsDHy5iXmlRjpGeqbahnqG hjrGOkYMXJwCMNVdWowMj+7kn+laYi7w7Os5xW+iLOfM5H6bTDkfdWOC0Jaqr1lWKgz/nXuEVoS 61E0rScoO/8J7/9gH21UH7qmf1FLL5jU/M6uJHwA= 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 | 140 +++++++++++++++++++++++++ 4 files changed, 153 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 6e5e219c5fe6..5cf253a25831 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2464,6 +2464,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 2933c41c77c8..cf3fa1475ffd 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -2074,6 +2074,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 8221bda6e6dc..0485b09caceb 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..8fe883066956 --- /dev/null +++ b/drivers/rtc/rtc-macsmc.c @@ -0,0 +1,140 @@ +// 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 + +/* 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.2 From nobody Sat Feb 7 08:44:21 2026 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (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 8634730E0E6 for ; Wed, 12 Nov 2025 11:18:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946289; cv=none; b=b8OU8uiFaK30AWWV4OXO3L0YQYRaz11fwZvigSmVQxrNyqZ5g3t29pJhzwGMdmOUZNLsTFDGWX7i5ym3FTQHxElWN0ijLJQlMzuSPjaWzeeUSgcgXjjESLKcueznV136KNqPjqWjSeMjr2cT3a6NHgqsCj6bPCp0Bz9CiVM2BFw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946289; c=relaxed/simple; bh=0X8ztOxPIoLqy18jxO5aLU25sae5cz22Tql+G03LG0c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M5zxhQxTZnZT2h77x7WbdlSSwQDvAV84kXKfhx72e/jmWiMYsl8b5kMEpUgzfUnFF7iCNza1tr4VavagpEcn3RriL+HiKpRoAb2aRC7eO6jSAsVhJ3XH5Hz9NbhVZHSJhMHBq4qCkKZAH7j1kscrh6Ilnwc+ag7KSwvVz1v4KYc= 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=I2ch7Ctl; arc=none smtp.client-ip=209.85.210.180 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="I2ch7Ctl" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-7b80fed1505so350525b3a.3 for ; Wed, 12 Nov 2025 03:18:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946285; x=1763551085; 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=TfBBll7plQVG4jmIJcdQk3DSYpimQWr9oy8pKjz02Aw=; b=I2ch7CtltF7ZjK8PZWnMl98TvD+vcCsYo2nQMCkMSJfgU+/XI4nsU8MeXURmvBMj0V dggQ52R1mlyS00dRB/AokCUpPEKXsb3WsP19jw+GnufzI3SVI4CsAvbIdrCHrDhwPrNU QG9O2wYsoM1bqcKVJwpT1vF2ZuehqtiayXshaPda2+Cz6kqz1sOsT7NKRSwD6nizSoF2 L+CPQBUGGrJ/H2fFiGjaCypKEfbxHK3Ry4GxQ52QPFma2CrPA5Z2PR6VBDtr/jNdDRFg VBu/cJnWDGfx+92e40SEdgke9g2+qLGaUA31i+iP0QElbq6HdjJpfCYi/fgY4QHquRg0 hs/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946285; x=1763551085; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=TfBBll7plQVG4jmIJcdQk3DSYpimQWr9oy8pKjz02Aw=; b=qj9ofwrnmwkFKWLuNDoBcNHsbx1Z51iQ4CbsAiWoWAEAueAQ6A0e9lbSjPRSaPHTgo uV+2M9TtykaGMuSLshm4hPeOm2LtIsvLq8KbsP9eRzSmV+TOR6WiX3J6wtjAXF8TGb3x Gd/aIs8sdp3SFfc5H7IS5s3umU6DtxCDr+NKbNljdgrGTYOMgAUa7k6SRlpBvapuCbB/ WJr4cir8GC1a2xCZSGnR6jCiQ9x4iLOW8Pnln8XhOPkyissbduxSie/mZw/4KmVwsT5T s/rIeMaNd5G6T4kak5uv6f8gVsHXn8+a66i0Tkjr/KbwbQAhmP1nqXPOYrzq5+lLI/XH m8qQ== X-Forwarded-Encrypted: i=1; AJvYcCVhJaGYqWuiX5GDiStkWmphmsDUMSf5PMsjEq7sAXPRfUTTTFdjFgQ1EL5bDZIUKtpFVh4O0KYbE8rX3Qo=@vger.kernel.org X-Gm-Message-State: AOJu0YyuQq6mJRyU1rJFNAZOoChwOowJXQ4qxswrAXQKfTgxyi4UXHt/ P6fyWp22AZ4bDHQ7nxqdJ2xF+fNuIwOWhuORhtcW5jt9QCR6e4qKr0Zn X-Gm-Gg: ASbGncvaRPfQxeVEba8lxDJoSkih0FR/FruBXcFIWOTximUD+bar0VJMd88GXuXAMza Hh1kSyFN/XcyICw1RnKfxFL5MeE27FYxtDkwy//5v+M8bqbjST4tCCzmYxy4BM7AgIkMf/5uTWj vpS8YCVX03fSf863viMsZ2dmMxByxA8X778dTSpv4l7R7kbc9qpqtQCnvCDet0AKVlmvl3HlURs 9j5++dBc6DCoYfMQ2JDtI6auhYqlyMh8JNuhzOF6TyHSQ//752Vacqgh+knzviDM9WMancr1mka vm6OaPRgk424/RxWlKdz1OArV0pxNmzzqRSfTKsHUyyG056uAjot1F1h7MthwbJKRLl7UGab/jR +nT/andQ43gDC4tUWFmqNW1SMNW4z7ftMdx6myUVihQpwZKurkjN3JrfQ1a39CagK+eXfhrdx28 HQ5vhkRMaQPhrqlB7ISiMcXnnrvL/JkQVIfsbQHE9fpA438PRJ5IUyB3mP8ZSCCWBrFbk7Lpd9s zym1wiiHRjoMVZtdGsuNhoCMBPDaX6LRi3H5cy9CzBfyNVF8GnmN0o= X-Google-Smtp-Source: AGHT+IHA0P4UnsPFIhj4utJwEq6rWs7Nkg1EY8pIQ9eKSlMotkC1tp8iAeDrvqrEcOWVVi+EwKFK9w== X-Received: by 2002:a17:903:2f88:b0:274:5030:2906 with SMTP id d9443c01a7336-2984edcd3a1mr35066775ad.46.1762946284740; Wed, 12 Nov 2025 03:18:04 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.17.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:04 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:50 +1000 Subject: [PATCH v5 04/11] mfd: macsmc: Wire up Apple SMC RTC subdevice Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-4-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=0X8ztOxPIoLqy18jxO5aLU25sae5cz22Tql+G03LG0c=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUeYXSp6HTiumdkXFc1P4lS9PK9pZfHi1fzZ2ef4u HINXwV1TGRhEONisBRTZNnQJOQx24jtZr9I5V6YOaxMIEOkRRoYgICFgS83Ma/USMdIz1TbUM/Q UMdYx4iBi1MAptrWmuF/hdDOyUmTfkptiMp9whlc1h/rFWiQ075Z8Ps7E5W4r7/9GRkmt8XcOv9 ZLjFA4cGDV3ZBzGeuTKy/kmDxwz4r+r3ILmcmAA== 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.2 From nobody Sat Feb 7 08:44:21 2026 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.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 B426530EF9E for ; Wed, 12 Nov 2025 11:18:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946294; cv=none; b=h4Tik/SfoSU61ifB/xsG4/1ccdO7y5jL/jYSbtgxLWlZBKg5tIqzW1H6UlxB+k599pC6nhVFkJZtyCuDjWkInYuJBEeftEepBpIX5Df0Zh0p4s6Kao1I6YGEx7BAd+YvOLZ0TQaVm8qxQqeHL+tSlvUIn8zLZ6IjXQPTJKNNipk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946294; c=relaxed/simple; bh=6q93RqE2TlCEUP2NwG3riu6HujLsBQ7xoREhizw4YE8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HBoqGxtRJjDAd1ehC0Dn7VyS5kgkZ0zfIb36WLUp4lCvsCoej9JPCmrud57IQUPhDns3g7YwtVxWwrP4E2zkHW8qxqBWRaq17CyZL0x4J+7M0nqgmf3eyVyMkNGfEiR81X5MNDPgMyyBLFG5FBycOcJQU4GfozP46Pry7EpfKXY= 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=bksxmV7N; arc=none smtp.client-ip=209.85.215.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="bksxmV7N" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-bbac8ed0614so559403a12.3 for ; Wed, 12 Nov 2025 03:18:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946292; x=1763551092; 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=oNI7LGWITa4EqINx3hRdJjLYG6Q/rRCvp1T1pOKy7wA=; b=bksxmV7NhAfJOfVVXpYwCLqkXJZnvmfYJgUt6D3L+x/lVF2MNTVa3I+nR7mDjTu0Sr HX/fvD/EGFUr4mR+Q0lHjXky+kUeP00UzTUUThQZMYIo4d+DISeEc0YbAIeIxdMvr6JE dBnrnp8KhSUMJoXx26evMA8D1xQVK6qX5PIhhmFE5P1kKrEkdM4O4d4yGQ5LEoyY0Osr h1g2nId3CC6R1G06Ak28izvx73+/pSRGaa8EGVRimKd48g2453r/b4i5qV+coCYwVVHP qS++CG+Zo2ey46b9VgFSr0pSE3n1jLxx5trbKzPQfZY9nnG2jujo2esNj5aXw1XS8Bz7 TOPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946292; x=1763551092; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=oNI7LGWITa4EqINx3hRdJjLYG6Q/rRCvp1T1pOKy7wA=; b=LJGskjOZyMgcLMfcuIU/gAO0elz0f46amv1gyEQnWMaDkXpr0Aupxna6F50JdFw9N+ VLr2rPZv6TUmlvmHxOZxxtfRfNO+Mr5Z1uXkg9SAk6/2EKqsI8HmtCXLH6VxDPxWSubL te4RigCJX0lDjrgA2L8WJRboiHzLunC+rfLkadO853FdRSB0ArBqvvSxyYKkeyM7vkYd 7MBjmsTdHoQzpQxBR4B+GYQC5E7Of+HYX72uZDM45cw8GQt6Qw1bBds5xNjDX7gAojFL kHm/w1XiYpbd52bnxUHa6pWVb/X+FCcUqIg+MoqKUooGW0+8jkNp+oTCI+Ja7A8lsJSr bRgA== X-Forwarded-Encrypted: i=1; AJvYcCXYcR7ZWv9BREeolyU0Vi6/yWlVogb9l+zIjqcDMLZBGuxa1COclOyhLKQUqBWZwC3uTX6tNF40nxd3Tt4=@vger.kernel.org X-Gm-Message-State: AOJu0YwgxQMikZ0MWXCmKibiQ2VM9nvUIorhng6j1Hs+3SFv3nXyq0H+ sosjVQIZnwxfgVLLYWIEvpvOIk24r6keegaakcStXk11f5xIfZamqOxg X-Gm-Gg: ASbGncuZy84xYihoXjPbyd8lmF7gQQkgowwJCGgWcKKp9/MyVOOC2zRC9pE637r8V3n mPnhVIGubkxHuTTV7h4CQ4Wa+6KaE/kERKoCHrJlN2aXBk60hUjTLzXqHNtDYQGHl5R8zSAiANK C37GwerUb0LO583F0vz/ey1d+6ttweXthJ+F9SazCa23mNOWJ+4oxn/mWHA+K09jSextyOc/kie GNUr25iNDbEEDy6091vwmd4YaDgJNWjJD7LwM6nrE0xXrqp3hyQI0LIB0DmKjqjrog7bIjyux4G MzyVH4MDCH0qZU3ha1w5v3Tz4fgdjlL+OacirMymN1bFUwt1eIBSOqV5nCttauuFAky/J4Zo1KT Tq0yh8dP2ndecsG/CDg5eaVFLHc7qvSVT6074Q9rMgYRTz986DuRRMVaky6C3MiMsueEsilOWQQ U8HDH1K98uLP8o30Rf49NlbN3kKYEVvyJWBnPFy+2JHr4x70Ty8/p49v2Fu0FVTuDX6YuzQXCUu Bv/7XVGLaVIDaNqNlE0JR9PhaVN8K5AyIff8zOnvuhjNFUoJTIUW8c= X-Google-Smtp-Source: AGHT+IELfcxDjkTjHjE9o1zeO9QJOYdqpFiv0rmTaYc64N3Xo1j3VaCkx7ujy498PmB8+3B+SyLiqw== X-Received: by 2002:a17:902:e948:b0:298:2e7a:3c47 with SMTP id d9443c01a7336-2984ee01fb9mr30708195ad.42.1762946292125; Wed, 12 Nov 2025 03:18:12 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.18.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:11 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:51 +1000 Subject: [PATCH v5 05/11] mfd: macsmc: Add new __SMC_KEY macro Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-5-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=6q93RqE2TlCEUP2NwG3riu6HujLsBQ7xoREhizw4YE8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUejzpjy/vkkvernsg0f1VocNBsYcmoPfGGcYNvqp 94524SxYyILgxgXg6WYIsuGJiGP2UZsN/tFKvfCzGFlAhkiLdLAAAQsDHy5iXmlRjpGeqbahnqG hjrGOkYMXJwCMNXqRgz//d6GbizPvxkYE//8vkPl+4R5pvWLTsfJFmx87tjWwd0lx8jQpZzsKay ZNaeq6ohQs4Oau4P32Xf26tccFrxZZXi3cwY7AA== 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.2 From nobody Sat Feb 7 08:44:21 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 03F6C30C635 for ; Wed, 12 Nov 2025 11:18:20 +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=1762946303; cv=none; b=euORuEppl0nJxKBm01CcKK4O+V9Qd3Iit0ZQrIk5Bq3vI/3cZnl/XJ7LS2tXgV3vyNUSp+qoXTKtqhyxentiTuwKfFIW7tkgGpsM/ik+IIpW99NAxw2YvjbfOunHrivOXPBNX0dKCB1dB6l99HNmP0gz9b/BviIW0E97Pnjcp2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946303; c=relaxed/simple; bh=3wYHmevs8n4jUjJzIZHrnraTBhYl5nl74CHbx+gKTys=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DHbVkVoPOOKm1cU1hcu/B7zoWcOTyIfDJ+3bVBvJ36PHDP2/HjAEDL50jG8XrI9/3bgxrsDX3VN7GQbp6j812NgEpk41i1Kw1xo3lxwwD9DML7+8VIrEGsNRVROx/YIOKGApTnGguQNB3j2Fk2iHuOqiXR2I1QT/sZDkXhXeivA= 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=iDAibE3r; 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="iDAibE3r" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2955623e6faso6405085ad.1 for ; Wed, 12 Nov 2025 03:18:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946300; x=1763551100; 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=dIbLDEjWFxM4mNPJc82fIAWpvSV04TZ+m0iaypIfKvA=; b=iDAibE3rd7xSSw0Z5pjCmcvpIonS596P/T3+mBb3XBva4MOPbMB5j7APreQ9iQ/Sd6 WS3jSA9qEOnRTp4ZW0feh7Xyc/REYLWiQTbs526l5z+zaW0o2WBaYjvX2VvxRoFP/bsV LaATZ4+tbxp+sjrX0qNk+4EwBW3lwzo77zTDM0/dfgsnBLd3DvtZCC7X2q7Xs1e0BQJ/ OnDeFwUk7Ke0FNRLz5khVvMe/PUAYclR+o/YBiDv9lbmBsagc99y8zsuJZUhQc4aJWo2 7PJaCFi0uoRS8epIYpCvBKeIx4cZy/fHTPo+MgebwHR0omhMhTQs19JAFttrzCLd/DAt y1iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946300; x=1763551100; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=dIbLDEjWFxM4mNPJc82fIAWpvSV04TZ+m0iaypIfKvA=; b=I2sUpFzV7bqbuFacuikSVXJzp9eO77qllQqCpaF5byNP2N916C/sV5r527s7LMeSUd 0F/Z8Es06frCKPh6uCdZX5TmlWn/1CI44e8tUUJGV0bzUD/Zv09usPRD0mHSrfZZFPEd 4byNZl9ISsSxpqQ9Xf/DCIin9vH9k7SNyvpukoeK+m/c+2To86t3a2Uuwyzr1VR2cSN0 I2BbShta/7ZDtUwn1aemJyvgwSKjVNqUOMWad+STo8RLaaxePc3jyxrOUXtYo7fcFhEf i7GuxiTifJ/F8/RiKZdb54IACV6I25pBVSe8GjyUqqCDw13nJgHmxJAyr6tTVzwXjaxw if0Q== X-Forwarded-Encrypted: i=1; AJvYcCW1U5OexHiM6Kgkh52H2iAMnFqig1tSFRqg09EH5DbAOZ07oLxs05Ye6wwkj67sBCYbyIcOdnsG+PK7VFc=@vger.kernel.org X-Gm-Message-State: AOJu0Yyp+xKAo1I65FZNKqsdJU40qQ5ff3e3n1RCvQRG9ds1XnJ6PKys OXhGIa+JGXFHuHzxPdTtrL+dQeb7+cdqCRTADOLzRovt5N3xCtMaa/CG X-Gm-Gg: ASbGncuHYcxYnzXkTIfMsanRgrmNXiyMpDCxDjV7IzXD7MhMI+puantBikjpdbteKgM EAqOHTQGYoHwMUgd6szgSKVK5oa2RSqMfbc/YGiCUIuroyNwwPiJMoKoPAw8VWJy0hupKBhsU81 xTor43/Iciq7+MOdSiuDwSwMMOUgrj1iwXY3v9CC2QrEpnDdX+82X5FaLCRf9af9OPz+6Pq7yqj mqoO5YRDmlu2W9Ayel4Com+ux/Ydg9jlkvOoXM+zK5fIZ8l9B03y1PCrO+ULjBaQDE/xK0fM3K+ 33l2QxnPr+2v12aDwyEPz+Iu9d9k69J4aORFVeVtUeDde4MnuyUiruWasAANx1a1XPFpBwwH/Z1 8rB+E2EwCGc4y/+kNOslMwUfWuepcQz70SGrBY+mYPwh0INGP6Vx7jHE8Ww+vEKwLv4FSANFsoP Dzoa9/bxqzP7Z0rls5i7u7rLUQTlpuDuObJ4r1sHMPen4axEznkw3KBuvMPd55dZHQPVT2lrIuy N3gLrnFDiXERv1iokzfjJ81IJl9STT3LxC6q10naB+H6TUV2KjObao= X-Google-Smtp-Source: AGHT+IFlSYXG3w+7YYDRs3EBeNUNOLkcXsVOeiJnVtPHBAgHfApHjlTScItSAKLzW8sTuDVAmyiX2A== X-Received: by 2002:a17:903:2406:b0:298:4f73:d872 with SMTP id d9443c01a7336-2984f73d8d1mr34924415ad.21.1762946299679; Wed, 12 Nov 2025 03:18:19 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.18.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:19 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:52 +1000 Subject: [PATCH v5 06/11] hwmon: Add Apple Silicon SMC hwmon driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-6-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov , Jonathan Corbet , James Calligeros Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=29182; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=3wYHmevs8n4jUjJzIZHrnraTBhYl5nl74CHbx+gKTys=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUeDfrJu4+ZkfmVb9+OtxT9XtQj9+Z6RJ+99XJN0u 6THpqqrYyILgxgXg6WYIsuGJiGP2UZsN/tFKvfCzGFlAhkiLdLAAAQsDHy5iXmlRjpGeqbahnqG hjrGOkYMXJwCMNWFIYwM7+5O/rWimOtf0TtF2Zi0LE7Xl3EGs5Zpn1tr7XU05h9bBiPDq2/rODX K1xWtmC7aMVfTa57BTPMuMW/rzRrxN8v8VzzjBgA= X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 The System Management Controller on Apple Silicon devices is responsible for integrating and exposing the data reported by the vast array of hardware monitoring sensors present on these devices. It is also responsible for fan control, and allows users to manually set fan speeds if they so desire. Add a hwmon driver to expose current, power, temperature, and voltage monitoring sensors, as well as fan speed monitoring and control via the SMC on Apple Silicon devices. The SMC firmware has no consistency between devices, even when they share an SoC. The FourCC keys used to access sensors are almost random. An M1 Mac mini will have different FourCCs for its CPU core temperature sensors to an M1 MacBook Pro, for example. For this reason, the valid sensors for a given device are specified in a child of the SMC Devicetree node. The driver uses this information to determine which sensors to make available at runtime. Reviewed-by: Neal Gompa Acked-by: Guenter Roeck Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros --- Documentation/hwmon/macsmc-hwmon.rst | 71 +++ MAINTAINERS | 2 + drivers/hwmon/Kconfig | 12 + drivers/hwmon/Makefile | 1 + drivers/hwmon/macsmc-hwmon.c | 851 +++++++++++++++++++++++++ 5 files changed, 937 insertions(+) diff --git a/Documentation/hwmon/macsmc-hwmon.rst b/Documentation/hwmon/mac= smc-hwmon.rst new file mode 100644 index 000000000000..6903f76df62b --- /dev/null +++ b/Documentation/hwmon/macsmc-hwmon.rst @@ -0,0 +1,71 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +Kernel driver macsmc-hwmon +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + +Supported hardware + + * Apple Silicon Macs (M1 and up) + +Author: James Calligeros + +Description +----------- + +macsmc-hwmon exposes the Apple System Management controller's +temperature, voltage, current and power sensors, as well as +fan speed and control capabilities, via hwmon. + +Because each Apple Silicon Mac exposes a different set of sensors +(e.g. the MacBooks expose battery telemetry that is not present on +the desktop Macs), sensors present on any given machine are described +via Devicetree. The driver picks these up and registers them with +hwmon when probed. + +Manual fan speed is supported via the fan_control module parameter. This +is disabled by default and marked as unsafe, as it cannot be proven that +the system will fail safe if overheating due to manual fan control being +used. + +sysfs interface +--------------- + +currX_input + Ammeter value + +currX_label + Ammeter label + +fanX_input + Current fan speed + +fanX_label + Fan label + +fanX_min + Minimum possible fan speed + +fanX_max + Maximum possible fan speed + +fanX_target + Current fan setpoint + +inX_input + Voltmeter value + +inX_label + Voltmeter label + +powerX_input + Power meter value + +powerX_label + Power meter label + +tempX_input + Temperature sensor value + +tempX_label + Temperature sensor label + diff --git a/MAINTAINERS b/MAINTAINERS index 5cf253a25831..fb55a167699e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2444,12 +2444,14 @@ F: Documentation/devicetree/bindings/rtc/apple,smc-= rtc.yaml F: Documentation/devicetree/bindings/spi/apple,spi.yaml F: Documentation/devicetree/bindings/spmi/apple,spmi.yaml F: Documentation/devicetree/bindings/watchdog/apple,wdt.yaml +F: Documentation/hwmon/macsmc-hwmon.rst F: arch/arm64/boot/dts/apple/ F: drivers/bluetooth/hci_bcm4377.c F: drivers/clk/clk-apple-nco.c F: drivers/cpufreq/apple-soc-cpufreq.c F: drivers/dma/apple-admac.c F: drivers/gpio/gpio-macsmc.c +F: drivers/hwmon/macsmc-hwmon.c F: drivers/pmdomain/apple/ F: drivers/i2c/busses/i2c-pasemi-core.c F: drivers/i2c/busses/i2c-pasemi-platform.c diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 2760feb9f83b..d6e9e39d2762 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -1174,6 +1174,18 @@ config SENSORS_LTQ_CPUTEMP If you say yes here you get support for the temperature sensor inside your CPU. =20 +config SENSORS_MACSMC_HWMON + tristate "Apple SMC (Apple Silicon)" + depends on MFD_MACSMC && OF + help + This driver enables hwmon support for current, power, temperature, + and voltage sensors, as well as fan speed reporting and control + on Apple Silicon devices. Say Y here if you have an Apple Silicon + device. + + This driver can also be built as a module. If so, the module will + be called macsmc-hwmon. + config SENSORS_MAX1111 tristate "Maxim MAX1111 Serial 8-bit ADC chip and compatibles" depends on SPI_MASTER diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index 73b2abdcc6dd..f9c049ce9124 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile @@ -148,6 +148,7 @@ obj-$(CONFIG_SENSORS_LTC4260) +=3D ltc4260.o obj-$(CONFIG_SENSORS_LTC4261) +=3D ltc4261.o obj-$(CONFIG_SENSORS_LTC4282) +=3D ltc4282.o obj-$(CONFIG_SENSORS_LTQ_CPUTEMP) +=3D ltq-cputemp.o +obj-$(CONFIG_SENSORS_MACSMC_HWMON) +=3D macsmc-hwmon.o obj-$(CONFIG_SENSORS_MAX1111) +=3D max1111.o obj-$(CONFIG_SENSORS_MAX127) +=3D max127.o obj-$(CONFIG_SENSORS_MAX16065) +=3D max16065.o diff --git a/drivers/hwmon/macsmc-hwmon.c b/drivers/hwmon/macsmc-hwmon.c new file mode 100644 index 000000000000..1c0bbec7e8eb --- /dev/null +++ b/drivers/hwmon/macsmc-hwmon.c @@ -0,0 +1,851 @@ +// SPDX-License-Identifier: GPL-2.0-only OR MIT +/* + * Apple SMC hwmon driver for Apple Silicon platforms + * + * The System Management Controller on Apple Silicon devices is responsibl= e for + * measuring data from sensors across the SoC and machine. These include p= ower, + * temperature, voltage and current sensors. Some "sensors" actually expose + * derived values. An example of this is the key PHPC, which is an estimate + * of the heat energy being dissipated by the SoC. + * + * While each SoC only has one SMC variant, each platform exposes a differ= ent + * set of sensors. For example, M1 MacBooks expose battery telemetry senso= rs + * which are not present on the M1 Mac mini. For this reason, the available + * sensors for a given platform are described in the device tree in a child + * node of the SMC device. We must walk this list of available sensors and + * populate the required hwmon data structures at runtime. + * + * Originally based on a concept by Jean-Francois Bortolotti + * + * Copyright The Asahi Linux Contributors + */ + +#include +#include +#include +#include +#include +#include + +#define MAX_LABEL_LENGTH 32 + +/* Temperature, voltage, current, power, fan(s) */ +#define NUM_SENSOR_TYPES 5 + +#define FLT_EXP_BIAS 127 +#define FLT_EXP_MASK GENMASK(30, 23) +#define FLT_MANT_BIAS 23 +#define FLT_MANT_MASK GENMASK(22, 0) +#define FLT_SIGN_MASK BIT(31) + +static bool fan_control; +module_param_unsafe(fan_control, bool, 0644); +MODULE_PARM_DESC(fan_control, + "Override the SMC to set your own fan speeds on supported machines"); + +struct macsmc_hwmon_sensor { + struct apple_smc_key_info info; + smc_key macsmc_key; + char label[MAX_LABEL_LENGTH]; + u32 attrs; +}; + +struct macsmc_hwmon_fan { + struct macsmc_hwmon_sensor now; + struct macsmc_hwmon_sensor min; + struct macsmc_hwmon_sensor max; + struct macsmc_hwmon_sensor set; + struct macsmc_hwmon_sensor mode; + char label[MAX_LABEL_LENGTH]; + u32 attrs; + bool manual; +}; + +struct macsmc_hwmon_sensors { + struct hwmon_channel_info channel_info; + struct macsmc_hwmon_sensor *sensors; + u32 count; +}; + +struct macsmc_hwmon_fans { + struct hwmon_channel_info channel_info; + struct macsmc_hwmon_fan *fans; + u32 count; +}; + +struct macsmc_hwmon { + struct device *dev; + struct apple_smc *smc; + struct device *hwmon_dev; + struct hwmon_chip_info chip_info; + /* Chip + sensor types + NULL */ + const struct hwmon_channel_info *channel_infos[1 + NUM_SENSOR_TYPES + 1]; + struct macsmc_hwmon_sensors temp; + struct macsmc_hwmon_sensors volt; + struct macsmc_hwmon_sensors curr; + struct macsmc_hwmon_sensors power; + struct macsmc_hwmon_fans fan; +}; + +static int macsmc_hwmon_read_label(struct device *dev, + enum hwmon_sensor_types type, u32 attr, + int channel, const char **str) +{ + struct macsmc_hwmon *hwmon =3D dev_get_drvdata(dev); + + switch (type) { + case hwmon_temp: + *str =3D hwmon->temp.sensors[channel].label; + break; + case hwmon_in: + *str =3D hwmon->volt.sensors[channel].label; + break; + case hwmon_curr: + *str =3D hwmon->curr.sensors[channel].label; + break; + case hwmon_power: + *str =3D hwmon->power.sensors[channel].label; + break; + case hwmon_fan: + *str =3D hwmon->fan.fans[channel].label; + break; + default: + return -EOPNOTSUPP; + } + + return 0; +} + +/* + * A number of sensors report data in a 48.16 fixed-point decimal format t= hat is + * not used by any other function of the SMC. + */ +static int macsmc_hwmon_read_ioft_scaled(struct apple_smc *smc, smc_key ke= y, + u64 *p, int scale) +{ + u64 val; + int ret; + + ret =3D apple_smc_read_u64(smc, key, &val); + if (ret < 0) + return ret; + + *p =3D mult_frac(val, scale, 65536); + + return 0; +} + +/* + * Many sensors report their data as IEEE-754 floats. No other SMC functio= n uses + * them. + */ +static int macsmc_hwmon_read_f32_scaled(struct apple_smc *smc, smc_key key, + int *p, int scale) +{ + u32 fval; + u64 val; + int ret, exp; + + ret =3D apple_smc_read_u32(smc, key, &fval); + if (ret < 0) + return ret; + + val =3D ((u64)((fval & FLT_MANT_MASK) | BIT(23))); + exp =3D ((fval >> 23) & 0xff) - FLT_EXP_BIAS - FLT_MANT_BIAS; + + /* We never have negatively scaled SMC floats */ + val *=3D scale; + + if (exp > 63) + val =3D U64_MAX; + else if (exp < -63) + val =3D 0; + else if (exp < 0) + val >>=3D -exp; + else if (exp !=3D 0 && (val & ~((1UL << (64 - exp)) - 1))) /* overflow */ + val =3D U64_MAX; + else + val <<=3D exp; + + if (fval & FLT_SIGN_MASK) { + if (val > (-(s64)INT_MIN)) + *p =3D INT_MIN; + else + *p =3D -val; + } else { + if (val > INT_MAX) + *p =3D INT_MAX; + else + *p =3D val; + } + + return 0; +} + +/* + * The SMC has keys of multiple types, denoted by a FourCC of the same for= mat + * as the key ID. We don't know what data type a key encodes until we poke= at it. + */ +static int macsmc_hwmon_read_key(struct apple_smc *smc, + struct macsmc_hwmon_sensor *sensor, int scale, + long *val) +{ + int ret; + + switch (sensor->info.type_code) { + /* 32-bit IEEE 754 float */ + case __SMC_KEY('f', 'l', 't', ' '): { + u32 flt_ =3D 0; + + ret =3D macsmc_hwmon_read_f32_scaled(smc, sensor->macsmc_key, + &flt_, scale); + if (ret) + return ret; + + *val =3D flt_; + break; + } + /* 48.16 fixed point decimal */ + case __SMC_KEY('i', 'o', 'f', 't'): { + u64 ioft =3D 0; + + ret =3D macsmc_hwmon_read_ioft_scaled(smc, sensor->macsmc_key, + &ioft, scale); + if (ret) + return ret; + + *val =3D (long)ioft; + break; + } + default: + return -EOPNOTSUPP; + } + + return 0; +} + +static int macsmc_hwmon_write_f32(struct apple_smc *smc, smc_key key, int = value) +{ + u64 val; + u32 fval =3D 0; + int exp =3D 0, neg; + + val =3D abs(value); + neg =3D val !=3D value; + + if (val) { + int msb =3D __fls(val) - exp; + + if (msb > 23) { + val >>=3D msb - FLT_MANT_BIAS; + exp -=3D msb - FLT_MANT_BIAS; + } else if (msb < 23) { + val <<=3D FLT_MANT_BIAS - msb; + exp +=3D msb; + } + + fval =3D FIELD_PREP(FLT_SIGN_MASK, neg) | + FIELD_PREP(FLT_EXP_MASK, exp + FLT_EXP_BIAS) | + FIELD_PREP(FLT_MANT_MASK, val); + } + + return apple_smc_write_u32(smc, key, fval); +} + +static int macsmc_hwmon_write_key(struct apple_smc *smc, + struct macsmc_hwmon_sensor *sensor, long val) +{ + switch (sensor->info.type_code) { + /* 32-bit IEEE 754 float */ + case __SMC_KEY('f', 'l', 't', ' '): + return macsmc_hwmon_write_f32(smc, sensor->macsmc_key, val); + /* unsigned 8-bit integer */ + case __SMC_KEY('u', 'i', '8', ' '): + return apple_smc_write_u8(smc, sensor->macsmc_key, val); + default: + return -EOPNOTSUPP; + } +} + +static int macsmc_hwmon_read_fan(struct macsmc_hwmon *hwmon, u32 attr, int= chan, + long *val) +{ + switch (attr) { + case hwmon_fan_input: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].now, 1, val); + case hwmon_fan_min: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].min, 1, val); + case hwmon_fan_max: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].max, 1, val); + case hwmon_fan_target: + return macsmc_hwmon_read_key(hwmon->smc, + &hwmon->fan.fans[chan].set, 1, val); + default: + return -EOPNOTSUPP; + } +} + +static int macsmc_hwmon_write_fan(struct device *dev, u32 attr, int channe= l, + long val) +{ + struct macsmc_hwmon *hwmon =3D dev_get_drvdata(dev); + long min, max; + int ret; + + if (!fan_control || hwmon->fan.fans[channel].mode.macsmc_key =3D=3D 0) + return -EOPNOTSUPP; + + /* + * The SMC does no sanity checks on requested fan speeds, so we need to. + */ + ret =3D macsmc_hwmon_read_key(hwmon->smc, &hwmon->fan.fans[channel].min, + 1, &min); + if (ret) + return ret; + + ret =3D macsmc_hwmon_read_key(hwmon->smc, &hwmon->fan.fans[channel].max, + 1, &max); + if (ret) + return ret; + + if (val >=3D min && val <=3D max) { + if (!hwmon->fan.fans[channel].manual) { + /* Write 1 to mode key for manual control */ + ret =3D macsmc_hwmon_write_key(hwmon->smc, + &hwmon->fan.fans[channel].mode, 1); + if (ret < 0) + return ret; + + hwmon->fan.fans[channel].manual =3D true; + } + return macsmc_hwmon_write_key(hwmon->smc, + &hwmon->fan.fans[channel].set, val); + } else if (!val) { + if (hwmon->fan.fans[channel].manual) { + ret =3D macsmc_hwmon_write_key(hwmon->smc, + &hwmon->fan.fans[channel].mode, 0); + if (ret < 0) + return ret; + + hwmon->fan.fans[channel].manual =3D false; + } + } else { + return -EINVAL; + } + + return 0; +} + +static int macsmc_hwmon_read(struct device *dev, enum hwmon_sensor_types t= ype, + u32 attr, int channel, long *val) +{ + struct macsmc_hwmon *hwmon =3D dev_get_drvdata(dev); + int ret =3D 0; + + switch (type) { + case hwmon_temp: + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->temp.sensors[channel], 1000, val); + break; + case hwmon_in: + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->volt.sensors[channel], 1000, val); + break; + case hwmon_curr: + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->curr.sensors[channel], 1000, val); + break; + case hwmon_power: + /* SMC returns power in Watts with acceptable precision to scale to uW */ + ret =3D macsmc_hwmon_read_key(hwmon->smc, + &hwmon->power.sensors[channel], + 1000000, val); + break; + case hwmon_fan: + ret =3D macsmc_hwmon_read_fan(hwmon, attr, channel, val); + break; + default: + return -EOPNOTSUPP; + } + + return ret; +} + +static int macsmc_hwmon_write(struct device *dev, enum hwmon_sensor_types = type, + u32 attr, int channel, long val) +{ + switch (type) { + case hwmon_fan: + return macsmc_hwmon_write_fan(dev, attr, channel, val); + default: + return -EOPNOTSUPP; + } +} + +static umode_t macsmc_hwmon_fan_is_visible(const struct macsmc_hwmon_fan *= fan, + u32 attr) +{ + if (fan->attrs & BIT(attr)) { + if (attr =3D=3D hwmon_fan_target && fan_control && fan->mode.macsmc_key) + return 0644; + + return 0444; + } + + return 0; +} + +static umode_t macsmc_hwmon_is_visible(const void *data, + enum hwmon_sensor_types type, u32 attr, + int channel) +{ + const struct macsmc_hwmon *hwmon =3D data; + struct macsmc_hwmon_sensor *sensor; + + switch (type) { + case hwmon_in: + sensor =3D &hwmon->volt.sensors[channel]; + break; + case hwmon_curr: + sensor =3D &hwmon->curr.sensors[channel]; + break; + case hwmon_power: + sensor =3D &hwmon->power.sensors[channel]; + break; + case hwmon_temp: + sensor =3D &hwmon->temp.sensors[channel]; + break; + case hwmon_fan: + return macsmc_hwmon_fan_is_visible(&hwmon->fan.fans[channel], attr); + default: + return 0; + } + + /* Sensors only register ro attributes */ + if (sensor->attrs & BIT(attr)) + return 0444; + + return 0; +} + +static const struct hwmon_ops macsmc_hwmon_ops =3D { + .is_visible =3D macsmc_hwmon_is_visible, + .read =3D macsmc_hwmon_read, + .read_string =3D macsmc_hwmon_read_label, + .write =3D macsmc_hwmon_write, +}; + +/* + * Get the key metadata, including key data type, from the SMC. + */ +static int macsmc_hwmon_parse_key(struct device *dev, struct apple_smc *sm= c, + struct macsmc_hwmon_sensor *sensor, + const char *key) +{ + int ret; + + ret =3D apple_smc_get_key_info(smc, _SMC_KEY(key), &sensor->info); + if (ret) { + dev_dbg(dev, "Failed to retrieve key info for %s\n", key); + return ret; + } + + sensor->macsmc_key =3D _SMC_KEY(key); + + return 0; +} + +/* + * A sensor is a single key-value pair as made available by the SMC. + * The devicetree gives us the SMC key ID and a friendly name where the + * purpose of the sensor is known. + */ +static int macsmc_hwmon_create_sensor(struct device *dev, struct apple_smc= *smc, + struct device_node *sensor_node, + struct macsmc_hwmon_sensor *sensor) +{ + const char *key, *label; + int ret; + + ret =3D of_property_read_string(sensor_node, "apple,key-id", &key); + if (ret) { + dev_dbg(dev, "Could not find apple,key-id in sensor node\n"); + return ret; + } + + ret =3D macsmc_hwmon_parse_key(dev, smc, sensor, key); + if (ret) + return ret; + + ret =3D of_property_read_string(sensor_node, "label", &label); + if (ret) + dev_dbg(dev, "No label found for sensor %s\n", key); + else + strscpy_pad(sensor->label, label, sizeof(sensor->label)); + + return 0; +} + +/* + * Fan data is exposed by the SMC as multiple sensors. + * + * The devicetree schema reuses apple,key-id for the actual fan speed sens= or. + * Min, max and target keys do not need labels, so we can reuse label + * for naming the entire fan. + */ +static int macsmc_hwmon_create_fan(struct device *dev, struct apple_smc *s= mc, + struct device_node *fan_node, + struct macsmc_hwmon_fan *fan) +{ + const char *label, *now, *min, *max, *set, *mode; + int ret; + + ret =3D of_property_read_string(fan_node, "apple,key-id", &now); + if (ret) { + dev_err(dev, "apple,key-id not found in fan node!\n"); + return ret; + } + + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->now, now); + if (ret) + return ret; + + fan->attrs =3D HWMON_F_INPUT; + + ret =3D of_property_read_string(fan_node, "label", &label); + if (ret) { + dev_dbg(dev, "No label found for fan %s\n", now); + } else { + strscpy_pad(fan->label, label, sizeof(fan->label)); + fan->attrs |=3D HWMON_F_LABEL; + } + + /* The following keys are not required to simply monitor fan speed */ + if (!of_property_read_string(fan_node, "apple,fan-minimum", &min)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->min, min); + if (ret) + return ret; + + fan->attrs |=3D HWMON_F_MIN; + } + + if (!of_property_read_string(fan_node, "apple,fan-maximum", &max)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->max, max); + if (ret) + return ret; + + fan->attrs |=3D HWMON_F_MAX; + } + + if (!of_property_read_string(fan_node, "apple,fan-target", &set)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->set, set); + if (ret) + return ret; + + fan->attrs |=3D HWMON_F_TARGET; + } + + if (!of_property_read_string(fan_node, "apple,fan-mode", &mode)) { + ret =3D macsmc_hwmon_parse_key(dev, smc, &fan->mode, mode); + if (ret) + return ret; + } + + /* Initialise fan control mode to automatic */ + fan->manual =3D false; + + return 0; +} + +static int macsmc_hwmon_populate_sensors(struct macsmc_hwmon *hwmon, + struct device_node *hwmon_node) +{ + struct device_node *key_node __maybe_unused; + struct macsmc_hwmon_sensor *sensor; + u32 n_current =3D 0, n_fan =3D 0, n_power =3D 0, n_temperature =3D 0, n_v= oltage =3D 0; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "current-") { + n_current++; + } + + if (n_current) { + hwmon->curr.sensors =3D devm_kcalloc(hwmon->dev, n_current, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->curr.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "current-") { + sensor =3D &hwmon->curr.sensors[hwmon->curr.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_C_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_C_LABEL; + + hwmon->curr.count++; + } + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "fan-") { + n_fan++; + } + + if (n_fan) { + hwmon->fan.fans =3D devm_kcalloc(hwmon->dev, n_fan, + sizeof(struct macsmc_hwmon_fan), GFP_KERNEL); + if (!hwmon->fan.fans) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "fan-") { + if (!macsmc_hwmon_create_fan(hwmon->dev, hwmon->smc, key_node, + &hwmon->fan.fans[hwmon->fan.count])) + hwmon->fan.count++; + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "power-") { + n_power++; + } + + if (n_power) { + hwmon->power.sensors =3D devm_kcalloc(hwmon->dev, n_power, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->power.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "power-") { + sensor =3D &hwmon->power.sensors[hwmon->power.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_P_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_P_LABEL; + + hwmon->power.count++; + } + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "temperature-") { + n_temperature++; + } + + if (n_temperature) { + hwmon->temp.sensors =3D devm_kcalloc(hwmon->dev, n_temperature, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->temp.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "temperature-")= { + sensor =3D &hwmon->temp.sensors[hwmon->temp.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_T_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_T_LABEL; + + hwmon->temp.count++; + } + } + } + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "voltage-") { + n_voltage++; + } + + if (n_voltage) { + hwmon->volt.sensors =3D devm_kcalloc(hwmon->dev, n_voltage, + sizeof(struct macsmc_hwmon_sensor), GFP_KERNEL); + if (!hwmon->volt.sensors) + return -ENOMEM; + + for_each_child_of_node_with_prefix(hwmon_node, key_node, "volt-") { + sensor =3D &hwmon->temp.sensors[hwmon->temp.count]; + if (!macsmc_hwmon_create_sensor(hwmon->dev, hwmon->smc, key_node, senso= r)) { + sensor->attrs =3D HWMON_I_INPUT; + + if (*sensor->label) + sensor->attrs |=3D HWMON_I_LABEL; + + hwmon->volt.count++; + } + } + } + + return 0; +} + +/* Create NULL-terminated config arrays */ +static void macsmc_hwmon_populate_configs(u32 *configs, const struct macsm= c_hwmon_sensors *sensors) +{ + int idx; + + for (idx =3D 0; idx < sensors->count; idx++) + configs[idx] =3D sensors->sensors[idx].attrs; +} + +static void macsmc_hwmon_populate_fan_configs(u32 *configs, const struct m= acsmc_hwmon_fans *fans) +{ + int idx; + + for (idx =3D 0; idx < fans->count; idx++) + configs[idx] =3D fans->fans[idx].attrs; +} + +static const struct hwmon_channel_info *const macsmc_chip_channel_info =3D + HWMON_CHANNEL_INFO(chip, HWMON_C_REGISTER_TZ); + +static int macsmc_hwmon_create_infos(struct macsmc_hwmon *hwmon) +{ + struct hwmon_channel_info *channel_info; + int i =3D 0; + + /* chip */ + hwmon->channel_infos[i++] =3D macsmc_chip_channel_info; + + if (hwmon->curr.count) { + channel_info =3D &hwmon->curr.channel_info; + channel_info->type =3D hwmon_curr; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->curr.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, &hwmon->curr); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->fan.count) { + channel_info =3D &hwmon->fan.channel_info; + channel_info->type =3D hwmon_fan; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->fan.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_fan_configs((u32 *)channel_info->config, &hwmon->f= an); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->power.count) { + channel_info =3D &hwmon->power.channel_info; + channel_info->type =3D hwmon_power; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->power.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, &hwmon->power= ); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->temp.count) { + channel_info =3D &hwmon->temp.channel_info; + channel_info->type =3D hwmon_temp; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->temp.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, &hwmon->temp); + hwmon->channel_infos[i++] =3D channel_info; + } + + if (hwmon->volt.count) { + channel_info =3D &hwmon->volt.channel_info; + channel_info->type =3D hwmon_in; + channel_info->config =3D devm_kcalloc(hwmon->dev, hwmon->volt.count + 1, + sizeof(u32), GFP_KERNEL); + if (!channel_info->config) + return -ENOMEM; + + macsmc_hwmon_populate_configs((u32 *)channel_info->config, &hwmon->volt); + hwmon->channel_infos[i++] =3D channel_info; + } + + return 0; +} + +static int macsmc_hwmon_probe(struct platform_device *pdev) +{ + struct apple_smc *smc =3D dev_get_drvdata(pdev->dev.parent); + struct macsmc_hwmon *hwmon; + int ret; + + /* + * The MFD driver will try to probe us unconditionally. Some devices + * with the SMC do not have hwmon capabilities. Only probe if we have + * a hwmon node. + */ + if (!pdev->dev.of_node) + return -ENODEV; + + hwmon =3D devm_kzalloc(&pdev->dev, sizeof(*hwmon), + GFP_KERNEL); + if (!hwmon) + return -ENOMEM; + + hwmon->dev =3D &pdev->dev; + hwmon->smc =3D smc; + + ret =3D macsmc_hwmon_populate_sensors(hwmon, hwmon->dev->of_node); + if (ret) { + dev_err(hwmon->dev, "Could not parse sensors\n"); + return ret; + } + + if (!hwmon->curr.count && !hwmon->fan.count && + !hwmon->power.count && !hwmon->temp.count && + !hwmon->volt.count) { + dev_err(hwmon->dev, + "No valid sensors found of any supported type\n"); + return -ENODEV; + } + + ret =3D macsmc_hwmon_create_infos(hwmon); + if (ret) + return ret; + + hwmon->chip_info.ops =3D &macsmc_hwmon_ops; + hwmon->chip_info.info =3D + (const struct hwmon_channel_info *const *)&hwmon->channel_infos; + + hwmon->hwmon_dev =3D devm_hwmon_device_register_with_info(&pdev->dev, + "macsmc_hwmon", hwmon, + &hwmon->chip_info, NULL); + if (IS_ERR(hwmon->hwmon_dev)) + return dev_err_probe(hwmon->dev, PTR_ERR(hwmon->hwmon_dev), + "Probing SMC hwmon device failed\n"); + + dev_dbg(hwmon->dev, "Registered SMC hwmon device. Sensors:\n"); + dev_dbg(hwmon->dev, + "Current: %d, Fans: %d, Power: %d, Temperature: %d, Voltage: %d", + hwmon->curr.count, hwmon->fan.count, + hwmon->power.count, hwmon->temp.count, + hwmon->volt.count); + + return 0; +} + +static const struct of_device_id macsmc_hwmon_of_table[] =3D { + { .compatible =3D "apple,smc-hwmon" }, + {} +}; +MODULE_DEVICE_TABLE(of, macsmc_hwmon_of_table); + +static struct platform_driver macsmc_hwmon_driver =3D { + .probe =3D macsmc_hwmon_probe, + .driver =3D { + .name =3D "macsmc-hwmon", + .of_match_table =3D macsmc_hwmon_of_table, + }, +}; +module_platform_driver(macsmc_hwmon_driver); + +MODULE_DESCRIPTION("Apple Silicon SMC hwmon driver"); +MODULE_AUTHOR("James Calligeros "); +MODULE_LICENSE("Dual MIT/GPL"); --=20 2.51.2 From nobody Sat Feb 7 08:44:21 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 F388930C612 for ; Wed, 12 Nov 2025 11:18:27 +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=1762946309; cv=none; b=E9pS0jG5CeAeBDLYHpoN7ZItF9Cq9xjcDUw/DQGT/7bwpWeYNX+wyKp0nmLbpMXsyq2O786wowLlMCvKzujZjDaNxPOKHejFEtDDbL3GNaRyKoXdwiRXSSEYLVS5gETAXkLGHKRpDC3kGTmpx57msC4S3u/5fbDC7QL79vcQ3CI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946309; c=relaxed/simple; bh=KDo5qf6VinF0dcocAqVHp8Ouk8wH3LA0jZpPa6Inudg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bGNvZIYdaDXGKlgRyev9KEI2TC3uTyESoLFTpyIcuo/Yy5v1VBqYvwJO+Ham8JnLyfyOCCiD/bxK82KnGKh4pZRvB2B7l2zIssGIIWeCAs96sVQGso9BpgHCmDaL61YwF7VpjQQnzIcmqobuZTM3GVIo7fSxMZHRXmrLjaJcF2I= 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=aU6cMCxK; 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="aU6cMCxK" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2956d816c10so7547515ad.1 for ; Wed, 12 Nov 2025 03:18:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946307; x=1763551107; 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=lo9J4PpQIlH3VY5/mtPONGxIrnhCSXs3KQrxmVaTEns=; b=aU6cMCxKtR+CE944lWsCiO5Dv1DxnTnVmxFZ7J4TcQLZZvjBVkHwz0xcu72s0og5Dg xbZgzyyjWlirg3gL3kmcknVELZshT9neYBuko4L6oQo4dRrEf5SJ0+MGCUky2xjlC8QB 4pIGakWQJqEH7qjPnAeHmXUD6mOtPrvWWvTYpR3YgQjiz9e2THUxS7P3LZ6XVmpklI6Z QHHhBAoYDElCWToX5rTSG6ptOAJUBOIvWFe1FDBcw8XLh9HAVqrFCBv5UljjHgASg1iA J1i9Zf4J9CDWnmZvjsJVv9jI2kN3mXOC/x1qnNhVSA4MYOOjrVubVdUudeyLSb+HnZjy W67A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946307; x=1763551107; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=lo9J4PpQIlH3VY5/mtPONGxIrnhCSXs3KQrxmVaTEns=; b=P6kMJ56GnNGcLLMhcwFFjOEH+zqqXeTE+TeewxC8ZL44OkQy2XeKOJVi5blMXU1Ltn g1RxLYmMOOCsvWuYKQoGOJhN0l27xmnI5hqulIcZsgO0w9QpT869uN5rcMKKRj2jhCIA vAWjcRPsiH56qOTVESucx0cq0EWWXKBbbWcW3zoqgqpO1ZXPixQATyDxeS/Cixg5df2o hEs+6/Vab5s08uhmwazuzIdWIRgZMFN0R3Ms52oAWbrYubszAzz0j3WJyzZ+l97Mcn1r NzOTk2SLs8yj1P74fHGryGVIhXdTPNkzOApvjR8aRYjpzfM5oHyNfhDJxa5vzYyEh9Wy 1eTQ== X-Forwarded-Encrypted: i=1; AJvYcCUJ6qNWvLAv3fFkVS8JequUx7ffQNUTw9xGM5qTpGWbDn4p2EY9ej01NeyU0jlkMTO2JseUbvyf0WNodJA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2NLB0HuaY/nUFXMCXMsB8ESA8KKcOsI+OLMOf7L9NYpTwirdQ 6xgC824jMKvzJ0e60I089ygnhuByU252Nznowz0u9RpdKBXzeqkoNTmT X-Gm-Gg: ASbGnct/es1xQVgsqZLLJfG3hOy4NlDmbQEu/HI2YaLcdJy/FTntAUhdP7x8BKU44mh oZZb5MEszwc6ozWfFE5m1bTarFFE+z7MCXQeLqfglaWBmRzlS1WEjk4hPN0oX2j15Ct32S/XBSt gfXjZwx2aa0JPPwVcj/ZCp1phPoiUUph0D0dSnK6w3KCrXsGU6CDLDYPSvsOFcYZyboBqpUxMXZ UABawbHVQi47WxHpCxK644+ft02nAw/m64LxNaYNH+t3IOa9c6tnBfE9sxtREI32QQK1b9VGgWH k+j5qmh62vtU14oVxITvMHHtYLN74LQ+CubTcVqkso4a3vrGeEVjNmDphkSJEKU86OhbPLy14Sq v7i4h8Jllj3saqnmK/GTIQ+Z1MwcfpasBtNKzdC7Y1adM1XRVKi0jdrInityJx5UzPLNcHUq414 LX6ExcR2pMIbEFx8eF99/xKUbj85qcgtt/SBe3IQTuZpJEZKSJP3WBuVhf+ufqm7nIcvFO4scz8 IxC4FC73LSZFL8vX9mbVtmS+JizJdznRgDoaBLJ5Y9qW7YB2lBPAo9sl+se6nic8A== X-Google-Smtp-Source: AGHT+IEImt2oq5AVyAyincVqTizrLP2oINP9hgu+RQmDQEbV/h6h5zM29LTMvGX0qa1Tj+zk9/lS9g== X-Received: by 2002:a17:902:d60b:b0:294:fb21:ae07 with SMTP id d9443c01a7336-2984ed92d45mr33420405ad.21.1762946307045; Wed, 12 Nov 2025 03:18:27 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.18.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:26 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:53 +1000 Subject: [PATCH v5 07/11] mfd: macsmc: Wire up Apple SMC hwmon subdevice Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-7-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=KDo5qf6VinF0dcocAqVHp8Ouk8wH3LA0jZpPa6Inudg=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUdZA4+/VDxp9c31mWLPB8Z1xzU9H8o5bWfLi7zwL fz9vPJZHRNZGMS4GCzFFFk2NAl5zDZiu9kvUrkXZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNQx1jFi4OIUgKkumMDwv+iDSLuozZuJUz69v8Z79VyVRceJ3QsUthr+n/mbd2rAklWMDLfnfll 6aovjr827RbynnHifxf4lfqXZyn/z+aa9YGbaXM0MAA== 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.2 From nobody Sat Feb 7 08:44:21 2026 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6EA673126A3 for ; Wed, 12 Nov 2025 11:18:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946317; cv=none; b=ivdJNS/W5gGUR6SytMdmiuIwA7fnWy2Pa5PjiXURWuKv2Kk1/i7wQNVXbOCbnhqa4nj4Iupmz4DF0J9Jq4/mS76JPOudAtP/xvd3VKEfefFQHNL3lnrI4lcS7IZQTXG9Z9P1s6Wd668zjpJpP9f/ahWkuvQ71txZf7jYWe5yfus= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946317; c=relaxed/simple; bh=YG9lZXx46fthBKtkemmOX5y4IihWTRLCINMuSXC89CM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fcjFjePNn7sHpAl/+Q43ZWZ0GTvx6FIPnsMUSPVKNJc/06cBafTzG1E/3Ys1Ei420xZZRf2xRIVb9bDh9q2rmjlmu33OfZWjflhsH92bVBYdD+S6hYxQOSyniDJ93ihNOvUSQxkbAHfrWp1HqrQDap42oizApShmZ2sakluuecw= 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=fqIaNTaI; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fqIaNTaI" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-bbabfe5f2a2so467042a12.3 for ; Wed, 12 Nov 2025 03:18:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946315; x=1763551115; 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=dnFl3jR9iWlGxe75DpO1WG65kqZjCS4whQ+cV4m7NwY=; b=fqIaNTaIeZeodPUDQkxQI46UsP/BFy6LXohushkxYcR7gNXAX67BDg1mtZ8sHnhLuS YzoF8cQs8lPSR2DuBDOJqc4oVLvb/02ay1yBCKvYbq6BGKejETD3zOu91c3mNXJ10nq+ 6D0pCewArwCdfGMhCGfi+LtZZ9kNUwEBrTv4eOh4drHnCTOUqZini4UMfO4CafyniW9v tK2fRlNY8+po4Z6E1oHzb4xKLW8nF/O7U9+NqM8L2Zt4/5aty9JOWG+DRY3ksFzcGAMo 41cDQqxsiMYcMDZ0tEmO0GrwG95hD0AqPjx0I4VSHjC8JhXhtPgctMyRsoSuGFHeRV8J ziJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946315; x=1763551115; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=dnFl3jR9iWlGxe75DpO1WG65kqZjCS4whQ+cV4m7NwY=; b=pWuog3USiyzIZG58SAhYLn1k3iWEMpuedTotTZmE7yAKjQuBbz8d3kiw3eAHGZwmY+ k0oTHJ/MGDLaZqG5w8JG67lneGWGmaBKrbK2QCSk0DC03AlMrEbt6BcG3FohYvFG9Xj5 Kv0fkwqnCs5KhuDyY3ivGOcDU6fjMTHmYoVqDea/jkqP9ZkG75PBMlsIxxcw3lm1Q+WP 8iiR1i1N8rZuo3iqn73rJyagNyKJtRo0BWrUAy/bZwK/G5NnfOkn7ZEfEgyP3wXZbxhl g54CR0dyNvc2lcxjTH/YoV2ReQ5soFqIcIqbN2hPTBCijjjV0CFAKPfaL/dB4F0/Lq0J DLeQ== X-Forwarded-Encrypted: i=1; AJvYcCWOxqmVbJgkpm+NPtHlJvPsr9NPLeswZ5W7w8dvXcv13Ycn+0BbSyksZDM2VdlWPcFWfOH/eWdZd/iz/e0=@vger.kernel.org X-Gm-Message-State: AOJu0YyuPQm8gN41DJaK7EsAMVhTRL5HvuX68g/MXswcZgkP9UIhHpG/ X5Act88RPyFMbR3s1ifinV9L2i41Ci2DvRMGKEZzk3NEJKa5b3/ziZmN X-Gm-Gg: ASbGnct+aeSdtwP0RNZkktPDxSz2NbNfH64rcOOtby5p6GFdL7Vq7eLMsECIM9umhVS ZPqldYJ1Y/0hmF1SyS1xUQkptJxCby3ZgGlitAekOEyva6ms34O4+UyJJ3zC0zuYPyVdOXWXZSM Do2aWlHsTuUtED+UeoL4ZYaiASm7Sa1FRczZLTXvP6LnzjI+qzvwn54BT1FHJm0F1u8Z/TERhJc o2+TsVkxcMoVn4NTsZI0BGu0TWZWuqYyzagfuyRWONRk8P9plA1R9wWAG3cUc0+reB9JT2Cl4zs 9wo4IcaUICo9NXzAfdcIkY1nyzWotpeibQw4FoaLmNy0SuQ9xANsXKBF+bgIJLRwUMQ6c2N1tXC iu0puPIUn/GlTE6Rs2CwVeRWA0kJmJyZsqCpeH88tNr4+IkNMITH2hoKG4z6hob5tlvC58Jpn6+ /wCTwpv41VgdhbhwRiBeBCCX1aeT1R3hMWo4+FaRt/HTT5xVDU65tpywCJxL9Sbm2j3zD4yALth LS6lxlpE8RpzG76JKTS/bKZaGmoMg/3pV8JAhiNXtiObqoE/tVe4xM= X-Google-Smtp-Source: AGHT+IEJnkOpx+jDFVfDVEVAA+9A9htten4O+Wk4t2zNWyEJvllanqgQ7zHEta0E1x/ieCf2f13qzw== X-Received: by 2002:a17:902:e80e:b0:297:f2e7:96f3 with SMTP id d9443c01a7336-2984edd4b8emr35121165ad.50.1762946314741; Wed, 12 Nov 2025 03:18:34 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.18.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:34 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:54 +1000 Subject: [PATCH v5 08/11] input: macsmc-input: New driver to handle the Apple Mac SMC buttons/lid Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-8-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=9126; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=vKrgoKS2nGnHKHWU3/7kM0p9rJhzpYANMfZNDN+lKBc=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUfPHN89o9hO0CbnPdeS8tl1U/X+hP3QcmGL0l+85 0jxL/M/HRNZGMS4GCzFFFk2NAl5zDZiu9kvUrkXZg4rE8gQaZEGBiBgYeDLTcwrNdIx0jPVNtQz NNQx1jFi4OIUgKk2tGVk+Nvp56y6z4ONvd9Y20Ls765PGd/YYjTSdf+wRdytKu0RYWR4sZ/T4cq TQr2aiWrfbN3UXsje6jvcl3JqnpnTxc1d5sIsAA== 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 | 207 +++++++++++++++++++++++++ 4 files changed, 220 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index fb55a167699e..48bdca6943f3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2455,6 +2455,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 cc2558630797..1144ba151dbf 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -992,4 +992,15 @@ config INPUT_STPMIC1_ONKEY To compile this driver as a module, choose M here: the module will be called stpmic1_onkey. =20 +config INPUT_MACSMC + tristate "Apple Mac SMC lid/buttons" + depends on MFD_MACSMC + help + Say Y here if you want to use the input events delivered via the + SMC controller on Apple Mac machines using the macsmc driver. + This includes lid open/close and the power button. + + To compile this driver as a module, choose M here: the + module will be called macsmc-input. + endif diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index f5ebfa9d9983..c6394105252f 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -52,6 +52,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..f4598e65fc80 --- /dev/null +++ b/drivers/input/misc/macsmc-input.c @@ -0,0 +1,207 @@ +// SPDX-License-Identifier: GPL-2.0-only OR MIT +/* + * Apple SMC input event driver + * Copyright The Asahi Linux Contributors + * + * This driver exposes certain events from the SMC as an input device. + * This includes the lid open/close and power button notifications. + */ + +#include +#include +#include +#include +#include + +/** + * struct macsmc_input + * @dev: Underlying struct device for the input sub-device + * @smc: Pointer to apple_smc struct of the mfd parent + * @input: Allocated input_dev; devres managed + * @nb: Notifier block used for incoming events from SMC (e.g. button pres= sed down) + * @wakeup_mode: Set to true when system is suspended and power button eve= nts should wake it + */ +struct macsmc_input { + struct device *dev; + struct apple_smc *smc; + struct input_dev *input; + struct notifier_block nb; + bool wakeup_mode; +}; + +#define SMC_EV_BTN 0x7201 +#define SMC_EV_LID 0x7203 + +#define BTN_POWER 0x01 /* power button on e.g. Mac Mini chasis pressed */ +#define BTN_TOUCHID 0x06 /* combined TouchID / power button on MacBooks p= ressed */ +#define BTN_POWER_HELD_SHORT 0xfe /* power button briefly held down */ +#define BTN_POWER_HELD_LONG 0x00 /* power button held down; sent just befo= re forced poweroff */ + +static void macsmc_input_event_button(struct macsmc_input *smcin, unsigned= long event) +{ + u8 button =3D (event >> 8) & 0xff; + u8 state =3D !!(event & 0xff); + + switch (button) { + case BTN_POWER: + case BTN_TOUCHID: + pm_wakeup_dev_event(smcin->dev, 0, (smcin->wakeup_mode && state)); + + /* Suppress KEY_POWER event to prevent immediate shutdown on wake */ + if (smcin->wakeup_mode) + return; + + input_report_key(smcin->input, KEY_POWER, state); + input_sync(smcin->input); + break; + case BTN_POWER_HELD_SHORT: /* power button held down; ignore */ + break; + case BTN_POWER_HELD_LONG: + /* + * If we get here the power button has been held down for a while and + * we have about 4 seconds before forced power-off is triggered by SMC. + * Try to do an emergency shutdown to make sure the NVMe cache is + * flushed. macOS actually does this by panicing (!)... + */ + if (state) { + dev_crit(smcin->dev, "Triggering forced shutdown!\n"); + if (kernel_can_power_off()) + kernel_power_off(); + else /* Missing macsmc-reboot driver? */ + kernel_restart("SMC power button triggered restart"); + } + break; + default: + dev_warn(smcin->dev, "Unknown SMC button event: %04lx\n", event & 0xffff= ); + } +} + +static void macsmc_input_event_lid(struct macsmc_input *smcin, unsigned lo= ng event) +{ + u8 lid_state =3D !!((event >> 8) & 0xff); + + pm_wakeup_dev_event(smcin->dev, 0, (smcin->wakeup_mode && !lid_state)); + input_report_switch(smcin->input, SW_LID, lid_state); + input_sync(smcin->input); +} + +static int macsmc_input_event(struct notifier_block *nb, unsigned long eve= nt, void *data) +{ + struct macsmc_input *smcin =3D container_of(nb, struct macsmc_input, nb); + u16 type =3D event >> 16; + + switch (type) { + case SMC_EV_BTN: + macsmc_input_event_button(smcin, event); + return NOTIFY_OK; + case SMC_EV_LID: + macsmc_input_event_lid(smcin, event); + return NOTIFY_OK; + default: + /* SMC event meant for another driver */ + return NOTIFY_DONE; + } +} + +static int macsmc_input_probe(struct platform_device *pdev) +{ + struct apple_smc *smc =3D dev_get_drvdata(pdev->dev.parent); + struct macsmc_input *smcin; + bool have_lid, have_power; + int error; + + /* Bail early if this SMC neither supports power button nor lid events */ + have_lid =3D apple_smc_key_exists(smc, SMC_KEY(MSLD)); + have_power =3D apple_smc_key_exists(smc, SMC_KEY(bHLD)); + if (!have_lid && !have_power) + return -ENODEV; + + smcin =3D devm_kzalloc(&pdev->dev, sizeof(*smcin), GFP_KERNEL); + if (!smcin) + return -ENOMEM; + + smcin->dev =3D &pdev->dev; + smcin->smc =3D smc; + platform_set_drvdata(pdev, smcin); + + smcin->input =3D devm_input_allocate_device(&pdev->dev); + if (!smcin->input) + return -ENOMEM; + + smcin->input->phys =3D "macsmc-input (0)"; + smcin->input->name =3D "Apple SMC power/lid events"; + + if (have_lid) + input_set_capability(smcin->input, EV_SW, SW_LID); + if (have_power) + input_set_capability(smcin->input, EV_KEY, KEY_POWER); + + if (have_lid) { + u8 val; + + error =3D apple_smc_read_u8(smc, SMC_KEY(MSLD), &val); + if (error < 0) + dev_warn(&pdev->dev, "Failed to read initial lid state\n"); + else + input_report_switch(smcin->input, SW_LID, val); + } + + if (have_power) { + u32 val; + + error =3D apple_smc_read_u32(smc, SMC_KEY(bHLD), &val); + if (error < 0) + dev_warn(&pdev->dev, "Failed to read initial power button state\n"); + else + input_report_key(smcin->input, KEY_POWER, val & 1); + } + + error =3D input_register_device(smcin->input); + if (error) { + dev_err(&pdev->dev, "Failed to register input device: %d\n", error); + return error; + } + + input_sync(smcin->input); + + smcin->nb.notifier_call =3D macsmc_input_event; + blocking_notifier_chain_register(&smc->event_handlers, &smcin->nb); + + device_init_wakeup(&pdev->dev, true); + + return 0; +} + +static int macsmc_input_pm_prepare(struct device *dev) +{ + struct macsmc_input *smcin =3D dev_get_drvdata(dev); + + smcin->wakeup_mode =3D true; + return 0; +} + +static void macsmc_input_pm_complete(struct device *dev) +{ + struct macsmc_input *smcin =3D dev_get_drvdata(dev); + + smcin->wakeup_mode =3D false; +} + +static const struct dev_pm_ops macsmc_input_pm_ops =3D { + .prepare =3D macsmc_input_pm_prepare, + .complete =3D macsmc_input_pm_complete, +}; + +static struct platform_driver macsmc_input_driver =3D { + .driver =3D { + .name =3D "macsmc-input", + .pm =3D &macsmc_input_pm_ops, + }, + .probe =3D macsmc_input_probe, +}; +module_platform_driver(macsmc_input_driver); + +MODULE_AUTHOR("Hector Martin "); +MODULE_LICENSE("Dual MIT/GPL"); +MODULE_DESCRIPTION("Apple SMC input driver"); +MODULE_ALIAS("platform:macsmc-input"); --=20 2.51.2 From nobody Sat Feb 7 08:44:21 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 08B6A31283C for ; Wed, 12 Nov 2025 11:18:42 +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=1762946325; cv=none; b=iw28EA/xp03iePvgwiXGvh4KXpHtaVfdJFvF3mabQnYY8Z4BzBCK8bgSmPwRM2fbXL+fTIw8uo9zaWwu+h9gJU/kcsM3gFLX+jOs1Di2pw2oa6yMvFA3PR7xU6Yw7q+SlEL99TrxzFe9UuQveA5BQ02KKkQ4mEafykyEaR4j3D4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946325; c=relaxed/simple; bh=Gjco+o33Ze1VtTmwY3+n9x0V+5Bjmx76JK+PO6sbBb8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NkpWaiAfW6dHATvR+CSs8r2k+xjoYOa0l7GJ76O2EdMGM0eDmy0qFebdVL8+5/Ut9SrC0ZCT5B263B64Es/1pUsGCXK9b5N3mKye8DkM+qwpNjKz48uIxzsebuBvdYFZ96TPwKV2N5PVAiUNVrdhrziQ+0n8GtsRjkVyk/LtW8E= 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=Xp9dJzVn; 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="Xp9dJzVn" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-297e982506fso8453385ad.2 for ; Wed, 12 Nov 2025 03:18:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946322; x=1763551122; 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=RMg0B2M6mlNno5KCjV7xdRrPsgdx1eaJiYPjLRnt1dA=; b=Xp9dJzVntfsFm6Hdqw2gc8lrNREsswKpHWO25P7JAixkO8IEj9GFCv2TV/A57HVNsK OA31dV371iQYe4QE+5SzJCZpuHnjIdHVh1PGFOyXBjKgfmbDzoRWO2yCoz+NYeeSZOPZ 75YQWyULeLKPMBhWJZ7NhrtfqlTGtKFLaPP164si+N8UwslUEX0HxMmuTE+Dm7XMHr7h ary/9bOZz1FYET03D1da6LLHw/fXlwfBnrfi7Kxwg9NJHPfaEQe+EeUKejTbSGOJr0RU Dk+1I3IJ6ZPBsf2mI+olaM3jS6b42gSV0f1StWn9ubYaMYa+MVc8+s65pgJqEbmHFId6 /QDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946322; x=1763551122; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=RMg0B2M6mlNno5KCjV7xdRrPsgdx1eaJiYPjLRnt1dA=; b=FoIcOf9fWBUyXuiev4dQfraaLmI+oEKCqWE90Boqmmd6jVGZc+UDS2BFFHSEeuLn+j 1pRDrU64qfdvI8EIgfE3aIAW13fg/JcLo95CxsfzRFe/e46X3TBv1gJJwaWMWHfIyAe+ gaquxmSW5Y7l+wRGFzbjTc3LgOdeoafUeaG3haGCBDSSFci1elQmwsTxjfo+f66qiM5E 528+ll7lz4DnDPWd0ShDCr0bFKAX1a1lRlt1rljOPjbml++a+7140LghOSKyulMBLwHZ mxgE4s1OxfvIG1dHpiKA+thEfbHg9w79ckJSEfwgWYFlq+2TTe5tP1l7hBfaHEnGhEyq SQ6A== X-Forwarded-Encrypted: i=1; AJvYcCXAZSHpuaRAyPTSTO2CzrgnmhfFLLtpwz/FVnQN5ATogy5zxU0q4l7RCHTAdhoy24z7JqYHr/6WW44Hovc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3oWKILqTyjo0bs2dJ0K0a1L8TlkXpsKw5ryrcPMucbKkU2VP2 dBk443NJu+zNgWYU0IQSdFNcYTdquqXekU04zd1ikTdbVZKuHKnGxBzG X-Gm-Gg: ASbGncspgnworHvIVA/m9BvfdXIkmbgz1peGhXg+z5DulLEw6RtQvmnn0yA6B47urws 4rUyHDhQ6TCMjG8tz4bzcpugv8SLcGYHS3Z4mzTkbdMosAkHGQZjnkZl/hm7Lsx7htjAYQW5Zx0 44L3YnNXOAc3+/FuzIPLmUnXAB2PS6QBh7HNFOAq2cIDVjv/0TRo4TQzpNwxNlQ3RdrcNojAANl VyofqqJLQ485A6KqWcTlYy2XFO/2FyM3GHin25HXUVuxlH6nXw6r/16dBv/jqErBixTNvNZzdQ8 t6KCkTODGGvYAVuFEt9nbrFjgRv+DERZPtqeaCIvZbhV1zOB3gRsjNylFA79afVpnev/SnZRwcj W0l9uVV+deE1SzWhS3ki8rgTro1Wjb/905ngWbHhrjg4yUtmHeVBO5aoKd9jfv088JfEisaBRH9 N8yAgpldK/UUnh9svbG2BCArUq9RXlgwcmQzf/vaAEyIQ539WCfas5HUtBuzvNiTewfMkgkmuzG qNMblAUaAjXDGYo3/bNAQ3+ljyoMtnsAKwRWx1JXDg6de4skpOix2Y= X-Google-Smtp-Source: AGHT+IHJszkUFQqYlR5AFfzTGIEAaKvG8RL+kwBBJVNc77ojPYvNHMx8YbFZwpTAtKabQYIgMU5Dvg== X-Received: by 2002:a17:902:fc47:b0:295:24c3:8b49 with SMTP id d9443c01a7336-2984ee0ada1mr33966605ad.46.1762946322113; Wed, 12 Nov 2025 03:18:42 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.18.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:41 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:55 +1000 Subject: [PATCH v5 09/11] mfd: macsmc: Wire up Apple SMC input subdevice Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-9-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=Gjco+o33Ze1VtTmwY3+n9x0V+5Bjmx76JK+PO6sbBb8=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOUe9MqcoXO87L1RrfX5F5enpO+XeLfuuXJ0+02Ubs 7Dj91SGjoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFTPdGH472O74la/3mPRvl8BylqCRWoyR8UunDqpHsCo80ls1Q6em4wMm22qelk nzL8Uw5BRsPxd9cobzkyfXVcpMehOeLLkl9dURgA= 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.2 From nobody Sat Feb 7 08:44:21 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 6914B3128C6 for ; Wed, 12 Nov 2025 11:18:50 +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=1762946332; cv=none; b=QipoWP6hmx9HpPCpX8aG7LP15f5QE2eNdkMYW3aNcqWqo4xSKxUozZE/V5K/J6VvjiA4bfbMWHEIplTmc+7iloJMbBEVmBL48j2X8PtRx8Ek3M/DN/cExd6t3fxv8nafUDE7+mKweWpHYb/v6x7eaHYPyqIMFs/hg9Yu1n/Ena0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946332; c=relaxed/simple; bh=cV5fF0qJO7pdpT8f2yzJ48FKOMe3eNyb1yjLf5hwPSc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jcHLDdCn0gpGFlwe8hl0EBO/2xWHhIhcLQN3gXepHxdY2pbETIAQqyV5TE5U+anqzK92suMpSCW3Xw6ly4TUFY2iZtuG147hEUq7E+lVrSh7ZP4kgaW8StB1rSMVWwV09dOFcR9zOcfHv/iPoM585/sQUpO4yy7ZOJ5DFeWZGSI= 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=Bk06i2YK; 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="Bk06i2YK" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-298287a26c3so7900205ad.0 for ; Wed, 12 Nov 2025 03:18:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946330; x=1763551130; 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=iA6BDAFFSivvDJvfncgF5ApGj9cWDmXDuEaDbWv5cik=; b=Bk06i2YK/4G/N1zND76g9QO5VYP4E2cJr4Ycaf3iPh96lkebMG1smw/LdCmWt8LXbL sqIm5CrUhGgM0dJSbDY4k7bmjFKHcuaV7vwccX3DU+6QDIHjBB2CbNizL91vNtffTV8f FmgwcS2eCOL039z49ENwAo9ulu6EKmJKFs5ePfSRb0o4IuaKdEibaCN/tI7xPKHejQVn +PrLKryD4kTzOT2ZWgEqytkReKLETaAWF33u7HJJ7ufsXyWh2Qk7F8svPasvZFgbVI+x JgNolEaIVvgmyiqBlQR8ePgZMm0m+yrpPD1cqDENZ1Iz8TIVUzoA8mSs/XSEJFzqHxyJ DzfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946330; x=1763551130; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=iA6BDAFFSivvDJvfncgF5ApGj9cWDmXDuEaDbWv5cik=; b=Y3fwERS9yua2JgVUGkVgTm+i/1hm9CPwaJsSqZWT2nupYG48EPyqi0g7IBcY+08cAO 5NeVdC9vuqvhqnUYIQDp8SZiFyIRPe2Ekwnse4kseuGLxugfbZnMaHtALXR1kR5UOmUs ffaXXh3Aih/40xn+VybC4ZorsXnS4/gbpZ0/1DLCg1uPHd6tZF/ov9nrJTfRnZ36tEYW 2pkOI94PFR7sY/NTt2+cGBpRT8S5Yfo93wkI0QYbHr/pSFvaubBQZ/QZn1PNwwuYqMgb lXO+t2w+6aW/F9A1c3AcQBG9YbcueO/5GQuEttV3LzGgjggoKERTp5foCJYP52lRT0uJ yJ3A== X-Forwarded-Encrypted: i=1; AJvYcCUksqPRnvYGrhILngE9isk4hSiPTQXBb6B5X7BSMVfnlNchSC6VCuSLiKzskquhsCbvbQIZ648AdtOfCoI=@vger.kernel.org X-Gm-Message-State: AOJu0YzML4HRPFJ17iY16Wl7QpK5xO2RvXZUgXNMtKBEuOKFY3TgkGq2 JOMGnEZPiS3f5exISuKHKZm4GVqzPGF5On7Bsa+OldSc+VpE9/HyNRga X-Gm-Gg: ASbGncs+0gp6YiA3gYlP4trQlk3+MrGRk1j0Z1sRy8aPdxI1iWRrMjukGro6jVMLttU r50ix98tkJ7izzl3ltwFlLPi8NGv6IodUQlIA+jCCDfFDsko7IMNbzyAdnTGMEuKB3ndvSyJIe0 P1xSaFF3/1y/AcL/bxaXlh+8VzyoGebIFU8YDVCFp57LtaEAsAIL3YaqhWAAzv5UMB0e+Rq+lT/ VAZDEddakwVGyYiDl5x8yEK9eWlKlUGtg6ezp03+mfFLEP2mOz9SiREwXybyuKFnvYGq4qrySl+ ktTwxRdT2KtKYN1IhUmWv+vcxIQWzmoKdAHQq52o/SMUiv2McIrJ916/SGI5Q+EEqgl/gpdWfYS h3QEUsTxyJDGWtWXXi4RKgYKnz2EryBUXX2+HkGXZGGqiCEcLUUBOMT0Oa4XlItAHwuQnS1EqYb xwtud55QrTrdxzdb7AH5cTAR95BiZnh8ohZb1iqYvtlASUENB50HR78w/Yk1RpK6tI2baiKRlgk ayn7KU/n6Q0+F2CEVrTJz4LYdNSPzbDzbjrKdkbJOT5OYuA3EAyEMA= X-Google-Smtp-Source: AGHT+IFR7QWTTs3Zcb/5ft94/X6vbUaJNlBlezavBVdQ/3VzVvLaCae6d4kQA/Kg2GnApMGUCG81qQ== X-Received: by 2002:a17:902:e543:b0:295:2cb6:f4a8 with SMTP id d9443c01a7336-2984ee16a71mr33782855ad.51.1762946329798; Wed, 12 Nov 2025 03:18:49 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.18.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:49 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:56 +1000 Subject: [PATCH v5 10/11] arm64: dts: apple: t8103,t60xx,t8112: Add SMC RTC node Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-10-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@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=WbLk+4olybI4wwc+d0lxY+Dd90gh9RgPWEprBEz0Yao=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOcfOlYr8bFj60khS+5UQ9+ndU0LetjI3h5jenRAds vHv9vyajoksDGJcDJZiiiwbmoQ8Zhux3ewXqdwLM4eVCWSItEgDAxCwMPDlJuaVGukY6ZlqG+oZ GuoY6xgxcHEKwFTPsGBk2Hnku/XnVYdT5a8tbZ2TVdjOzRLv9rKet/G+5L3EV+bhcYwM3TMD+QP 1Wg9YbJ+ZoGimuWT1km1Luw48U79aPqHg7cRgRgA= 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.2 From nobody Sat Feb 7 08:44:21 2026 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 539F430BF71 for ; Wed, 12 Nov 2025 11:18:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946340; cv=none; b=ZhgENzWA3BqIAjyniyp1cEaQxxiWttRdQ/wsWPq7hCLbBZ03lNxiL/ShKb33b6pYLueKj02PmhWJ5KHZDKRyiCO+KfTh9h1IViTjaBPJQt/cjGl8IHUKAzyZrggD3y6iv7yu0FSbN9hAwKH+N5NQajxijX+pG17ddApdqBB6N2I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762946340; c=relaxed/simple; bh=DvoNn8piBq3/RMBpQvEHO8ZeX9vzUS0LqSVLvVC6flk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u00YBKWhg7697ZV6MMBuwaY6qElOjn6L1rCKGZcxrqfP1C/i1Sxxscbkw/+cmd/BNPOU9Q09pJRasG58mkLMFmEH+s1k6RBALov34klh3/hhnF5Jw1XfV6pyWfJ6YkeZDj5Y02sCRZDDLgypbmUxaiw4wiEK8WsBNaPi7CIHfHo= 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=WjxNzFjP; arc=none smtp.client-ip=209.85.215.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WjxNzFjP" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-bc0d7255434so279412a12.0 for ; Wed, 12 Nov 2025 03:18:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762946337; x=1763551137; 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=cFAKkFyXyl3xzCijB0MqhcWNwMFSjCzGgD6ecJ/NvoM=; b=WjxNzFjP6tsudCcsKhAd/FJfP4ebqjqRNCbvTb/nYBIN9yRq20wyCttbWJ30FGd2GX VwAm8H187VtmayjK3h2KoDXZ5p0T8oKdrVl9o2tjv0MjxGpUHjcPy8P31zDG3IovSPvK Nm5PZG/RNVNXx5p1INFtqm8q9roGNA5eeFpr3xkaSeHe2ErBe6B8D4dauPYXUOZRjUcm WPweuPUKp8+52gA+5kNryx/9qq2m7b5iDgydeS+jWro6dC7XxK/Tw/ECwZobaRIxjJ5f HH2cmWRMso8ofonjPEF+b+TdoZrwFPuEjPhp6n7jaiAVu9txUDZcbxT5ms4E32HelkKY F48A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762946337; x=1763551137; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cFAKkFyXyl3xzCijB0MqhcWNwMFSjCzGgD6ecJ/NvoM=; b=F5Ztj6Ypom77qL4J8kdx/QjMoZOFRlQrLebuGqWgW7JXtI5NIpGrNYlKhjYJQawoH3 2xFgDTLH7BuuuQx02Eb28p4u4HfnkkZEDXJmpVhjKqMwVIF34r6eUddv8sz4hOz+l1OS JX4YnT7auXDw47MjDkFsgadsU3iJvMCPNNcsaTbtTwL1VpncEDaU+b87cVIfJPW6TlEc yJ7P/gnBNO3W1dcqL9FeSa4dDxoJFboLwMkSXZKEkjTJ8CGDth19kgN9Tat2IIPOpdlF 79jY/gPEhv8IZ+UZ68AvxweXfpQc7aZNB2Ltdu56syrLke4mRpUvR9DmlWY/UWvEVzOO iXcg== X-Forwarded-Encrypted: i=1; AJvYcCW9VPasGARUHqLYMr7ZYQ9758BVoeXvHKykX8JYyzlykkSPz9AH4j/Gkm+yr9h/eh6QDZxnqOpi1QDmg+g=@vger.kernel.org X-Gm-Message-State: AOJu0YyNOjFN+YP1vcIrGIzoM0DSs4/C0i1+3EMmZa/e5WNS7qCP2tw7 ZqdjUSH/KijRmqncrBjOzhQbPkz69qNQqeCxy8u8f6qsc3rNtjzLQMmt X-Gm-Gg: ASbGnctKOkGi5ooNFvoKbzEI47nHd6ebXK+UhLCFY/pXOgXFVypW8FmUSlMtZVQfsCv oGfXVSDDW3uaVfijFfymFerK6aLUEO1A2uSNfYJcfKV+sw/SUD1LIT+ffET8aUDT+RCCM24Pnaz OHJB4IN+fur9YVOg/ch15rb+t1hXvFjwnQlvbZG8ZGn6C9a4LBM/uvCvPfsy0xc+VsLShZhv6Bo jp8bZqFB3shcB+zmjRXsxbbpF3jRfBtxtY5vkZAGrwp9wY2LZY9HXk56TUWxuU5AUX6CQB6wnzu FLe67kDRBc6YtZ1327p+wmZWEM8OnUG+uPSIWUxZMw7Sd7KdetaYPK/4JWLQ9S4jni/YGv3UofC mtag1qNzIGdYqE0bUyjGuZw7SSPU/Rc2eo2S7clOqsbn7WEwZdy1Jr1jf6OSkXh5UwQ1KZxEy4X od836FSeai97frfXITFyhvxMlg3itcFgtlbQbdqrEgYcmbAnYVvzuec1gunmI9+2HU38nB7xLgv DGydFJK8tbqf8nohSQNhoKPPRcrUE3VZBOe1fwXXRmcQcHD2x11kUw= X-Google-Smtp-Source: AGHT+IGt0RRVbVR/yZsLZrSMrAd0R3g3Iv447XVFWHi+oqmuFnDXiY3rJ/p45tT2A4ZH4cWSR5tTMA== X-Received: by 2002:a17:903:2406:b0:298:4f73:d872 with SMTP id d9443c01a7336-2984f73d8d1mr34941415ad.21.1762946337209; Wed, 12 Nov 2025 03:18:57 -0800 (PST) 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-2984dca0f28sm27386695ad.60.2025.11.12.03.18.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 03:18:56 -0800 (PST) From: James Calligeros Date: Wed, 12 Nov 2025 21:16:57 +1000 Subject: [PATCH v5 11/11] arm64: dts: apple: t8103, t8112, t60xx: Add hwmon SMC subdevice Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251112-macsmc-subdevs-v5-11-728e4b91fe81@gmail.com> References: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> In-Reply-To: <20251112-macsmc-subdevs-v5-0-728e4b91fe81@gmail.com> To: Sven Peter , Janne Grunau , Alyssa Rosenzweig , Neal Gompa , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alexandre Belloni , Jean Delvare , Guenter Roeck , Dmitry Torokhov , Jonathan Corbet , James Calligeros Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-input@vger.kernel.org, linux-doc@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=12033; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=DvoNn8piBq3/RMBpQvEHO8ZeX9vzUS0LqSVLvVC6flk=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJkiOcdKW0OuRJzxTNLXypSeaKSjarLpuSGXpk26pWvhp e8M76I6JrAwiHExWIopsmxoEvKYbcR2s1+kci/MHFYmkCHSIg0MQMDCwJebmFdqpGOkZ6ptqGdo qGOsY8TAxSkAU+2sz/A/IldnXZEPx5S0Y8VyJUHfLa8YaNi5vCp7u/b9hZMzvLOzGb6KtH+fsYp xcrbTMe7NMQ1G7Auunq4xT23bt8rq6McFhnwA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Apple's System Management Controller integrates numerous sensors that can be exposed via hwmon. Add the subdevice, compatible, and some common sensors that are exposed on every currently supported device as a starting point. Reviewed-by: Neal Gompa Co-developed-by: Janne Grunau Signed-off-by: Janne Grunau Signed-off-by: James Calligeros --- .../boot/dts/apple/hwmon-common.dtsi | 33 +++++++++++++++++++++++++ .../boot/dts/apple/hwmon-fan-dual.dtsi | 22 +++++++++++++++++ arch/arm64/boot/dts/apple/hwmon-fan.dtsi | 17 +++++++++++++ .../boot/dts/apple/hwmon-laptop.dtsi | 33 +++++++++++++++++++++++++ .../boot/dts/apple/hwmon-mac-mini.dtsi | 15 +++++++++++ .../arm64/boot/dts/apple/t6001-j375c.dts | 2 ++ arch/arm64/boot/dts/apple/t6001.dtsi | 2 ++ .../arm64/boot/dts/apple/t6002-j375d.dts | 2 ++ .../arm64/boot/dts/apple/t600x-die0.dtsi | 4 +++ .../boot/dts/apple/t600x-j314-j316.dtsi | 3 +++ .../arm64/boot/dts/apple/t602x-die0.dtsi | 4 +++ arch/arm64/boot/dts/apple/t8103-j274.dts | 2 ++ arch/arm64/boot/dts/apple/t8103-j293.dts | 3 +++ arch/arm64/boot/dts/apple/t8103-j313.dts | 2 ++ arch/arm64/boot/dts/apple/t8103-j456.dts | 2 ++ arch/arm64/boot/dts/apple/t8103-j457.dts | 2 ++ arch/arm64/boot/dts/apple/t8103.dtsi | 5 ++++ arch/arm64/boot/dts/apple/t8112-j413.dts | 2 ++ arch/arm64/boot/dts/apple/t8112-j473.dts | 2 ++ arch/arm64/boot/dts/apple/t8112-j493.dts | 3 +++ arch/arm64/boot/dts/apple/t8112.dtsi | 5 ++++ 21 files changed, 165 insertions(+) diff --git a/arch/arm64/boot/dts/apple/hwmon-common.dtsi b/arch/arm64/boot/= dts/apple/hwmon-common.dtsi new file mode 100644 index 000000000000..b87021855fdf --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-common.dtsi @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Hardware monitoring sensors expected to be found on all Apple Silicon d= evices + * + * Copyright The Asahi Linux Contributors + */ + +&smc_hwmon { + current-ID0R { + apple,key-id =3D "ID0R"; + label =3D "AC Input Current"; + }; + power-PSTR { + apple,key-id =3D "PSTR"; + label =3D "Total System Power"; + }; + power-PDTR { + apple,key-id =3D "PDTR"; + label =3D "AC Input Power"; + }; + power-PMVR { + apple,key-id =3D "PMVR"; + label =3D "3.8 V Rail Power"; + }; + temperature-TH0x { + apple,key-id =3D "TH0x"; + label =3D "NAND Flash Temperature"; + }; + voltage-VD0R { + apple,key-id =3D "VD0R"; + label =3D "AC Input Voltage"; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-fan-dual.dtsi b/arch/arm64/boo= t/dts/apple/hwmon-fan-dual.dtsi new file mode 100644 index 000000000000..3eef0721bcca --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-fan-dual.dtsi @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * SMC hwmon fan keys for Apple Silicon desktops/laptops with two fans + * + * Copyright The Asahi Linux Contributors + */ + +#include "hwmon-fan.dtsi" + +&smc_hwmon { + fan-F0Ac { + label =3D "Fan 1"; + }; + fan-F1Ac { + apple,key-id =3D "F1Ac"; + label =3D "Fan 2"; + apple,fan-minimum =3D "F1Mn"; + apple,fan-maximum =3D "F1Mx"; + apple,fan-target =3D "F1Tg"; + apple,fan-mode =3D "F1Md"; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-fan.dtsi b/arch/arm64/boot/dts= /apple/hwmon-fan.dtsi new file mode 100644 index 000000000000..fba9faf38f4b --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-fan.dtsi @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * hwmon fan keys for Apple Silicon desktops/laptops with a single fan. + * + * Copyright The Asahi Linux Contributors + */ + +&smc_hwmon { + fan-F0Ac { + apple,key-id =3D "F0Ac"; + label =3D "Fan"; + apple,fan-minimum =3D "F0Mn"; + apple,fan-maximum =3D "F0Mx"; + apple,fan-target =3D "F0Tg"; + apple,fan-mode =3D "F0Md"; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-laptop.dtsi b/arch/arm64/boot/= dts/apple/hwmon-laptop.dtsi new file mode 100644 index 000000000000..0c4666282a5c --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-laptop.dtsi @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * Hardware monitoring sensors expected on all Apple Silicon laptops + * + * Copyright The Asahi Linux Contributors + */ + +&smc_hwmon { + power-PHPC { + apple,key-id =3D "PHPC"; + label =3D "Heatpipe Power"; + }; + temperature-TB0T { + apple,key-id =3D "TB0T"; + label =3D "Battery Hotspot Temperature"; + }; + temperature-TCHP { + apple,key-id =3D "TCHP"; + label =3D "Charge Regulator Temperature"; + }; + temperature-TW0P { + apple,key-id =3D "TW0P"; + label =3D "WiFi/BT Module Temperature"; + }; + voltage-SBAV { + apple,key-id =3D "SBAV"; + label =3D "Battery Voltage"; + }; + voltage-VD0R { + apple,key-id =3D "VD0R"; + label =3D "Charger Input Voltage"; + }; +}; diff --git a/arch/arm64/boot/dts/apple/hwmon-mac-mini.dtsi b/arch/arm64/boo= t/dts/apple/hwmon-mac-mini.dtsi new file mode 100644 index 000000000000..f32627336ae7 --- /dev/null +++ b/arch/arm64/boot/dts/apple/hwmon-mac-mini.dtsi @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/* + * hwmon sensors expected on all Mac mini models + * + * Copyright The Asahi Linux Contributors + */ + +#include "hwmon-fan.dtsi" + +&smc_hwmon { + temperature-TW0P { + apple,key-id =3D "TW0P"; + label =3D "WiFi/BT Module Temperature"; + }; +}; diff --git a/arch/arm64/boot/dts/apple/t6001-j375c.dts b/arch/arm64/boot/dt= s/apple/t6001-j375c.dts index 2e7c23714d4d..08276114c1d8 100644 --- a/arch/arm64/boot/dts/apple/t6001-j375c.dts +++ b/arch/arm64/boot/dts/apple/t6001-j375c.dts @@ -24,3 +24,5 @@ &wifi0 { &bluetooth0 { brcm,board-type =3D "apple,okinawa"; }; + +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6001.dtsi b/arch/arm64/boot/dts/app= le/t6001.dtsi index ffbe823b71bc..264df90f07d8 100644 --- a/arch/arm64/boot/dts/apple/t6001.dtsi +++ b/arch/arm64/boot/dts/apple/t6001.dtsi @@ -66,3 +66,5 @@ p-core-pmu-affinity { &gpu { compatible =3D "apple,agx-g13c", "apple,agx-g13s"; }; + +#include "hwmon-common.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6002-j375d.dts b/arch/arm64/boot/dt= s/apple/t6002-j375d.dts index 2b7f80119618..d12c0ae418f7 100644 --- a/arch/arm64/boot/dts/apple/t6002-j375d.dts +++ b/arch/arm64/boot/dts/apple/t6002-j375d.dts @@ -56,3 +56,5 @@ &bluetooth0 { =20 /delete-node/ &ps_disp0_cpu0_die1; /delete-node/ &ps_disp0_fe_die1; + +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t600x-die0.dtsi b/arch/arm64/boot/dt= s/apple/t600x-die0.dtsi index f715b19efd16..e6647c1a9173 100644 --- a/arch/arm64/boot/dts/apple/t600x-die0.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-die0.dtsi @@ -37,6 +37,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, diff --git a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi b/arch/arm64/bo= ot/dts/apple/t600x-j314-j316.dtsi index c0aac59a6fae..127814a9dfa4 100644 --- a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi @@ -131,3 +131,6 @@ &fpwm0 { }; =20 #include "spi1-nvram.dtsi" + +#include "hwmon-laptop.dtsi" +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t602x-die0.dtsi b/arch/arm64/boot/dt= s/apple/t602x-die0.dtsi index 8622ddea7b44..680c103c1c0f 100644 --- a/arch/arm64/boot/dts/apple/t602x-die0.dtsi +++ b/arch/arm64/boot/dts/apple/t602x-die0.dtsi @@ -114,6 +114,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, diff --git a/arch/arm64/boot/dts/apple/t8103-j274.dts b/arch/arm64/boot/dts= /apple/t8103-j274.dts index 1c3e37f86d46..f5b8cc087882 100644 --- a/arch/arm64/boot/dts/apple/t8103-j274.dts +++ b/arch/arm64/boot/dts/apple/t8103-j274.dts @@ -61,3 +61,5 @@ &pcie0_dart_2 { &i2c2 { status =3D "okay"; }; + +#include "hwmon-mac-mini.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j293.dts b/arch/arm64/boot/dts= /apple/t8103-j293.dts index 5b3c42e9f0e6..abb88391635f 100644 --- a/arch/arm64/boot/dts/apple/t8103-j293.dts +++ b/arch/arm64/boot/dts/apple/t8103-j293.dts @@ -119,3 +119,6 @@ dfr_panel_in: endpoint { &displaydfr_dart { status =3D "okay"; }; + +#include "hwmon-laptop.dtsi" +#include "hwmon-fan.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j313.dts b/arch/arm64/boot/dts= /apple/t8103-j313.dts index 97a4344d8dca..491ead016b21 100644 --- a/arch/arm64/boot/dts/apple/t8103-j313.dts +++ b/arch/arm64/boot/dts/apple/t8103-j313.dts @@ -41,3 +41,5 @@ &wifi0 { &fpwm1 { status =3D "okay"; }; + +#include "hwmon-laptop.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j456.dts b/arch/arm64/boot/dts= /apple/t8103-j456.dts index 58c8e43789b4..c2ec6fbb633c 100644 --- a/arch/arm64/boot/dts/apple/t8103-j456.dts +++ b/arch/arm64/boot/dts/apple/t8103-j456.dts @@ -75,3 +75,5 @@ &pcie0_dart_1 { &pcie0_dart_2 { status =3D "okay"; }; + +#include "hwmon-fan-dual.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103-j457.dts b/arch/arm64/boot/dts= /apple/t8103-j457.dts index 7089ccf3ce55..aeaab2482d54 100644 --- a/arch/arm64/boot/dts/apple/t8103-j457.dts +++ b/arch/arm64/boot/dts/apple/t8103-j457.dts @@ -56,3 +56,5 @@ ethernet0: ethernet@0,0 { &pcie0_dart_2 { status =3D "okay"; }; + +#include "hwmon-fan.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8103.dtsi b/arch/arm64/boot/dts/app= le/t8103.dtsi index 59f2678639cf..f1820bdc0910 100644 --- a/arch/arm64/boot/dts/apple/t8103.dtsi +++ b/arch/arm64/boot/dts/apple/t8103.dtsi @@ -909,6 +909,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, @@ -1141,3 +1145,4 @@ port02: pci@2,0 { }; =20 #include "t8103-pmgr.dtsi" +#include "hwmon-common.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112-j413.dts b/arch/arm64/boot/dts= /apple/t8112-j413.dts index 6f69658623bf..500dcdf2d4b5 100644 --- a/arch/arm64/boot/dts/apple/t8112-j413.dts +++ b/arch/arm64/boot/dts/apple/t8112-j413.dts @@ -78,3 +78,5 @@ &i2c4 { &fpwm1 { status =3D "okay"; }; + +#include "hwmon-laptop.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112-j473.dts b/arch/arm64/boot/dts= /apple/t8112-j473.dts index 06fe257f08be..11db6a92493f 100644 --- a/arch/arm64/boot/dts/apple/t8112-j473.dts +++ b/arch/arm64/boot/dts/apple/t8112-j473.dts @@ -52,3 +52,5 @@ &pcie1_dart { &pcie2_dart { status =3D "okay"; }; + +#include "hwmon-mac-mini.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112-j493.dts b/arch/arm64/boot/dts= /apple/t8112-j493.dts index fb8ad7d4c65a..a0da02c00f15 100644 --- a/arch/arm64/boot/dts/apple/t8112-j493.dts +++ b/arch/arm64/boot/dts/apple/t8112-j493.dts @@ -133,3 +133,6 @@ touchbar0: touchbar@0 { touchscreen-inverted-y; }; }; + +#include "hwmon-laptop.dtsi" +#include "hwmon-fan.dtsi" diff --git a/arch/arm64/boot/dts/apple/t8112.dtsi b/arch/arm64/boot/dts/app= le/t8112.dtsi index 6bc3f58b06f7..c4d1e5ffaee9 100644 --- a/arch/arm64/boot/dts/apple/t8112.dtsi +++ b/arch/arm64/boot/dts/apple/t8112.dtsi @@ -912,6 +912,10 @@ smc_gpio: gpio { #gpio-cells =3D <2>; }; =20 + smc_hwmon: hwmon { + compatible =3D "apple,smc-hwmon"; + }; + smc_reboot: reboot { compatible =3D "apple,smc-reboot"; nvmem-cells =3D <&shutdown_flag>, <&boot_stage>, @@ -1180,3 +1184,4 @@ port03: pci@3,0 { }; =20 #include "t8112-pmgr.dtsi" +#include "hwmon-common.dtsi" --=20 2.51.2