195 lines
6.8 KiB
YAML
195 lines
6.8 KiB
YAML
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||
|
%YAML 1.2
|
||
|
---
|
||
|
$id: http://devicetree.org/schemas/pinctrl/renesas,rza1-ports.yaml#
|
||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||
|
|
||
|
title: Renesas RZ/A1 combined Pin and GPIO controller
|
||
|
|
||
|
maintainers:
|
||
|
- Jacopo Mondi <jacopo+renesas@jmondi.org>
|
||
|
- Geert Uytterhoeven <geert+renesas@glider.be>
|
||
|
|
||
|
description:
|
||
|
The Renesas SoCs of the RZ/A1 family feature a combined Pin and GPIO
|
||
|
controller, named "Ports" in the hardware reference manual.
|
||
|
Pin multiplexing and GPIO configuration is performed on a per-pin basis
|
||
|
writing configuration values to per-port register sets.
|
||
|
Each "port" features up to 16 pins, each of them configurable for GPIO
|
||
|
function (port mode) or in alternate function mode.
|
||
|
Up to 8 different alternate function modes exist for each single pin.
|
||
|
|
||
|
properties:
|
||
|
compatible:
|
||
|
oneOf:
|
||
|
- const: renesas,r7s72100-ports # RZ/A1H
|
||
|
- items:
|
||
|
- const: renesas,r7s72101-ports # RZ/A1M
|
||
|
- const: renesas,r7s72100-ports # fallback
|
||
|
- const: renesas,r7s72102-ports # RZ/A1L
|
||
|
|
||
|
reg:
|
||
|
maxItems: 1
|
||
|
|
||
|
allOf:
|
||
|
- $ref: "pinctrl.yaml#"
|
||
|
|
||
|
required:
|
||
|
- compatible
|
||
|
- reg
|
||
|
|
||
|
patternProperties:
|
||
|
"^gpio-[0-9]*$":
|
||
|
type: object
|
||
|
additionalProperties: false
|
||
|
|
||
|
description:
|
||
|
Each port of the r7s72100 pin controller hardware is itself a GPIO
|
||
|
controller.
|
||
|
Different SoCs have different numbers of available pins per port, but
|
||
|
generally speaking, each of them can be configured in GPIO ("port") mode
|
||
|
on this hardware.
|
||
|
Describe GPIO controllers using sub-nodes with the following properties.
|
||
|
|
||
|
properties:
|
||
|
gpio-controller: true
|
||
|
|
||
|
'#gpio-cells':
|
||
|
const: 2
|
||
|
|
||
|
gpio-ranges:
|
||
|
maxItems: 1
|
||
|
|
||
|
required:
|
||
|
- gpio-controller
|
||
|
- '#gpio-cells'
|
||
|
- gpio-ranges
|
||
|
|
||
|
|
||
|
additionalProperties:
|
||
|
anyOf:
|
||
|
- type: object
|
||
|
allOf:
|
||
|
- $ref: pincfg-node.yaml#
|
||
|
- $ref: pinmux-node.yaml#
|
||
|
|
||
|
description:
|
||
|
A pin multiplexing sub-node describes how to configure a set of (or a
|
||
|
single) pin in some desired alternate function mode.
|
||
|
A single sub-node may define several pin configurations.
|
||
|
A few alternate function require special pin configuration flags to be
|
||
|
supplied along with the alternate function configuration number.
|
||
|
The hardware reference manual specifies when a pin function requires
|
||
|
"software IO driven" mode to be specified. To do so use the generic
|
||
|
properties from the <include/linux/pinctrl/pinconf_generic.h> header
|
||
|
file to instruct the pin controller to perform the desired pin
|
||
|
configuration operation.
|
||
|
The hardware reference manual specifies when a pin has to be configured
|
||
|
to work in bi-directional mode and when the IO direction has to be
|
||
|
specified by software. Bi-directional pins must be managed by the pin
|
||
|
controller driver internally, while software driven IO direction has to
|
||
|
be explicitly selected when multiple options are available.
|
||
|
|
||
|
properties:
|
||
|
pinmux:
|
||
|
description: |
|
||
|
Integer array representing pin number and pin multiplexing
|
||
|
configuration.
|
||
|
When a pin has to be configured in alternate function mode, use
|
||
|
this property to identify the pin by its global index, and provide
|
||
|
its alternate function configuration number along with it.
|
||
|
When multiple pins are required to be configured as part of the
|
||
|
same alternate function they shall be specified as members of the
|
||
|
same argument list of a single "pinmux" property.
|
||
|
Helper macros to ease assembling the pin index from its position
|
||
|
(port where it sits on and pin number) and alternate function
|
||
|
identifier are provided by the pin controller header file at:
|
||
|
<include/dt-bindings/pinctrl/r7s72100-pinctrl.h>
|
||
|
Integers values in "pinmux" argument list are assembled as:
|
||
|
((PORT * 16 + PIN) | MUX_FUNC << 16)
|
||
|
|
||
|
phandle: true
|
||
|
input-enable: true
|
||
|
output-enable: true
|
||
|
|
||
|
required:
|
||
|
- pinmux
|
||
|
|
||
|
additionalProperties: false
|
||
|
|
||
|
- type: object
|
||
|
properties:
|
||
|
phandle: true
|
||
|
|
||
|
additionalProperties:
|
||
|
$ref: "#/additionalProperties/anyOf/0"
|
||
|
|
||
|
examples:
|
||
|
- |
|
||
|
#include <dt-bindings/pinctrl/r7s72100-pinctrl.h>
|
||
|
pinctrl: pinctrl@fcfe3000 {
|
||
|
compatible = "renesas,r7s72100-ports";
|
||
|
|
||
|
reg = <0xfcfe3000 0x4230>;
|
||
|
|
||
|
/*
|
||
|
* A GPIO controller node, controlling 16 pins indexed from 0.
|
||
|
* The GPIO controller base in the global pin indexing space is pin
|
||
|
* 48, thus pins [0 - 15] on this controller map to pins [48 - 63]
|
||
|
* in the global pin indexing space.
|
||
|
*/
|
||
|
port3: gpio-3 {
|
||
|
gpio-controller;
|
||
|
#gpio-cells = <2>;
|
||
|
gpio-ranges = <&pinctrl 0 48 16>;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* A serial communication interface with a TX output pin and an RX
|
||
|
* input pin.
|
||
|
* Pin #0 on port #3 is configured as alternate function #6.
|
||
|
* Pin #2 on port #3 is configured as alternate function #4.
|
||
|
*/
|
||
|
scif2_pins: serial2 {
|
||
|
pinmux = <RZA1_PINMUX(3, 0, 6)>, <RZA1_PINMUX(3, 2, 4)>;
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
* I2c master: both SDA and SCL pins need bi-directional operations
|
||
|
* Pin #4 on port #1 is configured as alternate function #1.
|
||
|
* Pin #5 on port #1 is configured as alternate function #1.
|
||
|
* Both need to work in bi-directional mode, the driver must manage
|
||
|
* this internally.
|
||
|
*/
|
||
|
i2c2_pins: i2c2 {
|
||
|
pinmux = <RZA1_PINMUX(1, 4, 1)>, <RZA1_PINMUX(1, 5, 1)>;
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Multi-function timer input and output compare pins.
|
||
|
*/
|
||
|
tioc0_pins: tioc0 {
|
||
|
/*
|
||
|
* Configure TIOC0A as software driven input
|
||
|
* Pin #0 on port #4 is configured as alternate function #2
|
||
|
* with IO direction specified by software as input.
|
||
|
*/
|
||
|
tioc0_input_pins {
|
||
|
pinmux = <RZA1_PINMUX(4, 0, 2)>;
|
||
|
input-enable;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* Configure TIOC0B as software driven output
|
||
|
* Pin #1 on port #4 is configured as alternate function #1
|
||
|
* with IO direction specified by software as output.
|
||
|
*/
|
||
|
tioc0_output_pins {
|
||
|
pinmux = <RZA1_PINMUX(4, 1, 1)>;
|
||
|
output-enable;
|
||
|
};
|
||
|
};
|
||
|
};
|