The pinctrl driver enables Marvell Armada 8K SoCs to configure the multi-purpose
pins (mpp) to a specific function.
A Marvell SoC pin configuration node is a node of a group of pins which can
be used for a specific device or function. Each node requires one or more
mpp pins or group of pins and a mpp function common to all pins.

Required properties for the pinctrl driver:
- compatible:	"marvell,mvebu-pinctrl",
		"marvell,ap806-pinctrl",
		"marvell,armada-7k-pinctrl",
		"marvell,armada-8k-cpm-pinctrl",
		"marvell,armada-8k-cps-pinctrl"
- bank-name:	A string defining the pinc controller bank name
- reg:		A pair of values defining the pin controller base address
		and the address space
- pin-count:	Numeric value defining the amount of multi purpose pins
		included in this bank
- max-func:	Numeric value defining the maximum function value for
		pins in this bank
- pin-func:	Array of pin function values for every pin in the bank.
		When the function value for a specific pin equal 0xFF,
		the pin configuration is skipped and a default function
		value is used for this pin.

The A8K is a hybrid SoC that contains several silicon dies interconnected in
a single package. Each such die may have a separate pin controller.

Example:
/ {
	ap806 {
		config-space {
			pinctl: pinctl@6F4000 {
				compatible = "marvell,mvebu-pinctrl",
					     "marvell,ap806-pinctrl";
				bank-name ="apn-806";
				reg = <0x6F4000 0x10>;
				pin-count = <20>;
				max-func = <3>;
				/* MPP Bus:
				 * SPI0 [0-3]
				 * I2C0 [4-5]
				 * UART0 [11,19]
				 */
					  /* 0 1 2 3 4 5 6 7 8 9 */
				pin-func = < 3 3 3 3 3 3 0 0 0 0
					     0 3 0 0 0 0 0 0 0 3>;
			};
		};
	};

	cp110-master {
		config-space {
			cpm_pinctl: pinctl@44000 {
				compatible = "marvell,mvebu-pinctrl",
					     "marvell,armada-7k-pinctrl",
					     "marvell,armada-8k-cpm-pinctrl";
				bank-name ="cp0-110";
				reg = <0x440000 0x20>;
				pin-count = <63>;
				max-func = <0xf>;
				/* MPP Bus:
				 * [0-31] = 0xff: Keep default CP0_shared_pins:
				 * [11] CLKOUT_MPP_11 (out)
				 * [23] LINK_RD_IN_CP2CP (in)
				 * [25] CLKOUT_MPP_25 (out)
				 * [29] AVS_FB_IN_CP2CP (in)
				 * [32,34] SMI
				 * [31]    GPIO: push button/Wake
				 * [35-36] GPIO
				 * [37-38] I2C
				 * [40-41] SATA[0/1]_PRESENT_ACTIVEn
				 * [42-43] XSMI
				 * [44-55] RGMII1
				 * [56-62] SD
				 */
					/*   0    1    2    3    4    5    6    7    8    9 */
				pin-func = < 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
					     0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
					     0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
					     0xff 0    7    0    7    0    0    2    2    0
					     0    0    8    8    1    1    1    1    1    1
					     1    1    1    1    1    1    0xE  0xE  0xE  0xE
					     0xE  0xE  0xE>;
			};
		};
	};

	cp110-slave {
		config-space {
			cps_pinctl: pinctl@44000 {
				compatible = "marvell,mvebu-pinctrl",
					     "marvell,armada-8k-cps-pinctrl";
				bank-name ="cp1-110";
				reg = <0x440000 0x20>;
				pin-count = <63>;
				max-func = <0xf>;
				/* MPP Bus:
				 * [0-11]  RGMII0
				 * [27,31] GE_MDIO/MDC
				 * [32-62] = 0xff: Keep default CP1_shared_pins:
				 */
					/*   0    1    2    3    4    5    6    7    8    9 */
				pin-func = < 0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3  0x3
					     0x3  0x3  0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
					     0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x8  0xff 0xff
					     0xff 0x8  0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
					     0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
					     0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
					     0xff 0xff 0xff>;
			};
		};
	};
}
