dt-bindings: pinctrl: brcm,nsp-gpio: Convert to DT schema

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 in bcm-nsp.dtsi.

Convert the text binding to DT schema. Beyond a direct conversion:

- Require pin configuration nodes to use a '-pins' suffix and GPIO hogs
  a '-hog' suffix, as the old example used arbitrary node names. No
  in-tree DTS has child nodes under this controller, so nothing is
  affected.
- Document slew-rate, which the driver supports but the text binding
  never listed.
- Add #interrupt-cells and gpio-line-names, and make #interrupt-cells
  depend on interrupt-controller.

Assisted-by: LLM
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Linus Walleij <linusw@kernel.org>
This commit is contained in:
Rosen Penev 2026-10-04 12:36:47 -07:00 committed by Linus Walleij
parent 2430546e8d
commit 4f0dbdbdb3
2 changed files with 130 additions and 80 deletions

View File

@ -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;
};
};

View File

@ -0,0 +1,130 @@
# 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, slew rate and drive strength. Pin
configuration is described in '-pins' child nodes, referenced 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
gpio-line-names: true
required:
- compatible
- reg
- "#gpio-cells"
- gpio-controller
- ngpios
dependencies:
interrupt-controller: ['#interrupt-cells']
patternProperties:
'-pins$':
type: object
$ref: pincfg-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 ]
slew-rate:
description: 0 disables and 1 enables slew rate control
enum: [ 0, 1 ]
required:
- pins
additionalProperties: false
'-hog(-[0-9]+)?$':
type: object
required:
- gpio-hog
additionalProperties: false
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>;
pinctrl-names = "default";
pinctrl-0 = <&led_pins>;
led_pins: led-pins {
pins = "gpio-1";
bias-pull-up;
drive-strength = <16>;
};
/* GPIO hog */
pwr-hog {
gpio-hog;
gpios = <3 1>;
output-high;
};
};