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

Convert the Broadcom iProc/Cygnus GPIO/Pinconf binding to DT schema
format.

The child node structure is based on the example as there's not any
actual .dts files with child nodes.

The binding wasn't clear that "reg" can be 1 or 2 entries. The number of
"reg" entries doesn't appear to be based on compatible, so no per
compatible constraints for it

The "brcm,iproc-stingray-gpio" could possibly be dropped. There are no
.dts files using it, but the driver uses it.

Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/20250812203348.733749-1-robh@kernel.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Rob Herring (Arm) 2025-08-12 15:33:47 -05:00 committed by Linus Walleij
parent 2b31c1c713
commit 8898cf86f0
2 changed files with 111 additions and 123 deletions

View File

@ -1,123 +0,0 @@
Broadcom iProc GPIO/PINCONF Controller
Required properties:
- compatible:
"brcm,iproc-gpio" for the generic iProc based GPIO controller IP that
supports full-featured pinctrl and GPIO functions used in various iProc
based SoCs
May contain an SoC-specific compatibility string to accommodate any
SoC-specific features
"brcm,cygnus-ccm-gpio", "brcm,cygnus-asiu-gpio", or
"brcm,cygnus-crmu-gpio" for Cygnus SoCs
"brcm,iproc-nsp-gpio" for the iProc NSP SoC that has drive strength support
disabled
"brcm,iproc-stingray-gpio" for the iProc Stingray SoC that has the general
pinctrl support completely disabled in this IP block. In Stingray, a
different IP block is used to handle pinctrl related functions
- reg:
Define the base and range of the I/O address space that contains SoC
GPIO/PINCONF controller registers
- ngpios:
Total number of in-use slots in GPIO controller
- #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
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:
gpio_ccm: gpio@1800a000 {
compatible = "brcm,cygnus-ccm-gpio";
reg = <0x1800a000 0x50>,
<0x0301d164 0x20>;
ngpios = <24>;
#gpio-cells = <2>;
gpio-controller;
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
interrupt-controller;
touch_pins: touch_pins {
pwr: pwr {
pins = "gpio-0";
drive-strength = <16>;
};
event: event {
pins = "gpio-1";
bias-pull-up;
};
};
};
gpio_asiu: gpio@180a5000 {
compatible = "brcm,cygnus-asiu-gpio";
reg = <0x180a5000 0x668>;
ngpios = <146>;
#gpio-cells = <2>;
gpio-controller;
interrupts = <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>;
interrupt-controller;
gpio-ranges = <&pinctrl 0 42 1>,
<&pinctrl 1 44 3>;
};
/*
* Touchscreen that uses the CCM GPIO 0 and 1
*/
tsc {
...
...
gpio-pwr = <&gpio_ccm 0 0>;
gpio-event = <&gpio_ccm 1 0>;
};
/* Bluetooth that uses the ASIU GPIO 5, with polarity inverted */
bluetooth {
...
...
bcm,rfkill-bank-sel = <&gpio_asiu 5 1>
}

View File

@ -0,0 +1,111 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/pinctrl/brcm,iproc-gpio.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Broadcom iProc GPIO/PINCONF Controller
maintainers:
- Ray Jui <rjui@broadcom.com>
- Scott Branden <sbranden@broadcom.com>
properties:
compatible:
oneOf:
- enum:
- brcm,cygnus-asiu-gpio
- brcm,cygnus-ccm-gpio
- brcm,cygnus-crmu-gpio
- brcm,iproc-gpio
- brcm,iproc-stingray-gpio
- items:
- enum:
- brcm,iproc-hr2-gpio
- brcm,iproc-nsp-gpio
- const: brcm,iproc-gpio
reg:
minItems: 1
items:
- description: GPIO Bank registers
- description: IO Ctrl registers
"#gpio-cells":
const: 2
gpio-controller: true
gpio-ranges: true
ngpios: true
"#interrupt-cells":
const: 2
interrupts:
maxItems: 1
interrupt-controller: true
required:
- compatible
- reg
- "#gpio-cells"
- gpio-controller
- ngpios
patternProperties:
'-pins$':
type: object
additionalProperties:
description: Pin configuration child nodes.
allOf:
- $ref: pincfg-node.yaml#
- $ref: pinmux-node.yaml#
additionalProperties: false
properties:
pins:
items:
pattern: '^gpio-'
bias-disable: true
bias-pull-up: true
bias-pull-down: true
drive-strength:
enum: [ 2, 4, 6, 8, 10, 12, 14, 16 ]
required:
- pins
additionalProperties: false
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
gpio@1800a000 {
compatible = "brcm,cygnus-ccm-gpio";
reg = <0x1800a000 0x50>,
<0x0301d164 0x20>;
ngpios = <24>;
#gpio-cells = <2>;
gpio-controller;
#interrupt-cells = <2>;
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
interrupt-controller;
touch-pins {
pwr {
pins = "gpio-0";
drive-strength = <16>;
};
event {
pins = "gpio-1";
bias-pull-up;
};
};
};