dt-bindings: hwmon: Add Apple System Management Controller hwmon schema

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 <neal@gompa.dev>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Acked-by: Guenter Roeck <linux@roeck-us.net>
Link: https://patch.msgid.link/20251215-macsmc-subdevs-v6-1-0518cb5f28ae@gmail.com
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
This commit is contained in:
James Calligeros 2025-12-15 19:37:45 +10:00 committed by Rob Herring (Arm)
parent 7a6884e08f
commit c9e6602545
3 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,85 @@
# 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>
$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

View File

@ -49,6 +49,9 @@ properties:
rtc:
$ref: /schemas/rtc/apple,smc-rtc.yaml
hwmon:
$ref: /schemas/hwmon/apple,smc-hwmon.yaml
additionalProperties: false
required:
@ -89,5 +92,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";
};
};
};
};

View File

@ -2516,6 +2516,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,*