From: James Calligeros <jcalligeros99@gmail.com>
To: Sven Peter <sven@kernel.org>, Janne Grunau <j@jannau.net>,
Alyssa Rosenzweig <alyssa@rosenzweig.io>,
Neal Gompa <neal@gompa.dev>, Lee Jones <lee@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Alexandre Belloni <alexandre.belloni@bootlin.com>,
Jean Delvare <jdelvare@suse.com>,
Guenter Roeck <linux@roeck-us.net>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-rtc@vger.kernel.org, linux-hwmon@vger.kernel.org,
linux-input@vger.kernel.org,
James Calligeros <jcalligeros99@gmail.com>
Subject: [PATCH v2 02/11] dt-bindings: hwmon: Add Apple System Management Controller hwmon schema
Date: Wed, 27 Aug 2025 21:22:36 +1000 [thread overview]
Message-ID: <20250827-macsmc-subdevs-v2-2-ce5e99d54c28@gmail.com> (raw)
In-Reply-To: <20250827-macsmc-subdevs-v2-0-ce5e99d54c28@gmail.com>
Apple Silicon devices integrate a vast array of sensors, monitoring
current, power, temperature, and voltage across almost every part of
the system. The sensors themselves are all connected to the System
Management Controller (SMC). The SMC firmware exposes the data
reported by these sensors via its standard FourCC-based key-value
API. The SMC is also responsible for monitoring and controlling any
fans connected to the system, exposing them in the same way.
For reasons known only to Apple, each device exposes its sensors with
an almost totally unique set of keys. This is true even for devices
which share an SoC. An M1 Mac mini, for example, will report its core
temperatures on different keys to an M1 MacBook Pro. Worse still, the
SMC does not provide a way to enumerate the available keys at runtime,
nor do the keys follow any sort of reasonable or consistent naming
rules that could be used to deduce their purpose. We must therefore
know which keys are present on any given device, and which function
they serve, ahead of time.
Add a schema so that we can describe the available sensors for a given
Apple Silicon device in the Devicetree.
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
---
.../bindings/hwmon/apple,smc-hwmon.yaml | 132 +++++++++++++++++++++++++
.../bindings/mfd/apple,smc.yaml | 36 +++++++
MAINTAINERS | 1 +
3 files changed, 169 insertions(+)
diff --git a/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml b/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..08cc4f55f3a41ca8b3b428088f96240266fa42e8
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/apple,smc-hwmon.yaml
@@ -0,0 +1,132 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/hwmon/apple,smc-hwmon.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Apple SMC Hardware Monitoring
+
+description:
+ Apple's System Management Controller (SMC) exposes a vast array of
+ hardware monitoring sensors, including temperature probes, current and
+ voltage sense, power meters, and fan speeds. It also provides endpoints
+ to manually control the speed of each fan individually. Each Apple
+ Silicon device exposes a different set of endpoints via SMC keys. This
+ is true even when two machines share an SoC. The CPU core temperature
+ sensor keys on an M1 Mac mini are different to those on an M1 MacBook
+ Pro, for example.
+
+maintainers:
+ - James Calligeros <jcalligeros99@gmail.com>
+
+definitions:
+ apple,key-id:
+ $ref: /schemas/types.yaml#/definitions/string
+ pattern: "^[A-Za-z0-9]{4}$"
+ description: The SMC FourCC key of the desired sensor.
+ Must match the node's suffix.
+
+ label:
+ description: Human-readable name for the sensor
+
+properties:
+ compatible:
+ const: apple,smc-hwmon
+
+patternProperties:
+ "^current-[A-Za-z0-9]{4}$":
+ type: object
+ additionalProperties: false
+
+ properties:
+ apple,key-id:
+ $ref: "#/definitions/apple,key-id"
+
+ label:
+ $ref: "#/definitions/label"
+
+ required:
+ - apple,key-id
+ - label
+
+ "^fan-[A-Za-z0-9]{4}$":
+ type: object
+ additionalProperties: false
+
+ properties:
+ apple,key-id:
+ $ref: "#/definitions/apple,key-id"
+
+ apple,fan-minimum:
+ $ref: /schemas/types.yaml#/definitions/string
+ pattern: "^[A-Za-z0-9]{4}$"
+ description: SMC key containing the fan's minimum speed
+
+ apple,fan-maximum:
+ $ref: /schemas/types.yaml#/definitions/string
+ pattern: "^[A-Za-z0-9]{4}$"
+ description: SMC key containing the fan's maximum speed
+
+ apple,fan-target:
+ $ref: /schemas/types.yaml#/definitions/string
+ pattern: "^[A-Za-z0-9]{4}$"
+ description: Writeable endpoint for setting desired fan speed
+
+ apple,fan-mode:
+ $ref: /schemas/types.yaml#/definitions/string
+ pattern: "^[A-Za-z0-9]{4}$"
+ description: Writeable key to enable/disable manual fan control
+
+ label:
+ $ref: "#/definitions/label"
+
+ required:
+ - apple,key-id
+ - label
+
+ "^power-[A-Za-z0-9]{4}$":
+ type: object
+ additionalProperties: false
+
+ properties:
+ apple,key-id:
+ $ref: "#/definitions/apple,key-id"
+
+ label:
+ $ref: "#/definitions/label"
+
+ required:
+ - apple,key-id
+ - label
+
+ "^temperature-[A-Za-z0-9]{4}$":
+ type: object
+ additionalProperties: false
+
+ properties:
+ apple,key-id:
+ $ref: "#/definitions/apple,key-id"
+
+ label:
+ $ref: "#/definitions/label"
+
+ required:
+ - apple,key-id
+ - label
+
+ "^voltage-[A-Za-z0-9]{4}$":
+ type: object
+ additionalProperties: false
+
+ properties:
+ apple,key-id:
+ $ref: "#/definitions/apple,key-id"
+
+ label:
+ $ref: "#/definitions/label"
+
+ required:
+ - apple,key-id
+ - label
+
+additionalProperties: false
diff --git a/Documentation/devicetree/bindings/mfd/apple,smc.yaml b/Documentation/devicetree/bindings/mfd/apple,smc.yaml
index 38f077867bdeedba8a486a63e366e9c943a75681..3fc4aa39292395f27b5694550858c6b34d18308d 100644
--- a/Documentation/devicetree/bindings/mfd/apple,smc.yaml
+++ b/Documentation/devicetree/bindings/mfd/apple,smc.yaml
@@ -44,6 +44,9 @@ properties:
rtc:
$ref: /schemas/rtc/apple,smc-rtc.yaml
+ hwmon:
+ $ref: /schemas/hwmon/apple,smc-hwmon.yaml
+
additionalProperties: false
required:
@@ -84,5 +87,38 @@ examples:
nvmem-cells = <&rtc_offset>;
nvmem-cell-names = "rtc_offset";
};
+
+ hwmon {
+ compatible = "apple,smc-hwmon";
+
+ current-ID0R {
+ apple,key-id = "ID0R";
+ label = "AC Input Current";
+ };
+
+ fan-F0Ac {
+ apple,key-id = "F0Ac";
+ apple,fan-minimum = "F0Mn";
+ apple,fan-maximum = "F0Mx";
+ apple,fan-target = "F0Tg";
+ apple,fan-mode = "F0Md";
+ label = "Fan 1";
+ };
+
+ power-PSTR {
+ apple,key-id = "PSTR";
+ label = "Total System Power";
+ };
+
+ temperature-TW0P {
+ apple,key-id = "TW0P";
+ label = "WiFi/BT Module Temperature";
+ };
+
+ voltage-VD0R {
+ apple,key-id = "VD0R";
+ label = "AC Input Voltage";
+ };
+ };
};
};
diff --git a/MAINTAINERS b/MAINTAINERS
index aaef8634985b35f54de1123ebb4176602066d177..56aabfbc2520749beb9dba235f8e86c15e17b7b6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2380,6 +2380,7 @@ F: Documentation/devicetree/bindings/cpufreq/apple,cluster-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,*
--
2.51.0
next prev parent reply other threads:[~2025-08-27 15:49 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-27 11:22 [PATCH v2 00/11] mfd: macsmc: add rtc, hwmon and hid subdevices James Calligeros
2025-08-27 11:22 ` [PATCH v2 01/11] dt-bindings: rtc: Add Apple SMC RTC James Calligeros
2025-08-27 11:22 ` James Calligeros [this message]
2025-08-29 16:40 ` [PATCH v2 02/11] dt-bindings: hwmon: Add Apple System Management Controller hwmon schema Rob Herring
2025-08-27 11:22 ` [PATCH v2 03/11] rtc: Add new rtc-macsmc driver for Apple Silicon Macs James Calligeros
2025-08-27 11:22 ` [PATCH v2 04/11] mfd: macsmc: Wire up Apple SMC RTC subdevice James Calligeros
2025-08-27 11:22 ` [PATCH v2 05/11] hwmon: Add Apple Silicon SMC hwmon driver James Calligeros
2025-08-28 22:19 ` Guenter Roeck
2025-08-27 11:22 ` [PATCH v2 06/11] mfd: macsmc: Wire up Apple SMC hwmon subdevice James Calligeros
2025-08-27 11:22 ` [PATCH v2 07/11] input: macsmc-hid: New driver to handle the Apple Mac SMC buttons/lid James Calligeros
2025-08-29 11:11 ` Dmitry Torokhov
2025-08-27 11:22 ` [PATCH v2 08/11] mfd: macsmc: Wire up Apple SMC HID subdevice James Calligeros
2025-08-27 11:22 ` [PATCH v2 09/11] arm64: dts: apple: t8103,t600x,t8112: Add SMC RTC node James Calligeros
2025-08-27 11:22 ` [PATCH v2 10/11] arm64: dts: apple: Add common hwmon sensors and fans James Calligeros
2025-08-27 11:22 ` [PATCH v2 11/11] arm64: dts: apple: t8103, t600x, t8112: Add common hwmon nodes to devices James Calligeros
2025-08-27 13:47 ` [PATCH v2 00/11] mfd: macsmc: add rtc, hwmon and hid subdevices Guenter Roeck
2025-08-27 22:06 ` James Calligeros
2025-08-28 2:50 ` Neal Gompa
2025-08-28 22:12 ` Alexandre Belloni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250827-macsmc-subdevs-v2-2-ce5e99d54c28@gmail.com \
--to=jcalligeros99@gmail.com \
--cc=alexandre.belloni@bootlin.com \
--cc=alyssa@rosenzweig.io \
--cc=asahi@lists.linux.dev \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=j@jannau.net \
--cc=jdelvare@suse.com \
--cc=krzk+dt@kernel.org \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rtc@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=neal@gompa.dev \
--cc=robh@kernel.org \
--cc=sven@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).