dt-bindings: pinctrl: Add RZ/A2 pinctrl and GPIO
Add device tree binding documentation and header file for Renesas R7S9210 (RZ/A2) SoCs. Signed-off-by: Chris Brandt <chris.brandt@renesas.com> Reviewed-by: Rob Herring <robh@kernel.org> Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
This commit is contained in:
Родитель
c21b73235e
Коммит
94693b7b83
|
@ -0,0 +1,87 @@
|
|||
Renesas RZ/A2 combined Pin and GPIO controller
|
||||
|
||||
The Renesas SoCs of the RZ/A2 series feature a combined Pin and GPIO controller.
|
||||
Pin multiplexing and GPIO configuration is performed on a per-pin basis.
|
||||
Each port features up to 8 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.
|
||||
|
||||
Pin controller node
|
||||
-------------------
|
||||
|
||||
Required properties:
|
||||
- compatible: shall be:
|
||||
- "renesas,r7s9210-pinctrl": for RZ/A2M
|
||||
- reg
|
||||
Address base and length of the memory area where the pin controller
|
||||
hardware is mapped to.
|
||||
- gpio-controller
|
||||
This pin controller also controls pins as GPIO
|
||||
- #gpio-cells
|
||||
Must be 2
|
||||
- gpio-ranges
|
||||
Expresses the total number of GPIO ports/pins in this SoC
|
||||
|
||||
Example: Pin controller node for RZ/A2M SoC (r7s9210)
|
||||
|
||||
pinctrl: pin-controller@fcffe000 {
|
||||
compatible = "renesas,r7s9210-pinctrl";
|
||||
reg = <0xfcffe000 0x1000>;
|
||||
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
gpio-ranges = <&pinctrl 0 0 176>;
|
||||
};
|
||||
|
||||
Sub-nodes
|
||||
---------
|
||||
|
||||
The child nodes of the pin controller designate pins to be used for
|
||||
specific peripheral functions or as GPIO.
|
||||
|
||||
- Pin multiplexing sub-nodes:
|
||||
A pin multiplexing sub-node describes how to configure a set of
|
||||
(or a single) pin in some desired alternate function mode.
|
||||
The values for the pinmux properties are a combination of port name, pin
|
||||
number and the desired function index. Use the RZA2_PINMUX macro located
|
||||
in include/dt-bindings/pinctrl/r7s9210-pinctrl.h to easily define these.
|
||||
For assigning GPIO pins, use the macro RZA2_PIN also in r7s9210-pinctrl.h
|
||||
to express the desired port pin.
|
||||
|
||||
Required properties:
|
||||
- pinmux:
|
||||
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:
|
||||
<dt-bindings/pinctrl/r7s9210-pinctrl.h>
|
||||
Integers values in "pinmux" argument list are assembled as:
|
||||
((PORT * 8 + PIN) | MUX_FUNC << 16)
|
||||
|
||||
Example: Board specific pins configuration
|
||||
|
||||
&pinctrl {
|
||||
/* Serial Console */
|
||||
scif4_pins: serial4 {
|
||||
pinmux = <RZA2_PINMUX(PORT9, 0, 4)>, /* TxD4 */
|
||||
<RZA2_PINMUX(PORT9, 1, 4)>; /* RxD4 */
|
||||
};
|
||||
};
|
||||
|
||||
Example: Assigning a GPIO:
|
||||
|
||||
leds {
|
||||
status = "okay";
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led0 {
|
||||
/* P6_0 */
|
||||
gpios = <&pinctrl RZA2_PIN(PORT6, 0) GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,47 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Defines macros and constants for Renesas RZ/A2 pin controller pin
|
||||
* muxing functions.
|
||||
*/
|
||||
#ifndef __DT_BINDINGS_PINCTRL_RENESAS_RZA2_H
|
||||
#define __DT_BINDINGS_PINCTRL_RENESAS_RZA2_H
|
||||
|
||||
#define RZA2_PINS_PER_PORT 8
|
||||
|
||||
/* Port names as labeled in the Hardware Manual */
|
||||
#define PORT0 0
|
||||
#define PORT1 1
|
||||
#define PORT2 2
|
||||
#define PORT3 3
|
||||
#define PORT4 4
|
||||
#define PORT5 5
|
||||
#define PORT6 6
|
||||
#define PORT7 7
|
||||
#define PORT8 8
|
||||
#define PORT9 9
|
||||
#define PORTA 10
|
||||
#define PORTB 11
|
||||
#define PORTC 12
|
||||
#define PORTD 13
|
||||
#define PORTE 14
|
||||
#define PORTF 15
|
||||
#define PORTG 16
|
||||
#define PORTH 17
|
||||
/* No I */
|
||||
#define PORTJ 18
|
||||
#define PORTK 19
|
||||
#define PORTL 20
|
||||
#define PORTM 21 /* Pins PM_0/1 are labeled JP_0/1 in HW manual */
|
||||
|
||||
/*
|
||||
* Create the pin index from its bank and position numbers and store in
|
||||
* the upper 16 bits the alternate function identifier
|
||||
*/
|
||||
#define RZA2_PINMUX(b, p, f) ((b) * RZA2_PINS_PER_PORT + (p) | (f << 16))
|
||||
|
||||
/*
|
||||
* Convert a port and pin label to its global pin index
|
||||
*/
|
||||
#define RZA2_PIN(port, pin) ((port) * RZA2_PINS_PER_PORT + (pin))
|
||||
|
||||
#endif /* __DT_BINDINGS_PINCTRL_RENESAS_RZA2_H */
|
Загрузка…
Ссылка в новой задаче