* STM32 GPIO and Pin Mux/Config controller

STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware
controller. It controls the input/output settings on the available pins and
also provides ability to multiplex and configure the output of various on-chip
controllers onto these pads.

Pin controller node:
Required properies:
 - compatible: value should be one of the following:
   "st,stm32f429-pinctrl"
   "st,stm32f469-pinctrl"
   "st,stm32f746-pinctrl"
   "st,stm32h743-pinctrl"
 - #address-cells: The value of this property must be 1
 - #size-cells	: The value of this property must be 1
 - ranges	: defines mapping between pin controller node (parent) to
   gpio-bank node (children).
 - pins-are-numbered: Specify the subnodes are using numbered pinmux to
   specify pins.

GPIO controller/bank node:
Required properties:
 - gpio-controller : Indicates this device is a GPIO controller
 - #gpio-cells	  : Should be two.
			The first cell is the pin number
			The second one is the polarity:
				- 0 for active high
				- 1 for active low
 - reg		  : The gpio address range, relative to the pinctrl range
 - clocks	  : clock that drives this bank
 - st,bank-name	  : Should be a name string for this bank as specified in
   the datasheet

Optional properties:
 - reset:	  : Reference to the reset controller
 - interrupt-parent: phandle of the interrupt parent to which the external
   GPIO interrupts are forwarded to.
 - st,syscfg: Should be phandle/offset pair. The phandle to the syscon node
   which includes IRQ mux selection register, and the offset of the IRQ mux
   selection register.
 - gpio-ranges: Define a dedicated mapping between a pin-controller and
   a gpio controller. Format is <&phandle a b c> with:
	-(phandle): phandle of pin-controller.
	-(a): gpio base offset in range.
	-(b): pin base offset in range.
	-(c): gpio count in range
   This entry has to be used either if there are holes inside a bank:
	GPIOB0/B1/B2/B14/B15 (see example 2)
   or if banks are not contiguous:
	GPIOA/B/C/E...
   NOTE: If "gpio-ranges" is used for a gpio controller, all gpio-controller
   have to use a "gpio-ranges" entry.
   More details in Documentation/devicetree/bindings/gpio/gpio.txt.

Example 1:
#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
...

	pin-controller {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "st,stm32f429-pinctrl";
		ranges = <0 0x40020000 0x3000>;
		pins-are-numbered;

		gpioa: gpio@40020000 {
			gpio-controller;
			#gpio-cells = <2>;
			reg = <0x0 0x400>;
			resets = <&reset_ahb1 0>;
			st,bank-name = "GPIOA";
		};
		...
		pin-functions nodes follow...
	};

Example 2:
#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
...

	pinctrl: pin-controller {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "st,stm32f429-pinctrl";
		ranges = <0 0x40020000 0x3000>;
		pins-are-numbered;

		gpioa: gpio@40020000 {
			gpio-controller;
			#gpio-cells = <2>;
			reg = <0x0 0x400>;
			resets = <&reset_ahb1 0>;
			st,bank-name = "GPIOA";
			gpio-ranges = <&pinctrl 0 0 16>;
		};

		gpiob: gpio@40020400 {
			gpio-controller;
			#gpio-cells = <2>;
			reg = <0x0 0x400>;
			resets = <&reset_ahb1 0>;
			st,bank-name = "GPIOB";
			ngpios = 4;
			gpio-ranges = <&pinctrl 0 16 3>,
				      <&pinctrl 14 30 2>;
		};


		...
		pin-functions nodes follow...
	};


Contents of function subnode node:
----------------------------------
Subnode format
A pinctrl node should contain at least one subnode representing the
pinctrl group available on the machine. Each subnode will list the
pins it needs, and how they should be configured, with regard to muxer
configuration, pullups, drive, output high/low and output speed.

    node {
	pinmux = <PIN_NUMBER_PINMUX>;
	GENERIC_PINCONFIG;
    };

Required properties:
- pinmux: integer array, represents gpio pin number and mux setting.
  Supported pin number and mux varies for different SoCs, and are defined in
  dt-bindings/pinctrl/<soc>-pinfunc.h directly.
  These defines are calculated as:
    ((port * 16 + line) << 8) | function
  With:
    - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
    - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
    - function: The function number, can be:
      * 0 : GPIO
      * 1 : Alternate Function 0
      * 2 : Alternate Function 1
      * 3 : Alternate Function 2
      * ...
      * 16 : Alternate Function 15
      * 17 : Analog

Optional properties:
- GENERIC_PINCONFIG: is the generic pinconfig options to use.
  Available options are:
   - bias-disable,
   - bias-pull-down,
   - bias-pull-up,
   - drive-push-pull,
   - drive-open-drain,
   - output-low
   - output-high
   - slew-rate = <x>, with x being:
       < 0 > : Low speed
       < 1 > : Medium speed
       < 2 > : Fast speed
       < 3 > : High speed

Example:

pin-controller {
...
	usart1_pins_a: usart1@0 {
		pins1 {
			pinmux = <STM32F429_PA9_FUNC_USART1_TX>;
			bias-disable;
			drive-push-pull;
			slew-rate = <0>;
		};
		pins2 {
			pinmux = <STM32F429_PA10_FUNC_USART1_RX>;
			bias-disable;
		};
	};
};

&usart1 {
	pinctrl-0 = <&usart1_pins_a>;
	pinctrl-names = "default";
	status = "okay";
};
