From: Rosen Penev <rosenp@gmail.com>
To: devicetree@vger.kernel.org
Cc: Linus Walleij <linusw@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Ray Jui <rjui@broadcom.com>,
Scott Branden <sbranden@broadcom.com>,
linux-gpio@vger.kernel.org (open list:PIN CONTROL SUBSYSTEM),
linux-kernel@vger.kernel.org (open list)
Subject: [PATCH v3] dt-bindings: pinctrl: convert nsp-gpio binding
Date: Sun, 27 Sep 2026 14:27:48 -0700 [thread overview]
Message-ID: <20260927212748.123558-1-rosenp@gmail.com> (raw)
The brcm,nsp-gpio-a compatible used by the NSP GPIO controller was only
documented in the legacy text binding, so dtbs_check reported "failed to
match any schema" for the gpio@20 node present in the bcm958625 and
related broadcom boards.
Convert Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.txt to
a YAML schema and drop the text binding. Keep the existing required and
optional properties (reg, #gpio-cells, gpio-controller, ngpios, and the
optional interrupt/gpio-ranges support), including the generic pinconf
child nodes with pin bias and drive-strength.
Pin configuration nodes may be direct children of the controller or
grouped under a "-pins" node; both forms are recognized, and each "-pins"
node may group further pin configuration children. Child nodes named
"-hog" are supported as GPIO hogs.
The generic pinconf and pinmux helper schemas end in
"additionalProperties: true" and cannot close the node from an in-place
applicator, so spell out the supported subset and set
"additionalProperties: false" in the local pin configuration node schema.
Without it misspelled or unsupported properties such as "bias-pullup" or
"slew-rate" are silently accepted.
Controller children are matched with "anyOf" against the pin
configuration node schema and against "not: { type: object }". The
latter keeps non-node properties such as #pinctrl-cells or clocks from
being forced through the pin configuration schema, while still rejecting
pin configuration child nodes that do not look like one. A plain
"additionalProperties: false" cannot be used here because it would also
reject the directly nested pin configuration nodes.
Assisted-by: LLM
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v3: add additionalProperties
v2: don't drop gpio-hog
.../bindings/pinctrl/brcm,nsp-gpio.txt | 80 ----------
.../bindings/pinctrl/brcm,nsp-gpio.yaml | 144 ++++++++++++++++++
2 files changed, 144 insertions(+), 80 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.txt
create mode 100644 Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.yaml
diff --git a/Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.txt b/Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.txt
deleted file mode 100644
index 0844168a6dd4..000000000000
--- a/Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-Broadcom Northstar plus (NSP) GPIO/PINCONF Controller
-
-Required properties:
-- compatible:
- Must be "brcm,nsp-gpio-a"
-
-- reg:
- Should contain the register physical address and length for each of
- GPIO base, IO control registers
-
-- #gpio-cells:
- Must be two. The first cell is the GPIO pin number (within the
- controller's pin space) and the second cell is used for the following:
- bit[0]: polarity (0 for active high and 1 for active low)
-
-- gpio-controller:
- Specifies that the node is a GPIO controller
-
-- ngpios:
- Number of gpios supported (58x25 supports 32 and 58x23 supports 24)
-
-Optional properties:
-- interrupts:
- Interrupt ID
-
-- interrupt-controller:
- Specifies that the node is an interrupt controller
-
-- gpio-ranges:
- Specifies the mapping between gpio controller and pin-controllers pins.
- This requires 4 fields in cells defined as -
- 1. Phandle of pin-controller.
- 2. GPIO base pin offset.
- 3 Pin-control base pin offset.
- 4. number of gpio pins which are linearly mapped from pin base.
-
-Supported generic PINCONF properties in child nodes:
-- pins:
- The list of pins (within the controller's own pin space) that properties
- in the node apply to. Pin names are "gpio-<pin>"
-
-- bias-disable:
- Disable pin bias
-
-- bias-pull-up:
- Enable internal pull up resistor
-
-- bias-pull-down:
- Enable internal pull down resistor
-
-- drive-strength:
- Valid drive strength values include 2, 4, 6, 8, 10, 12, 14, 16 (mA)
-
-Example:
-
- gpioa: gpio@18000020 {
- compatible = "brcm,nsp-gpio-a";
- reg = <0x18000020 0x100>,
- <0x1803f1c4 0x1c>;
- #gpio-cells = <2>;
- gpio-controller;
- ngpios = <32>;
- gpio-ranges = <&pinctrl 0 0 31>;
- interrupt-controller;
- interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
-
- /* Hog a few default settings */
- pinctrl-names = "default";
- pinctrl-0 = <&led>;
- led: led {
- pins = "gpio-1";
- bias-pull-up;
- };
-
- pwr: pwr {
- gpio-hog;
- gpios = <3 1>;
- output-high;
- };
- };
diff --git a/Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.yaml b/Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.yaml
new file mode 100644
index 000000000000..e5144da1bf57
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/brcm,nsp-gpio.yaml
@@ -0,0 +1,144 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/brcm,nsp-gpio.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Broadcom Northstar Plus (NSP) GPIO/PINCONF Controller
+
+maintainers:
+ - Ray Jui <rjui@broadcom.com>
+ - Scott Branden <sbranden@broadcom.com>
+
+description: |
+ The chipCommonA GPIO block also provides generic pin configuration for the
+ pins it controls: bias, pull up/down and drive strength. Pin configuration
+ child nodes may be direct children of the controller, or grouped under a
+ '-pins' node. In both cases the pin configuration nodes are referenced by
+ the consuming device through the standard pinctrl-0/pinctrl-names
+ properties. Child nodes named '*-hog' are treated as GPIO hogs.
+
+properties:
+ compatible:
+ const: brcm,nsp-gpio-a
+
+ reg:
+ items:
+ - description: GPIO base registers
+ - description: IO control registers
+
+ "#gpio-cells":
+ const: 2
+ description: |
+ The first cell is the GPIO pin number (within the controller's pin
+ space) and the second cell is used for the following:
+ bit[0]: polarity (0 for active high and 1 for active low)
+
+ gpio-controller: true
+
+ ngpios:
+ description: Number of GPIOs supported (58x25 supports 32 and 58x23 supports 24)
+ maximum: 32
+
+ interrupts:
+ maxItems: 1
+
+ "#interrupt-cells":
+ const: 2
+
+ interrupt-controller: true
+
+ gpio-ranges: true
+
+required:
+ - compatible
+ - reg
+ - "#gpio-cells"
+ - gpio-controller
+ - ngpios
+
+$defs:
+ nsp-gpio-pinconf:
+ type: object
+ allOf:
+ - $ref: pincfg-node.yaml#
+ - $ref: pinmux-node.yaml#
+
+ properties:
+ pins:
+ $ref: /schemas/types.yaml#/definitions/string-array
+ items:
+ pattern: '^gpio-'
+
+ bias-disable: true
+ bias-pull-up: true
+ bias-pull-down: true
+
+ drive-strength:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ enum: [ 2, 4, 6, 8, 10, 12, 14, 16 ]
+
+ required:
+ - pins
+
+ additionalProperties: false
+
+patternProperties:
+ '-pins$':
+ oneOf:
+ - $ref: '#/$defs/nsp-gpio-pinconf'
+ - type: object
+ additionalProperties:
+ $ref: '#/$defs/nsp-gpio-pinconf'
+
+ '-hog(-[0-9]+)?$':
+ type: object
+ required:
+ - gpio-hog
+
+additionalProperties:
+ anyOf:
+ - $ref: '#/$defs/nsp-gpio-pinconf'
+ - not:
+ type: object
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ gpio@18000020 {
+ compatible = "brcm,nsp-gpio-a";
+ reg = <0x18000020 0x100>,
+ <0x1803f1c4 0x1c>;
+ #gpio-cells = <2>;
+ gpio-controller;
+ ngpios = <32>;
+ gpio-ranges = <&pinctrl 0 0 31>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
+
+ /* Pin configuration node applied as a pinctrl state */
+ pinctrl-names = "default";
+ pinctrl-0 = <&led>;
+
+ led: led {
+ pins = "gpio-1";
+ bias-pull-up;
+ };
+
+ /* Pin configuration nodes may also be grouped under a '-pins' node */
+ pwm-pins {
+ pwm {
+ pins = "gpio-0";
+ drive-strength = <16>;
+ };
+ };
+
+ /* GPIO hog */
+ pwr-hog {
+ gpio-hog;
+ gpios = <3 1>;
+ output-high;
+ };
+ };
--
2.55.0
next reply other threads:[~2026-09-27 21:27 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-27 21:27 Rosen Penev [this message]
2026-09-27 21:37 ` [PATCH v3] dt-bindings: pinctrl: convert nsp-gpio binding sashiko-bot
2026-09-28 21:28 ` Rob Herring
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=20260927212748.123558-1-rosenp@gmail.com \
--to=rosenp@gmail.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linusw@kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rjui@broadcom.com \
--cc=robh@kernel.org \
--cc=sbranden@broadcom.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.