[PATCH] dt-bindings: mfd: rockchip,rk805: Convert pinctrl to DT schema
COOLING11d
From: Quchaosheng <hidden>
Date: 2026-09-23 07:44:15
Also in:
linux-arm-kernel, linux-rockchip, lkml
Subsystem:
multifunction devices (mfd), open firmware and flattened device tree bindings, pin control subsystem, the rest · Maintainers:
Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Linus Walleij, Linus Torvalds
pinctrl-rk805.txt describes the pinmux controller that is part of the
Rockchip RK805 PMIC. The PMIC itself is already described by
rockchip,rk805.yaml, so the pinmux part belongs there as well: the
pinctrl node is a child of the PMIC node, not a separate device.
Fold the pinmux description into rockchip,rk805.yaml and drop the
standalone text binding.
While doing so, add the missing child node schema. The rockchip,rk805.yaml
schema ends with 'additionalProperties: false' but did not describe the pin
configuration child nodes at all, so a valid pinmux node like the one shown
in pinctrl-rk805.txt was rejected:
pmic@18 (rockchip,rk805): 'rk805-default-pins' does not match any of
the regexes: '^pinctrl-[0-9]+$'
The pin configuration nodes require 'pins'; without it a node that names
no pin is accepted silently, while the text binding it replaces listed
'pins' as required. The RK805 exposes two output-only GPIOs, so 'pins' is
an enum of gpio0 and gpio1 and a typo such as "gpio2" is caught.
The nodes may be direct children of the PMIC, or sit one level deeper
inside a "pinmux" grouping node, which is the layout the example of the
text binding used. pinctrl-bindings.txt allows the configuration nodes to
be grandchildren of the pin controller, and the driver reaches both
layouts: pinconf_generic_dt_node_to_map() parses the referenced node and
then walks its children. The example shows both.
The example also regains the gpio-controller and #gpio-cells lines that the
example of the text binding had.
Reported-by: Sashiko <sashiko-bot@kernel.org>
Link: https://sashiko.dev/#/patchset/20260923034245.396417-1-quchaosheng000406@163.com?part=1
Link: https://sashiko.dev/#/patchset/20260923062746.516666-1-quchaosheng000406@163.com?part=1
Assisted-by: LLM
Signed-off-by: Quchaosheng <redacted>
---
Changes in v4:
- Describe the pin configuration nodes both as direct children and inside a
"pinmux" grouping node. Only the flat form was described, so the layout
used by the example of the text binding this replaces was still rejected:
pmic@18 (rockchip,rk805): 'pinmux' does not match any of the regexes:
'-pins$', '^pinctrl-[0-9]+$'
The nodes are now one definition referenced from both places, and the
example shows the flat node and a "pinmux" node holding one.
- Name the binding in the summary. dt-bindings: mfd: <binding>: is the form
Documentation/devicetree/bindings/submitting-patches.rst asks for on
conversions, and 364 of the 385 dt-bindings: mfd: commits in the tree name
a binding there.
Changes in v3:
- Capitalize the summary phrase. dt-bindings: mfd: titles are capitalized
after the subsystem prefix (Add 61, Convert 20 against convert 6).
- Add gpio-controller and #gpio-cells to the example, which the text
binding's example had and the conversion dropped.
- gpio-controller and #gpio-cells are deliberately *not* added to the
required list. rv1108-evb, rv1108-elgin-r1 and rk3328-a1 do not set
them, so requiring them breaks three in-tree boards:
rv1108-evb.dtb: pmic@18 (rockchip,rk805): 'gpio-controller' is a required property
No rk8xx PMIC schema requires the pair, and gpio.yaml already enforces
that they appear together ("'#gpio-cells' is a dependency of
'gpio-controller'"). The pinctrl driver calls devm_gpiochip_add_data()
unconditionally, so the property is not what makes the GPIO controller
work either.
Changes in v2:
- Require 'pins' in the pin configuration nodes. Without it a node that
names no pin passes validation, while the text binding listed 'pins'
as required.
---
.../bindings/mfd/rockchip,rk805.yaml | 65 ++++++++++++++++++-
.../bindings/pinctrl/pinctrl-rk805.txt | 63 ------------------
2 files changed, 64 insertions(+), 64 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/pinctrl/pinctrl-rk805.txt
diff --git a/Documentation/devicetree/bindings/mfd/rockchip,rk805.yaml b/Documentation/devicetree/bindings/mfd/rockchip,rk805.yaml
index da2391530c16..aafc80212c48 100644
--- a/Documentation/devicetree/bindings/mfd/rockchip,rk805.yaml
+++ b/Documentation/devicetree/bindings/mfd/rockchip,rk805.yaml@@ -77,6 +77,21 @@ properties: description: The input supply for LDO_REG3. + # pinctrl-bindings.txt allows the pin configuration nodes to be grandchildren + # of the pin controller, and the text binding this replaces used that layout: + # a "pinmux" node holding the nodes that carry "pins". The driver reaches both + # layouts, because pinconf_generic_dt_node_to_map() parses the referenced node + # and then walks its children. + pinmux: + type: object + additionalProperties: false + patternProperties: + '^.+$': + if: + type: object + then: + $ref: '#/$defs/rk805-pin-config' + regulators: type: object patternProperties:
@@ -86,6 +101,38 @@ properties: unevaluatedProperties: false unevaluatedProperties: false +$defs: + rk805-pin-config: + type: object + description: + The RK805 has two output-only GPIOs which can be muxed to the GPIO + function and driven low or high at boot. + additionalProperties: false + + properties: + pins: + description: + List of GPIO pins to configure. + items: + enum: [gpio0, gpio1] + minItems: 1 + maxItems: 2 + + function: + description: + The RK805 only supports the GPIO function. + enum: [gpio] + + output-low: true + output-high: true + + required: + - pins + +patternProperties: + '-pins$': + $ref: '#/$defs/rk805-pin-config' + allOf: - if: properties:
@@ -125,9 +172,11 @@ examples: interrupt-parent = <&gpio2>; interrupts = <RK_PA6 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default"; - pinctrl-0 = <&pmic_int_l>; + pinctrl-0 = <&pmic_int_l>, <&rk805_default>, <&rk805_grouped>; rockchip,system-power-controller; wakeup-source; + gpio-controller; + #gpio-cells = <2>; #clock-cells = <0>; vcc1-supply = <&vcc_sys>;
@@ -137,6 +186,20 @@ examples: vcc5-supply = <&vcc_io>; vcc6-supply = <&vcc_io>; + rk805_default: rk805-default-pins { + pins = "gpio0"; + function = "gpio"; + output-high; + }; + + rk805_grouped: pinmux { + gpio01 { + pins = "gpio1"; + function = "gpio"; + output-low; + }; + }; + regulators { vdd_logic: DCDC_REG1 { regulator-name = "vdd_logic";
diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-rk805.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-rk805.txt
deleted file mode 100644
index 6ad49e51c72e..000000000000
--- a/Documentation/devicetree/bindings/pinctrl/pinctrl-rk805.txt
+++ /dev/null@@ -1,63 +0,0 @@ -Pincontrol driver for RK805 Power management IC. - -RK805 has 2 pins which can be configured as GPIO output only. - -Please refer file <devicetree/bindings/pinctrl/pinctrl-bindings.txt> -for details of the common pinctrl bindings used by client devices, -including the meaning of the phrase "pin configuration node". - -Optional Pinmux properties: --------------------------- -Following properties are required if default setting of pins are required -at boot. -- pinctrl-names: A pinctrl state named per <pinctrl-bindings.txt>. -- pinctrl[0...n]: Properties to contain the phandle for pinctrl states per - <pinctrl-bindings.txt>. - -The pin configurations are defined as child of the pinctrl states node. Each -sub-node have following properties: - -Required properties: ------------------- -- #gpio-cells: Should be two. The first cell is the pin number and the - second is the GPIO flags. - -- gpio-controller: Marks the device node as a GPIO controller. - -- pins: List of pins. Valid values of pins properties are: gpio0, gpio1. - -First 2 properties must be added in the RK805 PMIC node, documented in -Documentation/devicetree/bindings/mfd/rockchip,rk808.yaml - -Optional properties: -------------------- -Following are optional properties defined as pinmux DT binding document -<pinctrl-bindings.txt>. Absence of properties will leave the configuration -on default. - function, - output-low, - output-high. - -Valid values for function properties are: gpio. - -There are also not customised properties for any GPIO. - -Example: --------- -rk805: rk805@18 { - compatible = "rockchip,rk805"; - ... - gpio-controller; - #gpio-cells = <2>; - - pinctrl-names = "default"; - pinctrl-0 = <&pmic_int_l>, <&rk805_default>; - - rk805_default: pinmux { - gpio01 { - pins = "gpio0", "gpio1"; - function = "gpio"; - output-high; - }; - }; -};
--
2.43.0